<?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>101127</bug_id>
          
          <creation_ts>2012-11-02 16:51:08 -0700</creation_ts>
          <short_desc>Reduce parser overhead in JSC</short_desc>
          <delta_ts>2012-11-16 14:53:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>101465</dependson>
          <blocked>101145</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>757757</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-02 16:51:08 -0700</bug_when>
    <thetext>Reduce parser overhead in JSC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757776</commentid>
    <comment_count>1</comment_count>
      <attachid>172179</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-02 17:15:16 -0700</bug_when>
    <thetext>Created attachment 172179
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757780</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-02 17:18:46 -0700</bug_when>
    <thetext>Attachment 172179 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/tests/testapi.c&apos;...&quot; exit_code: 1
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2386:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2412:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2425:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 45 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757786</commentid>
    <comment_count>3</comment_count>
      <attachid>172179</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-02 17:24:37 -0700</bug_when>
    <thetext>Comment on attachment 172179
Patch

Attachment 172179 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14724024</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757787</commentid>
    <comment_count>4</comment_count>
      <attachid>172179</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-02 17:25:23 -0700</bug_when>
    <thetext>Comment on attachment 172179
Patch

Attachment 172179 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14721047</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757791</commentid>
    <comment_count>5</comment_count>
      <attachid>172184</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-02 17:31:36 -0700</bug_when>
    <thetext>Created attachment 172184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757792</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-02 17:34:16 -0700</bug_when>
    <thetext>Attachment 172184 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/tests/testapi.c&apos;...&quot; exit_code: 1
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2386:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2412:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2425:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 45 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757796</commentid>
    <comment_count>7</comment_count>
      <attachid>172184</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-02 17:39:49 -0700</bug_when>
    <thetext>Comment on attachment 172184
Patch

Attachment 172184 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14725023</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757799</commentid>
    <comment_count>8</comment_count>
      <attachid>172184</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-02 17:42:55 -0700</bug_when>
    <thetext>Comment on attachment 172184
Patch

Attachment 172184 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14718081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757819</commentid>
    <comment_count>9</comment_count>
      <attachid>172184</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-02 18:07:36 -0700</bug_when>
    <thetext>Comment on attachment 172184
Patch

Attachment 172184 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14697856</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757868</commentid>
    <comment_count>10</comment_count>
      <attachid>172184</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-02 20:21:43 -0700</bug_when>
    <thetext>Comment on attachment 172184
Patch

Attachment 172184 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14725073</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757885</commentid>
    <comment_count>11</comment_count>
      <attachid>172184</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-02 21:28:00 -0700</bug_when>
    <thetext>Comment on attachment 172184
Patch

Attachment 172184 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14725077

New failing tests:
fast/js/basic-strict-mode.html
fast/js/mozilla/strict/assign-to-callee-name.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757977</commentid>
    <comment_count>12</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-03 11:28:33 -0700</bug_when>
    <thetext>*sigh* One day all C++ compilers will support the same language.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758029</commentid>
    <comment_count>13</comment_count>
      <attachid>172184</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-11-03 17:19:09 -0700</bug_when>
    <thetext>Comment on attachment 172184
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        This patch adds a marginally more compact form of bytecode that is
&gt; +        free from any data specific to a given execution context, and that
&gt; +        does store any data structures necessary for execution.  To actually

This sentence is confusing, I think you meant &quot;does*n&apos;t* store any data structures necessary for execution&quot;.

&gt; Source/JavaScriptCore/API/tests/testapi.c:1463
&gt; -    v = JSObjectCallAsFunction(context, function, NULL, 0, NULL, NULL);
&gt; +    exception = 0;
&gt; +    v = JSObjectCallAsFunction(context, function, NULL, 0, NULL, &amp;exception);
&gt; +    ASSERT(!exception);

Is this change related?

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:674
&gt; -            dataLog(&quot;[%4d] new_array_buffer %s, %d, %d&quot;, location, registerName(exec, dst).data(), argv, argc);
&gt; +            dataLog(&quot;[%4d] new_array_buffer\t %s, %d, %d&quot;, location, registerName(exec, dst).data(), argv, argc);

This change seems unrelated.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:872
&gt;          }
&gt; +
&gt; +
&gt;          unsigned addOrFindConstant(JSValue);

Why so much new whitespace?

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:1357
&gt; +        // TODO: This could just be a pointer to m_unlinkedCodeBlock&apos;s data, but the DFG mutates
&gt; +        // it, so we&apos;re stuck with it for now.

We usually label these FIXME: rather than TODO.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:269
&gt; +void UnlinkedProgramCodeBlock::visitChildren(JSCell* cell, SlotVisitor&amp; visitor)
&gt; +{
&gt; +    UnlinkedProgramCodeBlock* thisObject = jsCast&lt;UnlinkedProgramCodeBlock*&gt;(cell);
&gt; +    ASSERT_GC_OBJECT_INHERITS(thisObject, &amp;s_info);
&gt; +    COMPILE_ASSERT(StructureFlags &amp; OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
&gt; +    ASSERT(thisObject-&gt;structure()-&gt;typeInfo().overridesVisitChildren());
&gt; +    Base::visitChildren(thisObject, visitor);
&gt; +    for (size_t i = 0, end = thisObject-&gt;m_functionDeclarations.size(); i != end; i++)
&gt; +        visitor.append(&amp;thisObject-&gt;m_functionDeclarations[i].second);
&gt; +}
&gt; +

This would read a bit more cleanly if there was some whitespace paragraphing.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:55
&gt; +class Debugger;
&gt; +class FunctionBodyNode;
&gt; +class FunctionExecutable;
&gt; +class FunctionParameters;
&gt; +struct ParserError;
&gt; +class ScriptExecutable;
&gt; +class SourceCode;
&gt; +class SourceProvider;
&gt; +class SharedSymbolTable;
&gt; +class UnlinkedCodeBlock;
&gt; +class UnlinkedFunctionCodeBlock;

The struct should be at the end.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:76
&gt; +class UnlinkedFunctionExecutable : public JSCell {
&gt; +public:

This class should probably have its own file.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:102
&gt; +    String paramString() const;

I don&apos;t think there is a great reason to shorten parameter to param here, especially since we use the full word elsewhere.  I also don&apos;t think the name makes it to clear what this function does.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:143
&gt; +    unsigned m_numCapturedVariables : 29;
&gt; +    bool m_forceUsesArguments : 1;
&gt; +    bool m_isInStrictContext : 1;
&gt; +    bool m_hasCapturedVariables : 1;

Can these be packed with CodeFeatures below to be smaller on 64bit?

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:193
&gt; +    }
&gt; +
&gt; +};

This newline is extraneous.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:495
&gt; +    int m_numParameters;
&gt; +    JSGlobalData* m_globalData;
&gt; +
&gt; +    int m_thisRegister;
&gt; +    int m_argumentsRegister;
&gt; +    int m_activationRegister;
&gt; +
&gt; +    bool m_needsFullScopeChain : 1;
&gt; +    bool m_usesEval : 1;
&gt; +    bool m_isNumericCompareFunction : 1;
&gt; +    bool m_isStrictMode : 1;
&gt; +    bool m_isConstructor : 1;
&gt; +    bool m_hasCapturedVariables : 1;
&gt; +    unsigned m_firstLine;
&gt; +    unsigned m_lineCount;
&gt; +
&gt; +    CodeFeatures m_features;
&gt; +    CodeType m_codeType;

Is this optimally packed?

&gt; Source/JavaScriptCore/heap/MarkedAllocator.h:81
&gt; +#ifndef NDEBUG
&gt; +        memset(result, 0xCD, bytes);
&gt; +#endif

This could use a comment.

&gt; Source/JavaScriptCore/heap/MarkedAllocator.h:88
&gt; +#ifndef NDEBUG
&gt; +    memset(head, 0xCD, bytes);
&gt; +#endif

As could this.

&gt; Source/JavaScriptCore/runtime/CodeCache.h:52
&gt; +class EvalExecutable;
&gt; +class Identifier;
&gt; +class ProgramExecutable;
&gt; +class UnlinkedCodeBlock;
&gt; +class UnlinkedEvalCodeBlock;
&gt; +class UnlinkedFunctionCodeBlock;
&gt; +class UnlinkedFunctionExecutable;
&gt; +class UnlinkedProgramCodeBlock;
&gt; +class JSGlobalData;
&gt; +struct ParserError;
&gt; +class SourceCode;
&gt; +class SourceProvider;

These should be sorted with the struct at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759073</commentid>
    <comment_count>14</comment_count>
      <attachid>172449</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-05 17:23:03 -0800</bug_when>
    <thetext>Created attachment 172449
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759076</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 17:27:20 -0800</bug_when>
    <thetext>Attachment 172449 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/tests/testapi.c&apos;...&quot; exit_code: 1
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2387:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2413:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2426:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 50 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759081</commentid>
    <comment_count>16</comment_count>
      <attachid>172449</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-05 17:32:44 -0800</bug_when>
    <thetext>Comment on attachment 172449
Patch

Attachment 172449 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14714900</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759082</commentid>
    <comment_count>17</comment_count>
      <attachid>172449</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-05 17:34:59 -0800</bug_when>
    <thetext>Comment on attachment 172449
Patch

Attachment 172449 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14745236</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759098</commentid>
    <comment_count>18</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-05 17:53:51 -0800</bug_when>
    <thetext>Qt folk: can you fix your toolchain?

enum Foo { Bar, Wibble }
int foo(Foo f) {
   switch (f) {
   case Bar:
        return 1;
   case Wibble:
        return 2;
   }
}

should not warn about not returning a value, and yet that is what it is doing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759111</commentid>
    <comment_count>19</comment_count>
      <attachid>172461</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-05 18:00:25 -0800</bug_when>
    <thetext>Created attachment 172461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759116</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 18:07:44 -0800</bug_when>
    <thetext>Attachment 172461 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/tests/testapi.c&apos;...&quot; exit_code: 1
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2387:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2413:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2426:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 50 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759129</commentid>
    <comment_count>21</comment_count>
      <attachid>172461</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-05 18:24:19 -0800</bug_when>
    <thetext>Comment on attachment 172461
Patch

Attachment 172461 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14755012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759135</commentid>
    <comment_count>22</comment_count>
      <attachid>172461</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-05 18:31:08 -0800</bug_when>
    <thetext>Comment on attachment 172461
Patch

Attachment 172461 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14682301</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759768</commentid>
    <comment_count>23</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-06 09:28:26 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 172461 [details])
&gt; Attachment 172461 [details] did not pass qt-ews (qt):
&gt; Output: http://queues.webkit.org/results/14755012

Dammit, what are the qt project files again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759936</commentid>
    <comment_count>24</comment_count>
      <attachid>172627</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-06 11:51:06 -0800</bug_when>
    <thetext>Created attachment 172627
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759938</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 11:54:05 -0800</bug_when>
    <thetext>Attachment 172627 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/tests/testapi.c&apos;...&quot; exit_code: 1
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2382:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2408:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2421:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 51 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759948</commentid>
    <comment_count>26</comment_count>
      <attachid>172627</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-06 12:13:18 -0800</bug_when>
    <thetext>Comment on attachment 172627
Patch

Attachment 172627 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14733814</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760032</commentid>
    <comment_count>27</comment_count>
      <attachid>172646</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-06 14:09:04 -0800</bug_when>
    <thetext>Created attachment 172646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760034</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 14:11:28 -0800</bug_when>
    <thetext>Attachment 172646 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2382:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2408:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2421:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 50 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760056</commentid>
    <comment_count>29</comment_count>
      <attachid>172646</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-06 14:33:34 -0800</bug_when>
    <thetext>Comment on attachment 172646
Patch

Attachment 172646 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14757142</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760095</commentid>
    <comment_count>30</comment_count>
      <attachid>172646</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-06 15:10:16 -0800</bug_when>
    <thetext>Comment on attachment 172646
Patch

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

R=me! :-D

&gt; Source/JavaScriptCore/heap/Heap.cpp:497
&gt;              }
&gt;          }
&gt;  #endif
&gt; -    
&gt; +
&gt;          if (m_globalData-&gt;codeBlocksBeingCompiled.size()) {
&gt;              GCPHASE(VisitActiveCodeBlock);
&gt;              for (size_t i = 0; i &lt; m_globalData-&gt;codeBlocksBeingCompiled.size(); i++)
&gt;                  m_globalData-&gt;codeBlocksBeingCompiled[i]-&gt;visitAggregate(visitor);
&gt;          }
&gt; -    
&gt; +
&gt;          {
&gt;              GCPHASE(VisitMachineRoots);
&gt;              MARK_LOG_ROOT(visitor, &quot;C++ Stack&quot;);

Kill!

&gt; Source/JavaScriptCore/jit/JIT.cpp:339
&gt; +        case op_init_global_const_nop:
&gt; +            NEXT_OPCODE(op_init_global_const_nop);

When would this survive into the JIT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760165</commentid>
    <comment_count>31</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-06 16:14:14 -0800</bug_when>
    <thetext>Committed r133688: &lt;http://trac.webkit.org/changeset/133688&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769693</commentid>
    <comment_count>32</comment_count>
      <attachid>172646</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-16 14:53:48 -0800</bug_when>
    <thetext>Comment on attachment 172646
Patch

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

&gt; Source/JavaScriptCore/runtime/CodeCache.cpp:39
&gt; +    : m_randomGenerator(static_cast&lt;uint32_t&gt;(randomNumber() * UINT32_MAX))

I believe this expression generates a random number in the range 0..0xFFFFFFFE and never generates 0xFFFFFFFF.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172179</attachid>
            <date>2012-11-02 17:15:16 -0700</date>
            <delta_ts>2012-11-02 17:31:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101127-20121102171335.patch</filename>
            <type>text/plain</type>
            <size>221251</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMzY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZDA2YmIxNTFiZDk3NjQ0ZTQ0YWQ5ZmVmNzZjNmFiYjZmMWJkNDc2Li4xZTIzZTg3ZTJkNmQwMmEy
NDMwMjE5YmU3N2FjZTVmMzhiZDRjMDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MiBAQAorMjAxMi0xMS0wMiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZHVjZSBwYXJzZXIgb3ZlcmhlYWQgaW4gSlNDCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExMjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbiBleGNpdGluZyBqb3VybmV5IGludG8g
dGhlIHdvcmxkIG9mIGFyY2hpdGVjdHVyZSBpbiB3aGljaCBvdXIgaGVybworICAgICAgICBhZGRz
IHlldCBhbm90aGVyIGxheWVyIHRvIEpTQyBjb2RlZ2VuZXJhdGlvbi4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgYSBtYXJnaW5hbGx5IG1vcmUgY29tcGFjdCBmb3JtIG9mIGJ5dGVjb2RlIHRo
YXQgaXMKKyAgICAgICAgZnJlZSBmcm9tIGFueSBkYXRhIHNwZWNpZmljIHRvIGEgZ2l2ZW4gZXhl
Y3V0aW9uIGNvbnRleHQsIGFuZCB0aGF0CisgICAgICAgIGRvZXMgc3RvcmUgYW55IGRhdGEgc3Ry
dWN0dXJlcyBuZWNlc3NhcnkgZm9yIGV4ZWN1dGlvbi4gIFRvIGFjdHVhbGx5CisgICAgICAgIGV4
ZWN1dGUgdGhpcyBVbmxpbmtlZEJ5dGVjb2RlIHdlIHN0aWxsIG5lZWQgdG8gaW5zdGFudGlhdGUg
YSByZWFsCisgICAgICAgIENvZGVCbG9jaywgYnV0IHRoaXMgaXMgYSBtdWNoIGZhc3RlciBsaW5l
YXIgdGltZSBvcGVyYXRpb24gdGhhbiBhbnkKKyAgICAgICAgb2YgdGhlIGVhcmxpZXIgcGFyc2lu
ZyBvciBjb2RlIGdlbmVyYXRpb24gcGFzc2VzLgorCisgICAgICAgIEFzIHRoZSB1bmxpbmtlZCBj
b2RlIGlzIGNvbnRleHQgZnJlZSB3ZSBjYW4gdGhlbiBzaW1wbHkgdXNlIGEgY2FjaGUKKyAgICAg
ICAgZnJvbSBzb3VyY2UgdG8gdW5saW5rZWQgY29kZSBtYXBwaW5nIHRvIGNvbXBsZXRlbHkgYXZv
aWQgYWxsIG9mIHRoZQorICAgICAgICBvbGQgcGFyc2VyIG92ZXJoZWFkLiAgVGhlIGNhY2hlIGlz
IGN1cnJlbnRseSB2ZXJ5IHNpbXBsZSBhbmQgbWVtb3J5CisgICAgICAgIGhlYXZ5LCB1c2luZyB0
aGUgY29tcGxldGUgc291cmNlIHRleHQgYXMgYSBrZXkgKHJhdGhlciB0aGFuIFNvdXJjZUNvZGUK
KyAgICAgICAgb3IgZXF1aXZhbGVudCksIGFuZCBhIHJhbmRvbSBldmljdGlvbiBwb2xpY3kuCisK
KyAgICAgICAgVGhpcyBzZWVtcyB0byBwcm9kdWNlIGEgc3Vic3RhbnRpYWwgd2luIHdoZW4gbG9h
ZGluZyBpZGVudGljYWwgY29udGVudAorICAgICAgICBpbiBkaWZmZXJlbnQgY29udGV4dHMuCisK
KyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgICAgIE1vdmVkIGEgbnVtYmVyIG9mIGZpZWxkcywgYW5k
IGEgYnVuY2ggb2YgbG9naWMgdG8gVW5saW5rZWRDb2RlQmxvY2suaC9jcHAKKyAgICAgICAgKiBi
eXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgICAgIEFkZGVkIGEgZ2xvYmFsIGNvbnN0IGluaXQg
bm8gb3AgaW5zdHJ1Y3Rpb24gbmVlZGVkIHRvIGdldCBjb3JyZWN0CisgICAgICAgICAgICBiZWhh
dmlvdXIgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBzZW1hbnRpY3MuCisgICAgICAgICogYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgICAgIEEgZmFpcmx5IHNoYWxsb3csIEdD
IGFsbG9jYXRlZCB2ZXJzaW9uIG9mIHRoZSBvbGQgQ29kZUJsb2NrCisgICAgICAgICAgICBjbGFz
c2VzIHdpdGggYSAzMmJpdCBpbnN0cnVjdGlvbiBzaXplLCBhbmQganVzdCBtZXRhZGF0YQorICAg
ICAgICAgICAgc2l6ZSB0cmFja2luZy4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
OgorICAgICAgICAgICAgUmVwbGFjZSBkaXJlY3QgYWNjZXNzIHRvIG1fc3ltYm9sVGFibGUgd2l0
aCBhY2Nlc3MgdGhyb3VnaAorICAgICAgICAgICAgc3ltYm9sVGFibGUoKS4gIFByb2dyYW1Db2Rl
IG5vIGxvbmdlciBoYXMgYSBzeW1ib2wgdGFibGUgYXQKKyAgICAgICAgICAgIGFsbCBzbyBzb21l
IHByZXZpb3VzbHkgdW5jb25kaXRpb25hbCAoYW5kIHBvaW50bGVzcykgdXNlcworICAgICAgICAg
ICAgb2Ygc3ltYm9sVGFibGUgZ2V0IG51bGwgY2hlY2tzLgorICAgICAgICAgICAgQSBmZXcgb3Ro
ZXIgY2hhbmdlcyB0byBkZWFsIHdpdGggdHlwZSBjaGFuZ2VzIGR1ZSB0byB1cyBnZW5lcmF0aW5n
CisgICAgICAgICAgICB1bmxpbmtlZCBjb2RlIChlZy4gcG9pbnRlciBmcmVlLCBzbyBwcm9maWxl
IGluZGljZXMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIHBvaW50ZXJzKS4KKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMu
aDoKKyAgICAgICAgICAgIFN1cHBvcnQgZ2xvYmFsX2luaXRfbm9wICAgICAgICAKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgICAgICBOb3cgZ2V0IHRoZSBQ
cm9ncmFtRXhlY3V0YWJsZSB0byBpbml0aWFsaXNlIG5ldyBnbG9iYWwgcHJvcGVydGllcworICAg
ICAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIGV4ZWN1dGlvbi4gICAgICAgIAorICAgICAgICAqIGpp
dC9KSVQuY3BwOgorICAgICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKiBqaXQvSklU
U3R1YnMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgICAgIEFk
ZGluZyBpbml0X2dsb2JhbF9jb25zdF9ub3AgZXZlcnl3aGVyZSBlbHNlCisgICAgICAgICogcGFy
c2VyL1BhcnNlci5oOgorICAgICAgICAqIHBhcnNlci9QYXJzZXJNb2Rlcy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyVG9rZW5zLmg6CisgICAgICAgICAgICBQYXJzZXIgbm8gbG9u
Z2VyIG5lZWRzIGEgZ2xvYmFsIG9iamVjdCBvciBjYWxsZnJhbWUgdG8gZnVuY3Rpb24gICAgICAg
IAorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9Db2RlQ2FjaGUuaDogQWRkZWQuCisgICAgICAgICAgICBBIHNpbXBsZSwgcmFuZG9tIGV2
aWN0aW9uLCBTb3VyY2UtPlVubGlua2VkQ29kZSBjYWNoZSAgICAgICAgCisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAg
ICAgICAgICAgIEV4ZWN1dGFibGVzIG5vdyByZWZlcmVuY2UgdGhlaXIgdW5saW5rZWQgY291bnRl
cnBhcnRzLCBhbmQKKyAgICAgICAgICAgIHJlcXVlc3QgY29kZSBzcGVjaWZpY2FsbHkgZm9yIHRo
ZSB0YXJnZXQgZ2xvYmFsIG9iamVjdC4gICAgICAgIAorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAg
ICAgR2xvYmFsRGF0YSBub3cgb3ducyBhIENvZGVDYWNoZSBhbmQgYSBzZXQgb2YgbmV3IHN0cnVj
dHVyZXMKKyAgICAgICAgICAgIGZvciB0aGUgdW5saW5rZWQgY29kZSB0eXBlcy4gIAorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgICAgIFV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgZXhlY3V0
YWJsZXMgdG8gcGVyZm9ybSBjb21waWxhdGlvbgorIAorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBl
Lmg6CisgICAgICAgICAgQWRkIG5ldyBKU1R5cGVzIGZvciB1bmxpbmtlZCBjb2RlCisKIDIwMTIt
MTEtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkc6Ok5v
ZGU6OmNvbnZlclRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQgc2hvdWxkIHRha2Uga2lu
ZGx5IHRvIEFycmF5aWZ5VG9TdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpLmMKaW5kZXggYjUyYTJiNDQwNzJhYTY4NWU5OWM1ZDA4MDM5MzVmYzJhMDM5OGVk
Mi4uZmNhYjlhNThiNjYwMTU0NGY0NzgyZmQzYTk5YjlkZTcwNTlkYWQ5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKQEAgLTE0NTgsNyArMTQ1OCw5IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgSlNTdHJpbmdSZWxlYXNlKGZ1bmN0
aW9uQm9keSk7CiAgICAgQVNTRVJUKCFleGNlcHRpb24pOwogICAgIEFTU0VSVChKU09iamVjdElz
RnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24pKTsKLSAgICB2ID0gSlNPYmplY3RDYWxsQXNGdW5j
dGlvbihjb250ZXh0LCBmdW5jdGlvbiwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CisgICAgZXhjZXB0
aW9uID0gMDsKKyAgICB2ID0gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBmdW5jdGlv
biwgTlVMTCwgMCwgTlVMTCwgJmV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFleGNlcHRpb24pOwog
ICAgIEFTU0VSVCh2KTsKICAgICBBU1NFUlQoSlNWYWx1ZUlzRXF1YWwoY29udGV4dCwgdiwgYXJy
YXlDb25zdHJ1Y3RvciwgTlVMTCkpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGM3MDZmNjVlOWQzOWIxYjg2MWRkNDBjOTg5NmEyZmQyZDc3NWYxZjEuLmRlOWQx
NjZlOWQ1ZjQ2M2RkNTU4MDE2YTc0ODQ3ZDQzNzBiNjMwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTYxLDYgKzYxLDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBieXRlY29kZS9TcGVjaWFsUG9pbnRlci5jcHAKICAgICBieXRlY29kZS9TdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAogICAgIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAorICAgIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAogICAgIGJ5dGVjb2Rl
L1dhdGNocG9pbnQuY3BwCiAKICAgICBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CkBAIC0xNzYsNiArMTc3LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50
aW1lL0Jvb2xlYW5PYmplY3QuY3BwCiAgICAgcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAog
ICAgIHJ1bnRpbWUvQ2FsbERhdGEuY3BwCisgICAgcnVudGltZS9Db2RlQ2FjaGUuY3BwCiAgICAg
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAKICAgICBydW50aW1lL0NvbXBsZXRpb24uY3Bw
CiAgICAgcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQppbmRleCA2ZTc0YzNiNTMxZmMwZWU5MjU4YjQ4OGI1YTE1NjRiZWNm
M2E5ZWQzLi5hNWIyZmQ1ZDAyMWM5MDEwOTgwOWYzOTNjMmU4NGU3MTRmZDBmMGRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTQyLDYgKzE0Miw4IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBcCkBAIC00NDgsNiArNDUwLDcgQEAgamF2
YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJUb2tlbnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUmVzdWx0VHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Nv
dXJjZUNvZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRl
ci5oIFwKQEAgLTQ4OCw2ICs0OTEsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2Rl
Q2FjaGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZVNwZWNpYWxpemF0aW9uS2luZC5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvagppbmRleCAwZjk2YTYwZWRkMTI0OTQ3ZjljMDcwZDk5OTVmNTFlZDkzZmMyYjcyLi4yNzk4
YzkwNWUwYzgyMjk3M2U1NGRhYjhjNjk2MDQ3MWYyNjMwOTZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpAQCAtNjM4LDYg
KzYzOCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxydW50aW1lXENvZGVDYWNoZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQ29kZUNhY2hlLmgiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQ29t
bW9uSWRlbnRpZmllcnMuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE3NjIsNiArMTc3MCwx
NCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwu
LlxieXRlY29kZVxVbmxpbmtlZENvZGVCbG9jay5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXFVubGlua2VkQ29kZUJsb2Nr
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGJ5dGVjb2RlXFZhbHVlUHJvZmlsZS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTIyNDYsNiAr
MjI2MiwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxwYXJzZXJcUGFyc2VyTW9kZXMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGFyc2VyXFBhcnNlckFyZW5hLmNwcCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJhNmE1YzRjMGZl
MTlmNzJlY2RjOWY1NjI2MWEzYmI2NzE5OWNlMDUuLjU3NGJmYTBkNjBhNDY2Yzc1YmI5M2NhNGI3
MmJjZGM0ZWJmNmQzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01ODQsMTIg
KzU4NCwxNyBAQAogCQlBNzU3MDZERTExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMy
XzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3BwICovOyB9Owog
CQlBNzY2QjQ0RjBFRThEQ0QxMDA5NTE4Q0EgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjUwRUU3NENG
QzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzZDNTE3NjExODI3NDhEMDA3MTVCMDUgLyog
SlNJbnRlcmZhY2VKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3NkYyNzk0MTVG
MTNDOTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUgLyog
VW5saW5rZWRDb2RlQmxvY2suY3BwICovOyB9OwogCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0Ug
LyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmgg
Ki87IH07CisJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3RjE4MUYxNjQwODhC
MjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgKi87IH07CisJCUE3N0YxODIyMTY0MDg4QjIwMDY0
MEE0NyAvKiBDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzdGMTgyNTE2NDE5
MkM3MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyog
QVNUQnVpbGRlci5oICovOyB9OwogCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4
Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLzsgfTsKIAkJQTdB
RkMxNzkxNUY3RUZFMzAwNDhGNTdCIC8qIFJlc29sdmVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QUZDMTc3MTVGN0VGRTMwMDQ4RjU3
QiAvKiBSZXNvbHZlT3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTdCNDhGNDkwRUU4OTM2RjAwRENCREI2IC8qIEV4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICov
OyB9OwogCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjRBQ0FFMTQ4NEM5
Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3QjYwMTgyMTYzOUZEMkEwMDM3MkJBMyAvKiBVbmxp
bmtlZENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc5RTc4MUYxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdDMUU4RTQx
MTJFNzJFRjAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDMUU4QzgxMTJFNzAxQzAwQTM3
Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovOyB9OwogCQlBN0RDQjk3MzEyRTUx
OTNGMDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0RDQjc3OTEyRTNEOTA1MDA5MTE5NDAgLyogV3JpdGVCYXJy
aWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTJFQTY5MEZCNDYwQ0YwMDYwMUYw
NiAvKiBMaXRlcmFsUGFyc2VyLmggKi87IH07CkBAIC0xMzg2LDYgKzEzOTEsMTEgQEAKIAkJQTc2
N0ZGOUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5cGVkQXJyYXlTdHVicy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NUeXBlZEFycmF5U3R1YnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNl
SklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJmYWNlSklULmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAv
KiBKSVRXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
V3JpdGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3N0YxODFGMTY0
MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTc3RjE4MjAxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb2RlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3OUU3ODFF
MTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmxpbmtlZENvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENv
ZGVCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtlZENvZGVC
bG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzlFREIwODExNTMxQ0Q2MDAx
OUU5MTIgLyogSlNPYmplY3RSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTT2JqZWN0UmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyogQVNUQnVpbGRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBU1RCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bnRheENoZWNrZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNzEsNiArMjA4MSw3IEBACiAJCQkJRTQ5REMxNTExMkVGMjcy
MjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCAqLywKIAkJCQlFNDlEQzE0OTEyRUYy
NjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLywKIAkJCQlBN0E3RUU3
NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovLAorCQkJCUE3N0YxODI0MTY0
MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovLAogCQkJKTsKIAkJCXBhdGggPSBwYXJz
ZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjMwNSw2ICsyMzE2LDggQEAKIAkJ
CQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3RENC
Nzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQlDMkQ1OEMzMzE1
OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKKwkJCQlBNzdGMTgx
RjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCAqLywKKwkJCQlBNzdGMTgyMDE2NDA4
OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHJ1bnRpbWU7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjU4MSw2ICsyNTk0LDggQEAKIAkJCQkw
RjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8sCiAJCQkJMEY5
MTlEMjIxNTg1M0NERTAwNEE0RTdEIC8qIFdhdGNocG9pbnQuY3BwICovLAogCQkJCTBGOTE5RDIz
MTU4NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmggKi8sCisJCQkJQTc5RTc4MUUxNUVFQ0JB
ODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCAqLywKKwkJCQlBNzlFNzgxRjE1RUVD
QkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suaCAqLywKIAkJCSk7CiAJCQlwYXRoID0g
Ynl0ZWNvZGU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzAwOSw2ICszMDI0LDkg
QEAKIAkJCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIy
MzlEMUIxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
N0I2MDE4MjE2MzlGRDJBMDAzNzJCQTMgLyogVW5saW5rZWRDb2RlQmxvY2suaCBpbiBIZWFkZXJz
ICovLAorCQkJCUE3N0YxODIyMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0zNTg3LDYgKzM2MDUsOCBAQAogCQkJCUMyNEQzMUUyMTYxQ0Q2OTUw
MDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjIzOUQx
NzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzIyMzlEMUExNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBNzdGMTgyMTE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAppbmRleCA3MjlmODVmNzgwMzQ4NmU1ZGIxYjY4NGQ3OTc1YTg2YTQwNDZjNGQ2Li45
Y2Y2ZmFmYjQ0OGRlY2FiZTQxZDMxMzZmNDY0Y2ZkZmU0YTU1MjE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNDkxLDEzICs0OTEsMTMgQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICArK2luc3RydWN0
aW9uQ291bnQ7CiAKICAgICBkYXRhTG9nKAotICAgICAgICAiJWx1IG1faW5zdHJ1Y3Rpb25zOyAl
bHUgYnl0ZXMgYXQgJXAgKCVzKTsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVnaXN0ZXIo
cyk7ICVkIHZhcmlhYmxlKHMpIiwKKyAgICAgICAgIiVsdSBtX2luc3RydWN0aW9uczsgJWx1IGJ5
dGVzIGF0ICVwICglcyk7ICVkIHBhcmFtZXRlcihzKTsgJWQgY2FsbGVlIHJlZ2lzdGVyKHMpOyAl
ZCB2YXJpYWJsZShzKSwgMHglMDR4IGZlYXR1cmVzIiwKICAgICAgICAgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZz4oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9u
KSksCiAgICAgICAgIHRoaXMsIGNvZGVUeXBlVG9TdHJpbmcoY29kZVR5cGUoKSksIG1fbnVtUGFy
YW1ldGVycywgbV9udW1DYWxsZWVSZWdpc3RlcnMsCi0gICAgICAgIG1fbnVtVmFycyk7Ci0gICAg
aWYgKG1fc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpKQotICAgICAgICBkYXRhTG9nKCI7ICVk
IGNhcHR1cmVkIHZhcihzKSIsIG1fc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpKTsKKyAgICAg
ICAgbV9udW1WYXJzLCBtX293bmVyRXhlY3V0YWJsZS0+ZmVhdHVyZXMoKSk7CisgICAgaWYgKHN5
bWJvbFRhYmxlKCkgJiYgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCkpCisgICAgICAgIGRh
dGFMb2coIjsgJWQgY2FwdHVyZWQgdmFyKHMpIiwgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50
KCkpOwogICAgIGlmICh1c2VzQXJndW1lbnRzKCkpIHsKICAgICAgICAgZGF0YUxvZygKICAgICAg
ICAgICAgICI7IHVzZXMgYXJndW1lbnRzLCBpbiByJWQsIHIlZCIsCkBAIC01MzEsMTMgKzUzMSwx
MyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIH0gd2hp
bGUgKGkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgfQogCi0gICAgaWYgKG1f
cmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fcmVnZXhwcy5pc0VtcHR5KCkpIHsKKyAgICBpZiAo
c2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mUmVnRXhwcygpKSB7CiAgICAg
ICAgIGRhdGFMb2coIlxubV9yZWdleHBzOlxuIik7CiAgICAgICAgIHNpemVfdCBpID0gMDsKICAg
ICAgICAgZG8gewotICAgICAgICAgICAgZGF0YUxvZygiICByZSV1ID0gJXNcbiIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpKSwgcmVnZXhwVG9Tb3VyY2VTdHJpbmcobV9yYXJlRGF0YS0+bV9yZWdl
eHBzW2ldLmdldCgpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgcmUl
dSA9ICVzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSksIHJlZ2V4cFRvU291cmNlU3RyaW5n
KG1fdW5saW5rZWRDb2RlLT5yZWdleHAoaSkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAg
KytpOwotICAgICAgICB9IHdoaWxlIChpIDwgbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKSk7
CisgICAgICAgIH0gd2hpbGUgKGkgPCBjb3VudCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkK
QEAgLTY3MSw3ICs2NzEsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJgogICAgICAgICAgICAg
aW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ3YgPSAoKytp
dCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmdjID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBuZXdfYXJyYXlfYnVmZmVyICVzLCAlZCwgJWQi
LCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIGRzdCkuZGF0YSgpLCBhcmd2LCBhcmdjKTsK
KyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIG5ld19hcnJheV9idWZmZXJcdCAlcywgJWQsICVk
IiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCBkc3QpLmRhdGEoKSwgYXJndiwgYXJnYyk7
CiAgICAgICAgICAgICBkdW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3TGluZShsb2NhdGlvbik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNjc5LDcgKzY3OSw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6
Y29uc3RfaXRlcmF0b3ImCiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICAgICAgICAgIGludCByZTAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGRh
dGFMb2coIlslNGRdIG5ld19yZWdleHBcdCAlcywgIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShl
eGVjLCByMCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChyMCA+PTAgJiYgcjAgPCAoaW50KW51
bWJlck9mUmVnRXhwcygpKQorICAgICAgICAgICAgaWYgKHIwID49MCAmJiByMCA8IChpbnQpbV91
bmxpbmtlZENvZGUtPm51bWJlck9mUmVnRXhwcygpKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
IiVzIiwgcmVnZXhwTmFtZShyZTAsIHJlZ2V4cChyZTApKS5kYXRhKCkpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIGRhdGFMb2coImJhZF9yZWdleHAoJWQpIiwgcmUwKTsKQEAg
LTg4OSwxMSArODg5LDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImCiAgICAgICAgICAgICBp
dCsrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pbml0
X2dsb2JhbF9jb25zdF9ub3A6IHsKKyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGluaXRfZ2xv
YmFsX2NvbnN0X25vcFx0IiwgbG9jYXRpb24pOworICAgICAgICAgICAgZHVtcEJ5dGVjb2RlQ29t
bWVudEFuZE5ld0xpbmUobG9jYXRpb24pOworICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgICAg
IGl0Kys7CisgICAgICAgICAgICBpdCsrOworICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6IHsK
ICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gKCsr
aXQpLT51LnJlZ2lzdGVyUG9pbnRlcjsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwogICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gaW5pdF9nbG9iYWxfY29uc3RcdCBn
JWQoJXApLCAlcyIsIGxvY2F0aW9uLCBtX2dsb2JhbE9iamVjdC0+ZmluZFJlZ2lzdGVySW5kZXgo
cmVnaXN0ZXJQb2ludGVyKSwgcmVnaXN0ZXJQb2ludGVyLCByZWdpc3Rlck5hbWUoZXhlYywgcjAp
LmRhdGEoKSk7CiAgICAgICAgICAgICBkdW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3TGluZShsb2Nh
dGlvbik7CisgICAgICAgICAgICBpdCsrOworICAgICAgICAgICAgaXQrKzsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3RfY2hl
Y2s6IHsKQEAgLTE1MzEsOSArMTU0Miw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wU3RhdGlzdGlj
cygpCiAgICAgICAgICAgICBGT1JfRUFDSF9NRU1CRVJfVkVDVE9SKEdFVF9TVEFUUykKICAgICAg
ICAgI3VuZGVmIEdFVF9TVEFUUwogCi0gICAgICAgIGlmICghY29kZUJsb2NrLT5tX3N5bWJvbFRh
YmxlLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpICYm
ICFjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgc3lt
Ym9sVGFibGVJc05vdEVtcHR5Kys7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZVRvdGFsU2l6ZSAr
PSAoY29kZUJsb2NrLT5tX3N5bWJvbFRhYmxlLmNhcGFjaXR5KCkgKiAoc2l6ZW9mKFN5bWJvbFRh
YmxlOjpLZXlUeXBlKSArIHNpemVvZihTeW1ib2xUYWJsZTo6TWFwcGVkVHlwZSkpKTsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlVG90YWxTaXplICs9IChjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkt
PmNhcGFjaXR5KCkgKiAoc2l6ZW9mKFN5bWJvbFRhYmxlOjpLZXlUeXBlKSArIHNpemVvZihTeW1i
b2xUYWJsZTo6TWFwcGVkVHlwZSkpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjb2RlQmxv
Y2stPm1fcmFyZURhdGEpIHsKQEAgLTE2MDEsMzMgKzE2MTIsMjYgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKQogICAgICwgbV9udW1D
YWxsZWVSZWdpc3RlcnMob3RoZXIubV9udW1DYWxsZWVSZWdpc3RlcnMpCiAgICAgLCBtX251bVZh
cnMob3RoZXIubV9udW1WYXJzKQogICAgICwgbV9pc0NvbnN0cnVjdG9yKG90aGVyLm1faXNDb25z
dHJ1Y3RvcikKKyAgICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX2dsb2JhbERhdGEsIG90aGVy
Lm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX3VubGlua2VkQ29kZS5nZXQoKSkKICAg
ICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX2dsb2JhbERhdGEsIG90aGVyLm1fb3duZXJF
eGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1f
Z2xvYmFsRGF0YShvdGhlci5tX2dsb2JhbERhdGEpCiAgICAgLCBtX2luc3RydWN0aW9ucyhvdGhl
ci5tX2luc3RydWN0aW9ucykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKG90aGVyLm1fdGhpc1JlZ2lz
dGVyKQogICAgICwgbV9hcmd1bWVudHNSZWdpc3RlcihvdGhlci5tX2FyZ3VtZW50c1JlZ2lzdGVy
KQogICAgICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIob3RoZXIubV9hY3RpdmF0aW9uUmVnaXN0ZXIp
Ci0gICAgLCBtX25lZWRzRnVsbFNjb3BlQ2hhaW4ob3RoZXIubV9uZWVkc0Z1bGxTY29wZUNoYWlu
KQotICAgICwgbV91c2VzRXZhbChvdGhlci5tX3VzZXNFdmFsKQotICAgICwgbV9pc051bWVyaWND
b21wYXJlRnVuY3Rpb24ob3RoZXIubV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24pCiAgICAgLCBt
X2lzU3RyaWN0TW9kZShvdGhlci5tX2lzU3RyaWN0TW9kZSkKLSAgICAsIG1fY29kZVR5cGUob3Ro
ZXIubV9jb2RlVHlwZSkKICAgICAsIG1fc291cmNlKG90aGVyLm1fc291cmNlKQogICAgICwgbV9z
b3VyY2VPZmZzZXQob3RoZXIubV9zb3VyY2VPZmZzZXQpCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJ
TEVSKQogICAgICwgbV9leGVjdXRpb25FbnRyeUNvdW50KDApCiAjZW5kaWYKLSAgICAsIG1fanVt
cFRhcmdldHMob3RoZXIubV9qdW1wVGFyZ2V0cykKLSAgICAsIG1fbG9vcFRhcmdldHMob3RoZXIu
bV9sb29wVGFyZ2V0cykKICAgICAsIG1faWRlbnRpZmllcnMob3RoZXIubV9pZGVudGlmaWVycykK
ICAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVycykKICAg
ICAsIG1fZnVuY3Rpb25EZWNscyhvdGhlci5tX2Z1bmN0aW9uRGVjbHMpCiAgICAgLCBtX2Z1bmN0
aW9uRXhwcnMob3RoZXIubV9mdW5jdGlvbkV4cHJzKQotICAgICwgbV9zeW1ib2xUYWJsZSgqb3Ro
ZXIubV9nbG9iYWxEYXRhLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIuc3lt
Ym9sVGFibGUoKSkKICAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKICAgICAsIG1fb3B0aW1pemF0
aW9uRGVsYXlDb3VudGVyKDApCiAgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDAp
Ci0gICAgLCBtX2xpbmVJbmZvKG90aGVyLm1fbGluZUluZm8pCiAgICAgLCBtX3Jlc29sdmVPcGVy
YXRpb25zKG90aGVyLm1fcmVzb2x2ZU9wZXJhdGlvbnMpCiAgICAgLCBtX3B1dFRvQmFzZU9wZXJh
dGlvbnMob3RoZXIubV9wdXRUb0Jhc2VPcGVyYXRpb25zKQogI2lmIEVOQUJMRShCWVRFQ09ERV9D
T01NRU5UUykKQEAgLTE2NDUsMzYgKzE2NDksMzEgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29w
eVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKQogICAgICAgICBjcmVhdGVSYXJlRGF0
YUlmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAogICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyczsKLSAgICAg
ICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9yZWdleHBzOwog
ICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycyA9IG90aGVyLm1fcmFyZURhdGEt
Pm1fY29uc3RhbnRCdWZmZXJzOwogICAgICAgICBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRj
aEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZXM7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcyA9IG90
aGVyLm1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlczsKICAgICAgICAgbV9y
YXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25J
bmZvID0gb3RoZXIubV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mbzsKICAgICB9CiB9CiAKLUNv
ZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29k
ZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0ICpnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJv
b2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorQ29k
ZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxp
bmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIHVuc2lnbmVkIGJhc2VTY29wZURlcHRoLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQYXNzT3duUHRyPENvZGVC
bG9jaz4gYWx0ZXJuYXRpdmUpCiAgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCiAgICAgLCBtX2hlYXAo
Jm1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkKLSAgICAsIG1fbnVtQ2FsbGVlUmVn
aXN0ZXJzKDApCi0gICAgLCBtX251bVZhcnMoMCkKLSAgICAsIG1faXNDb25zdHJ1Y3Rvcihpc0Nv
bnN0cnVjdG9yKQotICAgICwgbV9udW1QYXJhbWV0ZXJzKDApCisgICAgLCBtX251bUNhbGxlZVJl
Z2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCisgICAgLCBt
X251bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtVmFycykKKyAgICAsIG1faXNDb25zdHJ1
Y3Rvcih1bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICwgbV91bmxpbmtl
ZENvZGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5r
ZWRDb2RlQmxvY2spCiAgICAgLCBtX293bmVyRXhlY3V0YWJsZShnbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCi0gICAgLCBtX2dsb2Jh
bERhdGEoMCkKLSAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIoLTEpCi0gICAgLCBtX25lZWRzRnVs
bFNjb3BlQ2hhaW4ob3duZXJFeGVjdXRhYmxlLT5uZWVkc0FjdGl2YXRpb24oKSkKLSAgICAsIG1f
dXNlc0V2YWwob3duZXJFeGVjdXRhYmxlLT51c2VzRXZhbCgpKQotICAgICwgbV9pc051bWVyaWND
b21wYXJlRnVuY3Rpb24oZmFsc2UpCi0gICAgLCBtX2lzU3RyaWN0TW9kZShvd25lckV4ZWN1dGFi
bGUtPmlzU3RyaWN0TW9kZSgpKQotICAgICwgbV9jb2RlVHlwZShjb2RlVHlwZSkKKyAgICAsIG1f
Z2xvYmFsRGF0YSh1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsRGF0YSgpKQorICAgICwgbV90aGlz
UmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpKQorICAgICwgbV9hcmd1
bWVudHNSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkKKyAg
ICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5hY3RpdmF0aW9uUmVn
aXN0ZXIoKSkKKyAgICAsIG1faXNTdHJpY3RNb2RlKHVubGlua2VkQ29kZUJsb2NrLT5pc1N0cmlj
dE1vZGUoKSkKICAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQogICAgICwgbV9zb3VyY2VP
ZmZzZXQoc291cmNlT2Zmc2V0KQogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAsIG1f
ZXhlY3V0aW9uRW50cnlDb3VudCgwKQogI2VuZGlmCi0gICAgLCBtX3N5bWJvbFRhYmxlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIFNoYXJlZFN5bWJvbFRhYmxl
OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpKQogICAgICwgbV9hbHRlcm5hdGl2
ZShhbHRlcm5hdGl2ZSkKICAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKICAgICAsIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKDApCkBAIC0xNjgzLDcgKzE2ODIsMTAgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2Rl
VHlwZSwgSlNHbG8KICAgICAsIG1fYnl0ZWNvZGVDb21tZW50SXRlcmF0b3IoMCkKICNlbmRpZgog
eworICAgIG1fZ2xvYmFsRGF0YS0+c3RhcnRlZENvbXBpbGluZyh0aGlzKTsKKwogICAgIEFTU0VS
VChtX3NvdXJjZSk7CisgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpKTsKIAogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICBqaXRBZnRl
cldhcm1VcCgpOwpAQCAtMTY5MSw5ICsxNjkzLDE5OSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0ds
bwogI2lmIERVTVBfQ09ERV9CTE9DS19TVEFUSVNUSUNTCiAgICAgbGl2ZUNvZGVCbG9ja1NldC5h
ZGQodGhpcyk7CiAjZW5kaWYKLSAgICAvLyBXZSBoYXZlIGEgc3R1YiBwdXRUb0Jhc2Ugb3BlcmF0
aW9uIHRvIGFsbG93IHJlc29sdmVfYmFzZSB0bwotICAgIC8vIHJlbWFpbiBicmFuY2hsZXNzCi0g
ICAgbV9wdXRUb0Jhc2VPcGVyYXRpb25zLmFwcGVuZChQdXRUb0Jhc2VPcGVyYXRpb24oaXNTdHJp
Y3RNb2RlKCkpKTsKKyAgICBzZXRJZGVudGlmaWVycyh1bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcnMoKSk7CisgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXJzKCkpOworCisgICAgbV9mdW5jdGlvbkRlY2xzLmdyb3codW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpKTsKKyAgICBmb3IgKHNpemVfdCBjb3Vu
dCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSwgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxp
bmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpOworICAg
ICAgICB1bnNpZ25lZCBsaW5lQ291bnQgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmVDb3VudCgp
OworICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBvd25lckV4ZWN1dGFibGUtPmxpbmVObygp
ICsgdW5saW5rZWRFeGVjdXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKTsKKyAgICAgICAgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2VPZmZzZXQgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPnN0YXJ0
T2Zmc2V0KCk7CisgICAgICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRXhlY3V0
YWJsZS0+c291cmNlTGVuZ3RoKCk7CisgICAgICAgIFNvdXJjZUNvZGUgY29kZShtX3NvdXJjZSwg
c3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUpOworICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGlu
ZSwgZmlyc3RMaW5lICsgbGluZUNvdW50KTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNl
dCgqbV9nbG9iYWxEYXRhLCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUpOworICAgIH0KKwor
ICAgIG1fZnVuY3Rpb25FeHBycy5ncm93KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0
aW9uRXhwcnMoKSk7CisgICAgZm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5r
ZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKTsKKyAgICAgICAgdW5zaWduZWQgbGluZUNvdW50
ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5lQ291bnQoKTsKKyAgICAgICAgdW5zaWduZWQgZmly
c3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5saW5lTm8oKSArIHVubGlua2VkRXhlY3V0YWJsZS0+
Zmlyc3RMaW5lT2Zmc2V0KCk7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNl
T2Zmc2V0ICsgdW5saW5rZWRFeGVjdXRhYmxlLT5zdGFydE9mZnNldCgpOworICAgICAgICB1bnNp
Z25lZCBzb3VyY2VMZW5ndGggPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnNvdXJjZUxlbmd0aCgpOwor
ICAgICAgICBTb3VyY2VDb2RlIGNvZGUobV9zb3VyY2UsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNl
dCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwg
Y29kZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIGxpbmVDb3Vu
dCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fZ2xvYmFsRGF0YSwgb3duZXJF
eGVjdXRhYmxlLCBleGVjdXRhYmxlKTsKKyAgICB9CisKKyAgICBpZiAodW5saW5rZWRDb2RlQmxv
Y2stPmhhc1JhcmVEYXRhKCkpIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OworICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50
QnVmZmVyQ291bnQoKSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZl
cnMuZ3Jvdyhjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZENvZGVCbG9jazo6Q29uc3Rh
bnRCdWZmZXImIGJ1ZmZlciA9IHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihpKTsK
KyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpXSA9IGJ1ZmZl
cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0g
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgeworICAgICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5ncm93KGNvdW50KTsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAg
ICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIgPSB1bmxpbmtlZENvZGVCbG9j
ay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzW2ldLnN0YXJ0ID0gaGFuZGxlci5zdGFydDsKKyAgICAgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldLmVuZCA9IGhhbmRsZXIuZW5kOwor
ICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0udGFyZ2V0
ID0gaGFuZGxlci50YXJnZXQ7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVyc1tpXS5zY29wZURlcHRoID0gaGFuZGxlci5zY29wZURlcHRoICsgYmFzZVNjb3Bl
RGVwdGg7CisjaWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKExMSU5UKQorICAgICAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0ubmF0aXZlQ29kZSA9IENvZGVMb2Nh
dGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKExMSW50OjpnZXRDb2RlUHRyKGxsaW50X29wX2NhdGNoKSkpOworI2VuZGlmCisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZ3Jvdyhjb3VudCk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9y
IHB0ciA9IHVubGlua2VkQ29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoaSkub2Zmc2V0
VGFibGUuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6
U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHVubGlua2VkQ29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaSkub2Zmc2V0VGFibGUuZW5kKCk7CisgICAgICAgICAgICAgICAg
Zm9yICg7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7CisgICAgICAgICAgICAgICAgICAgIE9mZnNldExv
Y2F0aW9uIG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmJyYW5jaE9mZnNldCA9
IHB0ci0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRUYWJsZS5hZGQocHRyLT5rZXksIG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNp
emVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1
bXBUYWJsZXMoKSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hK
dW1wVGFibGVzLmdyb3coY291bnQpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUm
IHNvdXJjZVRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZShpKTsKKyAgICAgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGRlc3RUYWJsZSA9IG1fcmFy
ZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlc1tpXTsKKyAgICAgICAgICAgICAgICBk
ZXN0VGFibGUuYnJhbmNoT2Zmc2V0cyA9IHNvdXJjZVRhYmxlLmJyYW5jaE9mZnNldHM7CisgICAg
ICAgICAgICAgICAgZGVzdFRhYmxlLm1pbiA9IHNvdXJjZVRhYmxlLm1pbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcy5ncm93KGNvdW50KTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAg
ICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBzb3VyY2VUYWJsZSA9IHVubGlua2VkQ29k
ZUJsb2NrLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoaSk7CisgICAgICAgICAgICAgICAgU2lt
cGxlSnVtcFRhYmxlJiBkZXN0VGFibGUgPSBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1
bXBUYWJsZXNbaV07CisgICAgICAgICAgICAgICAgZGVzdFRhYmxlLmJyYW5jaE9mZnNldHMgPSBz
b3VyY2VUYWJsZS5icmFuY2hPZmZzZXRzOworICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5taW4g
PSBzb3VyY2VUYWJsZS5taW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBBbGxvY2F0ZSBtZXRhZGF0YSBidWZmZXJzIGZvciB0aGUgYnl0ZWNvZGUKKyAgICBpZiAo
c2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZMTGludENhbGxMaW5rSW5m
b3MoKSkKKyAgICAgICAgbV9sbGludENhbGxMaW5rSW5mb3MuZ3JvdyhzaXplKTsKKyAgICBpZiAo
c2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkp
CisgICAgICAgIG1fYXJyYXlQcm9maWxlcy5ncm93KHNpemUpOworICAgIGlmIChzaXplX3Qgc2l6
ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlZhbHVlUHJvZmlsZXMoKSkKKyAgICAgICAg
bV92YWx1ZVByb2ZpbGVzLmdyb3coc2l6ZSk7CisgICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mUmVzb2x2ZU9wZXJhdGlvbnMoKSkKKyAgICAgICAgbV9yZXNv
bHZlT3BlcmF0aW9ucy5ncm93KHNpemUpOworICAgIHNpemVfdCBwdXRUb0Jhc2VDb3VudCA9IHVu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlB1dFRvQmFzZU9wZXJhdGlvbnMoKTsKKyAgICBtX3B1
dFRvQmFzZU9wZXJhdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KHB1dFRvQmFzZUNvdW50KTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHB1dFRvQmFzZUNvdW50OyArK2kpCisgICAgICAgIG1fcHV0
VG9CYXNlT3BlcmF0aW9ucy5hcHBlbmQoUHV0VG9CYXNlT3BlcmF0aW9uKGlzU3RyaWN0TW9kZSgp
KSk7CisKKyAgICBBU1NFUlQobV9wdXRUb0Jhc2VPcGVyYXRpb25zLmNhcGFjaXR5KCkgPT0gcHV0
VG9CYXNlQ291bnQpOworCisgICAgLy8gQ29weSBhbmQgdHJhbnNsYXRlIHRoZSBVbmxpbmtlZElu
c3RydWN0aW9ucworICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50ID0gdW5saW5rZWRDb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBVbmxpbmtlZEluc3RydWN0aW9uKiBwYyA9
IHVubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5kYXRhKCk7CisgICAgVmVjdG9yPElu
c3RydWN0aW9uPiBpbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25Db3VudCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyAp
IHsKKyAgICAgICAgdW5zaWduZWQgb3BMZW5ndGggPSBvcGNvZGVMZW5ndGgocGNbaV0udS5vcGNv
ZGUpOworICAgICAgICBpbnN0cnVjdGlvbnNbaV0gPSBnbG9iYWxEYXRhKCktPmludGVycHJldGVy
LT5nZXRPcGNvZGUocGNbaV0udS5vcGNvZGUpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMTsg
aiA8IG9wTGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIGlmIChzaXplb2YoaW50MzJfdCkgIT0g
c2l6ZW9mKGludHB0cl90KSkKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUu
cG9pbnRlciA9IDA7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUub3BlcmFuZCA9
IHBjW2kgKyBqXS51Lm9wZXJhbmQ7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChwY1tpXS51
Lm9wY29kZSkgeworICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIGNhc2Ugb3Bf
Z2V0X2FyZ3VtZW50X2J5X3ZhbDogeworICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4
ID0gcGNbaSArIG9wTGVuZ3RoIC0gMl0udS5vcGVyYW5kOworICAgICAgICAgICAgbV9hcnJheVBy
b2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmlsZShpKTsKKyAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQ
cm9maWxlSW5kZXhdOworICAgICAgICAgICAgLy8gZmFsbHRocm91Z2gKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2NvbnZlcnRfdGhpczoKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlOgorICAg
ICAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZToKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3dpdGhf
YmFzZToKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3dpdGhfdGhpczoKKyAgICAgICAgY2FzZSBv
cF9nZXRfYnlfaWQ6CisgICAgICAgIGNhc2Ugb3BfY2FsbF9wdXRfcmVzdWx0OiB7CisgICAgICAg
ICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3BjW2kgKyBvcExl
bmd0aCAtIDFdLnUub3BlcmFuZF07CisgICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9ieXRl
Y29kZU9mZnNldCA9PSAtMSk7CisgICAgICAgICAgICBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0
ID0gaTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IHByb2Zp
bGU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9i
eV92YWw6IHsKKyAgICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW2kgKyBvcExl
bmd0aCAtIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVBy
b2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNb
aSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X291dF9vZl9saW5lOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgorICAgICAgICBj
YXNlIG9wX2dldF9ieV9pZF9wcm90bzoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46
CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgorICAgICAgICBjYXNlIG9w
X2dldF9ieV9pZF9nZXR0ZXJfcHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRl
cl9jaGFpbjoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGY6CisgICAgICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9wcm90bzoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlf
aWRfY3VzdG9tX2NoYWluOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZW5lcmljOgorICAg
ICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6CisgICAgICAgIGNhc2Ugb3BfZ2V0X3N0cmlu
Z19sZW5ndGg6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKKyAgICAgICAgICAgIGlu
dCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW2kgKyBvcExlbmd0aCAtIDFdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2Zp
bGUoaSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9h
cnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIC8vIGZhbGx0aHJv
dWdoCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDRdID0gJm1fbGxpbnRDYWxsTGlua0luZm9zW3BjW2kgKyA0XS51Lm9w
ZXJhbmRdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBvcF9pbml0X2dsb2Jh
bF9jb25zdF9ub3A6IHsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlVHlwZSgpID09IEdsb2JhbENv
ZGUpOworICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IGlkZW50aWZpZXIocGNbaSArIDRd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFs
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQoaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIGlm
IChlbnRyeS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
aWYgKGVudHJ5LmNvdWxkQmVXYXRjaGVkKCkpIHsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDBdID0gZ2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2luaXRf
Z2xvYmFsX2NvbnN0X2NoZWNrKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDFd
ID0gJmdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDNdID0gZW50cnkuYWRkcmVzc09mSXNXYXRjaGVkKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgMF0gPSBnbG9iYWxEYXRhKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUo
b3BfaW5pdF9nbG9iYWxfY29uc3QpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAxXSA9
ICZnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgaSArPSBvcExlbmd0aDsKKyAgICB9CisgICAgbV9pbnN0cnVj
dGlvbnMgPSBXVEY6OlJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4oaW5zdHJ1Y3Rpb25zKTsK
KworICAgIGlmIChCeXRlY29kZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCisgICAg
ICAgIGR1bXAobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CisgICAgbV9nbG9iYWxEYXRh
LT5maW5pc2hlZENvbXBpbGluZyh0aGlzKTsKIH0KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkK
QEAgLTE3NDQsMTUgKzE5MzYsNiBAQCB2b2lkIENvZGVCbG9jazo6c2V0TnVtUGFyYW1ldGVycyhp
bnQgbmV3VmFsdWUpCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmFkZFBhcmFtZXRlcigp
Ci17Ci0gICAgbV9udW1QYXJhbWV0ZXJzKys7Ci0KLSNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIp
Ci0gICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuYXBwZW5kKFZhbHVlUHJvZmlsZSgpKTsKLSNl
bmRpZgotfQotCiB2b2lkIENvZGVCbG9jazo6dmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBJbnN0cnVjdGlvbiogdlBDKQogewogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRl
ciA9IG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7CkBAIC0xODM1LDYgKzIwMTgsOCBAQCB2b2lk
IENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgaWYg
KCEhbV9hbHRlcm5hdGl2ZSkKICAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiAKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV91bmxpbmtlZENvZGUpOworCiAgICAg
Ly8gVGhlcmUgYXJlIHRocmVlIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25hbCBmaW5h
bGl6ZXJzOiBsYXp5IGJ5dGVjb2RlIGZyZWVpbmcsCiAgICAgLy8gaW5saW5lIGNhY2hlIGNsZWFy
aW5nLCBhbmQgamV0dGlzb25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRv
IGF0CiAgICAgLy8gbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncyBpcyBwcm9iYWJseSBxdWl0ZSBj
bG9zZSB0byAxLiBTbyB3ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0CkBAIC0xOTQ5LDggKzIxMzQs
OSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQogI2lmIEVOQUJM
RShMTElOVCkKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmlu
dGVycHJldGVyOwogICAgIGlmICghIW51bWJlck9mSW5zdHJ1Y3Rpb25zKCkpIHsKLSAgICAgICAg
Zm9yIChzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpLCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3Ry
dWN0aW9uID0gJmluc3RydWN0aW9ucygpW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV1d
OworICAgICAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9ucyA9IG1fdW5saW5rZWRDb2RlLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpOworICAg
ICAgICBmb3IgKHNpemVfdCBzaXplID0gcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgp
LCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cklu
c3RydWN0aW9uID0gJmluc3RydWN0aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ld
XTsKICAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1ckluc3Ry
dWN0aW9uWzBdLnUub3Bjb2RlKSkgewogICAgICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CiAg
ICAgICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToKQEAgLTIxMzIsMTQgKzIz
MTgsOSBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fZ2xvYmFsT2JqZWN0
KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmbV9vd25lckV4ZWN1dGFibGUpOwotICAgIHZpc2l0b3Iu
YXBwZW5kKCZtX3N5bWJvbFRhYmxlKTsKLSAgICBpZiAobV9yYXJlRGF0YSkgeworICAgIHZpc2l0
b3IuYXBwZW5kKCZtX3VubGlua2VkQ29kZSk7CisgICAgaWYgKG1fcmFyZURhdGEpCiAgICAgICAg
IG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLSAg
ICAgICAgc2l6ZV90IHJlZ0V4cENvdW50ID0gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFJlZ0V4cD4qIHJlZ2V4cHMgPSBtX3JhcmVEYXRhLT5tX3Jl
Z2V4cHMuZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ0V4cENvdW50
OyBpKyspCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChyZWdleHBzICsgaSk7Ci0gICAgfQog
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKG1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCBtX2Nv
bnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1
bmN0aW9uRXhwcnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2Z1bmN0
aW9uRXhwcnNbaV0pOwpAQCAtMjI2Niw2NCArMjQ0NywxNyBAQCBIYW5kbGVySW5mbyogQ29kZUJs
b2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiBp
bnQgQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCiB7CiAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpKTsKLQotICAgIFZlY3RvcjxMaW5lSW5mbz4mIGxpbmVJbmZvID0gbV9saW5lSW5mbzsK
LQotICAgIGludCBsb3cgPSAwOwotICAgIGludCBoaWdoID0gbGluZUluZm8uc2l6ZSgpOwotICAg
IHdoaWxlIChsb3cgPCBoaWdoKSB7Ci0gICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxv
dykgLyAyOwotICAgICAgICBpZiAobGluZUluZm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNldCA8PSBi
eXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGhpZ2ggPSBtaWQ7Ci0gICAgfQotCi0gICAgaWYgKCFsb3cpCi0gICAgICAg
IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS0+c291cmNlKCkuZmlyc3RMaW5lKCk7Ci0gICAgcmV0
dXJuIGxpbmVJbmZvW2xvdyAtIDFdLmxpbmVOdW1iZXI7CisgICAgcmV0dXJuIG1fb3duZXJFeGVj
dXRhYmxlLT5saW5lTm8oKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJh
bmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3Qs
IGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KQogewotICAgIEFTU0VSVChieXRlY29k
ZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICBpZiAoIW1fcmFyZURhdGEp
IHsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBlbmRPZmZzZXQgPSAwOwotICAg
ICAgICBkaXZvdCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RXhw
cmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9yYXJlRGF0YS0+bV9leHByZXNz
aW9uSW5mbzsKLQotICAgIGludCBsb3cgPSAwOwotICAgIGludCBoaWdoID0gZXhwcmVzc2lvbklu
Zm8uc2l6ZSgpOwotICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7Ci0gICAgICAgIGludCBtaWQgPSBs
b3cgKyAoaGlnaCAtIGxvdykgLyAyOwotICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5p
bnN0cnVjdGlvbk9mZnNldCA8PSBieXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgIGxvdyA9IG1p
ZCArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhpZ2ggPSBtaWQ7Ci0gICAgfQotCi0g
ICAgQVNTRVJUKGxvdyk7Ci0gICAgaWYgKCFsb3cpIHsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSAw
OwotICAgICAgICBlbmRPZmZzZXQgPSAwOwotICAgICAgICBkaXZvdCA9IDA7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBzdGFydE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFd
LnN0YXJ0T2Zmc2V0OwotICAgIGVuZE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmVu
ZE9mZnNldDsKLSAgICBkaXZvdCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmRpdm90UG9pbnQg
KyBtX3NvdXJjZU9mZnNldDsKLSAgICByZXR1cm47CisgICAgbV91bmxpbmtlZENvZGUtPmV4cHJl
c3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCk7CisgICAgZGl2b3QgKz0gbV9zb3VyY2VPZmZzZXQ7CiB9CiAKIHZv
aWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiB7Ci0gICAg
bV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwogI2lmIEVOQUJMRShM
TElOVCkKICAgICBtX2xsaW50Q2FsbExpbmtJbmZvcy5zaHJpbmtUb0ZpdCgpOwogI2VuZGlmCkBA
IC0yMzM1LDcgKzI0NjksNiBAQCB2b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9k
ZSBzaHJpbmtNb2RlKQogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBpZiAoc2hyaW5r
TW9kZSA9PSBFYXJseVNocmluaykKICAgICAgICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2hy
aW5rVG9GaXQoKTsKLSAgICBtX3ZhbHVlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKICAgICBtX3Jh
cmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKICAgICBtX3NwZWNpYWxGYXN0Q2FzZVByb2Zp
bGVzLnNocmlua1RvRml0KCk7CiAjZW5kaWYKQEAgLTIzNDcsMTUgKzI0ODAsMTEgQEAgdm9pZCBD
b2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkKICAgICAgICAgbV9j
b25zdGFudFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOwogICAgIH0gLy8gZWxzZSBkb24ndCBzaHJp
bmsgdGhlc2UsIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgcG9pbnRlcnMg
aW50byB0aGVzZSB0YWJsZXMuCiAKLSAgICBtX3Jlc29sdmVPcGVyYXRpb25zLnNocmlua1RvRml0
KCk7Ci0gICAgbV9saW5lSW5mby5zaHJpbmtUb0ZpdCgpOwogICAgIGlmIChtX3JhcmVEYXRhKSB7
CiAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2hyaW5rVG9GaXQoKTsK
LSAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNocmlua1RvRml0KCk7CiAgICAgICAgIG1f
cmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwogICAg
ICAgICBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQo
KTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNocmlua1Rv
Rml0KCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm8uc2hyaW5rVG9GaXQo
KTsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBtX3JhcmVEYXRhLT5tX2NhbGxSZXR1cm5JbmRl
eFZlY3Rvci5zaHJpbmtUb0ZpdCgpOwogI2VuZGlmCkBAIC0yMzgzLDcgKzI1MTIsNyBAQCB2b2lk
IENvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBB
U1NFUlQoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOwogICAgIEFTU0VSVChuZWVkc0Z1bGxT
Y29wZUNoYWluKCkpOwogICAgIEFTU0VSVCghY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRp
b25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9
IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUs
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKSk7Cisg
ICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSwgdGhpcyk7CiAgICAgY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAg
Y2FsbEZyYW1lLT5zZXRTY29wZShhY3RpdmF0aW9uKTsKIH0KQEAgLTI4NzgsOCArMzAwNyw4IEBA
IGJvb2wgQ29kZUJsb2NrOjp1c2VzT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQogCiBTdHJpbmcg
Q29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoaW50IHJlZ2lzdGVyTnVtYmVyKQogewotICAgIFN5
bWJvbFRhYmxlOjppdGVyYXRvciBlbmQgPSBtX3N5bWJvbFRhYmxlLT5lbmQoKTsKLSAgICBmb3Ig
KFN5bWJvbFRhYmxlOjppdGVyYXRvciBwdHIgPSBtX3N5bWJvbFRhYmxlLT5iZWdpbigpOyBwdHIg
IT0gZW5kOyArK3B0cikgeworICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBlbmQgPSBzeW1ib2xU
YWJsZSgpLT5lbmQoKTsKKyAgICBmb3IgKFN5bWJvbFRhYmxlOjppdGVyYXRvciBwdHIgPSBzeW1i
b2xUYWJsZSgpLT5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikgewogICAgICAgICBpZiAocHRy
LT52YWx1ZS5nZXRJbmRleCgpID09IHJlZ2lzdGVyTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhwdHItPmtleSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCmluZGV4IGI4ZjA0NzM4YjM5Yjc4ZWEyMGJmYThiNzQ2ZmY0MzA0Y2QwNTNj
NDMuLjU1OWNmYzVjN2VkYzY0NWI1ZTY1MzM4ZTFhODM0MDY0ZTUyNzY5M2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTEyMSw3ICsxMjEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIENvZGVCbG9jayhDb3B5UGFy
c2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOwogICAgICAgICAKLSAgICAgICAgQ29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xvYmFs
T2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNl
dCwgYm9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUp
OworICAgICAgICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmtlZENvZGVCbG9jayosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgYmFzZVNjb3BlRGVw
dGgsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFBh
c3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSk7CiAKICAgICAgICAgV3JpdGVCYXJyaWVy
PEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICAgICAgSGVhcCogbV9oZWFwOwpA
QCAtMTMxLDcgKzEzMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgaW50
IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KICAgICAg
ICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSk7Ci0gICAgICAgIHZvaWQgYWRk
UGFyYW1ldGVyKCk7CiAgICAgICAgIAogICAgICAgICBpbnQqIGFkZHJlc3NPZk51bVBhcmFtZXRl
cnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQpAQCAtNDQ1LDggKzQ0NCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3RydWN0aW9uKj4ocmV0dXJu
QWRkcmVzcykgLSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCBzZXRJc051bWVyaWNDb21wYXJlRnVuY3Rpb24oYm9vbCBpc051bWVyaWNDb21wYXJlRnVu
Y3Rpb24pIHsgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24gPSBpc051bWVyaWNDb21wYXJlRnVu
Y3Rpb247IH0KLSAgICAgICAgYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oKSB7IHJldHVy
biBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQorICAgICAgICBib29sIGlzTnVtZXJpY0Nv
bXBhcmVGdW5jdGlvbigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pc051bWVyaWNDb21wYXJl
RnVuY3Rpb24oKTsgfQogCiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mSW5zdHJ1Y3Rpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CiAgICAgICAgIFJlZkNvdW50
ZWRBcnJheTxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rp
b25zOyB9CkBAIC01MzUsMTAgKzUzMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IHNldFRoaXNSZWdpc3RlcihpbnQgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhp
c1JlZ2lzdGVyOyB9CiAgICAgICAgIGludCB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBt
X3RoaXNSZWdpc3RlcjsgfQogCi0gICAgICAgIHZvaWQgc2V0TmVlZHNGdWxsU2NvcGVDaGFpbihi
b29sIG5lZWRzRnVsbFNjb3BlQ2hhaW4pIHsgbV9uZWVkc0Z1bGxTY29wZUNoYWluID0gbmVlZHNG
dWxsU2NvcGVDaGFpbjsgfQotICAgICAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSBjb25z
dCB7IHJldHVybiBtX25lZWRzRnVsbFNjb3BlQ2hhaW47IH0KLSAgICAgICAgdm9pZCBzZXRVc2Vz
RXZhbChib29sIHVzZXNFdmFsKSB7IG1fdXNlc0V2YWwgPSB1c2VzRXZhbDsgfQotICAgICAgICBi
b29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQorICAgICAgICBib29s
IG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bmVl
ZHNGdWxsU2NvcGVDaGFpbigpOyB9CisgICAgICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJl
dHVybiBtX3VubGlua2VkQ29kZS0+dXNlc0V2YWwoKTsgfQogICAgICAgICAKICAgICAgICAgdm9p
ZCBzZXRBcmd1bWVudHNSZWdpc3RlcihpbnQgYXJndW1lbnRzUmVnaXN0ZXIpCiAgICAgICAgIHsK
QEAgLTYwMCwzNyArNTk2LDI4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKHVz
ZXNBcmd1bWVudHMoKSAmJiBvcGVyYW5kID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihh
cmd1bWVudHNSZWdpc3RlcigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhbmQgPj0gbV9zeW1ib2xUYWJsZS0+Y2FwdHVyZVN0YXJ0KCkg
Ci0gICAgICAgICAgICAgICAgJiYgb3BlcmFuZCA8IG1fc3ltYm9sVGFibGUtPmNhcHR1cmVFbmQo
KTsKKyAgICAgICAgICAgIC8vIFdlJ3JlIGluIGdsb2JhbCBjb2RlIHNvIHRoZXJlIGFyZSBubyBs
b2NhbHMgdG8gY2FwdHVyZQorICAgICAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQgPj0g
c3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkKKyAgICAgICAgICAgICAgICAmJiBvcGVyYW5k
IDwgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgQ29k
ZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CisgICAgICAgIENv
ZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvZGVUeXBl
KCk7IH0KIAogICAgICAgICBTb3VyY2VQcm92aWRlciogc291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2UuZ2V0KCk7IH0KICAgICAgICAgdW5zaWduZWQgc291cmNlT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VPZmZzZXQ7IH0KIAotICAgICAgICBzaXplX3QgbnVtYmVyT2ZKdW1w
VGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgpOyB9Ci0gICAgICAg
IHZvaWQgYWRkSnVtcFRhcmdldCh1bnNpZ25lZCBqdW1wVGFyZ2V0KSB7IG1fanVtcFRhcmdldHMu
YXBwZW5kKGp1bXBUYXJnZXQpOyB9Ci0gICAgICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzW2luZGV4XTsgfQotICAgICAgICB1bnNp
Z25lZCBsYXN0SnVtcFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMubGFzdCgp
OyB9CisgICAgICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPm51bWJlck9mSnVtcFRhcmdldHMoKTsgfQorICAgICAgICB1bnNpZ25l
ZCBqdW1wVGFyZ2V0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmp1
bXBUYXJnZXQoaW5kZXgpOyB9CiAKICAgICAgICAgdm9pZCBjcmVhdGVBY3RpdmF0aW9uKENhbGxG
cmFtZSopOwogCiAgICAgICAgIHZvaWQgY2xlYXJFdmFsQ2FjaGUoKTsKICAgICAgICAgCiAgICAg
ICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoaW50IHJlZ2lzdGVyTnVtYmVyKTsKLSAgICAgICAg
Ci0gICAgICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbih1bnNpZ25lZCBwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zLmFwcGVuZChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKTsKLSAg
ICAgICAgfQotI2lmIEVOQUJMRShMTElOVCkKLSAgICAgICAgTExJbnRDYWxsTGlua0luZm8qIGFk
ZExMSW50Q2FsbExpbmtJbmZvKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9sbGludENhbGxM
aW5rSW5mb3MuYXBwZW5kKExMSW50Q2FsbExpbmtJbmZvKCkpOwotICAgICAgICAgICAgcmV0dXJu
ICZtX2xsaW50Q2FsbExpbmtJbmZvcy5sYXN0KCk7Ci0gICAgICAgIH0KLSNlbmRpZgorCiAjaWYg
RU5BQkxFKEpJVCkKICAgICAgICAgdm9pZCBzZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcyhz
aXplX3Qgc2l6ZSkgeyBtX3N0cnVjdHVyZVN0dWJJbmZvcy5ncm93KHNpemUpOyB9CiAgICAgICAg
IHNpemVfdCBudW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlU3R1YkluZm9zLnNpemUoKTsgfQpAQCAtNjYyLDE0ICs2NDksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgVmFsdWVQcm9maWxlKiBhZGRWYWx1ZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgIT0gLTEpOwotICAgICAg
ICAgICAgQVNTRVJUKG1fdmFsdWVQcm9maWxlcy5pc0VtcHR5KCkgfHwgbV92YWx1ZVByb2ZpbGVz
Lmxhc3QoKS5tX2J5dGVjb2RlT2Zmc2V0IDwgYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICAgICAg
bV92YWx1ZVByb2ZpbGVzLmFwcGVuZChWYWx1ZVByb2ZpbGUoYnl0ZWNvZGVPZmZzZXQpKTsKLSAg
ICAgICAgICAgIHJldHVybiAmbV92YWx1ZVByb2ZpbGVzLmxhc3QoKTsKLSAgICAgICAgfQorCiAg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFsdWVQ
cm9maWxlcy5zaXplKCk7IH0KICAgICAgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUoaW50
IGluZGV4KQogICAgICAgICB7CkBAIC03OTUsMjUgKzc3NSwyNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgLy8gRXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKIAogICAgICAgICBzaXplX3Qg
bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0KLSAgICAgICAgdm9p
ZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IEhhbmRsZXJJbmZvJiBoYW5sZXIpIHsgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVycy5hcHBlbmQoaGFubGVyKTsgfQotICAgICAgICBIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFu
ZGxlcihpbnQgaW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KLQotICAgICAgICB2b2lkIGFkZEV4cHJlc3Np
b25JbmZvKGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mIGV4cHJlc3Npb25JbmZvKQorICAgICAg
ICB2b2lkIGFsbG9jYXRlSGFuZGxlcnMoY29uc3QgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+
JiB1bmxpbmtlZEhhbmRsZXJzKQogICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgY291bnQg
PSB1bmxpbmtlZEhhbmRsZXJzLnNpemUoKTsKKyAgICAgICAgICAgIGlmICghY291bnQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpOwotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mby5hcHBlbmQoZXhw
cmVzc2lvbkluZm8pOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGRMaW5lSW5mbyh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgaW50IGxpbmVObykKLSAgICAgICAgewotICAgICAgICAgICAg
VmVjdG9yPExpbmVJbmZvPiYgbGluZUluZm8gPSBtX2xpbmVJbmZvOwotICAgICAgICAgICAgaWYg
KCFsaW5lSW5mby5zaXplKCkgfHwgbGluZUluZm8ubGFzdCgpLmxpbmVOdW1iZXIgIT0gbGluZU5v
KSB7Ci0gICAgICAgICAgICAgICAgTGluZUluZm8gaW5mbyA9IHsgYnl0ZWNvZGVPZmZzZXQsIGxp
bmVObyB9OwotICAgICAgICAgICAgICAgIGxpbmVJbmZvLmFwcGVuZChpbmZvKTsKKyAgICAgICAg
ICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMucmVzaXplKGNvdW50KTsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAg
ICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0uc3RhcnQgPSB1bmxpbmtlZEhh
bmRsZXJzW2ldLnN0YXJ0OworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9u
SGFuZGxlcnNbaV0uZW5kID0gdW5saW5rZWRIYW5kbGVyc1tpXS5lbmQ7CisgICAgICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXS50YXJnZXQgPSB1bmxpbmtlZEhh
bmRsZXJzW2ldLnRhcmdldDsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzW2ldLnNjb3BlRGVwdGggPSB1bmxpbmtlZEhhbmRsZXJzW2ldLnNjb3BlRGVwdGg7
CiAgICAgICAgICAgICB9CisKICAgICAgICAgfQorICAgICAgICBIYW5kbGVySW5mbyYgZXhjZXB0
aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJl
RGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KIAotICAgICAgICBib29sIGhhc0V4
cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9yYXJlRGF0YSAmJiBtX3JhcmVEYXRhLT5tX2V4cHJl
c3Npb25JbmZvLnNpemUoKTsgfQorICAgICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0V4cHJlc3Npb25JbmZvKCk7IH0KIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgICAgIFZlY3RvcjxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldD4m
IGNhbGxSZXR1cm5JbmRleFZlY3RvcigpCkBAIC04ODgsNiArODY3LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQobV9nbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHYpOwogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQorCisKICAgICAgICAgdW5zaWduZWQgYWRk
T3JGaW5kQ29uc3RhbnQoSlNWYWx1ZSk7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
Y29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KICAgICAgICAgQUxXQVlTX0lO
TElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1
cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KQEAgLTkxMSwyMCArODky
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5k
ZXhdLmdldCgpOyB9CiAKLSAgICAgICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikKLSAg
ICAgICAgewotICAgICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAg
ICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7Ci0gICAg
ICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKFdyaXRlQmFycmllcjxSZWdFeHA+
KCptX2dsb2JhbERhdGEsIG93bmVyRXhlY3V0YWJsZSgpLCByKSk7Ci0gICAgICAgICAgICByZXR1
cm4gc2l6ZTsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ0V4cHMoKSBj
b25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBz
LnNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNv
bnN0IHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzW2lu
ZGV4XS5nZXQoKTsgfQorICAgICAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5yZWdleHAoaW5kZXgpOyB9CiAKICAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSBjb25zdAogICAgICAgICB7CkBAIC05MzksMTAg
KzkwNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25z
dGFudEJ1ZmZlcnMuYXBwZW5kKGJ1ZmZlcik7CiAgICAgICAgICAgICByZXR1cm4gc2l6ZTsKICAg
ICAgICAgfQotICAgICAgICB1bnNpZ25lZCBhZGRDb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBsZW5n
dGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZGRDb25zdGFudEJ1ZmZlcihWZWN0
b3I8SlNWYWx1ZT4obGVuZ3RoKSk7Ci0gICAgICAgIH0KIAogICAgICAgICBWZWN0b3I8SlNWYWx1
ZT4mIGNvbnN0YW50QnVmZmVyQXNWZWN0b3IodW5zaWduZWQgaW5kZXgpCiAgICAgICAgIHsKQEAg
LTk3OSw3ICs5NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RyaW5nSnVtcFRhYmxl
JiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURh
dGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOyB9CiAKIAotICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSB7IHJl
dHVybiBtX3N5bWJvbFRhYmxlLmdldCgpOyB9CisgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5zeW1ib2xUYWJsZSgp
OyB9CiAKICAgICAgICAgRXZhbENvZGVDYWNoZSYgZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFy
ZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9
CiAKQEAgLTEyMjMsNiArMTE4Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKIAorICAgICAgICBVbmxpbmtlZENvZGVC
bG9jayogdW5saW5rZWRDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS5n
ZXQoKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIERGR0NvZGVCbG9j
a3M7CiAgICAgICAgIApAQCAtMTIzNCw3ICsxMjAwLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogI2lm
IEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9u
c0FuZENvdW50TGl2ZW5lc3MoT3BlcmF0aW9uSW5Qcm9ncmVzcywgdW5zaWduZWQmIG51bWJlck9m
TGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0lu
UHJvZmlsZXMpOwogI2VuZGlmCi0gICAgICAgIAorCisgICAgICAgIHZvaWQgc2V0SWRlbnRpZmll
cnMoY29uc3QgVmVjdG9yPElkZW50aWZpZXI+JiBpZGVudGlmaWVycykKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKG1faWRlbnRpZmllcnMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIG1f
aWRlbnRpZmllcnMuYXBwZW5kVmVjdG9yKGlkZW50aWZpZXJzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPiA+JiBjb25zdGFudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBjb3Vu
dCA9IGNvbnN0YW50cy5zaXplKCk7CisgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnJl
c2l6ZShjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fZ2xvYmFs
RGF0YSwgb3duZXJFeGVjdXRhYmxlKCksIGNvbnN0YW50c1tpXS5nZXQoKSk7CisgICAgICAgIH0K
KwogICAgICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9yPEluc3RydWN0aW9u
Pjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVy
YXRvciYpOwogCiAgICAgICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKEV4ZWNTdGF0ZSosIGludCBy
KSBjb25zdDsKQEAgLTEyODQsMjkgKzEyNjQsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgdm9pZCByZXNldFN0dWJJbnRlcm5hbChSZXBhdGNoQnVmZmVyJiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKICNlbmRpZgotICAgICAgICAKKyAgICAgICAgV3JpdGVCYXJy
aWVyPFVubGlua2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICAgICAgaW50IG1fbnVt
UGFyYW1ldGVyczsKLQogICAgICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gbV9v
d25lckV4ZWN1dGFibGU7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogCiAg
ICAgICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7Ci0KICAg
ICAgICAgaW50IG1fdGhpc1JlZ2lzdGVyOwogICAgICAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3Rl
cjsKICAgICAgICAgaW50IG1fYWN0aXZhdGlvblJlZ2lzdGVyOwogCi0gICAgICAgIGJvb2wgbV9u
ZWVkc0Z1bGxTY29wZUNoYWluOwotICAgICAgICBib29sIG1fdXNlc0V2YWw7Ci0gICAgICAgIGJv
b2wgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb247CiAgICAgICAgIGJvb2wgbV9pc1N0cmljdE1v
ZGU7CiAKLSAgICAgICAgQ29kZVR5cGUgbV9jb2RlVHlwZTsKLQogICAgICAgICBSZWZQdHI8U291
cmNlUHJvdmlkZXI+IG1fc291cmNlOwogICAgICAgICB1bnNpZ25lZCBtX3NvdXJjZU9mZnNldDsK
IAotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7
CiAjaWYgRU5BQkxFKExMSU5UKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TExJbnRDYWxsTGlu
a0luZm8sIDg+IG1fbGxpbnRDYWxsTGlua0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8TExJbnRDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJ
bmZvPiA+IG1faW5jb21pbmdMTEludENhbGxzOwpAQCAtMTM3OCwxOCArMTM1MCwxNSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9leGVjdXRpb25FbnRyeUNvdW50OwogI2Vu
ZGlmCiAKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2p1bXBUYXJnZXRzOwotICAgICAgICBW
ZWN0b3I8dW5zaWduZWQ+IG1fbG9vcFRhcmdldHM7Ci0KICAgICAgICAgLy8gQ29uc3RhbnQgUG9v
bAogICAgICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSwgUmVnaXN0ZXJfbXVzdF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyX1Vua25vd24p
OworICAgICAgICAvLyBUT0RPOiBUaGlzIGNvdWxkIGp1c3QgYmUgYSBwb2ludGVyIHRvIG1fdW5s
aW5rZWRDb2RlQmxvY2sncyBkYXRhLCBidXQgdGhlIERGRyBtdXRhdGVzCisgICAgICAgIC8vIGl0
LCBzbyB3ZSdyZSBzdHVjayB3aXRoIGl0IGZvciBub3cuCiAgICAgICAgIFZlY3RvcjxXcml0ZUJh
cnJpZXI8VW5rbm93bj4gPiBtX2NvbnN0YW50UmVnaXN0ZXJzOwogICAgICAgICBWZWN0b3I8V3Jp
dGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gPiBtX2Z1bmN0aW9uRGVjbHM7CiAgICAgICAg
IFZlY3RvcjxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPiA+IG1fZnVuY3Rpb25FeHBy
czsKIAotICAgICAgICBXcml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFi
bGU7Ci0KICAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAgICAg
CiAgICAgICAgIEV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwpAQCAtMTQw
MCwxMSArMTM2OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1aW50MTZfdCBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcjsKICAgICAgICAgdWludDE2X3QgbV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlcjsKIAotICAgICAgICBWZWN0b3I8TGluZUluZm8+IG1fbGluZUluZm87Ci0jaWYg
RU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQotICAgICAgICBWZWN0b3I8Q29tbWVudD4gIG1fYnl0
ZWNvZGVDb21tZW50czsKLSAgICAgICAgc2l6ZV90IG1fYnl0ZWNvZGVDb21tZW50SXRlcmF0b3I7
Ci0jZW5kaWYKICAgICAgICAgVmVjdG9yPFJlc29sdmVPcGVyYXRpb25zPiBtX3Jlc29sdmVPcGVy
YXRpb25zOwogICAgICAgICBWZWN0b3I8UHV0VG9CYXNlT3BlcmF0aW9uLCAxPiBtX3B1dFRvQmFz
ZU9wZXJhdGlvbnM7CiAKQEAgLTE0MTMsOSArMTM3Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBwdWJsaWM6CiAgICAgICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+IG1fZXhjZXB0aW9u
SGFuZGxlcnM7CiAKLSAgICAgICAgICAgIC8vIFJhcmUgQ29uc3RhbnRzCi0gICAgICAgICAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPFJlZ0V4cD4gPiBtX3JlZ2V4cHM7Ci0KICAgICAgICAgICAgIC8v
IEJ1ZmZlcnMgdXNlZCBmb3IgbGFyZ2UgYXJyYXkgbGl0ZXJhbHMKICAgICAgICAgICAgIFZlY3Rv
cjxWZWN0b3I8SlNWYWx1ZT4gPiBtX2NvbnN0YW50QnVmZmVyczsKICAgICAgICAgICAgIApAQCAt
MTQyNiw5ICsxMzg3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgICAgIEV2YWxDb2Rl
Q2FjaGUgbV9ldmFsQ29kZUNhY2hlOwogCi0gICAgICAgICAgICAvLyBFeHByZXNzaW9uIGluZm8g
LSBwcmVzZW50IGlmIGRlYnVnZ2luZy4KLSAgICAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uUmFu
Z2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOwotICAgICAgICAgICAgLy8gTGluZSBpbmZvIC0gcHJl
c2VudCBpZiBwcm9maWxpbmcgb3IgZGVidWdnaW5nLgogI2lmIEVOQUJMRShKSVQpCiAgICAgICAg
ICAgICBWZWN0b3I8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQ+IG1fY2FsbFJldHVy
bkluZGV4VmVjdG9yOwogI2VuZGlmCkBAIC0xNDU2LDggKzE0MTQsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBHbG9iYWxDb2RlQmxv
Y2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2RlQmxv
Y2s+IGFsdGVybmF0aXZlKQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxl
LCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBm
YWxzZSwgYWx0ZXJuYXRpdmUpCisgICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
aywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgYmFzZVNjb3BlRGVwdGgs
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3Vy
Y2VPZmZzZXQsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAg
IDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9i
amVjdCwgYmFzZVNjb3BlRGVwdGgsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGFsdGVy
bmF0aXZlKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMTQ2OSwxMSArMTQyNywx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgUHJv
Z3JhbUNvZGVCbG9jayhQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlw
ZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3Vy
Y2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5h
dGl2ZSkKLSAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29k
ZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQorICAg
ICAgICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3Zp
ZGVyLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IEds
b2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIDAsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAg
ICAgICB9Ci0gICAgICAgIAorCiAjaWYgRU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29w
ZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwpAQCAtMTQ4OCwyNiArMTQ0NiwxNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV2YWxDb2RlQmxvY2soQ29weVBhcnNl
ZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKICAgICAgICAgICAgIDogR2xvYmFsQ29k
ZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgICAgICAgICAsIG1fYmFzZVNjb3Bl
RGVwdGgob3RoZXIubV9iYXNlU2NvcGVEZXB0aCkKLSAgICAgICAgICAgICwgbV92YXJpYWJsZXMo
b3RoZXIubV92YXJpYWJsZXMpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgRXZhbENvZGVCbG9jayhFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgaW50IGJhc2VTY29wZURlcHRoLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJu
YXRpdmUpCi0gICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2
YWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKLSAg
ICAgICAgICAgICwgbV9iYXNlU2NvcGVEZXB0aChiYXNlU2NvcGVEZXB0aCkKKyAgICAgICAgRXZh
bENvZGVCbG9jayhFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxD
b2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgaW50IGJhc2VTY29w
ZURlcHRoLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6
IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9i
YWxPYmplY3QsIGJhc2VTY29wZURlcHRoLCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUp
CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIGludCBiYXNlU2NvcGVEZXB0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFzZVNjb3BlRGVwdGg7IH0KLQotICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXhd
OyB9Ci0gICAgICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdmFyaWFibGVz
LnNpemUoKTsgfQotICAgICAgICB2b2lkIGFkb3B0VmFyaWFibGVzKFZlY3RvcjxJZGVudGlmaWVy
PiYgdmFyaWFibGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV92YXJpYWJsZXMu
aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFibGVzKTsKLSAg
ICAgICAgfQorICAgICAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPnZhcmlhYmxlKGluZGV4KTsgfQor
ICAgICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiB1bmxpbmtlZEV2YWxDb2Rl
QmxvY2soKS0+bnVtVmFyaWFibGVzKCk7IH0KICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBwcm90ZWN0ZWQ6CkBAIC0xNTE5LDggKzE0NjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRp
ZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IG1fYmFzZVNjb3BlRGVwdGg7Ci0gICAgICAg
IFZlY3RvcjxJZGVudGlmaWVyPiBtX3ZhcmlhYmxlczsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrKiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8VW5s
aW5rZWRFdmFsQ29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0KICAgICB9OwogCiAg
ICAgY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKQEAgLTE1MzAs
OCArMTQ3Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZl
ID0gbnVsbHB0cikKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29k
ZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgaXNDb25z
dHJ1Y3RvciwgYWx0ZXJuYXRpdmUpCisgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9u
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1
bmxpbmtlZENvZGVCbG9jaywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
UGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlID0gbnVsbHB0cikKKyAgICAgICAgICAg
IDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9i
amVjdCwgMCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgYWx0ZXJuYXRpdmUpCiAgICAg
ICAgIHsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGNvZGUuaAppbmRleCAzY2U1NmM4MGVlZWIwYmIxNjM4NjUzYmUyOTQ1OWNjNDJjMjQ2M2FiLi4w
OTI5MDNjZjVhNWMxMmU0Yzg2NTk4NGY3NjZmODBmNTRhZTZiNWMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCkBAIC0xMTgsNyArMTE4LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIG1hY3JvKG9wX3B1dF90b19iYXNlLCA1KSBcCiAgICAgICAgIG1hY3JvKG9w
X3B1dF90b19iYXNlX3ZhcmlhYmxlLCA1KSBcCiAgICAgICAgIFwKLSAgICAgICAgbWFjcm8ob3Bf
aW5pdF9nbG9iYWxfY29uc3QsIDMpIFwKKyAgICAgICAgbWFjcm8ob3BfaW5pdF9nbG9iYWxfY29u
c3Rfbm9wLCA1KSBcCisgICAgICAgIG1hY3JvKG9wX2luaXRfZ2xvYmFsX2NvbnN0LCA1KSBcCiAg
ICAgICAgIG1hY3JvKG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrLCA1KSBcCiAgICAgICAgIG1h
Y3JvKG9wX2dldF9ieV9pZCwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAgICAg
IG1hY3JvKG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZSwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGlu
ZyAqLyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTdiNmU2MmU1N2I0OWUzMjdlMmZjMGQ2MGY1MjI5
NmI3NDc5NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCisKKyNpbmNsdWRlICJCeXRlY29kZUdlbmVy
YXRvci5oIgorI2luY2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgor
I2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUg
IlNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3lt
Ym9sVGFibGUuaCIKKworCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUpIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRDb2RlQmxvY2s6OnNfaW5mbyA9IHsg
IlVubGlua2VkQ29kZUJsb2NrIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtl
ZENvZGVCbG9jaykgfTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jazo6
c19pbmZvID0geyAiVW5saW5rZWRHbG9iYWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKSB9OworY29uc3Qg
Q2xhc3NJbmZvIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2spIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRF
dmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEV2YWxDb2RlQmxvY2siLCAmQmFzZTo6
c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRXZhbENvZGVCbG9jaykg
fTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpzX2luZm8gPSB7
ICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKSB9OworCit1bnNpZ25lZCBV
bmxpbmtlZENvZGVCbG9jazo6YWRkT3JGaW5kQ29uc3RhbnQoSlNWYWx1ZSB2KQoreworICAgIHVu
c2lnbmVkIG51bWJlck9mQ29uc3RhbnRzID0gbnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbnN0YW50czsgKytpKSB7Cisg
ICAgICAgIGlmIChnZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGkpID09
IHYpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIGFkZENvbnN0YW50
KHYpOworfQorCitVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQorICAgIDog
QmFzZSgqZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgICwgbV9udW1DYXB0dXJlZFZhcmlhYmxl
cyhub2RlLT5jYXB0dXJlZFZhcmlhYmxlQ291bnQoKSkKKyAgICAsIG1fZm9yY2VVc2VzQXJndW1l
bnRzKG5vZGUtPnVzZXNBcmd1bWVudHMoKSkKKyAgICAsIG1faXNJblN0cmljdENvbnRleHQobm9k
ZS0+aXNTdHJpY3RNb2RlKCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKG5vZGUtPmhh
c0NhcHR1cmVkVmFyaWFibGVzKCkpCisgICAgLCBtX25hbWUobm9kZS0+aWRlbnQoKSkKKyAgICAs
IG1faW5mZXJyZWROYW1lKG5vZGUtPmluZmVycmVkTmFtZSgpKQorICAgICwgbV9wYXJhbWV0ZXJz
KG5vZGUtPnBhcmFtZXRlcnMoKSkKKyAgICAsIG1fZmlyc3RMaW5lT2Zmc2V0KG5vZGUtPmZpcnN0
TGluZSgpIC0gc291cmNlLmZpcnN0TGluZSgpKQorICAgICwgbV9saW5lQ291bnQobm9kZS0+bGFz
dExpbmUoKSAtIG5vZGUtPmZpcnN0TGluZSgpKQorICAgICwgbV9zdGFydE9mZnNldChub2RlLT5z
b3VyY2UoKS5zdGFydE9mZnNldCgpIC0gc291cmNlLnN0YXJ0T2Zmc2V0KCkpCisgICAgLCBtX3Nv
dXJjZUxlbmd0aChub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSkKKyAgICAsIG1fZmVhdHVyZXMobm9k
ZS0+ZmVhdHVyZXMoKSkKKyAgICAsIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlKG5vZGUt
PmZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSgpKQoreworfQorCit2b2lkIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIENPTVBJTEVfQVNT
RVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX25hbWVWYWx1ZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fc3ltYm9sVGFibGVGb3JDYWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9zeW1ib2xUYWJsZUZvckNvbnN0cnVjdCk7Cit9CisKK0Z1bmN0aW9uRXhlY3V0YWJsZSog
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmsoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIHNpemVfdCBsaW5lT2Zmc2V0LCBzaXplX3Qgc291
cmNlT2Zmc2V0KQoreworICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IGxpbmVPZmZzZXQgKyBtX2Zp
cnN0TGluZU9mZnNldDsKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJjZU9mZnNldCAr
IG1fc3RhcnRPZmZzZXQ7CisgICAgU291cmNlQ29kZSBjb2RlKHNvdXJjZS5wcm92aWRlcigpLCBz
dGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBtX3NvdXJjZUxlbmd0aCwgZmlyc3RMaW5lKTsKKyAg
ICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgY29kZSwgdGhp
cywgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBtX2xpbmVDb3VudCk7Cit9CisKK1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENv
ZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhlY1N0YXRlKiBleGVjLCBEZWJ1Z2dlciosIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCit7CisgICAgUGFy
c2VyRXJyb3IgZXJyb3I7CisgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUgPSBleGVjLT5nbG9iYWxE
YXRhKCkuY29kZUNhY2hlKCk7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBjb2RlQ2FjaGUtPmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSwgc291cmNlLCBlcnJvcik7CisgICAgaWYgKGVycm9yLm1f
dHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKSB7CisgICAgICAgICpleGNlcHRpb24gPSBl
cnJvci50b0Vycm9yT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNlKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7
Cit9CisKK1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb2RlQmxvY2tGb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJz
ZXJFcnJvciYgZXJyb3IpCit7CisgICAgc3dpdGNoIChzcGVjaWFsaXphdGlvbktpbmQpIHsKKyAg
ICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsKQorICAg
ICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpCisgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIHJlc3VsdCA9IGdsb2JhbERhdGEuY29kZUNhY2hlKCktPmdldEZ1bmN0aW9uQ29kZUJsb2Nr
KGdsb2JhbERhdGEsIHRoaXMsIHNvdXJjZSwgc3BlY2lhbGl6YXRpb25LaW5kLCBkZWJ1Z2dlck1v
ZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworICAgIAorICAgIGlmIChlcnJvci5tX3R5cGUgIT0g
UGFyc2VyRXJyb3I6OkVycm9yTm9uZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBz
d2l0Y2ggKHNwZWNpYWxpemF0aW9uS2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAg
ICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0KTsKKyAg
ICAgICAgbV9zeW1ib2xUYWJsZUZvckNhbGwuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlc3VsdC0+
c3ltYm9sVGFibGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVj
dDoKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Quc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHJlc3VsdCk7CisgICAgICAgIG1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3Quc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHJlc3VsdC0+c3ltYm9sVGFibGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJpbmcgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OnBhcmFtU3RyaW5nKCkgY29uc3QKK3sKKyAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMgPSAqbV9wYXJhbWV0ZXJzOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBm
b3IgKHNpemVfdCBwb3MgPSAwOyBwb3MgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytwb3MpIHsKKyAg
ICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQocGFyYW1ldGVyc1twb3NdLnN0
cmluZygpKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworVW5s
aW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYgaW5mbykKKyAgICA6IEJhc2UoKmdsb2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICAs
IG1fbnVtVmFycygwKQorICAgICwgbV9udW1DYWxsZWVSZWdpc3RlcnMoMCkKKyAgICAsIG1fbnVt
UGFyYW1ldGVycygwKQorICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX2Fy
Z3VtZW50c1JlZ2lzdGVyKC0xKQorICAgICwgbV9uZWVkc0Z1bGxTY29wZUNoYWluKGluZm8ubV9u
ZWVkc0FjdGl2YXRpb24pCisgICAgLCBtX3VzZXNFdmFsKGluZm8ubV91c2VzRXZhbCkKKyAgICAs
IG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKGZhbHNlKQorICAgICwgbV9pc1N0cmljdE1vZGUo
aW5mby5tX2lzU3RyaWN0TW9kZSkKKyAgICAsIG1faXNDb25zdHJ1Y3RvcihpbmZvLm1faXNDb25z
dHJ1Y3RvcikKKyAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCisgICAgLCBtX2Zp
cnN0TGluZSgwKQorICAgICwgbV9saW5lQ291bnQoMCkKKyAgICAsIG1fZmVhdHVyZXMoMCkKKyAg
ICAsIG1fY29kZVR5cGUoY29kZVR5cGUpCisgICAgLCBtX3Jlc29sdmVPcGVyYXRpb25Db3VudCgw
KQorICAgICwgbV9wdXRUb0Jhc2VPcGVyYXRpb25Db3VudCgxKQorICAgICwgbV9hcnJheVByb2Zp
bGVDb3VudCgwKQorICAgICwgbV92YWx1ZVByb2ZpbGVDb3VudCgwKQorICAgICwgbV9sbGludENh
bGxMaW5rSW5mb0NvdW50KDApCisjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQorICAgICwg
bV9ieXRlY29kZUNvbW1lbnRJdGVyYXRvcigwKQorI2VuZGlmCit7CisKK30KKwordm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVu
bGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAm
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0
dGluZ0ZsYWcpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3lt
Ym9sVGFibGUpOworICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBw
dHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVj
dC0+bV9mdW5jdGlvbkRlY2xzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKKyAgICAgICAgdmlz
aXRvci5hcHBlbmQocHRyKTsKKyAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRl
cmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmJlZ2luKCksIGVuZCA9IHRo
aXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09i
amVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIHRoaXNPYmplY3QtPm1fY29uc3RhbnRS
ZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5kID0gdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+bV9y
ZWdleHBzLnNpemUoKTsgaSAhPSBlbmQ7IGkrKykKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaV0pOworICAgIH0KK30KKworaW50
IFVubGlua2VkQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKTsKKyAgICBWZWN0b3I8TGluZUluZm8+JiBsaW5lSW5mbyA9IG1fbGluZUlu
Zm87CisgICAgCisgICAgaW50IGxvdyA9IDA7CisgICAgaW50IGhpZ2ggPSBsaW5lSW5mby5zaXpl
KCk7CisgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHsKKyAgICAgICAgaW50IG1pZCA9IGxvdyArICho
aWdoIC0gbG93KSAvIDI7CisgICAgICAgIGlmIChsaW5lSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zm
c2V0IDw9IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaGlnaCA9IG1pZDsKKyAgICB9CisgICAgCisgICAgaWYgKCFs
b3cpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBsaW5lSW5mb1tsb3cgLSAxXS5saW5l
TnVtYmVyOworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwgaW50JiBz
dGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0
IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKworICAgIGlmICghbV9leHByZXNzaW9uSW5mby5z
aXplKCkpIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSAwOworICAgICAgICBlbmRPZmZzZXQgPSAw
OworICAgICAgICBkaXZvdCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0
b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHByZXNzaW9uSW5m
bzsKKworICAgIGludCBsb3cgPSAwOworICAgIGludCBoaWdoID0gZXhwcmVzc2lvbkluZm8uc2l6
ZSgpOworICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7CisgICAgICAgIGludCBtaWQgPSBsb3cgKyAo
aGlnaCAtIGxvdykgLyAyOworICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5pbnN0cnVj
dGlvbk9mZnNldCA8PSBieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhpZ2ggPSBtaWQ7CisgICAgfQorCisgICAgQVNT
RVJUKGxvdyk7CisgICAgaWYgKCFsb3cpIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSAwOworICAg
ICAgICBlbmRPZmZzZXQgPSAwOworICAgICAgICBkaXZvdCA9IDA7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBzdGFydE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLnN0YXJ0
T2Zmc2V0OworICAgIGVuZE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmVuZE9mZnNl
dDsKKyAgICBkaXZvdCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmRpdm90UG9pbnQ7Cit9CisK
K3ZvaWQgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAg
Q09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQodGhp
c09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigp
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbGFyYXRpb25z
LnNpemUoKTsgaSAhPSBlbmQ7IGkrKykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uc2Vjb25kKTsKK30KKworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjEzMzA2NTNkOWFiMzc1ZDg5Y2M0ZjczYjk1YzE0MGQxYTI3MWM5NjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaApAQCAtMCwwICsxLDY5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgVW5saW5rZWRDb2RlQmxvY2tfaAorI2RlZmluZSBVbmxpbmtl
ZENvZGVCbG9ja19oCisKKyNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVk
ZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1ZGUgIkNvZGVUeXBlLmgiCisjaW5j
bHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgorI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJMaW5lSW5mby5oIgorI2luY2x1ZGUgIk5vZGVz
LmgiCisjaW5jbHVkZSAiUmVnRXhwLmgiCisjaW5jbHVkZSAiU3BlY2lhbFBvaW50ZXIuaCIKKwor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBEZWJ1Z2dlcjsKK2NsYXNzIEZ1bmN0aW9uQm9k
eU5vZGU7CitjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBGdW5jdGlvblBhcmFtZXRl
cnM7CitzdHJ1Y3QgUGFyc2VyRXJyb3I7CitjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworY2xhc3Mg
U291cmNlQ29kZTsKK2NsYXNzIFNvdXJjZVByb3ZpZGVyOworY2xhc3MgU2hhcmVkU3ltYm9sVGFi
bGU7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s7CisKK3R5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRWYWx1ZVByb2ZpbGU7Cit0eXBlZGVm
IHVuc2lnbmVkIFVubGlua2VkQXJyYXlQcm9maWxlOwordHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtl
ZExMSW50Q2FsbExpbmtJbmZvOworCitzdHJ1Y3QgRXhlY3V0YWJsZUluZm8geworICAgIEV4ZWN1
dGFibGVJbmZvKGJvb2wgbmVlZHNBY3RpdmF0aW9uLCBib29sIHVzZXNFdmFsLCBib29sIGlzU3Ry
aWN0TW9kZSwgYm9vbCBpc0NvbnN0cnVjdG9yKQorICAgICAgICA6IG1fbmVlZHNBY3RpdmF0aW9u
KG5lZWRzQWN0aXZhdGlvbikKKyAgICAgICAgLCBtX3VzZXNFdmFsKHVzZXNFdmFsKQorICAgICAg
ICAsIG1faXNTdHJpY3RNb2RlKGlzU3RyaWN0TW9kZSkKKyAgICAgICAgLCBtX2lzQ29uc3RydWN0
b3IoaXNDb25zdHJ1Y3RvcikKKyAgICB7CisgICAgfQorICAgIGJvb2wgbV9uZWVkc0FjdGl2YXRp
b247CisgICAgYm9vbCBtX3VzZXNFdmFsOworICAgIGJvb2wgbV9pc1N0cmljdE1vZGU7CisgICAg
Ym9vbCBtX2lzQ29uc3RydWN0b3I7Cit9OworCitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2Fj
aGU7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLT5oZWFwKSkgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgbm9kZSk7CisgICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKKyAgICB9CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3QgSWRlbnRpZmllciYgaW5mZXJyZWROYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0KKyAgICBKU1N0cmluZyogbmFtZVZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lVmFsdWUuZ2V0KCk7IH0KKyAgICBTaGFyZWRTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIChraW5kID09IENvZGVGb3JDYWxsKSA/IG1fc3ltYm9sVGFibGVGb3JDYWxsLmdl
dCgpIDogbV9zeW1ib2xUYWJsZUZvckNvbnN0cnVjdC5nZXQoKTsKKyAgICB9CisgICAgc2l6ZV90
IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0K
KyAgICBib29sIGlzSW5TdHJpY3RDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0
Q29udGV4dDsgfQorICAgIEZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSBmdW5jdGlvbk5hbWVJ
c0luU2NvcGVUb2dnbGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRv
Z2dsZTsgfQorCisgICAgdW5zaWduZWQgZmlyc3RMaW5lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9maXJzdExpbmVPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVDb3VudDsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCgpIHsgcmV0
dXJuIG1fc291cmNlTGVuZ3RoOyB9CisKKyAgICBTdHJpbmcgcGFyYW1TdHJpbmcoKSBjb25zdDsK
KworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9ja0ZvcihKU0dsb2JhbERh
dGEmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgRGVidWdnZXJN
b2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CisKKyAgICBzdGF0aWMgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIGZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeGVj
U3RhdGUqLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCoqIGV4Y2VwdGlv
bik7CisKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGxpbmsoSlNHbG9iYWxEYXRhJiwgY29uc3Qg
U291cmNlQ29kZSYsIHNpemVfdCBsaW5lT2Zmc2V0LCBzaXplX3Qgc291cmNlT2Zmc2V0KTsKKwor
ICAgIHZvaWQgY2xlYXJDb2RlKCkKKyAgICB7CisgICAgICAgIG1fc3ltYm9sVGFibGVGb3JDYWxs
LmNsZWFyKCk7CisgICAgICAgIG1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3QuY2xlYXIoKTsKKyAg
ICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7CisgICAgICAgIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LmNsZWFyKCk7CisgICAgfQorCisgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9CisKKyAgICB2b2lkIHJlY29y
ZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcywg
aW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQorICAgIHsKKyAgICAgICAgbV9mZWF0dXJlcyA9
IGZlYXR1cmVzOworICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRW
YXJpYWJsZXM7CisgICAgICAgIG1fbGluZUNvdW50ID0gbGFzdExpbmUgLSBmaXJzdExpbmU7Cisg
ICAgfQorCisgICAgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Zv
cmNlVXNlc0FyZ3VtZW50czsgfQorCisgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzKCkgY29uc3Qg
eyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAgIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSBj
b25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOyB9CisKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisKK3ByaXZhdGU6CisgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29k
ZSYsIEZ1bmN0aW9uQm9keU5vZGUqKTsKKyAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOworICAgIFdyaXRlQmFycmllcjxVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKKworICAgIHVuc2ln
bmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgOiAyOTsKKyAgICBib29sIG1fZm9yY2VVc2VzQXJn
dW1lbnRzIDogMTsKKyAgICBib29sIG1faXNJblN0cmljdENvbnRleHQgOiAxOworICAgIGJvb2wg
bV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CisKKyAgICBJZGVudGlmaWVyIG1fbmFtZTsKKyAg
ICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOworICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4g
bV9uYW1lVmFsdWU7CisgICAgV3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5bWJv
bFRhYmxlRm9yQ2FsbDsKKyAgICBXcml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3lt
Ym9sVGFibGVGb3JDb25zdHJ1Y3Q7CisgICAgUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gbV9w
YXJhbWV0ZXJzOworICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0OworICAgIHVuc2lnbmVk
IG1fbGluZUNvdW50OworICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQg
bV9zb3VyY2VMZW5ndGg7CisKKyAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKKworICAgIEZ1
bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZTsK
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CisgICAgICAgIG1fbmFtZVZhbHVlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBqc1N0cmluZygmZ2xv
YmFsRGF0YSwgbmFtZSgpLnN0cmluZygpKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwdWJsaWM6CisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
LCBUeXBlSW5mbyhVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJlRmxhZ3M7
CisKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK3N0cnVjdCBVbmxp
bmtlZFN0cmluZ0p1bXBUYWJsZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJ
bXBsPiwgaW50MzJfdD4gU3RyaW5nT2Zmc2V0VGFibGU7CisgICAgU3RyaW5nT2Zmc2V0VGFibGUg
b2Zmc2V0VGFibGU7CisKKyAgICBpbmxpbmUgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShTdHJpbmdJ
bXBsKiB2YWx1ZSwgaW50MzJfdCBkZWZhdWx0T2Zmc2V0KQorICAgIHsKKyAgICAgICAgU3RyaW5n
T2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9mZnNldFRhYmxlLmVuZCgpOworICAg
ICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUu
ZmluZCh2YWx1ZSk7CisgICAgICAgIGlmIChsb2MgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJu
IGRlZmF1bHRPZmZzZXQ7CisgICAgICAgIHJldHVybiBsb2MtPnZhbHVlOworICAgIH0KKworfTsK
Kworc3RydWN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlIHsKKyAgICBWZWN0b3I8aW50MzJfdD4g
YnJhbmNoT2Zmc2V0czsKKyAgICBpbnQzMl90IG1pbjsKKworICAgIGludDMyX3Qgb2Zmc2V0Rm9y
VmFsdWUoaW50MzJfdCB2YWx1ZSwgaW50MzJfdCBkZWZhdWx0T2Zmc2V0KTsKKyAgICB2b2lkIGFk
ZChpbnQzMl90IGtleSwgaW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIWJyYW5j
aE9mZnNldHNba2V5XSkKKyAgICAgICAgICAgIGJyYW5jaE9mZnNldHNba2V5XSA9IG9mZnNldDsK
KyAgICB9Cit9OworCitzdHJ1Y3QgVW5saW5rZWRIYW5kbGVySW5mbyB7CisgICAgdWludDMyX3Qg
c3RhcnQ7CisgICAgdWludDMyX3QgZW5kOworICAgIHVpbnQzMl90IHRhcmdldDsKKyAgICB1aW50
MzJfdCBzY29wZURlcHRoOworfTsKKworc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rpb24geworICAg
IFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KKyAgICBVbmxpbmtlZElu
c3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsgfQorICAgIFVu
bGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3BlcmFuZDsgfQor
ICAgIHVuaW9uIHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlOworICAgICAgICBpbnQzMl90IG9w
ZXJhbmQ7CisgICAgfSB1OworfTsKKworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMg
SlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKworICAgIGVudW0geyBDYWxsRnVuY3Rpb24s
IEFwcGx5RnVuY3Rpb24gfTsKKworICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0
dXJuIG1faXNDb25zdHJ1Y3RvcjsgfQorICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1N0cmljdE1vZGU7IH0KKyAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1
cm4gbV91c2VzRXZhbDsgfQorCisgICAgYm9vbCBuZWVkc0Z1bGxTY29wZUNoYWluKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc0Z1bGxTY29wZUNoYWluOyB9CisgICAgdm9pZCBzZXROZWVkc0Z1bGxT
Y29wZUNoYWluKGJvb2wgbmVlZHNGdWxsU2NvcGVDaGFpbikgeyBtX25lZWRzRnVsbFNjb3BlQ2hh
aW4gPSBuZWVkc0Z1bGxTY29wZUNoYWluOyB9CisKKyAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZv
KGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mIGV4cHJlc3Npb25JbmZvKQorICAgIHsKKyAgICAg
ICAgbV9leHByZXNzaW9uSW5mby5hcHBlbmQoZXhwcmVzc2lvbkluZm8pOworICAgIH0KKworICAg
IHZvaWQgYWRkTGluZUluZm8odW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCBsaW5lTm8pCisg
ICAgeworICAgICAgICBWZWN0b3I8TGluZUluZm8+JiBsaW5lSW5mbyA9IG1fbGluZUluZm87Cisg
ICAgICAgIGlmICghbGluZUluZm8uc2l6ZSgpIHx8IGxpbmVJbmZvLmxhc3QoKS5saW5lTnVtYmVy
ICE9IGxpbmVObykgeworICAgICAgICAgICAgTGluZUluZm8gaW5mbyA9IHsgYnl0ZWNvZGVPZmZz
ZXQsIGxpbmVObyB9OworICAgICAgICAgICAgbGluZUluZm8uYXBwZW5kKGluZm8pOworICAgICAg
ICB9CisgICAgfQorCisgICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhw
cmVzc2lvbkluZm8uc2l6ZSgpOyB9CisKKyAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycworICAgIHZv
aWQgc2V0VGhpc1JlZ2lzdGVyKGludCB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0
aGlzUmVnaXN0ZXI7IH0KKyAgICB2b2lkIHNldEFjdGl2YXRpb25SZWdpc3RlcihpbnQgYWN0aXZh
dGlvblJlZ2lzdGVyKSB7IG1fYWN0aXZhdGlvblJlZ2lzdGVyID0gYWN0aXZhdGlvblJlZ2lzdGVy
OyB9CisKKyAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lzdGVyKGludCBhcmd1bWVudHNSZWdpc3Rl
cikgeyBtX2FyZ3VtZW50c1JlZ2lzdGVyID0gYXJndW1lbnRzUmVnaXN0ZXI7IH0KKyAgICBib29s
IHVzZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyICE9IC0x
OyB9CisgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVu
dHNSZWdpc3RlcjsgfQorCisgICAgLy8gUGFyYW1ldGVyIGluZm9ybWF0aW9uCisgICAgdm9pZCBz
ZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkgeyBtX251bVBhcmFtZXRlcnMgPSBuZXdWYWx1
ZTsgfQorICAgIHZvaWQgYWRkUGFyYW1ldGVyKCkgeyBtX251bVBhcmFtZXRlcnMrKzsgfQorICAg
IHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7
IH0KKworICAgIHVuc2lnbmVkIGFkZFJlZ0V4cChSZWdFeHAqIHIpCisgICAgeworICAgICAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3Jh
cmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOworICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMu
YXBwZW5kKFdyaXRlQmFycmllcjxSZWdFeHA+KCptX2dsb2JhbERhdGEsIHRoaXMsIHIpKTsKKyAg
ICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnRXhwcygp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7CisgICAg
fQorICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyBBU1NFUlQobV9yYXJlRGF0
YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaW5kZXhdLmdldCgpOyB9CisKKyAgICAv
LyBDb25zdGFudCBQb29scworCisgICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXJzLnNpemUoKTsgfQorICAgIHZvaWQgYWRkSWRlbnRpZmll
cihjb25zdCBJZGVudGlmaWVyJiBpKSB7IHJldHVybiBtX2lkZW50aWZpZXJzLmFwcGVuZChpKTsg
fQorICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXJzW2luZGV4XTsgfQorICAgIGNvbnN0IFZlY3RvcjxJZGVudGlmaWVy
PiYgaWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzOyB9CisKKyAgICBz
aXplX3QgbnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5z
aXplKCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxV
bmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCptX2ds
b2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICB1
bnNpZ25lZCBhZGRPckZpbmRDb25zdGFudChKU1ZhbHVlKTsKKyAgICBjb25zdCBWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+ID4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25z
dGFudFJlZ2lzdGVyczsgfQorICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBp
bmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKwor
ICAgIC8vIEp1bXBzCisgICAgc2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJl
dHVybiBtX2p1bXBUYXJnZXRzLnNpemUoKTsgfQorICAgIHZvaWQgYWRkSnVtcFRhcmdldCh1bnNp
Z25lZCBqdW1wVGFyZ2V0KSB7IG1fanVtcFRhcmdldHMuYXBwZW5kKGp1bXBUYXJnZXQpOyB9Cisg
ICAgdW5zaWduZWQganVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRh
cmdldHNbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJl
dHVybiBtX2p1bXBUYXJnZXRzLmxhc3QoKTsgfQorCisgICAgdm9pZCBzZXRJc051bWVyaWNDb21w
YXJlRnVuY3Rpb24oYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24pIHsgbV9pc051bWVyaWND
b21wYXJlRnVuY3Rpb24gPSBpc051bWVyaWNDb21wYXJlRnVuY3Rpb247IH0KKyAgICBib29sIGlz
TnVtZXJpY0NvbXBhcmVGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNOdW1lcmljQ29tcGFy
ZUZ1bmN0aW9uOyB9CisKKyAgICB2b2lkIHNocmlua1RvRml0KCkKKyAgICB7CisgICAgICAgIG1f
anVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9pZGVudGlmaWVycy5zaHJpbmtU
b0ZpdCgpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7CisgICAg
ICAgIG1fZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2Z1bmN0aW9uRXhw
cnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9saW5lSW5mby5zaHJpbmtUb0ZpdCgpOworICAg
ICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNocmlua1RvRml0KCk7CisgICAgICAg
IG1fZXhwcmVzc2lvbkluZm8uc2hyaW5rVG9GaXQoKTsKKworI2lmIEVOQUJMRShCWVRFQ09ERV9D
T01NRU5UUykKKyAgICAgICAgbV9ieXRlY29kZUNvbW1lbnRzLnNocmlua1RvRml0KCk7CisjZW5k
aWYKKyAgICAgICAgaWYgKG1fcmFyZURhdGEpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEt
Pm1fcmVnZXhwcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25z
dGFudEJ1ZmZlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1faW1t
ZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJl
RGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CisgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIG51bWJlck9mSW5zdHJ1Y3Rpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEluc3RydWN0aW9ucy5zaXplKCk7IH0KKyAgICBSZWZD
b3VudGVkQXJyYXk8VW5saW5rZWRJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJu
IG1fdW5saW5rZWRJbnN0cnVjdGlvbnM7IH0KKyAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8VW5s
aW5rZWRJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRJbnN0cnVjdGlvbnM7IH0KKworICAgIGludCBtX251bVZhcnM7CisgICAgaW50IG1fbnVtQ2Fw
dHVyZWRWYXJzOworICAgIGludCBtX251bUNhbGxlZVJlZ2lzdGVyczsKKworICAgIC8vIEp1bXAg
VGFibGVzCisKKyAgICBzaXplX3QgbnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNo
SnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGFk
ZEltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OyBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hK
dW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBpbW1lZGlh
dGVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyBy
ZXR1cm4gbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OyB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVt
cFRhYmxlcy5zaXplKCkgOiAwOyB9CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGFkZENo
YXJhY3RlclN3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBt
X3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1w
VGFibGVzLmxhc3QoKTsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBjaGFyYWN0ZXJT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1
cm4gbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9
CisKKyAgICBzaXplX3QgbnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5z
aXplKCkgOiAwOyB9CisgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGFkZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2VkU3RyaW5nSnVtcFRhYmxlKCkp
OyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQor
ICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAgICB1bnNpZ25lZCBhZGRGdW5j
dGlvbkRlY2woVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICB1
bnNpZ25lZCBzaXplID0gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlv
bkRlY2xzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkp
OworICAgICAgICBtX2Z1bmN0aW9uRGVjbHMubGFzdCgpLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlz
LCBuKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorICAgIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVj
bHNbaW5kZXhdLmdldCgpOyB9CisgICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsg
cmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRGdW5jdGlv
bkV4cHIoVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICB1bnNp
Z25lZCBzaXplID0gbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4
cHJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOwor
ICAgICAgICBtX2Z1bmN0aW9uRXhwcnMubGFzdCgpLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlzLCBu
KTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNb
aW5kZXhdLmdldCgpOyB9CisgICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25FeHBycygpIHsgcmV0
dXJuIG1fZnVuY3Rpb25FeHBycy5zaXplKCk7IH0KKworICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGlu
ZyBzdXBwb3J0CisgICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXpl
KCkgOiAwOyB9CisgICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IFVubGlua2VkSGFu
ZGxlckluZm8mIGhhbmxlcikgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZChoYW5sZXIpOyB9CisgICAgVW5s
aW5rZWRIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgQVNTRVJUKG1f
cmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07
IH0KKworICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3ltYm9sVGFibGUuZ2V0KCk7IH0KKworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorCisgICAgdW5zaWduZWQgYWRkUmVzb2x2
ZSgpIHsgcmV0dXJuIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBu
dW1iZXJPZlJlc29sdmVPcGVyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlT3BlcmF0
aW9uQ291bnQ7IH0KKyAgICB1bnNpZ25lZCBhZGRQdXRUb0Jhc2UoKSB7IHJldHVybiBtX3B1dFRv
QmFzZU9wZXJhdGlvbkNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlB1dFRvQmFzZU9w
ZXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3B1dFRvQmFzZU9wZXJhdGlvbkNvdW50OyB9CisK
KyAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhZGRBcnJheVByb2ZpbGUoKSB7IHJldHVybiBtX2Fy
cmF5UHJvZmlsZUNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5UHJvZmlsZXMo
KSB7IHJldHVybiBtX2FycmF5UHJvZmlsZUNvdW50OyB9CisgICAgVW5saW5rZWRWYWx1ZVByb2Zp
bGUgYWRkVmFsdWVQcm9maWxlKCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVDb3VudCsrOyB9Cisg
ICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92YWx1ZVByb2Zp
bGVDb3VudDsgfQorCisgICAgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbyBhZGRMTEludENhbGxM
aW5rSW5mbygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudCsrOyB9CisgICAgdW5z
aWduZWQgbnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3MoKSB7IHJldHVybiBtX2xsaW50Q2FsbExp
bmtJbmZvQ291bnQ7IH0KKworICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlVHlwZTsgfQorCisgICAgaW50IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1f
dGhpc1JlZ2lzdGVyOyB9CisgICAgaW50IGFjdGl2YXRpb25SZWdpc3RlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYWN0aXZhdGlvblJlZ2lzdGVyOyB9CisKKworICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbih1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQorICAgIHsK
KyAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5hcHBlbmQocHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbik7CisgICAgfQorCisgICAgc2l6ZV90IG51bWJlck9mUHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25zLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
czsgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8SlNWYWx1ZT4gQ29uc3RhbnRCdWZmZXI7CisKKyAg
ICBzaXplX3QgY29uc3RhbnRCdWZmZXJDb3VudCgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1
cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQg
YWRkQ29uc3RhbnRCdWZmZXIodW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0
YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOworICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50QnVmZmVycy5hcHBlbmQoVmVjdG9yPEpTVmFsdWU+KGxlbmd0aCkpOworICAgICAgICByZXR1
cm4gc2l6ZTsKKyAgICB9CisKKyAgICBjb25zdCBDb25zdGFudEJ1ZmZlciYgY29uc3RhbnRCdWZm
ZXIodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9yYXJlRGF0
YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpbmRleF07
CisgICAgfQorCisgICAgQ29uc3RhbnRCdWZmZXImIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGlu
ZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOworICAgICAgICByZXR1cm4g
bV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaW5kZXhdOworICAgIH0KKworICAgIGJvb2wg
aGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhOyB9CisKKyAgICBpbnQgbGlu
ZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKworICAg
IHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KTsKKwor
ICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1
cmVkVmFyaWFibGVzLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxpbmVDb3VudCkKKyAg
ICB7CisgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJlczsKKyAgICAgICAgbV9oYXNDYXB0dXJl
ZFZhcmlhYmxlcyA9IGhhc0NhcHR1cmVkVmFyaWFibGVzOworICAgICAgICBtX2ZpcnN0TGluZSA9
IGZpcnN0TGluZTsKKyAgICAgICAgbV9saW5lQ291bnQgPSBsaW5lQ291bnQ7CisgICAgfQorCisg
ICAgQ29kZUZlYXR1cmVzIGNvZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7
IH0KKyAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXND
YXB0dXJlZFZhcmlhYmxlczsgfQorICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmlyc3RMaW5lOyB9CisgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9saW5lQ291bnQ7IH0KKworcHJvdGVjdGVkOgorICAgIFVubGlua2VkQ29kZUJsb2NrKEpT
R2xvYmFsRGF0YSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYp
OworICAgIH5VbmxpbmtlZENvZGVCbG9jaygpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gR2xvYmFsQ29kZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhKSk7CisgICAgfQor
Citwcml2YXRlOgorCisgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKKyAgICB7
CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9w
dFB0cihuZXcgUmFyZURhdGEpOworICAgIH0KKworICAgIFJlZkNvdW50ZWRBcnJheTxVbmxpbmtl
ZEluc3RydWN0aW9uPiBtX3VubGlua2VkSW5zdHJ1Y3Rpb25zOworCisgICAgaW50IG1fbnVtUGFy
YW1ldGVyczsKKyAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKworICAgIGludCBtX3Ro
aXNSZWdpc3RlcjsKKyAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3RlcjsKKyAgICBpbnQgbV9hY3Rp
dmF0aW9uUmVnaXN0ZXI7CisKKyAgICBib29sIG1fbmVlZHNGdWxsU2NvcGVDaGFpbiA6IDE7Cisg
ICAgYm9vbCBtX3VzZXNFdmFsIDogMTsKKyAgICBib29sIG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0
aW9uIDogMTsKKyAgICBib29sIG1faXNTdHJpY3RNb2RlIDogMTsKKyAgICBib29sIG1faXNDb25z
dHJ1Y3RvciA6IDE7CisgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKKyAgICB1
bnNpZ25lZCBtX2ZpcnN0TGluZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKKworICAgIENv
ZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CisKKyAgICBW
ZWN0b3I8dW5zaWduZWQ+IG1fanVtcFRhcmdldHM7CisKKyAgICAvLyBDb25zdGFudCBQb29scwor
ICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOworICAgIFZlY3RvcjxXcml0ZUJh
cnJpZXI8VW5rbm93bj4gPiBtX2NvbnN0YW50UmVnaXN0ZXJzOworICAgIHR5cGVkZWYgVmVjdG9y
PFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gPiBGdW5jdGlvbkV4cHJl
c3Npb25WZWN0b3I7CisgICAgRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNs
czsKKyAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkV4cHJzOworCisgICAg
V3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOworCisgICAgVmVj
dG9yPExpbmVJbmZvPiBtX2xpbmVJbmZvOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOworCisjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQor
ICAgIFZlY3RvcjxDb21tZW50PiAgbV9ieXRlY29kZUNvbW1lbnRzOworICAgIHNpemVfdCBtX2J5
dGVjb2RlQ29tbWVudEl0ZXJhdG9yOworI2VuZGlmCisKKyAgICB1bnNpZ25lZCBtX3Jlc29sdmVP
cGVyYXRpb25Db3VudDsKKyAgICB1bnNpZ25lZCBtX3B1dFRvQmFzZU9wZXJhdGlvbkNvdW50Owor
ICAgIHVuc2lnbmVkIG1fYXJyYXlQcm9maWxlQ291bnQ7CisgICAgdW5zaWduZWQgbV92YWx1ZVBy
b2ZpbGVDb3VudDsKKyAgICB1bnNpZ25lZCBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7CisKKyAg
ICBzdHJ1Y3QgUmFyZURhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlv
bkhhbmRsZXJzOworCisgICAgICAgIC8vIFJhcmUgQ29uc3RhbnRzCisgICAgICAgIFZlY3RvcjxX
cml0ZUJhcnJpZXI8UmVnRXhwPiA+IG1fcmVnZXhwczsKKworICAgICAgICAvLyBCdWZmZXJzIHVz
ZWQgZm9yIGxhcmdlIGFycmF5IGxpdGVyYWxzCisgICAgICAgIFZlY3RvcjxDb25zdGFudEJ1ZmZl
cj4gbV9jb25zdGFudEJ1ZmZlcnM7CisKKyAgICAgICAgLy8gSnVtcCBUYWJsZXMKKyAgICAgICAg
VmVjdG9yPFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPiBtX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZXM7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9jaGFyYWN0ZXJT
d2l0Y2hKdW1wVGFibGVzOworICAgICAgICBWZWN0b3I8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICAvLyBFeHByZXNzaW9uIGluZm8g
LSBwcmVzZW50IGlmIGRlYnVnZ2luZy4KKyAgICB9OworICAgIE93blB0cjxSYXJlRGF0YT4gbV9y
YXJlRGF0YTsKKyAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5m
bzsKKworcHJvdGVjdGVkOgorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworY2xhc3MgVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgeworcHVibGlj
OgorICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKKworcHJvdGVjdGVkOgorICAg
IFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYg
aW5mbykKKyAgICAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgY29kZVR5cGUsIGlu
Zm8pCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKwor
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworY2xhc3MgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKKyAgICBzdGF0aWMgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s+KGdsb2JhbERhdGEtPmhlYXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soZ2xv
YmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdl
dCgpLCBpbmZvKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCpnbG9iYWxEYXRh
KTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworcHVibGljOgorICAgIHR5cGVk
ZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKKworICAgIHZvaWQgYWRkRnVuY3Rpb25E
ZWNsYXJhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIG5h
bWUsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUpCisgICAg
eworICAgICAgICBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihu
YW1lLCBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2JhbERhdGEs
IHRoaXMsIGZ1bmN0aW9uRXhlY3V0YWJsZSkpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFZhcmlh
YmxlRGVjbGFyYXRpb24oY29uc3QgSWRlbnRpZmllciYgbmFtZSwgYm9vbCBpc0NvbnN0YW50KQor
ICAgIHsKKyAgICAgICAgbV92YXJEZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5h
bWUsIGlzQ29uc3RhbnQpKTsKKyAgICB9CisKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8
SWRlbnRpZmllciwgYm9vbD4gPiBWYXJpYWJsZURlY2xhdGlvbnM7CisgICAgdHlwZWRlZiBWZWN0
b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZT4gPiA+IEZ1bmN0aW9uRGVjbGF0aW9uczsKKworICAgIGNvbnN0IFZhcmlhYmxlRGVj
bGF0aW9ucyYgdmFyaWFibGVEZWNsYXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3ZhckRlY2xh
cmF0aW9uczsgfQorICAgIGNvbnN0IEZ1bmN0aW9uRGVjbGF0aW9ucyYgZnVuY3Rpb25EZWNsYXJh
dGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOyB9CisKKyAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3ByaXZh
dGU6CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAg
ICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBHbG9iYWxDb2RlLCBpbmZvKQorICAg
IHsKKyAgICB9CisKKyAgICBWYXJpYWJsZURlY2xhdGlvbnMgbV92YXJEZWNsYXJhdGlvbnM7Cisg
ICAgRnVuY3Rpb25EZWNsYXRpb25zIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1R5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOworCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFz
cyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sg
eworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOworCisgICAgc3RhdGljIFVu
bGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgeworICAgICAgICBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFs
Q29kZUJsb2NrPihnbG9iYWxEYXRhLT5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEtPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwg
aW5mbyk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVu
bGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJp
YWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXhdOyB9CisgICAg
dW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9Cisg
ICAgdm9pZCBhZG9wdFZhcmlhYmxlcyhWZWN0b3I8SWRlbnRpZmllcj4mIHZhcmlhYmxlcykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5pc0VtcHR5KCkpOworICAgICAgICBtX3Zh
cmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFVubGlua2Vk
RXZhbENvZGVCbG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICAgICAgOiBCYXNlKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8pCisgICAgeworICAgIH0KKworICAgIFZlY3Rv
cjxJZGVudGlmaWVyPiBtX3ZhcmlhYmxlczsKKworcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUlu
Zm8oVW5saW5rZWRFdmFsQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgeworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgQ29kZUNhY2hlOworCisgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sq
IGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25z
dCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jaz4oZ2xvYmFsRGF0YS0+aGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2soZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0
cnVjdHVyZS5nZXQoKSwgY29kZVR5cGUsIGluZm8pOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNo
Q3JlYXRpb24oKmdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQor
CitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOworCitwcml2YXRl
OgorICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFi
bGVJbmZvJiBpbmZvKQorICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBjb2Rl
VHlwZSwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlw
ZUluZm8oVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCit9CisKKyNlbmRpZiAvLyBVbmxp
bmtlZENvZGVCbG9ja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IGZiMDg0ZTNmOTdiZTU3ZDY5OGMx
MTUwYTg4OTM1MTEwNmE1MTIyOGMuLmJjMmY1NWY3ODE5M2M0YTlkYzZmZjg4OWJlMGZhNjY4MzY0
NDFhNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkKICAgICByZXR1cm4gc19kdW1wc0dlbmVy
YXRlZENvZGU7CiB9CiAKLUpTT2JqZWN0KiBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQor
UGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkKIHsKICAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiQnl0ZWNvZGUgR2VuZXJhdGlvbiIpOwogICAgIApAQCAt
MTY5LDM2ICsxNjksMjEgQEAgSlNPYmplY3QqIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgp
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdHJ5UmFuZ2VzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIFRyeVJhbmdlJiByYW5nZSA9IG1fdHJ5UmFuZ2VzW2ldOwogICAgICAgICBBU1NF
UlQocmFuZ2UudHJ5RGF0YS0+dGFyZ2V0U2NvcGVEZXB0aCAhPSBVSU5UX01BWCk7Ci0gICAgICAg
IEhhbmRsZXJJbmZvIGluZm8gPSB7CisgICAgICAgIFVubGlua2VkSGFuZGxlckluZm8gaW5mbyA9
IHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5nZS5zdGFydC0+YmluZCgw
LCAwKSksIHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5nZS5lbmQtPmJpbmQoMCwgMCkpLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLnRyeURhdGEtPnRhcmdldC0+Ymlu
ZCgwLCAwKSksIHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5nZS50cnlEYXRhLT50YXJnZXRTY29w
ZURlcHRoKQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICAsCi0jaWYgRU5BQkxFKExMSU5U
KQotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpj
cmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoTExJbnQ6OmdldENvZGVQdHIobGxpbnRfb3BfY2F0
Y2gpKSkKLSNlbHNlCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCgpCi0jZW5kaWYKLSNl
bmRpZgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLnRyeURhdGEtPnRh
cmdldC0+YmluZCgwLCAwKSksCisgICAgICAgICAgICByYW5nZS50cnlEYXRhLT50YXJnZXRTY29w
ZURlcHRoCiAgICAgICAgIH07CiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5k
bGVyKGluZm8pOwogICAgIH0KICAgICAKLSAgICBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkg
PSBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+KG1faW5zdHJ1Y3Rpb25zKTsKLQotICAgIGlm
IChzX2R1bXBzR2VuZXJhdGVkQ29kZSkKLSAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAobV9zY29w
ZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7CisgICAgbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpID0gUmVmQ291bnRlZEFycmF5PFVubGlua2VkSW5zdHJ1Y3Rpb24+KG1faW5zdHJ1
Y3Rpb25zKTsKIAotI2lmZGVmIE5ERUJVRwotICAgIGlmICgobV9jb2RlVHlwZSA9PSBGdW5jdGlv
bkNvZGUgJiYgIW1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkgJiYgIW1fY29kZUJs
b2NrLT51c2VzQXJndW1lbnRzKCkpIHx8IG1fY29kZVR5cGUgPT0gRXZhbENvZGUpCi0gICAgICAg
IHN5bWJvbFRhYmxlKCkuY2xlYXIoKTsKLSNlbmRpZgotCi0gICAgbV9jb2RlQmxvY2stPnNocmlu
a1RvRml0KENvZGVCbG9jazo6RWFybHlTaHJpbmspOworICAgIG1fY29kZUJsb2NrLT5zaHJpbmtU
b0ZpdCgpOwogCiAgICAgaWYgKG1fZXhwcmVzc2lvblRvb0RlZXApCi0gICAgICAgIHJldHVybiBj
cmVhdGVPdXRPZk1lbW9yeUVycm9yKG1fc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKLSAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yOjpPdXRPZk1lbW9yeTsKKyAgICByZXR1
cm4gUGFyc2VyRXJyb3I6OkVycm9yTm9uZTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6
YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJlZ2lzdGVy
SUQqJiByMCkKQEAgLTIxNiw1MSArMjAxLDMyIEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFk
ZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50LCBSZWdpc3RlCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkR2xvYmFsVmFy
KAotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2Rl
LCBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQotewotICAgIFVOVVNFRF9QQVJBTShmdW5jdGlv
bk1vZGUpOwotICAgIGludCBpbmRleCA9IHN5bWJvbFRhYmxlKCkuc2l6ZSgpOwotICAgIFN5bWJv
bFRhYmxlRW50cnkgbmV3RW50cnkoaW5kZXgsIChjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCkg
PyBSZWFkT25seSA6IDApOwotICAgIGlmIChmdW5jdGlvbk1vZGUgPT0gSXNGdW5jdGlvblRvU3Bl
Y2lhbGl6ZSkKLSAgICAgICAgbmV3RW50cnkuYXR0ZW1wdFRvV2F0Y2goKTsKLSAgICBTeW1ib2xU
YWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LmltcGwoKSwg
bmV3RW50cnkpOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOwotICAgICAgICBpbmRleCA9IHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotfQot
CiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwcmVzZXJ2ZUxhc3RWYXIoKQogewogICAgIGlmICgo
bV9maXJzdENvbnN0YW50SW5kZXggPSBtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpICE9IDApCiAg
ICAgICAgIG1fbGFzdFZhciA9ICZtX2NhbGxlZVJlZ2lzdGVycy5sYXN0KCk7CiB9CiAKLUJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUs
IEpTU2NvcGUqIHNjb3BlLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFByb2dyYW1D
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCkKLSAg
ICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dl
cigpKQotICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3BlLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNQcm9maWxpbmcoc2NvcGUtPmds
b2JhbE9iamVjdCgpKSkKLSAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNSaWNoU291
cmNlSW5mbyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkpKQotICAgICwgbV9zY29wZSgqc2NvcGUtPmds
b2JhbERhdGEoKSwgc2NvcGUpCi0gICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQorQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNv
ZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVy
TW9kZSkKKyAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3MoZGVidWdnZXJNb2RlID09IERlYnVn
Z2VyT24pCisgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MocHJvZmlsZXJNb2RlID09IFBy
b2ZpbGVyT24pCiAjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQogICAgICwgbV9jdXJyZW50
Q29tbWVudFN0cmluZygwKQogI2VuZGlmCisgICAgLCBtX3N5bWJvbFRhYmxlKDApCiAgICAgLCBt
X3Njb3BlTm9kZShwcm9ncmFtTm9kZSkKLSAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAg
ICAsIG1fY29kZUJsb2NrKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICAsIG1fdGhpc1JlZ2lz
dGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAgICAgLCBtX2VtcHR5VmFsdWVS
ZWdpc3RlcigwKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3Bl
RGVwdGgoMCkKLSAgICAsIG1fYmFzZVNjb3BlRGVwdGgoMCkKICAgICAsIG1fY29kZVR5cGUoR2xv
YmFsQ29kZSkKICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCiAgICAgLCBtX2dsb2JhbENv
bnN0YW50SW5kZXgoMCkKICAgICAsIG1faGFzQ3JlYXRlZEFjdGl2YXRpb24odHJ1ZSkKICAgICAs
IG1fZmlyc3RMYXp5RnVuY3Rpb24oMCkKICAgICAsIG1fbGFzdExhenlGdW5jdGlvbigwKQotICAg
ICwgbV9nbG9iYWxEYXRhKHNjb3BlLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2JhbERhdGEo
Jmdsb2JhbERhdGEpCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCiAjaWZuZGVmIE5ERUJV
RwogICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTI2OSw4MSArMjM1LDQ4IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5v
ZGUsIEpTU2NvcGUqIHNjb3BlLCBTCiAgICAgLCBtX3VzZXNFeGNlcHRpb25zKGZhbHNlKQogICAg
ICwgbV9leHByZXNzaW9uVG9vRGVlcChmYWxzZSkKIHsKLSAgICBtX2dsb2JhbERhdGEtPnN0YXJ0
ZWRDb21waWxpbmcobV9jb2RlQmxvY2spOwotICAgIAogICAgIGlmIChtX3Nob3VsZEVtaXREZWJ1
Z0hvb2tzKQogICAgICAgICBtX2NvZGVCbG9jay0+c2V0TmVlZHNGdWxsU2NvcGVDaGFpbih0cnVl
KTsKIAotICAgIGNvZGVCbG9jay0+c2V0R2xvYmFsRGF0YShtX2dsb2JhbERhdGEpOwotICAgIHN5
bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYg
IWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOyAgICAKICAgICBtX2NvZGVCbG9jay0+c2V0TnVt
UGFyYW1ldGVycygxKTsgLy8gQWxsb2NhdGUgc3BhY2UgZm9yICJ0aGlzIgogCiAgICAgcHJlcGVu
ZENvbW1lbnQoImVudGVyaW5nIFByb2dyYW0gYmxvY2siKTsKICAgICBlbWl0T3Bjb2RlKG9wX2Vu
dGVyKTsKIAotICAgIC8vIEZJWE1FOiBNb3ZlIGNvZGUgdGhhdCBtb2RpZmllcyB0aGUgZ2xvYmFs
IG9iamVjdCB0byBJbnRlcnByZXRlcjo6ZXhlY3V0ZS4KLSAgICAKLSAgICBpZiAoY29tcGlsYXRp
b25LaW5kID09IE9wdGltaXppbmdDb21waWxhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAKLSAg
ICBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplciBvcHRpbWl6ZXIoKm1fZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0KTsKLQogICAgIGNvbnN0IFZhclN0YWNrJiB2YXJTdGFjayA9IHByb2dyYW1Ob2Rl
LT52YXJTdGFjaygpOwogICAgIGNvbnN0IEZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2sgPSBw
cm9ncmFtTm9kZS0+ZnVuY3Rpb25TdGFjaygpOwogCi0gICAgc2l6ZV90IG5ld0dsb2JhbHMgPSB2
YXJTdGFjay5zaXplKCkgKyBmdW5jdGlvblN0YWNrLnNpemUoKTsKLSAgICBpZiAoIW5ld0dsb2Jh
bHMpCi0gICAgICAgIHJldHVybjsKLSAgICBnbG9iYWxPYmplY3QtPmFkZFJlZ2lzdGVycyhuZXdH
bG9iYWxzKTsKLQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25TdGFjay5zaXpl
KCk7ICsraSkgewogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9u
U3RhY2tbaV07Ci0gICAgICAgIGJvb2wgcHJvcGVydHlEaWRFeGlzdCA9IAotICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0LT5yZW1vdmVEaXJlY3QoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24tPmlkZW50
KCkpOyAvLyBOZXdseSBkZWNsYXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3Bl
cnRpZXMuCi0KLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVj
LCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbiksIHNj
b3BlKTsKLSAgICAgICAgaW50IGluZGV4ID0gYWRkR2xvYmFsVmFyKAotICAgICAgICAgICAgZnVu
Y3Rpb24tPmlkZW50KCksIElzVmFyaWFibGUsCi0gICAgICAgICAgICAhcHJvcGVydHlEaWRFeGlz
dCA/IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUgOiBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6YWJs
ZSk7Ci0gICAgICAgIGdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChpbmRleCkuc2V0KCptX2dsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogdW5saW5rZWRGdW5jdGlvbiA9IG1ha2VGdW5jdGlvbihmdW5jdGlvbik7CisgICAg
ICAgIGNvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsYXJhdGlvbigqbV9nbG9iYWxEYXRhLCBmdW5j
dGlvbi0+aWRlbnQoKSwgdW5saW5rZWRGdW5jdGlvbik7CiAgICAgfQogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoZ2xvYmFs
T2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCAqdmFyU3RhY2tbaV0uZmlyc3QpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGFkZEdsb2JhbFZhcigKLSAgICAgICAgICAgICp2YXJTdGFj
a1tpXS5maXJzdCwKLSAgICAgICAgICAgICh2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlv
blN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0YW50IDogSXNWYXJpYWJsZSwKLSAgICAgICAg
ICAgIE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlKTsKLSAgICB9CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkKKyAgICAgICAgY29kZUJsb2NrLT5h
ZGRWYXJpYWJsZURlY2xhcmF0aW9uKCp2YXJTdGFja1tpXS5maXJzdCwgISEodmFyU3RhY2tbaV0u
c2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpKTsKKwogfQogCi1CeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25C
b2R5LCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kKQotICAgIDogbV9zaG91bGRFbWl0RGVi
dWdIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCi0gICAgLCBtX3Nob3Vs
ZEVtaXRQcm9maWxlSG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSgpLT5zdXBwb3J0c1Byb2ZpbGluZyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkpKQotICAg
ICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9i
YWxPYmplY3QoKSkpCi0gICAgLCBtX3Njb3BlKCpzY29wZS0+Z2xvYmFsRGF0YSgpLCBzY29wZSkK
LSAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBGdW5jdGlvbkJvZHlOb2Rl
KiBmdW5jdGlvbkJvZHksIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgRGVi
dWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKKyAgICA6
IG1fc2hvdWxkRW1pdERlYnVnSG9va3MoZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT24pCisgICAg
LCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MocHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24pCisg
ICAgLCBtX3N5bWJvbFRhYmxlKGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKICNpZiBFTkFCTEUo
QllURUNPREVfQ09NTUVOVFMpCiAgICAgLCBtX2N1cnJlbnRDb21tZW50U3RyaW5nKDApCiAjZW5k
aWYKICAgICAsIG1fc2NvcGVOb2RlKGZ1bmN0aW9uQm9keSkKLSAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKKyAgICAsIG1fY29kZUJsb2NrKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICAs
IG1fYWN0aXZhdGlvblJlZ2lzdGVyKDApCiAgICAgLCBtX2VtcHR5VmFsdWVSZWdpc3RlcigwKQog
ICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKLSAg
ICAsIG1fYmFzZVNjb3BlRGVwdGgoMCkKICAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2RlKQog
ICAgICwgbV9uZXh0Q29uc3RhbnRPZmZzZXQoMCkKICAgICAsIG1fZ2xvYmFsQ29uc3RhbnRJbmRl
eCgwKQogICAgICwgbV9oYXNDcmVhdGVkQWN0aXZhdGlvbihmYWxzZSkKICAgICAsIG1fZmlyc3RM
YXp5RnVuY3Rpb24oMCkKICAgICAsIG1fbGFzdExhenlGdW5jdGlvbigwKQotICAgICwgbV9nbG9i
YWxEYXRhKHNjb3BlLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERh
dGEpCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCiAjaWZuZGVmIE5ERUJVRwogICAgICwg
bV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTM1MiwxNCArMjg1LDExIEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHks
IEpTU2NvcGUqIHNjCiAgICAgLCBtX3VzZXNFeGNlcHRpb25zKGZhbHNlKQogICAgICwgbV9leHBy
ZXNzaW9uVG9vRGVlcChmYWxzZSkKIHsKLSAgICBtX2dsb2JhbERhdGEtPnN0YXJ0ZWRDb21waWxp
bmcobV9jb2RlQmxvY2spOwotCiAgICAgaWYgKG1fc2hvdWxkRW1pdERlYnVnSG9va3MpCiAgICAg
ICAgIG1fY29kZUJsb2NrLT5zZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOwogCi0gICAgY29k
ZUJsb2NrLT5zZXRHbG9iYWxEYXRhKG1fZ2xvYmFsRGF0YSk7Ci0gICAgc3ltYm9sVGFibGUtPnNl
dFVzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhY29kZUJsb2NrLT5p
c1N0cmljdE1vZGUoKSk7Ci0gICAgc3ltYm9sVGFibGUtPnNldFBhcmFtZXRlckNvdW50SW5jbHVk
aW5nVGhpcyhmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKS0+c2l6ZSgpICsgMSk7CisgICAgbV9z
eW1ib2xUYWJsZS0+c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYm
ICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsKKyAgICBtX3N5bWJvbFRhYmxlLT5zZXRQYXJh
bWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoZnVuY3Rpb25Cb2R5LT5wYXJhbWV0ZXJzKCktPnNpemUo
KSArIDEpOwogCiAgICAgcHJlcGVuZENvbW1lbnQoImVudGVyaW5nIEZ1bmN0aW9uIGJsb2NrIik7
CiAgICAgZW1pdE9wY29kZShvcF9lbnRlcik7CkBAIC0zNzAsNyArMzAwLDcgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9k
eSwgSlNTY29wZSogc2MKICAgICAgICAgbV9jb2RlQmxvY2stPnNldEFjdGl2YXRpb25SZWdpc3Rl
cihtX2FjdGl2YXRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgfQogCi0gICAgc3ltYm9sVGFi
bGUtPnNldENhcHR1cmVTdGFydChtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICBtX3N5bWJv
bFRhYmxlLT5zZXRDYXB0dXJlU3RhcnQobV9jb2RlQmxvY2stPm1fbnVtVmFycyk7CiAKICAgICBp
ZiAoZnVuY3Rpb25Cb2R5LT51c2VzQXJndW1lbnRzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgp
IHx8IG1fc2hvdWxkRW1pdERlYnVnSG9va3MpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmpl
Y3QuCiAgICAgICAgIFJlZ2lzdGVySUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFk
ZFZhcigpOyAvLyBBbm9ueW1vdXMsIHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29k
ZS4KQEAgLTQyMCw3ICszNTAsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgIH0KIAog
ICAgIGlmIChjYXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lICYmICFjb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpKSB7Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCA9IHN5bWJvbFRhYmxlLT5w
YXJhbWV0ZXJDb3VudCgpOworICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQgPSBtX3N5bWJv
bFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOwogICAgICAgICBPd25BcnJheVB0cjxTbG93QXJndW1l
bnQ+IHNsb3dBcmd1bWVudHMgPSBhZG9wdEFycmF5UHRyKG5ldyBTbG93QXJndW1lbnRbcGFyYW1l
dGVyQ291bnRdKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3Vu
dDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWNhcHR1cmVkQXJndW1lbnRzW2ldKSB7CkBAIC00
MzEsNyArMzYxLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0
aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgSlNTY29wZSogc2MKICAgICAgICAgICAgIHNsb3dB
cmd1bWVudHNbaV0uc3RhdHVzID0gU2xvd0FyZ3VtZW50OjpDYXB0dXJlZDsKICAgICAgICAgICAg
IHNsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBjYXB0dXJlZEFyZ3VtZW50c1tpXS0+aW5kZXgoKTsK
ICAgICAgICAgfQotICAgICAgICBzeW1ib2xUYWJsZS0+c2V0U2xvd0FyZ3VtZW50cyhzbG93QXJn
dW1lbnRzLnJlbGVhc2UoKSk7CisgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldFNsb3dBcmd1bWVu
dHMoc2xvd0FyZ3VtZW50cy5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIFJlZ2lzdGVySUQqIGNh
bGxlZVJlZ2lzdGVyID0gcmVzb2x2ZUNhbGxlZShmdW5jdGlvbkJvZHkpOyAvLyBNYXkgcHVzaCB0
byB0aGUgc2NvcGUgY2hhaW4gYW5kL29yIGFkZCBhIGNhcHR1cmVkIHZhci4KQEAgLTQ3Miw3ICs0
MDIsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5
Tm9kZSogZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0ZXItPmluZGV4KCkpOwogICAgIH0KIAotICAgIHN5bWJv
bFRhYmxlLT5zZXRDYXB0dXJlRW5kKGNvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICBtX3N5bWJv
bFRhYmxlLT5zZXRDYXB0dXJlRW5kKGNvZGVCbG9jay0+bV9udW1WYXJzKTsKIAogICAgIG1fZmly
c3RMYXp5RnVuY3Rpb24gPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKQEAgLTUwMCw3ICs0MzAsNyBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSog
ZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgIH0KIAogICAgIGlmIChzaG91bGRDYXB0dXJl
QWxsVGhlVGhpbmdzKQotICAgICAgICBzeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZUVuZChjb2RlQmxv
Y2stPm1fbnVtVmFycyk7CisgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldENhcHR1cmVFbmQoY29k
ZUJsb2NrLT5tX251bVZhcnMpOwogCiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
ID0gKmZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOwogICAgIG1fcGFyYW1ldGVycy5ncm93KHBh
cmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlzIgpAQCAtNTMw
LDM1ICs0NjAsMzIgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0
aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgSlNTY29wZSogc2MKICAgICAgICAgZW1pdE9wY29k
ZShvcF9jcmVhdGVfdGhpcyk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX3RoaXNS
ZWdpc3Rlci5pbmRleCgpKTsKICAgICB9IGVsc2UgaWYgKCFjb2RlQmxvY2stPmlzU3RyaWN0TW9k
ZSgpICYmIChmdW5jdGlvbkJvZHktPnVzZXNUaGlzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgp
IHx8IG1fc2hvdWxkRW1pdERlYnVnSG9va3MpKSB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcHJv
ZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9jb252ZXJ0X3RoaXMpOworICAgICAgICBVbmxp
bmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NvbnZlcnRf
dGhpcyk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX3RoaXNSZWdpc3Rlci5pbmRl
eCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIH0KIH0K
IAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9k
ZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENv
ZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCi0gICAgOiBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKLSAgICAsIG1fc2hv
dWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnN1cHBvcnRzUHJvZmlsaW5nKHNjb3BlLT5nbG9iYWxPYmplY3QoKSkpCi0g
ICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oc2NvcGUtPmds
b2JhbE9iamVjdCgpKSkKLSAgICAsIG1fc2NvcGUoKnNjb3BlLT5nbG9iYWxEYXRhKCksIHNjb3Bl
KQotICAgICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKK0J5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV2YWxOb2RlKiBldmFs
Tm9kZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1
Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCisgICAgOiBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9uKQorICAgICwgbV9zaG91bGRFbWl0
UHJvZmlsZUhvb2tzKHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9uKQorICAgICwgbV9zeW1ib2xU
YWJsZShjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCiAjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1F
TlRTKQogICAgICwgbV9jdXJyZW50Q29tbWVudFN0cmluZygwKQogI2VuZGlmCiAgICAgLCBtX3Nj
b3BlTm9kZShldmFsTm9kZSkKLSAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1f
Y29kZUJsb2NrKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENh
bGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAgICAgLCBtX2VtcHR5VmFsdWVSZWdpc3Rl
cigwKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgo
MCkKLSAgICAsIG1fYmFzZVNjb3BlRGVwdGgoY29kZUJsb2NrLT5iYXNlU2NvcGVEZXB0aCgpKQog
ICAgICwgbV9jb2RlVHlwZShFdmFsQ29kZSkKICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDAp
CiAgICAgLCBtX2dsb2JhbENvbnN0YW50SW5kZXgoMCkKICAgICAsIG1faGFzQ3JlYXRlZEFjdGl2
YXRpb24odHJ1ZSkKICAgICAsIG1fZmlyc3RMYXp5RnVuY3Rpb24oMCkKICAgICAsIG1fbGFzdExh
enlGdW5jdGlvbigwKQotICAgICwgbV9nbG9iYWxEYXRhKHNjb3BlLT5nbG9iYWxEYXRhKCkpCisg
ICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9l
bmQpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTU2
NywxMyArNDk0LDkgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxO
b2RlKiBldmFsTm9kZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFMKICAgICAsIG1fdXNlc0V4Y2Vw
dGlvbnMoZmFsc2UpCiAgICAgLCBtX2V4cHJlc3Npb25Ub29EZWVwKGZhbHNlKQogewotICAgIG1f
Z2xvYmFsRGF0YS0+c3RhcnRlZENvbXBpbGluZyhtX2NvZGVCbG9jayk7Ci0KLSAgICBpZiAobV9z
aG91bGRFbWl0RGVidWdIb29rcyB8fCBtX2Jhc2VTY29wZURlcHRoKQotICAgICAgICBtX2NvZGVC
bG9jay0+c2V0TmVlZHNGdWxsU2NvcGVDaGFpbih0cnVlKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0
TmVlZHNGdWxsU2NvcGVDaGFpbih0cnVlKTsKIAotICAgIGNvZGVCbG9jay0+c2V0R2xvYmFsRGF0
YShtX2dsb2JhbERhdGEpOwotICAgIHN5bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChj
b2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOyAgICAK
KyAgICBtX3N5bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNF
dmFsKCkgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAgIG1fY29kZUJsb2NrLT5z
ZXROdW1QYXJhbWV0ZXJzKDEpOwogCiAgICAgcHJlcGVuZENvbW1lbnQoImVudGVyaW5nIEV2YWwg
YmxvY2siKTsKQEAgLTU4MSw3ICs1MDQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkUwogCiAg
ICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2sg
PSBldmFsTm9kZS0+ZnVuY3Rpb25TdGFjaygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZEZ1bmN0
aW9uRGVjbChGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlv
blN0YWNrW2ldKSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1
bmN0aW9uKGZ1bmN0aW9uU3RhY2tbaV0pKTsKIAogICAgIGNvbnN0IERlY2xhcmF0aW9uU3RhY2tz
OjpWYXJTdGFjayYgdmFyU3RhY2sgPSBldmFsTm9kZS0+dmFyU3RhY2soKTsKICAgICB1bnNpZ25l
ZCBudW1WYXJpYWJsZXMgPSB2YXJTdGFjay5zaXplKCk7CkBAIC01OTUsNyArNTE4LDYgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgSlNT
Y29wZSogc2NvcGUsIFNoYXJlZFMKIAogQnl0ZWNvZGVHZW5lcmF0b3I6On5CeXRlY29kZUdlbmVy
YXRvcigpCiB7Ci0gICAgbV9nbG9iYWxEYXRhLT5maW5pc2hlZENvbXBpbGluZyhtX2NvZGVCbG9j
ayk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5pdExhenlSZWdp
c3RlcihSZWdpc3RlcklEKiByZWcpCkBAIC02MTgsMTcgKzU0MCw2IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9u
Qm9keU5vZGUpCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChmdW5j
dGlvbkJvZHlOb2RlLT5pZGVudCgpKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCht
X2NhbGxlZVJlZ2lzdGVyLmluZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
UmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLQotICAgICAgICAvLyBQdXQgYSBtaXJyb3Igb2JqZWN0
IGluIGNvbXBpbGF0aW9uIHNjb3BlLCBzbyBjb21waWxlLXRpbWUgdmFyaWFibGUgcmVzb2x1dGlv
biBzZWVzIHRoZSBwcm9wZXJ0eSBuYW1lIHdlJ2xsIHNlZSBhdCBydW50aW1lLgotICAgICAgICBt
X3Njb3BlLnNldCgqZ2xvYmFsRGF0YSgpLAotICAgICAgICAgICAgSlNOYW1lU2NvcGU6OmNyZWF0
ZSgKLSAgICAgICAgICAgICAgICBtX3Njb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
LAotICAgICAgICAgICAgICAgIGZ1bmN0aW9uQm9keU5vZGUtPmlkZW50KCksCi0gICAgICAgICAg
ICAgICAganNVbmRlZmluZWQoKSwKLSAgICAgICAgICAgICAgICBSZWFkT25seSB8IERvbnREZWxl
dGUsCi0gICAgICAgICAgICAgICAgbV9zY29wZS5nZXQoKQotICAgICAgICAgICAgKQotICAgICAg
ICApOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTc3Miw3ICs2ODMsNyBAQCB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQogICAgIG1f
bGFzdE9wY29kZVBvc2l0aW9uID0gb3Bjb2RlUG9zaXRpb247CiAjZW5kaWYKICAgICBlbWl0Q29t
bWVudCgpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChnbG9iYWxEYXRhKCktPmludGVycHJl
dGVyLT5nZXRPcGNvZGUob3Bjb2RlSUQpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQob3Bj
b2RlSUQpOwogICAgIG1fbGFzdE9wY29kZUlEID0gb3Bjb2RlSUQ7CiB9CiAKQEAgLTc5NiwyMSAr
NzA3LDIxIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnByZXBlbmRDb21tZW50KGNvbnN0IGNo
YXIqIHN0cmluZykKIH0KICNlbmRpZgogCi1BcnJheVByb2ZpbGUqIEJ5dGVjb2RlR2VuZXJhdG9y
OjpuZXdBcnJheVByb2ZpbGUoKQorVW5saW5rZWRBcnJheVByb2ZpbGUgQnl0ZWNvZGVHZW5lcmF0
b3I6Om5ld0FycmF5UHJvZmlsZSgpCiB7CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQotICAg
IHJldHVybiBtX2NvZGVCbG9jay0+YWRkQXJyYXlQcm9maWxlKGluc3RydWN0aW9ucygpLnNpemUo
KSk7CisgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRBcnJheVByb2ZpbGUoKTsKICNlbHNlCiAg
ICAgcmV0dXJuIDA7CiAjZW5kaWYKIH0KIAotVmFsdWVQcm9maWxlKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQorVW5saW5rZWRWYWx1ZVBy
b2ZpbGUgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlZE9wY29kZShPcGNvZGVJRCBvcGNv
ZGVJRCkKIHsKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAgVmFsdWVQcm9maWxlKiBy
ZXN1bHQgPSBtX2NvZGVCbG9jay0+YWRkVmFsdWVQcm9maWxlKGluc3RydWN0aW9ucygpLnNpemUo
KSk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcmVzdWx0ID0gbV9jb2RlQmxvY2stPmFkZFZh
bHVlUHJvZmlsZSgpOwogI2Vsc2UKLSAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IDA7CisgICAg
VW5saW5rZWRWYWx1ZVByb2ZpbGUgcmVzdWx0ID0gMDsKICNlbmRpZgogICAgIGVtaXRPcGNvZGUo
b3Bjb2RlSUQpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04NDAsMTQgKzc1MSw2IEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnJldHJpZXZlTGFzdFVuYXJ5T3AoaW50JiBkc3RJbmRleCwgaW50
JiBzcmNJbmRleCkKICAgICBzcmNJbmRleCA9IGluc3RydWN0aW9ucygpLmF0KHNpemUgLSAxKS51
Lm9wZXJhbmQ7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJldHJpZXZlTGFzdFVuYXJ5
T3AoV3JpdGVCYXJyaWVyPFVua25vd24+KiYgZHN0UG9pbnRlciwgaW50JiBzcmNJbmRleCkKLXsK
LSAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpID49IDMpOwotICAgIHNpemVfdCBzaXpl
ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIGRzdFBvaW50ZXIgPSBpbnN0cnVjdGlvbnMo
KS5hdChzaXplIC0gMikudS5yZWdpc3RlclBvaW50ZXI7Ci0gICAgc3JjSW5kZXggPSBpbnN0cnVj
dGlvbnMoKS5hdChzaXplIC0gMSkudS5vcGVyYW5kOwotfQotCiB2b2lkIEFMV0FZU19JTkxJTkUg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnJld2luZEJpbmFyeU9wKCkKIHsKICAgICBBU1NFUlQoaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpID49IDQpOwpAQCAtMTMzNiw3ICsxMjM5LDcgQEAgUmVzb2x2ZVJlc3Vs
dCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkK
ICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZSh0aGlzUmVnaXN0
ZXIoKSwgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlGbGFnKTsKIAogICAgIC8vIENoZWNrIGlmIHRo
ZSBwcm9wZXJ0eSBzaG91bGQgYmUgYWxsb2NhdGVkIGluIGEgcmVnaXN0ZXIuCi0gICAgaWYgKG1f
Y29kZVR5cGUgIT0gR2xvYmFsQ29kZSAmJiBzaG91bGRPcHRpbWl6ZUxvY2FscygpKSB7CisgICAg
aWYgKG1fY29kZVR5cGUgIT0gR2xvYmFsQ29kZSAmJiBzaG91bGRPcHRpbWl6ZUxvY2FscygpICYm
IG1fc3ltYm9sVGFibGUpIHsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJv
bFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxs
KCkpIHsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzKQpAQCAtMTM1Miw3ICsxMjU1LDcgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRv
cjo6cmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIFJlc29sdmVSZXN1bHQgQnl0
ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDb25zdERlY2woY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHkpCiB7CiAgICAgLy8gUmVnaXN0ZXItYWxsb2NhdGVkIGNvbnN0IGRlY2xhcmF0aW9ucy4KLSAg
ICBpZiAobV9jb2RlVHlwZSAhPSBFdmFsQ29kZSAmJiBtX2NvZGVUeXBlICE9IEdsb2JhbENvZGUp
IHsKKyAgICBpZiAobV9jb2RlVHlwZSAhPSBFdmFsQ29kZSAmJiBtX2NvZGVUeXBlICE9IEdsb2Jh
bENvZGUgJiYgbV9zeW1ib2xUYWJsZSkgewogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKICAgICAgICAgaWYgKCFlbnRy
eS5pc051bGwoKSkgewogICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MgPSBlbnRyeS5pc1JlYWRP
bmx5KCkgPyBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUZsYWcgOiAwOwpAQCAtMTM5NCw3ICsxMjk3
LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYKICAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc1Jl
Z2lzdGVyKCkpCiAgICAgICAgIHJldHVybiBlbWl0R2V0TG9jYWxWYXIoZHN0LCByZXNvbHZlUmVz
dWx0LCBwcm9wZXJ0eSk7CiAKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmls
ZWRPcGNvZGUob3BfcmVzb2x2ZSk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQo
cHJvcGVydHkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZ2V0UmVzb2x2ZU9wZXJhdGlv
bnMocHJvcGVydHkpKTsKQEAgLTE0MDYsNyArMTMwOSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2UoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZl
UmVzCiB7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlUmVzdWx0LCAhcmVzb2x2ZVJlc3VsdC5p
c1JlZ2lzdGVyKCkpOwogICAgIC8vIFdlIGNhbid0IG9wdGltaXNlIGF0IGFsbCA6LSgKLSAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV9iYXNl
KTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2Rl
KG9wX3Jlc29sdmVfYmFzZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgo
KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsKQEAgLTE0MjAsNyArMTMyMyw3IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2VGb3JQdXQoUmVnaXN0
ZXJJRCogZHN0LCBjb25zdCBSZXNvCiB7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlUmVzdWx0
LCAhcmVzb2x2ZVJlc3VsdC5pc1JlZ2lzdGVyKCkpOwogICAgIC8vIFdlIGNhbid0IG9wdGltaXNl
IGF0IGFsbCA6LSgKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNv
ZGUob3BfcmVzb2x2ZV9iYXNlKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0g
ZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfYmFzZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0
YW50KHByb3BlcnR5KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJsb2NrLT5p
c1N0cmljdE1vZGUoKSk7CkBAIC0xNDM1LDcgKzEzMzgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVCYXNlRm9yUHV0KFJlZ2lzdGVySUQqIGRzdCwgY29uc3Qg
UmVzbwogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aEJhc2VG
b3JQdXQoUmVnaXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwgY29uc3QgUmVz
b2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3VsdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIE5v
bmxvY2FsUmVzb2x2ZUluZm8mIHZlcmlmaWVyKQogewogICAgIEFTU0VSVF9VTlVTRUQocmVzb2x2
ZVJlc3VsdCwgIXJlc29sdmVSZXN1bHQuaXNSZWdpc3RlcigpKTsKLSAgICBWYWx1ZVByb2ZpbGUq
IHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX2Jhc2UpOworICAg
IFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVz
b2x2ZV93aXRoX2Jhc2UpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlRHN0LT5pbmRl
eCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcERzdC0+aW5kZXgoKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CkBAIC0xNDU1LDcg
KzEzNTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVXaXRo
VGhpcyhSZWdpc3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcgogICAgICAgICByZXR1cm4gYmFzZURz
dDsKICAgICB9CiAKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNv
ZGUob3BfcmVzb2x2ZV93aXRoX3RoaXMpOworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2Zp
bGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX3RoaXMpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChiYXNlRHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQocHJvcERzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENv
bnN0YW50KHByb3BlcnR5KSk7CkBAIC0xNDgyLDIzICsxMzg1LDExIEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0TG9jYWxWYXIoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBS
ZXNvbHZlUmVzCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluaXRHbG9iYWxD
b25zdChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsK
ICAgICBBU1NFUlQobV9jb2RlVHlwZSA9PSBHbG9iYWxDb2RlKTsKLSAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgIFN5bWJv
bFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChpZGVu
dGlmaWVyLmltcGwoKSk7Ci0gICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICBpZiAoZW50cnkuY291bGRCZVdhdGNoZWQoKSkgewotICAgICAgICBlbWl0
T3Bjb2RlKG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKCZnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkpOwot
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZW50cnkuYWRkcmVzc09mSXNXYXRjaGVkKCkpOwotICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgfQotICAgIAotICAgIGVtaXRPcGNvZGUob3BfaW5pdF9nbG9i
YWxfY29uc3QpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgmZ2xvYmFsT2JqZWN0LT5yZWdp
c3RlckF0KGVudHJ5LmdldEluZGV4KCkpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2luaXRfZ2xvYmFs
X2NvbnN0X25vcCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KDApOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7
CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xNTExLDcgKzE0MDIsNyBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBjbwogewogICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CiAKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2Zp
bGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2J5X2lkKTsKKyAgICBVbmxpbmtlZFZhbHVl
UHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9ieV9pZCk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGJhc2UtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25z
dGFudChwcm9wZXJ0eSkpOwpAQCAtMTU5Nyw4ICsxNDg4LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXREZWxldGVCeUlkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRBcmd1bWVudEJ5
VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVy
dHkpCiB7Ci0gICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUo
KTsKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0
X2FyZ3VtZW50X2J5X3ZhbCk7CisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxl
ID0gbmV3QXJyYXlQcm9maWxlKCk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBBU1NFUlQoYmFzZS0+aW5kZXgoKSA9
PSBtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGJhc2UtPmluZGV4KCkpOwpAQCAtMTYyMyw4ICsxNTE0LDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGJhc2UsIFIKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKLSAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2J5X3ZhbCk7
CisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxl
KCk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29k
ZShvcF9nZXRfYnlfdmFsKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKQEAgLTE2MzUsNyArMTUyNiw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UHV0QnlWYWwoUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJl
Z2lzdGVySUQqIHZhbHVlKQogewotICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbmV3
QXJyYXlQcm9maWxlKCk7CisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0g
bmV3QXJyYXlQcm9maWxlKCk7CiAgICAgZW1pdE9wY29kZShvcF9wdXRfYnlfdmFsKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKQEAgLTE3MDUsNyArMTU5Niw3IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3QXJyYXkoUmVnaXN0ZXJJRCogZHN0LCBFbGVt
ZW50Tm9kZSogZWxlbWVuCiAgICAgICAgIGlmICghaGFkVmFyaWFibGVFeHByZXNzaW9uKSB7CiAg
ICAgICAgICAgICBBU1NFUlQobGVuZ3RoID09IGNoZWNrTGVuZ3RoKTsKICAgICAgICAgICAgIHVu
c2lnbmVkIGNvbnN0YW50QnVmZmVySW5kZXggPSBhZGRDb25zdGFudEJ1ZmZlcihsZW5ndGgpOwot
ICAgICAgICAgICAgSlNWYWx1ZSogY29uc3RhbnRCdWZmZXIgPSBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRCdWZmZXIoY29uc3RhbnRCdWZmZXJJbmRleCk7CisgICAgICAgICAgICBKU1ZhbHVlKiBjb25z
dGFudEJ1ZmZlciA9IG1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihjb25zdGFudEJ1ZmZlcklu
ZGV4KS5kYXRhKCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgICAg
ICBmb3IgKEVsZW1lbnROb2RlKiBuID0gZWxlbWVudHM7IGluZGV4IDwgbGVuZ3RoOyBuID0gbi0+
bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG4tPnZhbHVlKCktPmlzTnVtYmVyKCkpCkBA
IC0xNzQxLDE0ICsxNjMyLDE0IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TmV3QXJyYXkoUmVnaXN0ZXJJRCogZHN0LCBFbGVtZW50Tm9kZSogZWxlbWVuCiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBG
dW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbikKIHsKLSAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9u
SW50ZXJuYWwoZHN0LCBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSksIGZhbHNlKTsKKyAgICByZXR1
cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25E
ZWNsKG1ha2VGdW5jdGlvbihmdW5jdGlvbikpLCBmYWxzZSk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVu
Y3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24pCiB7CiAgICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFkZFJl
c3VsdCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwogICAgIGlmIChw
dHIuaXNOZXdFbnRyeSkKLSAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2Nr
LT5hZGRGdW5jdGlvbkRlY2woRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0
YSwgZnVuY3Rpb24pKTsKKyAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2Nr
LT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7CiAgICAgcmV0dXJuIGVt
aXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJhdG9yLT52YWx1ZSwgdHJ1ZSk7CiB9
CiAKQEAgLTE3NzMsNyArMTY2NCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0TmV3UmVnRXhwKFJlZ2lzdGVySUQqIGRzdCwgUmVnRXhwKiByZWdFeHApCiBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklE
KiByMCwgRnVuY0V4cHJOb2RlKiBuKQogewogICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9u
ID0gbi0+Ym9keSgpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0
aW9uRXhwcihGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlv
bikpOworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRXhwciht
YWtlRnVuY3Rpb24oZnVuY3Rpb24pKTsKICAgICAKICAgICBjcmVhdGVBY3RpdmF0aW9uSWZOZWNl
c3NhcnkoKTsKICAgICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jX2V4cCk7CkBAIC0xOTI0LDcgKzE4
MTUsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaQogICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBl
bWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkb25lLmdldCgpKTsKICAgICAKICAgICAvLyBFbWl0IGNhbGwuCi0gICAg
QXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKKyAgICBVbmxp
bmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKICAgICBl
bWl0T3Bjb2RlKG9wY29kZUlEKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5k
ZXgoKSk7IC8vIGZ1bmMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsgLy8gYXJnQ291bnQKQEAgLTE5MzYsNyArMTgy
Nyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvZGVJRCBv
cGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpCiAjZW5kaWYKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYXJyYXlQcm9maWxlKTsKICAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSkg
ewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3Bf
Y2FsbF9wdXRfcmVzdWx0KTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsgLy8gZHN0CiAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChwcm9maWxlKTsKICAgICB9CkBAIC0xOTY5LDcgKzE4NjAsNyBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZnVuYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd1bWVudHMtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmaXJzdEZyZWVSZWdpc3Rlci0+aW5k
ZXgoKSk7CiAgICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpIHsKLSAgICAgICAgVmFsdWVQ
cm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7
CisgICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNv
ZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRz
dC0+aW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAg
ICB9CkBAIC0yMDUyLDcgKzE5NDMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdENvbnN0cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsCiAjZW5kaWYK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVz
dWx0KCkpIHsKLSAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bj
b2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CisgICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHBy
b2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7IC8vIGRzdAogICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgfQpAQCAtMjQzMSw3ICsyMzIyLDcgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFRyeUFuZEVtaXRDYXRjaChUcnlEYXRh
KiB0cnlEYXRhLCBSZWdpc3RlcklEKgogICAgIG1fdHJ5Q29udGV4dFN0YWNrLnJlbW92ZUxhc3Qo
KTsKICAgICAKICAgICBlbWl0TGFiZWwodHJ5UmFuZ2UudHJ5RGF0YS0+dGFyZ2V0LmdldCgpKTsK
LSAgICB0cnlSYW5nZS50cnlEYXRhLT50YXJnZXRTY29wZURlcHRoID0gbV9keW5hbWljU2NvcGVE
ZXB0aCArIG1fYmFzZVNjb3BlRGVwdGg7CisgICAgdHJ5UmFuZ2UudHJ5RGF0YS0+dGFyZ2V0U2Nv
cGVEZXB0aCA9IG1fZHluYW1pY1Njb3BlRGVwdGg7CiAKICAgICBlbWl0T3Bjb2RlKG9wX2NhdGNo
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0UmVnaXN0ZXItPmluZGV4KCkpOwpA
QCAtMjQ5Miw3ICsyMzgzLDcgQEAgc3RhdGljIGludDMyX3Qga2V5Rm9ySW1tZWRpYXRlU3dpdGNo
KEV4cHJlc3Npb25Ob2RlKiBub2RlLCBpbnQzMl90IG1pbiwgaW50MzJfdAogICAgIHJldHVybiBr
ZXkgLSBtaW47CiB9CiAKLXN0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JJbW1lZGlhdGVT
d2l0Y2goU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUsIGludDMyX3Qgc3dpdGNoQWRkcmVzcywg
dWludDMyX3QgY2xhdXNlQ291bnQsIFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRXhwcmVzc2lvbk5v
ZGUqKiBub2RlcywgaW50MzJfdCBtaW4sIGludDMyX3QgbWF4KQorc3RhdGljIHZvaWQgcHJlcGFy
ZUp1bXBUYWJsZUZvckltbWVkaWF0ZVN3aXRjaChVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYganVt
cFRhYmxlLCBpbnQzMl90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNsYXVzZUNvdW50LCBSZWZQ
dHI8TGFiZWw+KiBsYWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMsIGludDMyX3QgbWluLCBp
bnQzMl90IG1heCkKIHsKICAgICBqdW1wVGFibGUubWluID0gbWluOwogICAgIGp1bXBUYWJsZS5i
cmFuY2hPZmZzZXRzLnJlc2l6ZShtYXggLSBtaW4gKyAxKTsKQEAgLTI1MTgsNyArMjQwOSw3IEBA
IHN0YXRpYyBpbnQzMl90IGtleUZvckNoYXJhY3RlclN3aXRjaChFeHByZXNzaW9uTm9kZSogbm9k
ZSwgaW50MzJfdCBtaW4sIGludDMyX3QKICAgICByZXR1cm4ga2V5IC0gbWluOwogfQogCi1zdGF0
aWMgdm9pZCBwcmVwYXJlSnVtcFRhYmxlRm9yQ2hhcmFjdGVyU3dpdGNoKFNpbXBsZUp1bXBUYWJs
ZSYganVtcFRhYmxlLCBpbnQzMl90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNsYXVzZUNvdW50
LCBSZWZQdHI8TGFiZWw+KiBsYWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMsIGludDMyX3Qg
bWluLCBpbnQzMl90IG1heCkKK3N0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JDaGFyYWN0
ZXJTd2l0Y2goVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50MzJfdCBzd2l0
Y2hBZGRyZXNzLCB1aW50MzJfdCBjbGF1c2VDb3VudCwgUmVmUHRyPExhYmVsPiogbGFiZWxzLCBF
eHByZXNzaW9uTm9kZSoqIG5vZGVzLCBpbnQzMl90IG1pbiwgaW50MzJfdCBtYXgpCiB7CiAgICAg
anVtcFRhYmxlLm1pbiA9IG1pbjsKICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNpemUo
bWF4IC0gbWluICsgMSk7CkBAIC0yNTMxLDcgKzI0MjIsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJl
SnVtcFRhYmxlRm9yQ2hhcmFjdGVyU3dpdGNoKFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlLCBp
bnQzMgogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZvclN0cmluZ1N3
aXRjaChTdHJpbmdKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50MzJfdCBzd2l0Y2hBZGRyZXNzLCB1
aW50MzJfdCBjbGF1c2VDb3VudCwgUmVmUHRyPExhYmVsPiogbGFiZWxzLCBFeHByZXNzaW9uTm9k
ZSoqIG5vZGVzKQorc3RhdGljIHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZvclN0cmluZ1N3aXRjaChV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlLCBpbnQzMl90IHN3aXRjaEFkZHJlc3Ms
IHVpbnQzMl90IGNsYXVzZUNvdW50LCBSZWZQdHI8TGFiZWw+KiBsYWJlbHMsIEV4cHJlc3Npb25O
b2RlKiogbm9kZXMpCiB7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNsYXVzZUNvdW50
OyArK2kpIHsKICAgICAgICAgLy8gV2UncmUgZW1pdHRpbmcgdGhpcyBhZnRlciB0aGUgY2xhdXNl
IGxhYmVscyBzaG91bGQgaGF2ZSBiZWVuIGZpeGVkLCBzbyAKQEAgLTI1NDAsOSArMjQzMSw3IEBA
IHN0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0Y2goU3RyaW5nSnVtcFRh
YmxlJiBqdW1wVGFibGUsIGludDMyX3QKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2Rlc1tp
XS0+aXNTdHJpbmcoKSk7CiAgICAgICAgIFN0cmluZ0ltcGwqIGNsYXVzZSA9IHN0YXRpY19jYXN0
PFN0cmluZ05vZGUqPihub2Rlc1tpXSktPnZhbHVlKCkuaW1wbCgpOwotICAgICAgICBPZmZzZXRM
b2NhdGlvbiBsb2NhdGlvbjsKLSAgICAgICAgbG9jYXRpb24uYnJhbmNoT2Zmc2V0ID0gbGFiZWxz
W2ldLT5iaW5kKHN3aXRjaEFkZHJlc3MsIHN3aXRjaEFkZHJlc3MgKyAzKTsKLSAgICAgICAganVt
cFRhYmxlLm9mZnNldFRhYmxlLmFkZChjbGF1c2UsIGxvY2F0aW9uKTsKKyAgICAgICAganVtcFRh
YmxlLm9mZnNldFRhYmxlLmFkZChjbGF1c2UsIGxhYmVsc1tpXS0+YmluZChzd2l0Y2hBZGRyZXNz
LCBzd2l0Y2hBZGRyZXNzICsgMykpOwogICAgIH0KIH0KIApAQCAtMjU1NCwyMCArMjQ0MywyMCBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbmRTd2l0Y2godWludDMyX3QgY2xhdXNlQ291bnQs
IFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRQogICAgICAgICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJ
bmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMV0gPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVT
d2l0Y2hKdW1wVGFibGVzKCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpW3N3aXRjaEluZm8uYnl0
ZWNvZGVPZmZzZXQgKyAyXSA9IGRlZmF1bHRMYWJlbC0+YmluZChzd2l0Y2hJbmZvLmJ5dGVjb2Rl
T2Zmc2V0LCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMyk7CiAKLSAgICAgICAgU2ltcGxl
SnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkSW1tZWRpYXRlU3dpdGNoSnVt
cFRhYmxlKCk7CisgICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUgPSBt
X2NvZGVCbG9jay0+YWRkSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAgICAgIHByZXBh
cmVKdW1wVGFibGVGb3JJbW1lZGlhdGVTd2l0Y2goanVtcFRhYmxlLCBzd2l0Y2hJbmZvLmJ5dGVj
b2RlT2Zmc2V0LCBjbGF1c2VDb3VudCwgbGFiZWxzLCBub2RlcywgbWluLCBtYXgpOwogICAgIH0g
ZWxzZSBpZiAoc3dpdGNoSW5mby5zd2l0Y2hUeXBlID09IFN3aXRjaEluZm86OlN3aXRjaENoYXJh
Y3RlcikgewogICAgICAgICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0
ICsgMV0gPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCk7
CiAgICAgICAgIGluc3RydWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAyXSA9
IGRlZmF1bHRMYWJlbC0+YmluZChzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBzd2l0Y2hJbmZv
LmJ5dGVjb2RlT2Zmc2V0ICsgMyk7CiAgICAgICAgIAotICAgICAgICBTaW1wbGVKdW1wVGFibGUm
IGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoKTsK
KyAgICAgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSA9IG1fY29kZUJsb2Nr
LT5hZGRDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoKTsKICAgICAgICAgcHJlcGFyZUp1bXBUYWJs
ZUZvckNoYXJhY3RlclN3aXRjaChqdW1wVGFibGUsIHN3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQs
IGNsYXVzZUNvdW50LCBsYWJlbHMsIG5vZGVzLCBtaW4sIG1heCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKHN3aXRjaEluZm8uc3dpdGNoVHlwZSA9PSBTd2l0Y2hJbmZvOjpTd2l0Y2hT
dHJpbmcpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0
ICsgMV0gPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7CiAg
ICAgICAgIGluc3RydWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAyXSA9IGRl
ZmF1bHRMYWJlbC0+YmluZChzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBzd2l0Y2hJbmZvLmJ5
dGVjb2RlT2Zmc2V0ICsgMyk7CiAKLSAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFibGUg
PSBtX2NvZGVCbG9jay0+YWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCk7CisgICAgICAgIFVubGlu
a2VkU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKCk7CiAgICAgICAgIHByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0Y2go
anVtcFRhYmxlLCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBjbGF1c2VDb3VudCwgbGFiZWxz
LCBub2Rlcyk7CiAgICAgfQogfQpAQCAtMjU5OSw5ICsyNDg4LDcgQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKQogewogICAgIGlmICghaXNT
dHJpY3RNb2RlKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBl
cnJvciA9IGVtaXRMb2FkKG5ld1RlbXBvcmFyeSgpLCBKU1ZhbHVlKGNyZWF0ZVR5cGVFcnJvcihz
Y29wZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpKSk7Ci0gICAgZW1pdFRocm93KGVycm9yLmdldCgpKTsKKyAgICBl
bWl0VGhyb3dSZWZlcmVuY2VFcnJvcihTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCAyNDY1MzBhYjI4
NjhmOGZiNmZhNDU1YmNiMjMwYzI0MTQxNmI3MjE0Li44NTdlYzhmODQyN2Y3OWNlYzcxNTcxOWEx
M2VmODZjMDExYTVmM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiU3ltYm9sVGFibGUuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIk5vZGVz
LmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CkBAIC0yMTEsMTggKzIxMiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wg
ZHVtcHNHZW5lcmF0ZWRDb2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZHVtcHNHZW5lcmF0ZWRD
b2RlKCk7CiAKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqLCBKU1Njb3Bl
KiwgU2hhcmVkU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5k
KTsKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIEpTU2NvcGUq
LCBTaGFyZWRTeW1ib2xUYWJsZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7Ci0gICAg
ICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwgSlNTY29wZSosIFNoYXJlZFN5bWJvbFRh
YmxlKiwgRXZhbENvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CisgICAgICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSYsIFByb2dyYW1Ob2RlKiwgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOworICAgICAgICBCeXRlY29kZUdl
bmVyYXRvcihKU0dsb2JhbERhdGEmLCBGdW5jdGlvbkJvZHlOb2RlKiwgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKKyAgICAgICAgQnl0ZWNv
ZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiwgRXZhbE5vZGUqLCBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7CiAKICAgICAgICAgfkJ5dGVjb2RlR2Vu
ZXJhdG9yKCk7CiAgICAgICAgIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBj
b25zdCB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRp
ZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV9nbG9iYWxEYXRhLT5wcm9w
ZXJ0eU5hbWVzOyB9CiAKLSAgICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgeyByZXR1cm4gbV9j
b2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvcjsgfQorICAgICAgICBib29sIGlzQ29uc3RydWN0b3Io
KSB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpOyB9CiAKLSAgICAgICAgSlNP
YmplY3QqIGdlbmVyYXRlKCk7CisgICAgICAgIFBhcnNlckVycm9yIGdlbmVyYXRlKCk7CiAKICAg
ICAgICAgYm9vbCBpc0FyZ3VtZW50TnVtYmVyKGNvbnN0IElkZW50aWZpZXImLCBpbnQpOwogCkBA
IC0zMzIsMTAgKzMzMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdEV4
cHJlc3Npb25JbmZvKHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fc2hvdWxkRW1pdFJp
Y2hTb3VyY2VJbmZvKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGl2
b3QgLT0gbV9jb2RlQmxvY2stPnNvdXJjZU9mZnNldCgpOworICAgICAgICAgICAgZGl2b3QgLT0g
bV9zY29wZU5vZGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgICAgICBpZiAoZGl2
b3QgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhEaXZvdCkgewogICAgICAgICAgICAgICAgIC8v
IE92ZXJmbG93IGhhcyBvY2N1cnJlZCwgd2UgY2FuIG9ubHkgZ2l2ZSBsaW5lIG51bWJlciBpbmZv
IGZvciBlcnJvcnMgZm9yIHRoaXMgcmVnaW9uCiAgICAgICAgICAgICAgICAgZGl2b3QgPSAwOwpA
QCAtNTEwLDggKzUwOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVt
aXRQcm9maWxlSG9va3MoKSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3M7IH0KICAg
ICAgICAgCiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2stPmlzU3RyaWN0TW9kZSgpOyB9Ci0gICAgICAgIAotICAgICAgICBKU1Njb3BlKiBzY29w
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGUuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBMYWJlbDsKQEAgLTUyOSwxMSArNTI1LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogI2VuZGlmCiAKICAgICAgICAgdm9pZCBlbWl0T3Bjb2RlKE9wY29kZUlEKTsKLSAgICAg
ICAgQXJyYXlQcm9maWxlKiBuZXdBcnJheVByb2ZpbGUoKTsKLSAgICAgICAgVmFsdWVQcm9maWxl
KiBlbWl0UHJvZmlsZWRPcGNvZGUoT3Bjb2RlSUQpOworICAgICAgICBVbmxpbmtlZEFycmF5UHJv
ZmlsZSBuZXdBcnJheVByb2ZpbGUoKTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgZW1p
dFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEKTsKICAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RCaW5h
cnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMySW5kZXgpOwogICAg
ICAgICB2b2lkIHJldHJpZXZlTGFzdFVuYXJ5T3AoaW50JiBkc3RJbmRleCwgaW50JiBzcmNJbmRl
eCk7Ci0gICAgICAgIHZvaWQgcmV0cmlldmVMYXN0VW5hcnlPcChXcml0ZUJhcnJpZXI8VW5rbm93
bj4qJiBkc3RQb2ludGVyLCBpbnQmIHNyY0luZGV4KTsKICAgICAgICAgQUxXQVlTX0lOTElORSB2
b2lkIHJld2luZEJpbmFyeU9wKCk7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdpbmRV
bmFyeU9wKCk7CiAKQEAgLTU3NiwxMCArNTcxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgYWRkZWQgdmFyLgotICAg
ICAgICBlbnVtIENvbnN0YW50TW9kZSB7IElzQ29uc3RhbnQsIElzVmFyaWFibGUgfTsKLSAgICAg
ICAgZW51bSBGdW5jdGlvbk1vZGUgeyBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplLCBOb3RGdW5jdGlv
bk9yTm90U3BlY2lhbGl6YWJsZSB9OwotICAgICAgICBpbnQgYWRkR2xvYmFsVmFyKGNvbnN0IElk
ZW50aWZpZXImLCBDb25zdGFudE1vZGUsIEZ1bmN0aW9uTW9kZSk7Ci0KICAgICAgICAgdm9pZCBh
ZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYsIGludCBwYXJhbWV0ZXJJbmRleCk7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIHJlc29sdmVDYWxsZWUoRnVuY3Rpb25Cb2R5Tm9kZSopOwogICAgICAg
ICB2b2lkIGFkZENhbGxlZShGdW5jdGlvbkJvZHlOb2RlKiwgUmVnaXN0ZXJJRCopOwpAQCAtNjA2
LDE3ICs1OTcsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdW5zaWduZWQgYWRkQ29u
c3RhbnRCdWZmZXIodW5zaWduZWQgbGVuZ3RoKTsKICAgICAgICAgCisgICAgICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBtYWtlRnVuY3Rpb24oRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpjcmVhdGUobV9nbG9iYWxEYXRhLCBtX3Njb3BlTm9kZS0+c291cmNlKCksIGJvZHkpOworICAg
ICAgICB9CisKICAgICAgICAgSlNTdHJpbmcqIGFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElkZW50
aWZpZXImKTsKIAogICAgICAgICB2b2lkIGFkZExpbmVJbmZvKHVuc2lnbmVkIGxpbmVObykKICAg
ICAgICAgewotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFkZExpbmVJbmZvKGluc3RydWN0aW9u
cygpLnNpemUoKSwgbGluZU5vKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRMaW5lSW5m
byhpbnN0cnVjdGlvbnMoKS5zaXplKCksIGxpbmVObyAtIG1fc2NvcGVOb2RlLT5maXJzdExpbmUo
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SW5pdExhenlSZWdpc3Rl
cihSZWdpc3RlcklEKik7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIFZlY3RvcjxJbnN0cnVjdGlv
bj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CisgICAgICAgIFZl
Y3RvcjxVbmxpbmtlZEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0
cnVjdGlvbnM7IH0KIAogICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSB7
IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQogI2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykK
QEAgLTY1NCwxMyArNjUwLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNyZWF0
ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5
UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKik7CiAgICAgICAgIAotICAgICAgICBWZWN0
b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOworICAgICAgICBWZWN0b3I8VW5saW5rZWRJ
bnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CiAKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rczsKLSAgICAg
ICAgYm9vbCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbzsKIAotICAgICAgICBTdHJvbmc8SlNT
Y29wZT4gbV9zY29wZTsKICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7
CiAKICNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCkBAIC02NjksNyArNjYzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogICAgICAgICBTY29wZU5vZGUqIG1fc2NvcGVOb2RlOwot
ICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgICAgICBTdHJvbmc8VW5saW5rZWRD
b2RlQmxvY2s+IG1fY29kZUJsb2NrOwogCiAgICAgICAgIC8vIFNvbWUgb2YgdGhlc2Ugb2JqZWN0
cyBrZWVwIHBvaW50ZXJzIHRvIG9uZSBhbm90aGVyLiBUaGV5IGFyZSBhcnJhbmdlZAogICAgICAg
ICAvLyB0byBlbnN1cmUgYSBzYW5lIGRlc3RydWN0aW9uIG9yZGVyIHRoYXQgYXZvaWRzIHJlZmVy
ZW5jZXMgdG8gZnJlZWQgbWVtb3J5LgpAQCAtNjg3LDcgKzY4MSw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9sYXN0VmFyOwogICAgICAgICBpbnQgbV9m
aW5hbGx5RGVwdGg7CiAgICAgICAgIGludCBtX2R5bmFtaWNTY29wZURlcHRoOwotICAgICAgICBp
bnQgbV9iYXNlU2NvcGVEZXB0aDsKICAgICAgICAgQ29kZVR5cGUgbV9jb2RlVHlwZTsKIAogICAg
ICAgICBWZWN0b3I8Q29udHJvbEZsb3dDb250ZXh0PiBtX3Njb3BlQ29udGV4dFN0YWNrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKaW5kZXggMzczMWIwNDcz
MDJkYTM5MTJlNTc4OGE2MGFkZDEyY2I2NGM4YjRlOS4uYjE0NzI5MTQ2OGEyYjA1MDk4NDIxYjhk
MmI3MGVlZjA5NDU2NmZkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCkBAIC04MCw2ICs4MCw3IEBAIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJh
dG9yKCkoSlNDZWxsKiBjZWxsKQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnVuY3Rpb24tPnNj
b3BlKCktPmdsb2JhbE9iamVjdCgpLT5KU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpOwogICAg
IGV4ZWN1dGFibGUtPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CisgICAgZXhlY3V0YWJsZS0+
Y2xlYXJVbmxpbmtlZENvZGVJZk5vdENvbXBpbGluZygpOwogICAgIGlmIChtX2RlYnVnZ2VyID09
IGZ1bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKICAgICAgICAg
bV9zb3VyY2VQcm92aWRlcnMuYWRkKGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4
ZWMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaApp
bmRleCA2YjkwNTZlNTRhMThjNmJmZDAwMTMwM2I4ZjRlNGVlNjVhZDA2NGM3Li5lMTgzN2IwNDFk
NzI5MDY1OWMxNTA5NmU0ZjVlYTU4NjU4YjRmY2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIC8vIE5vcGUsIHNvIHRyeSB0byBwYXJzZSBvbmUuCiAgICAgICAgICAgICBKU09i
amVjdCogZXhjZXB0aW9uOwogICAgICAgICAgICAgdmFsdWUub3duZWQgPSB0cnVlOwotICAgICAg
ICAgICAgdmFsdWUuY29kZUJsb2NrID0ga2V5LmV4ZWN1dGFibGUoKS0+cHJvZHVjZUNvZGVCbG9j
a0ZvcihzY29wZSwgT3B0aW1pemluZ0NvbXBpbGF0aW9uLCBrZXkua2luZCgpLCBleGNlcHRpb24p
LmxlYWtQdHIoKTsKKyAgICAgICAgICAgIHZhbHVlLmNvZGVCbG9jayA9IGtleS5leGVjdXRhYmxl
KCktPnByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsIGtleS5raW5kKCksIGV4Y2VwdGlvbikubGVh
a1B0cigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBp
cyBhbnkgcmVhc29uIHRvIHJlamVjdCB0aGlzIGZyb20gb3VyIGNhY2hlLiBJZiBzbywgdGhlbgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRl
eCA3YTVlN2ZjNmEwNDQyYTMzOTRhMjc2MTRiNDNmYWVlYzc2N2FlODk3Li44MTc1NDI3MTUzNDli
OWQzN2IxNDBjMWMyMGM0Y2E3MjI4MzA3ZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMjY1Nyw2ICsyNjU3LDEwIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBvcF9p
bml0X2dsb2JhbF9jb25zdF9ub3A6IHsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luaXRf
Z2xvYmFsX2NvbnN0X25vcCk7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIG9wX2luaXRfZ2xv
YmFsX2NvbnN0OiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKApAQCAtMzY0
MCw3ICszNjQ0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAg
IGRhdGFMb2coIlBhcnNpbmcgY29kZSBibG9jayAlcC4gY29kZVR5cGUgPSAlcywgY2FwdHVyZUNv
dW50ID0gJXUsIG5lZWRzRnVsbFNjb3BlQ2hhaW4gPSAlcywgbmVlZHNBY3RpdmF0aW9uID0gJXMs
IGlzU3RyaWN0TW9kZSA9ICVzXG4iLAogICAgICAgICAgICAgY29kZUJsb2NrLAogICAgICAgICAg
ICAgY29kZVR5cGVUb1N0cmluZyhjb2RlQmxvY2stPmNvZGVUeXBlKCkpLAotICAgICAgICAgICAg
Y29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKSwKKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKSA/IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVy
ZUNvdW50KCkgOiAwLAogICAgICAgICAgICAgY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWlu
KCk/InRydWUiOiJmYWxzZSIsCiAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLT5uZWVkc0FjdGl2YXRpb24oKT8idHJ1ZSI6ImZhbHNlIiwKICAgICAgICAgICAgIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpPyJ0cnVlIjoiZmFsc2UiKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCmluZGV4IGU4MGNj
MjhhZTkxNzgzMjNhZDkxNWE2MDYzNGRlMWNkMmQwZmU0ZDcuLmRiZmJmYWUwNDJmNTAxMDI0NDNk
MjU3M2RiMTA2ODM5ODMzMWExOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
YXBhYmlsaXRpZXMuaApAQCAtMTY3LDYgKzE2Nyw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rp
CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CiAg
ICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CiAgICAgY2FzZSBvcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9pbml0X2ds
b2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBjYXNl
IG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOgogICAgIGNhc2Ugb3Bfam1wOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggMTNlMDQzODhjZDZhODU2
ZDZlYTM3YmJjNGY4ZWYwZjY2ZWJkZWFiNC4uMGU0NWUyMzBjMzk5Y2NhODFjNjRjNjJhZTlkNjNh
ZTE4M2U2ZjM2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCkBAIC0xMTU3LDggKzExNTcsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlv
biA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKAotICAgICAgICBnbG9iYWxEYXRhLCBleGVjLCBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVj
dXRhYmxlKCkpKTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246
OmNyZWF0ZShnbG9iYWxEYXRhLCBleGVjLCBleGVjLT5jb2RlQmxvY2soKSk7CiAgICAgZXhlYy0+
c2V0U2NvcGUoYWN0aXZhdGlvbik7CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IGNkMzM5M2FhMjBjMTU2NjRiMmE0NGNmYzYyOTM5
YzRlMmIyY2I0YmEuLmM0NTVmYzJiMTg5YjZmZjY3YTg5Y2Q5ZTU2NDE3ZDEzNDZjYTdkODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNPTk9iamVjdC5oIgogI2luY2x1ZGUgIlRyYWNpbmcu
aCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxp
bmVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CkBA
IC00ODQsMTMgKzQ4NSwxMyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCi0gICAgCisKICAgICAgICAgaWYgKG1fZ2xv
YmFsRGF0YS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgpKSB7CiAgICAgICAgICAgICBH
Q1BIQVNFKFZpc2l0QWN0aXZlQ29kZUJsb2NrKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9nbG9iYWxEYXRhLT5jb2RlQmxvY2tzQmVpbmdDb21waWxlZC5zaXplKCk7IGkr
KykKICAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVk
W2ldLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgfQotICAgIAorCiAgICAgICAg
IHsKICAgICAgICAgICAgIEdDUEhBU0UoVmlzaXRNYWNoaW5lUm9vdHMpOwogICAgICAgICAgICAg
TUFSS19MT0dfUk9PVCh2aXNpdG9yLCAiQysrIFN0YWNrIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCmluZGV4IDEzYmQ4ZTQ5M2QwZDdiM2YzOGU5ODNi
MzU1OTQ2N2MyMzNkNWI4NWMuLjg2NzQ4MWZlMzMyOTYxM2VjN2EyN2RmMzMzMDdiZWFhNTUwODgz
ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCkBA
IC03NCwxMCArNzQsMTggQEAgaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjppbml0KEhlYXAq
IGhlYXAsIE1hcmtlZFNwYWNlKiBtYXJrZWRTcGFjZSwgc2l6ZV90IGMKIGlubGluZSB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBieXRlcykKIHsKICAgICBNYXJrZWRCbG9j
azo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7Ci0gICAgaWYgKFVOTElLRUxZKCFo
ZWFkKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOworICAgIGlmIChV
TkxJS0VMWSghaGVhZCkpIHsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdGVTbG93Q2Fz
ZShieXRlcyk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBtZW1zZXQocmVzdWx0LCAweENELCBi
eXRlcyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAg
bV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKKyNpZm5kZWYgTkRFQlVHCisgICAgbWVtc2V0
KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKKyNlbmRpZgogICAgIHJldHVybiBoZWFkOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKaW5kZXggN2EzMGRlYmRhNGZj
ZGY4OGNkNTNlYTdmZjc2MWNhN2YzOGNiNWFjMy4uMzkxOTcwNWQwMGVhMTI5YTZjYTJiODRjYzA0
ZmM1NmZhZGNlOTNhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmNwcApAQCAtMjk0LDYgKzI5NCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
aW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSogc2xvdCkKICAgICBpZiAoIWNlbGwpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIHZhbGlkYXRlKGNlbGwpOworCiAgICAgaWYgKG1fc2hvdWxkSGFzaENvbnN0
ICYmIGNlbGwtPmlzU3RyaW5nKCkpIHsKICAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGpzQ2Fz
dDxKU1N0cmluZyo+KGNlbGwpOwogICAgICAgICBpZiAoc3RyaW5nLT5zaG91bGRUcnlIYXNoQ29u
c3QoKSAmJiBzdHJpbmctPnRyeUhhc2hDb25zdExvY2soKSkgewpAQCAtMzU1LDYgKzM1NywxMCBA
QCB2b2lkIFNsb3RWaXNpdG9yOjp2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAgICAgICAgICAgICAg
ICAgY2VsbC0+c3RydWN0dXJlKCktPnN0cnVjdHVyZSgpLCBwYXJlbnRDbGFzc05hbWUsIGNlbGws
IGNlbGwtPnN0cnVjdHVyZSgpLCBvdXJDbGFzc05hbWUpOwogICAgICAgICBDUkFTSCgpOwogICAg
IH0KKworICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gd2FsayB0aGUgQ2xhc3NJbmZvIGNoYWluCisg
ICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gY2VsbC0+Y2xhc3NJbmZvKCk7CisgICAgZG8geyB9
IHdoaWxlICgoaW5mbyA9IGluZm8tPnBhcmVudENsYXNzKSk7CiB9CiAjZWxzZQogdm9pZCBTbG90
VmlzaXRvcjo6dmFsaWRhdGUoSlNDZWxsKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDNlNjQ3MWIwZmY3ZjUwOTczMmQ5ZWE4
NzU4YjAzYzhlZTI3ZDM2ZTIuLjM5N2FjODQ3NDg0MWNjZWIwNDEyOGNiMGE5OGQ2OGY4YWI4ZTVi
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcApAQCAtOTQ4LDEwICs5NDgsMTMgQEAgZmFpbGVkSlNPTlA6CiAgICAgLy8gb2JqZWN0
LgogCiAgICAgLy8gQ29tcGlsZSBzb3VyY2UgdG8gYnl0ZWNvZGUgaWYgbmVjZXNzYXJ5OgotICAg
IEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmNvbXBpbGUoY2FsbEZyYW1lLCBzY29wZSk7Ci0g
ICAgaWYgKGVycm9yKQorICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5pbml0YWxp
emVHbG9iYWxQcm9wZXJ0aWVzKGdsb2JhbERhdGEsIGNhbGxGcmFtZSwgc2NvcGUpKQogICAgICAg
ICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgZXJyb3IpKTsKLSAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZwcm9ncmFtLT5nZW5lcmF0ZWRCeXRlY29kZSgpOwor
CisgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmNvbXBpbGUoY2FsbEZyYW1lLCBz
Y29wZSkpCisgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1l
LCBlcnJvcikpOworCisgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gJnByb2dyYW0t
PmdlbmVyYXRlZEJ5dGVjb2RlKCk7CiAKICAgICAvLyBQdXNoIHRoZSBjYWxsIGZyYW1lIGZvciB0
aGlzIGludm9jYXRpb246CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09
IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CmluZGV4IDJkMjk5MWI1ZmM4M2FkNzUxZDk0ZmU2MDc3Mjk3YTVkY2E1YmNmMTYuLmNhZjRjOWIz
ZmE0NmM1OGQ3Njc5NGRiODYxOTU5OWU5NDFmNGE3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKQEAgLTMzNiw2ICszMzYsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9wdXRfYnlfaW5kZXgpCiAgICAgICAgIERFRklORV9P
UChvcF9wdXRfYnlfdmFsKQogICAgICAgICBERUZJTkVfT1Aob3BfcHV0X2dldHRlcl9zZXR0ZXIp
CisgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgorICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wKTsKICAgICAgICAgREVGSU5FX09QKG9w
X2luaXRfZ2xvYmFsX2NvbnN0KQogICAgICAgICBERUZJTkVfT1Aob3BfaW5pdF9nbG9iYWxfY29u
c3RfY2hlY2spCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJp
dmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCmluZGV4IDMxOGI0
ZTdhYWViOGFiOTUzMjZhYzI2ZjJjMmU2NDEwMGZmMmIyOGYuLjY0NWM2NWIyODFlOGM2MjM1N2Zh
ZjkwZWEzMGUyN2Y0NmY2OTZjYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklURHJpdmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIu
aApAQCAtNzUsNyArNzUsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIE93blB0cjxDb2RlQmxvY2tUeXBlPiYgY29kZQogICAgIHJldHVybiB0
cnVlOwogfQogCi1pbmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKEV4
ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRD
b2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVj
aywgV3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFibGUsIEpJVENvZGU6
OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQoraW5saW5lIGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywg
SklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5
Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICAKQEAgLTk5LDcgKzk5LDYgQEAgaW5saW5l
IGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4ZWMsIE93
blB0cjxGdW5jdGlvbkNvZGUKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9j
YXN0PEZ1bmN0aW9uQ29kZUJsb2NrPihjb2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsK
LSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSk7CiAgICAgICAg
ICAgICBqaXRDb2RlID0gb2xkSklUQ29kZTsKICAgICAgICAgICAgIGppdENvZGVXaXRoQXJpdHlD
aGVjayA9IG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjazsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggYmE4Yzc2Y2ZiY2I5
NDJiODk1ZmMxMTI5MmJiNWY5ZWEyMTIyZWIwMC4uNWJlZmQzNzIzMjI0OWQwMmNiNzk3ODgzZTVi
YmJjZjkyYzAwMWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAg
LTIzMDgsNyArMjMwOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHVz
aF9hY3RpdmF0aW9uKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsK
IAotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBz
dGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKSk7CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0
aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSk7CiAgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOwog
ICAgIHJldHVybiBhY3RpdmF0aW9uOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnREYXRhLmNwcAppbmRleCA4ZTJkYWNmNGQ0YTMzMDFiYTc1ODhlOGE1OGE5MTA3OGM0Zjk2N2Ez
Li5lZWMzNzZiMzc5YWU4NjNkZTY1MTZjYzg3ZGIzNmRhYmM0ZjM5MWQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQg
RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIEFT
U0VSVChWYWx1ZU51bGwgPT0gVGFnQml0VHlwZU90aGVyKTsKICNlbmRpZgogICAgIEFTU0VSVChT
dHJpbmdUeXBlID09IDUpOwotICAgIEFTU0VSVChPYmplY3RUeXBlID09IDEzKTsKKyAgICBBU1NF
UlQoT2JqZWN0VHlwZSA9PSAxNyk7CiAgICAgQVNTRVJUKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PT0gMSk7CiAgICAgQVNTRVJUKEltcGxlbWVudHNIYXNJbnN0YW5jZSA9PSAyKTsKICAgICBBU1NF
UlQoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSA9PSA4KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDc0YmVhZTk4YTI3NDU4MzY4
MDI3NzBlYjI3ZjEyNTUzNmE1MWM3MTguLjVhM2E2YTg2ZWMxZmI2NjUyMGJkNDBmMTg3ZmEwYTUy
ZmEwYmY3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcApAQCAtNDYwLDcgKzQ2MCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9jcmVhdGVfYWN0aXZhdGlvbikKICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwogICAgIGRh
dGFMb2coIkNyZWF0aW5nIGFuIGFjdGl2YXRpb24sIGV4ZWMgPSAlcCFcbiIsIGV4ZWMpOwogI2Vu
ZGlmCi0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZXhlYywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlYy0+
Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKSk7CisgICAgSlNBY3RpdmF0aW9uKiBhY3Rp
dmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYywgZXhlYy0+Y29k
ZUJsb2NrKCkpOwogICAgIGV4ZWMtPnNldFNjb3BlKGFjdGl2YXRpb24pOwogICAgIExMSU5UX1JF
VFVSTihKU1ZhbHVlKGFjdGl2YXRpb24pKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCBiMjEyZmQ0ZDFhMzEzMzJl
ZDZhNjhkZDBkMWRlMTQ4Y2FjNGY3NDI0Li4yZjg1YTY3YTk0NGJkNGIyMmE2MTQwYzI0Nzg0OWNk
ZDQ5MThiOTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC05Niw3ICs5Niw3IEBAIGNvbnN0IFNsb3dQdXRBcnJheVN0
b3JhZ2VTaGFwZSA9IDMwCiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0g
NQotY29uc3QgT2JqZWN0VHlwZSA9IDEzCitjb25zdCBPYmplY3RUeXBlID0gMTcKIAogIyBUeXBl
IGZsYWdzIGNvbnN0YW50cy4KIGNvbnN0IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAxCkBAIC0x
MzMxLDYgKzEzMzEsOCBAQCBfbGxpbnRfb3BfcHV0X2J5X2lkX3JlcGxhY2U6CiBfbGxpbnRfb3Bf
cHV0X2J5X2lkX3RyYW5zaXRpb246CiAgICAgbm90U3VwcG9ydGVkKCkKIAorX2xsaW50X29wX2lu
aXRfZ2xvYmFsX2NvbnN0X25vcDoKKyAgICBkaXNwYXRjaCg1KQogCiAjIEluZGljYXRlIHRoZSBl
bmQgb2YgTExJbnQuCiBfbGxpbnRfZW5kOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQppbmRleCBkMDA3MmQ3MTQ2
NjkxMzlhYjQ4OGQ1NWJhNTI0NGExMWM2NTJjNTY0Li41NzI4ZmM2ZTZlZGVlNjQ5ZDIyNjIzMDEx
NjQ0YTBlMGZhYzQ1OWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQpAQCAtOTg0LDcgKzk4NCw3IEBAIF9s
bGludF9vcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICB3cml0ZUJhcnJpZXIodDIsIHQzKQogICAg
IHN0b3JlaSB0MiwgVGFnT2Zmc2V0W3QwXQogICAgIHN0b3JlaSB0MywgUGF5bG9hZE9mZnNldFt0
MF0KLSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3BhdGNoKDUpCiAKIAogX2xsaW50X29wX2luaXRf
Z2xvYmFsX2NvbnN0X2NoZWNrOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCBmYmQ3MTFlYjRhYTA1NjFkOWIzY2Ri
ZGM1N2NmMTA3ZDkxZDZhYTRkLi45ODE2Mzk0NjY1M2RjNzlkOGM5MzY1ZjZmNTdlMjViM2Y1OGE5
YTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQpAQCAtODIyLDcgKzgyMiw3IEBAIF9sbGludF9vcF9pbml0X2dsb2Jh
bF9jb25zdDoKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikKICAgICB3cml0ZUJh
cnJpZXIodDIpCiAgICAgc3RvcmVwIHQyLCBbdDBdCi0gICAgZGlzcGF0Y2goMykKKyAgICBkaXNw
YXRjaCg1KQogCiAKIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDNiMDMxNmY4MTY1YTA4NTZhMzI5NzU5NWNl
NTIxMjVkYzBmYTYzMmYuLmUzOGIxYTViYWZlNWMyYzMwNjY5NjA1MGRkYTEzOWMzZWZlMjRkNGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAtNzYsNiArNzYsNDcgQEAg
Q09NUElMRV9BU1NFUlQoTGFzdFVudGFnZ2VkVG9rZW4gPCA2NCwgTGVzc1RoYW42NFVudGFnZ2Vk
VG9rZW5zKTsKIGVudW0gU291cmNlRWxlbWVudHNNb2RlIHsgQ2hlY2tGb3JTdHJpY3RNb2RlLCBE
b250Q2hlY2tGb3JTdHJpY3RNb2RlIH07CiBlbnVtIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHsgRnVu
Y3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25OZWVkc05hbWUgfTsKIAorc3RydWN0IFBhcnNl
ckVycm9yIHsKKyAgICBlbnVtIEVycm9yVHlwZSB7IEVycm9yTm9uZSwgU3RhY2tPdmVyZmxvdywg
U3ludGF4RXJyb3IsIEV2YWxFcnJvciwgT3V0T2ZNZW1vcnkgfSBtX3R5cGU7CisgICAgU3RyaW5n
IG1fbWVzc2FnZTsKKyAgICBpbnQgbV9saW5lOworICAgIFBhcnNlckVycm9yKCkKKyAgICAgICAg
OiBtX3R5cGUoRXJyb3JOb25lKQorICAgICAgICAsIG1fbGluZSgtMSkKKyAgICB7CisgICAgfQor
CisgICAgUGFyc2VyRXJyb3IoRXJyb3JUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUp
CisgICAgICAgICwgbV9saW5lKC0xKQorICAgIHsKKyAgICB9CisKKyAgICBQYXJzZXJFcnJvcihF
cnJvclR5cGUgdHlwZSwgU3RyaW5nIG1zZywgaW50IGxpbmUpCisgICAgICAgIDogbV90eXBlKHR5
cGUpCisgICAgICAgICwgbV9tZXNzYWdlKG1zZykKKyAgICAgICAgLCBtX2xpbmUobGluZSkKKyAg
ICB7CisgICAgfQorCisgICAgSlNPYmplY3QqIHRvRXJyb3JPYmplY3QoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBFcnJvck5vbmU6CisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgY2FzZSBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBh
ZGRFcnJvckluZm8oZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGNyZWF0ZVN5bnRheEVycm9y
KGdsb2JhbE9iamVjdCwgbV9tZXNzYWdlKSwgbV9saW5lLCBzb3VyY2UpOworICAgICAgICBjYXNl
IEV2YWxFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihnbG9iYWxP
YmplY3QsIG1fbWVzc2FnZSk7CisgICAgICAgIGNhc2UgU3RhY2tPdmVyZmxvdzoKKyAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgY2FzZSBPdXRPZk1lbW9yeToKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKGdsb2JhbE9iamVjdCk7CisgICAgICAgIH0KKyAgICB9CisKK307CisKIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBpc0V2YWxOb2RlKCkgeyByZXR1cm4gZmFsc2U7IH0K
IHRlbXBsYXRlIDw+IGlubGluZSBib29sIGlzRXZhbE5vZGU8RXZhbE5vZGU+KCkgeyByZXR1cm4g
dHJ1ZTsgfQogCkBAIC0zNzAsNyArNDExLDcgQEAgcHVibGljOgogICAgIH5QYXJzZXIoKTsKIAog
ICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgotICAgIFBhc3NSZWZQdHI8UGFyc2VkTm9k
ZT4gcGFyc2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIERlYnVnZ2VyKiwg
RXhlY1N0YXRlKiwgSlNPYmplY3QqKik7CisgICAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJz
ZShQYXJzZXJFcnJvciYpOwogCiBwcml2YXRlOgogICAgIHN0cnVjdCBBbGxvd0luT3ZlcnJpZGUg
ewpAQCAtODkwLDcgKzkzMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX2xhc3RUb2tl
bkVuZDsKICAgICB9CiAKLSAgICBtdXRhYmxlIGNvbnN0IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxE
YXRhOworICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIGNvbnN0IFNvdXJjZUNv
ZGUqIG1fc291cmNlOwogICAgIFBhcnNlckFyZW5hKiBtX2FyZW5hOwogICAgIE93blB0cjxMZXhl
clR5cGU+IG1fbGV4ZXI7CkBAIC05MzUsMTIgKzk3NiwxMSBAQCBwcml2YXRlOgogICAgIH07CiB9
OwogCisKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgUGFy
c2VkTm9kZT4KLVBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciogZGVidWdnZXIs
IEV4ZWNTdGF0ZSogZGVidWdnZXJFeGVjU3RhdGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQorUGFz
c1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UoUGFyc2VyRXJyb3Im
IGVycm9yKQogewotICAgIEFTU0VSVChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBBU1NFUlQo
ZXhjZXB0aW9uICYmICEqZXhjZXB0aW9uKTsKICAgICBpbnQgZXJyTGluZTsKICAgICBTdHJpbmcg
ZXJyTXNnOwogCkBAIC05NzEsNyArMTAxMSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFy
c2VyPExleGVyVHlwZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqCiAg
ICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbjsKICAgICAgICAgbG9jYXRpb24ubGluZSA9
IG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCk7CiAgICAgICAgIGxvY2F0aW9uLmNvbHVtbiA9IG1f
bGV4ZXItPmN1cnJlbnRDb2x1bW5OdW1iZXIoKTsKLSAgICAgICAgcmVzdWx0ID0gUGFyc2VkTm9k
ZTo6Y3JlYXRlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksCisgICAgICAgIHJl
c3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0ZShtX2dsb2JhbERhdGEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc291cmNlRWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucyA/ICZtX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YSA6IDAs
CkBAIC05ODEsNyArMTAyMSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9udW1Db25zdGFudHMpOwogICAgICAgICByZXN1bHQtPnNldExv
YyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCksIG1fbGFzdExpbmUsIG1fbGV4ZXItPmN1cnJlbnRDb2x1
bW5OdW1iZXIoKSk7Ci0gICAgfSBlbHNlIGlmIChsZXhpY2FsR2xvYmFsT2JqZWN0KSB7CisgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gV2UgY2FuIG5ldmVyIHNlZSBhIHN5bnRheCBlcnJvciB3aGVu
IHJlcGFyc2luZyBhIGZ1bmN0aW9uLCBzaW5jZSB3ZSBzaG91bGQgaGF2ZQogICAgICAgICAvLyBy
ZXBvcnRlZCB0aGUgZXJyb3Igd2hlbiBwYXJzaW5nIHRoZSBjb250YWluaW5nIHByb2dyYW0gb3Ig
ZXZhbCBjb2RlLiBTbyBpZiB3ZSdyZQogICAgICAgICAvLyBwYXJzaW5nIGEgZnVuY3Rpb24gYm9k
eSBub2RlLCB3ZSBhc3N1bWUgdGhhdCB3aGF0IGFjdHVhbGx5IGhhcHBlbmVkIGhlcmUgaXMgdGhh
dApAQCAtOTg5LDM1ICsxMDI5LDMxIEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqCiAgICAgICAg
IC8vIGNvZGUgd2UgYXNzdW1lIHRoYXQgaXQgd2FzIGEgc3ludGF4IGVycm9yIHNpbmNlIHJ1bm5p
bmcgb3V0IG9mIHN0YWNrIGlzIG11Y2ggbGVzcwogICAgICAgICAvLyBsaWtlbHksIGFuZCB3ZSBh
cmUgY3VycmVudGx5IHVuYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSB0d28gY2FzZXMu
CiAgICAgICAgIGlmIChpc0Z1bmN0aW9uQm9keU5vZGUoc3RhdGljX2Nhc3Q8UGFyc2VkTm9kZSo+
KDApKSB8fCBtX2hhc1N0YWNrT3ZlcmZsb3cpCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlU3RhY2tPdmVyZmxvd0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICAgICAg
ZXJyb3IgPSBQYXJzZXJFcnJvcjo6U3RhY2tPdmVyZmxvdzsKICAgICAgICAgZWxzZSBpZiAoaXNF
dmFsTm9kZTxQYXJzZWROb2RlPigpKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN5
bnRheEVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIGVyck1zZyk7CisgICAgICAgICAgICBlcnJv
ciA9IFBhcnNlckVycm9yKFBhcnNlckVycm9yOjpFdmFsRXJyb3IsIGVyck1zZywgZXJyTGluZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBhZGRFcnJvckluZm8obGV4
aWNhbEdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBjcmVhdGVTeW50YXhFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBlcnJNc2cpLCBlcnJMaW5lLCAqbV9zb3VyY2UpOworICAgICAgICAgICAg
ZXJyb3IgPSBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3IsIGVyck1zZywgZXJy
TGluZSk7CiAgICAgfQogCi0gICAgaWYgKGRlYnVnZ2VyICYmICFQYXJzZWROb2RlOjpzY29wZUlz
RnVuY3Rpb24pCi0gICAgICAgIGRlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoZGVidWdnZXJFeGVjU3Rh
dGUsIG1fc291cmNlLT5wcm92aWRlcigpLCBlcnJMaW5lLCBlcnJNc2cpOwotCiAgICAgbV9hcmVu
YS0+cmVzZXQoKTsKIAogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCiB0ZW1wbGF0
ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KLVBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2UoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMs
IGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBK
U1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgRGVidWdnZXIqIGRlYnVnZ2VyLCBFeGVjU3RhdGUqIGV4
ZWNTdGF0ZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCitQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBh
cnNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBG
dW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpT
UGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgUGFy
c2VyRXJyb3ImIGVycm9yKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJQ
YXJzaW5nIik7CiAKICAgICBBU1NFUlQoIXNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2UoKS5pc051
bGwoKSk7Ci0KICAgICBpZiAoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlzOEJpdCgpKSB7
CiAgICAgICAgIFBhcnNlcjwgTGV4ZXI8TENoYXI+ID4gcGFyc2VyKGdsb2JhbERhdGEsIHNvdXJj
ZSwgcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7Ci0gICAgICAgIHJl
dHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgZGVidWdn
ZXIsIGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQ
YXJzZWROb2RlPihlcnJvcik7CiAgICAgfQogICAgIFBhcnNlcjwgTGV4ZXI8VUNoYXI+ID4gcGFy
c2VyKGdsb2JhbERhdGEsIHNvdXJjZSwgcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0bmVzcywgcGFy
c2VyTW9kZSk7Ci0gICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBkZWJ1Z2dlciwgZXhlY1N0YXRlLCBleGNlcHRpb24pOworICAgIHJldHVybiBw
YXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IpOwogfQogCi19IC8vIG5hbWVzcGFjZSAKK30g
Ly8gbmFtZXNwYWNlCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyTW9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
TW9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40MWZiN2ZkZjkwZGE1ZDVkYzUwYjk1Y2QzZjJjNjRkNDE2MmMy
MGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXJNb2Rlcy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgUGFyc2Vy
TW9kZXNfaAorI2RlZmluZSBQYXJzZXJNb2Rlc19oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVt
IEpTUGFyc2VyU3RyaWN0bmVzcyB7IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VTdHJpY3QgfTsKK2Vu
dW0gSlNQYXJzZXJNb2RlIHsgSlNQYXJzZVByb2dyYW1Db2RlLCBKU1BhcnNlRnVuY3Rpb25Db2Rl
IH07CisKK2VudW0gUHJvZmlsZXJNb2RlIHsgUHJvZmlsZXJPZmYsIFByb2ZpbGVyT24gfTsKK2Vu
dW0gRGVidWdnZXJNb2RlIHsgRGVidWdnZXJPZmYsIERlYnVnZ2VyT24gfTsKKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5z
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCmluZGV4IDZl
NmNlYzExNGQ0NDVlMzc4NjVmZWM4YzM5MWRmNWI1MWRlYzUxN2EuLjE0MTkxYjk1ZDdkM2I1YmNj
MDQxYjExOTc1ZWI1NTE1NmNkZGM3ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXJUb2tlbnMuaApAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBQYXJzZXJUb2tlbnNf
aAogI2RlZmluZSBQYXJzZXJUb2tlbnNfaAogCisjaW5jbHVkZSAiUGFyc2VyTW9kZXMuaCIKKwog
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIElkZW50aWZpZXI7CkBAIC0xNjEsOSArMTYzLDYgQEAg
c3RydWN0IEpTVG9rZW4gewogICAgIEpTVG9rZW5Mb2NhdGlvbiBtX2xvY2F0aW9uOwogfTsKIAot
ZW51bSBKU1BhcnNlclN0cmljdG5lc3MgeyBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlU3RyaWN0IH07
Ci1lbnVtIEpTUGFyc2VyTW9kZSB7IEpTUGFyc2VQcm9ncmFtQ29kZSwgSlNQYXJzZUZ1bmN0aW9u
Q29kZSB9OwotICAgIAogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmgKaW5kZXggN2M4YjY5YmQxMjQ1MWFjMWI2Njc2MGZmZGM2YjcxZmRiZmU1NWMyZi4uNzk2
MWQ0YmM4MzJkYjEzZDNlYmY4ZjhjZDJiZTBhMzZhMzk5YzY1NSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKQEAgLTI2Nyw4ICsyNjcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgbV9vdmVycm9kZUNhbGxlZSA9IGZhbHNlOwogICAgICAgICBtX292ZXJy
b2RlQ2FsbGVyID0gZmFsc2U7CiAgICAgICAgIG1faXNTdHJpY3RNb2RlID0ganNDYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmlzU3Ry
aWN0TW9kZSgpOwotCi0gICAgICAgIEFTU0VSVCghanNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPnN5bWJvbFRhYmxlKCktPnNsb3dB
cmd1bWVudHMoKSk7CisgICAgICAgIEFTU0VSVCghanNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPnN5bWJvbFRhYmxlKGlubGluZUNh
bGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0KS0+c2xvd0Fy
Z3VtZW50cygpKTsKIAogICAgICAgICAvLyBUaGUgYnl0ZWNvZGUgZ2VuZXJhdG9yIG9taXRzIG9w
X3RlYXJfb2ZmX2FjdGl2YXRpb24gaW4gY2FzZXMgb2Ygbm8KICAgICAgICAgLy8gZGVjbGFyZWQg
cGFyYW1ldGVycywgc28gd2UgbmVlZCB0byB0ZWFyIG9mZiBpbW1lZGlhdGVseS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjNzhmZDNk
NjFiMGRmMTMyNDQwOGU3MzljMzY1M2IwNDdmZjM2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCkBAIC0wLDAgKzEsMTg2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCisKKyNpbmNsdWRlICJCeXRlY29k
ZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKKyNpbmNs
dWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiVW5s
aW5rZWRDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0NvZGVDYWNoZTo6Q29kZUNh
Y2hlKCkKKyAgICA6IG1fcmFuZG9tR2VuZXJhdG9yKHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5k
b21OdW1iZXIoKSAqIFVJTlQzMl9NQVgpKQoreworfQorCitDb2RlQ2FjaGU6On5Db2RlQ2FjaGUo
KQoreworfQorCitDb2RlQ2FjaGU6OkNvZGVCbG9ja0tleSBDb2RlQ2FjaGU6Om1ha2VDb2RlQmxv
Y2tLZXkoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlQ2FjaGU6OkNvZGVUeXBlIHR5cGUs
IEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzKQoreworICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihzb3VyY2UudG9TdHJpbmcoKSwgKHR5cGUgPDwgMSkgfCBzdHJpY3RuZXNzKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBDYWNoZVR5cGVzIHsgfTsKKwordGVtcGxhdGUg
PD4gc3RydWN0IENhY2hlVHlwZXM8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAgdHlw
ZWRlZiBKU0M6OlByb2dyYW1Ob2RlIFJvb3ROb2RlOworICAgIHN0YXRpYyBjb25zdCBDb2RlQ2Fj
aGU6OkNvZGVUeXBlIGNvZGVUeXBlID0gQ29kZUNhY2hlOjpQcm9ncmFtVHlwZTsKK307CisKK3Rl
bXBsYXRlIDw+IHN0cnVjdCBDYWNoZVR5cGVzPFVubGlua2VkRXZhbENvZGVCbG9jaz4geworICAg
IHR5cGVkZWYgSlNDOjpFdmFsTm9kZSBSb290Tm9kZTsKKyAgICBzdGF0aWMgY29uc3QgQ29kZUNh
Y2hlOjpDb2RlVHlwZSBjb2RlVHlwZSA9IENvZGVDYWNoZTo6RXZhbFR5cGU7Cit9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4K
K1VubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2RlQmxvY2soSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2Rl
IGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVy
cm9yKQoreworICAgIENvZGVCbG9ja0tleSBrZXkgPSBtYWtlQ29kZUJsb2NrS2V5KHNvdXJjZSwg
Q2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojpjb2RlVHlwZSwgc3RyaWN0bmVzcyk7
CisgICAgYm9vbCBzdG9yZUluQ2FjaGUgPSBmYWxzZTsKKyAgICBpZiAoZGVidWdnZXJNb2RlID09
IERlYnVnZ2VyT2ZmICYmIHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9mZikgeworICAgICAgICBD
b2RlQmxvY2tJbmRpY2VzTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX2NhY2hlZENvZGVCbG9ja0lu
ZGljZXMuZmluZChrZXkpOworICAgICAgICBpZiAocmVzdWx0ICE9IG1fY2FjaGVkQ29kZUJsb2Nr
SW5kaWNlcy5lbmQoKSkgeworICAgICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxp
bmtlZENvZGUgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4obV9jYWNoZWRDb2RlQmxv
Y2tzW3Jlc3VsdC0+dmFsdWVdLnNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBm
aXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZENvZGUtPmZpcnN0TGluZSgp
OworICAgICAgICAgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2UodW5saW5rZWRDb2RlLT5jb2Rl
RmVhdHVyZXMoKSwgdW5saW5rZWRDb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBmaXJzdExp
bmUsIGZpcnN0TGluZSArIHVubGlua2VkQ29kZS0+bGluZUNvdW50KCkpOworICAgICAgICAgICAg
cmV0dXJuIHVubGlua2VkQ29kZTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZUluQ2FjaGUgPSB0
cnVlOworICAgIH0KKworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ2FjaGVUeXBlczxVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+OjpSb290Tm9kZSBSb290Tm9kZTsKKyAgICBSZWZQdHI8Um9vdE5vZGU+IHJv
b3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+KCZnbG9iYWxEYXRhLCBzb3VyY2UsIDAsIElkZW50aWZp
ZXIoKSwgc3RyaWN0bmVzcywgSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CisgICAgaWYgKCFy
b290Tm9kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgZXhlY3V0YWJsZS0+cmVjb3Jk
UGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpLCByb290Tm9kZS0+bGluZU5vKCksIHJvb3ROb2RlLT5sYXN0TGluZSgpKTsKKworICAgIFVu
bGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlID0gVW5saW5rZWRDb2RlQmxvY2tUeXBl
OjpjcmVhdGUoJmdsb2JhbERhdGEsIGV4ZWN1dGFibGUtPmV4ZWN1dGFibGVJbmZvKCkpOworICAg
IHVubGlua2VkQ29kZS0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2Rl
LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCByb290Tm9kZS0+bGluZU5vKCkgLSBzb3VyY2UuZmly
c3RMaW5lKCksIHJvb3ROb2RlLT5sYXN0TGluZSgpIC0gcm9vdE5vZGUtPmxpbmVObygpKTsKKyAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgcm9vdE5vZGUuZ2V0KCksIHVubGlua2VkQ29kZSwgZGVi
dWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CisgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVy
YXRlKCk7CisgICAgcm9vdE5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgaWYgKGVycm9yLm1fdHlw
ZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGlmIChzdG9yZUluQ2FjaGUpIHsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9yYW5kb21H
ZW5lcmF0b3IuZ2V0VWludDMyKCkgJSBrTWF4Q29kZUJsb2NrRW50cmllczsKKyAgICAgICAgaWYg
KG1fY2FjaGVkQ29kZUJsb2Nrc1tpbmRleF0uc2Vjb25kKQorICAgICAgICAgICAgbV9jYWNoZWRD
b2RlQmxvY2tJbmRpY2VzLnJlbW92ZShtX2NhY2hlZENvZGVCbG9ja3NbaW5kZXhdLmZpcnN0KTsK
KyAgICAgICAgbV9jYWNoZWRDb2RlQmxvY2tJbmRpY2VzLnNldChrZXksIGluZGV4KTsKKyAgICAg
ICAgbV9jYWNoZWRDb2RlQmxvY2tzW2luZGV4XS5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHVubGlu
a2VkQ29kZSk7CisgICAgICAgIG1fY2FjaGVkQ29kZUJsb2Nrc1tpbmRleF0uZmlyc3QgPSBrZXk7
CisgICAgfQorCisgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKK30KKworVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9y
KQoreworICAgIHJldHVybiBnZXRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihn
bG9iYWxEYXRhLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwg
cHJvZmlsZXJNb2RlLCBlcnJvcik7Cit9CisKK1VubGlua2VkRXZhbENvZGVCbG9jayogQ29kZUNh
Y2hlOjpnZXRFdmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXZhbEV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJp
Y3RuZXNzIHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9k
ZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICByZXR1cm4gZ2V0Q29k
ZUJsb2NrPFVubGlua2VkRXZhbENvZGVCbG9jaz4oZ2xvYmFsRGF0YSwgZXhlY3V0YWJsZSwgc291
cmNlLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworfQor
CitVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdlbmVyYXRlRnVuY3Rpb25D
b2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBw
cm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICBSZWZQdHI8RnVuY3Rpb25C
b2R5Tm9kZT4gYm9keSA9IHBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KCZnbG9iYWxEYXRhLCBzb3Vy
Y2UsIGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRh
YmxlLT5pc0luU3RyaWN0Q29udGV4dCgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWws
IEpTUGFyc2VGdW5jdGlvbkNvZGUsIGVycm9yKTsKKworICAgIGlmICghYm9keSkgeworICAgICAg
ICBBU1NFUlQoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoZXhlY3V0YWJsZS0+Zm9yY2VVc2Vz
QXJndW1lbnRzKCkpCisgICAgICAgIGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsKKyAgICBib2R5
LT5maW5pc2hQYXJzaW5nKGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFt
ZSgpLCBleGVjdXRhYmxlLT5mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUoKSk7CisgICAgZXhl
Y3V0YWJsZS0+cmVjb3JkUGFyc2UoYm9keS0+ZmVhdHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRW
YXJpYWJsZXMoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOworICAgIAorICAg
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s6OmNyZWF0ZSgmZ2xvYmFsRGF0YSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhi
b2R5LT5uZWVkc0FjdGl2YXRpb24oKSwgYm9keS0+dXNlc0V2YWwoKSwgYm9keS0+aXNTdHJpY3RN
b2RlKCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCkpOworICAgIE93blB0cjxCeXRlY29kZUdl
bmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihnbG9iYWxE
YXRhLCBib2R5LmdldCgpLCByZXN1bHQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlKSkpOwor
ICAgIGVycm9yID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpOworICAgIGJvZHktPmRlc3Ryb3lEYXRh
KCk7CisgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJz
ZXJFcnJvciYgZXJyb3IpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2so
Z2xvYmFsRGF0YSwgZXhlY3V0YWJsZSwgc291cmNlLCBraW5kLCBkZWJ1Z2dlck1vZGUsIHByb2Zp
bGVyTW9kZSwgZXJyb3IpOworfQorCitDb2RlQ2FjaGU6Okdsb2JhbEZ1bmN0aW9uS2V5IENvZGVD
YWNoZTo6bWFrZUdsb2JhbEZ1bmN0aW9uS2V5KGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBHbG9iYWxGdW5jdGlvbktleShzb3VyY2Uu
dG9TdHJpbmcoKSwgbmFtZSk7Cit9CisKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2Rl
Q2FjaGU6OmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCit7CisgICAgR2xvYmFsRnVuY3Rpb25LZXkga2V5ID0g
bWFrZUdsb2JhbEZ1bmN0aW9uS2V5KHNvdXJjZSwgbmFtZS5zdHJpbmcoKSk7CisgICAgR2xvYmFs
RnVuY3Rpb25JbmRpY2VzTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX2NhY2hlZEdsb2JhbEZ1bmN0
aW9uSW5kaWNlcy5maW5kKGtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2NhY2hlZEdsb2JhbEZ1
bmN0aW9uSW5kaWNlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVkR2xvYmFsRnVuY3Rp
b25zW3Jlc3VsdC0+dmFsdWVdLnNlY29uZC5nZXQoKTsKKworICAgIFJlZlB0cjxQcm9ncmFtTm9k
ZT4gcHJvZ3JhbSA9IHBhcnNlPFByb2dyYW1Ob2RlPigmZ2xvYmFsRGF0YSwgc291cmNlLCAwLCBJ
ZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOwor
ICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBBU1NFUlQoZXJyb3IubV90eXBlICE9IFBhcnNl
ckVycm9yOjpFcnJvck5vbmUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgYW4gaW5wdXQgc3RyaW5nIHRoYXQgd291bGQgcmVz
dWx0IGluIGEgc2luZ2xlIGFub255bW91cyBmdW5jdGlvbiBleHByZXNzaW9uLgorICAgIFN0YXRl
bWVudE5vZGUqIGV4cHJTdGF0ZW1lbnQgPSBwcm9ncmFtLT5zaW5nbGVTdGF0ZW1lbnQoKTsKKyAg
ICBBU1NFUlQoZXhwclN0YXRlbWVudCk7CisgICAgQVNTRVJUKGV4cHJTdGF0ZW1lbnQtPmlzRXhw
clN0YXRlbWVudCgpKTsKKyAgICBFeHByZXNzaW9uTm9kZSogZnVuY0V4cHIgPSBzdGF0aWNfY2Fz
dDxFeHByU3RhdGVtZW50Tm9kZSo+KGV4cHJTdGF0ZW1lbnQpLT5leHByKCk7CisgICAgQVNTRVJU
KGZ1bmNFeHByKTsKKyAgICBBU1NFUlQoZnVuY0V4cHItPmlzRnVuY0V4cHJOb2RlKCkpOworICAg
IEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkgPSBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihmdW5j
RXhwciktPmJvZHkoKTsKKyAgICBBU1NFUlQoYm9keSk7CisgICAgQVNTRVJUKGJvZHktPmlkZW50
KCkuaXNOdWxsKCkpOworCisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoJmdsb2JhbERh
dGEsIHNvdXJjZSwgYm9keSk7CisgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5z
ZXQoZ2xvYmFsRGF0YSwgZnVuY3Rpb25FeGVjdXRhYmxlLCBqc1N0cmluZygmZ2xvYmFsRGF0YSwg
bmFtZS5zdHJpbmcoKSkpOworCisgICAgc2l6ZV90IGluZGV4ID0gbV9yYW5kb21HZW5lcmF0b3Iu
Z2V0VWludDMyKCkgJSBrTWF4R2xvYmFsRnVuY3Rpb25FbnRyaWVzOworICAgIGlmIChtX2NhY2hl
ZEdsb2JhbEZ1bmN0aW9uc1tpbmRleF0uc2Vjb25kKQorICAgICAgICBtX2NhY2hlZEdsb2JhbEZ1
bmN0aW9uSW5kaWNlcy5yZW1vdmUobV9jYWNoZWRHbG9iYWxGdW5jdGlvbnNbaW5kZXhdLmZpcnN0
KTsKKyAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5zZXQoa2V5LCBpbmRleCk7Cisg
ICAgbV9jYWNoZWRHbG9iYWxGdW5jdGlvbnNbaW5kZXhdLnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwg
ZnVuY3Rpb25FeGVjdXRhYmxlKTsKKyAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uc1tpbmRleF0u
Zmlyc3QgPSBrZXk7CisKKyAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkNDYx
NzE4OWVjNGU2ODk0NzYxNzEyMWUyYTg2ZjA5M2M5ZmRjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaApAQCAtMCwwICsxLDkzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
b2RlQ2FjaGVfaAorI2RlZmluZSBDb2RlQ2FjaGVfaAorCisjaW5jbHVkZSAiQ29kZVNwZWNpYWxp
emF0aW9uS2luZC5oIgorI2luY2x1ZGUgIlBhcnNlck1vZGVzLmgiCisjaW5jbHVkZSAiU3Ryb25n
LmgiCisjaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgorCisjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXku
aD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBFdmFsRXhlY3V0YWJsZTsKK2NsYXNzIElkZW50aWZpZXI7CitjbGFzcyBQcm9ncmFtRXhl
Y3V0YWJsZTsKK2NsYXNzIFVubGlua2VkQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrOworY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKK2NsYXNzIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOworY2xh
c3MgSlNHbG9iYWxEYXRhOworc3RydWN0IFBhcnNlckVycm9yOworY2xhc3MgU291cmNlQ29kZTsK
K2NsYXNzIFNvdXJjZVByb3ZpZGVyOworCitjbGFzcyBDb2RlQ2FjaGUgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPENvZGVDYWNoZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIo
bmV3IENvZGVDYWNoZSk7IH0KKworICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogZ2V0UHJv
Z3JhbUNvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBQcm9ncmFtRXhlY3V0YWJsZSosIGNvbnN0IFNv
dXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2Rl
LCBQYXJzZXJFcnJvciYpOworICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogZ2V0RXZhbENvZGVC
bG9jayhKU0dsb2JhbERhdGEmLCBFdmFsRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBK
U1BhcnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJv
ciYpOworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGdldEZ1bmN0aW9uQ29kZUJsb2Nr
KEpTR2xvYmFsRGF0YSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgY29uc3QgU291cmNl
Q29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2Rl
LCBQYXJzZXJFcnJvciYpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBnZXRGdW5j
dGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShKU0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CisgICAgfkNvZGVDYWNoZSgp
OworCisgICAgZW51bSBDb2RlVHlwZSB7IEV2YWxUeXBlLCBQcm9ncmFtVHlwZSwgRnVuY3Rpb25U
eXBlIH07CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCB1bnNpZ25lZD4gQ29kZUJsb2Nr
S2V5OworICAgIHR5cGVkZWYgSGFzaE1hcDxDb2RlQmxvY2tLZXksIHVuc2lnbmVkPiBDb2RlQmxv
Y2tJbmRpY2VzTWFwOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBHbG9i
YWxGdW5jdGlvbktleTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8R2xvYmFsRnVuY3Rpb25LZXksIHVu
c2lnbmVkPiBHbG9iYWxGdW5jdGlvbkluZGljZXNNYXA7CisKK3ByaXZhdGU6CisgICAgQ29kZUNh
Y2hlKCk7CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9u
Q29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgY29u
c3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSwgUHJv
ZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFVubGlua2Vk
Q29kZUJsb2NrVHlwZSwgY2xhc3MgRXhlY3V0YWJsZVR5cGU+IGlubGluZSBVbmxpbmtlZENvZGVC
bG9ja1R5cGUqIGdldENvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBFeGVjdXRhYmxlVHlwZSosIGNv
bnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmls
ZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAgIENvZGVCbG9ja0tleSBtYWtlQ29kZUJsb2NrS2V5
KGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlVHlwZSwgSlNQYXJzZXJTdHJpY3RuZXNzKTsKKyAgICBD
b2RlQmxvY2tJbmRpY2VzTWFwIG1fY2FjaGVkQ29kZUJsb2NrSW5kaWNlczsKKyAgICBHbG9iYWxG
dW5jdGlvbktleSBtYWtlR2xvYmFsRnVuY3Rpb25LZXkoY29uc3QgU291cmNlQ29kZSYsIGNvbnN0
IFN0cmluZyYpOworICAgIEdsb2JhbEZ1bmN0aW9uSW5kaWNlc01hcCBtX2NhY2hlZEdsb2JhbEZ1
bmN0aW9uSW5kaWNlczsKKworICAgIGVudW0geworICAgICAgICBrTWF4Q29kZUJsb2NrRW50cmll
cyA9IDEwMjQsCisgICAgICAgIGtNYXhHbG9iYWxGdW5jdGlvbkVudHJpZXMgPSAxMDI0CisgICAg
fTsKKworICAgIEZpeGVkQXJyYXk8c3RkOjpwYWlyPENvZGVCbG9ja0tleSwgU3Ryb25nPFVubGlu
a2VkQ29kZUJsb2NrPiA+LCBrTWF4Q29kZUJsb2NrRW50cmllcz4gbV9jYWNoZWRDb2RlQmxvY2tz
OworICAgIEZpeGVkQXJyYXk8c3RkOjpwYWlyPEdsb2JhbEZ1bmN0aW9uS2V5LCBTdHJvbmc8VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+ID4sIGtNYXhHbG9iYWxGdW5jdGlvbkVudHJpZXM+IG1f
Y2FjaGVkR2xvYmFsRnVuY3Rpb25zOworICAgIFdlYWtSYW5kb20gbV9yYW5kb21HZW5lcmF0b3I7
Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAppbmRleCAwYTQ1M2VlYTA1NjY4NDBmZTk5ZmJjNTJkNTFkZjBiMjI5YzdmYmQz
Li4wYzRjYWJkODRkOTEyYWI5MDNhYzI3ZTc4ODljYzljNjZhNzA1NjJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKIAorI2luY2x1ZGUg
IkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKQEAg
LTEzMywxNiArMTM0LDE0IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQogCiBjb25zdCBDbGFzc0luZm8gRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8gPSB7
ICJGdW5jdGlvbkV4ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uRXhlY3V0YWJsZSkgfTsKIAotRnVuY3Rpb25FeGVj
dXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBGdW5j
dGlvbkJvZHlOb2RlKiBub2RlKQotICAgIDogU2NyaXB0RXhlY3V0YWJsZShnbG9iYWxEYXRhLmZ1
bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgZ2xvYmFsRGF0YSwgbm9kZS0+c291cmNl
KCksIG5vZGUtPmlzU3RyaWN0TW9kZSgpKQotICAgICwgbV9mb3JjZVVzZXNBcmd1bWVudHMobm9k
ZS0+dXNlc0FyZ3VtZW50cygpKQotICAgICwgbV9wYXJhbWV0ZXJzKG5vZGUtPnBhcmFtZXRlcnMo
KSkKLSAgICAsIG1fbmFtZShub2RlLT5pZGVudCgpKQotICAgICwgbV9pbmZlcnJlZE5hbWUobm9k
ZS0+aW5mZXJyZWROYW1lKCkuaXNOdWxsKCkgPyBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPmVt
cHR5SWRlbnRpZmllciA6IG5vZGUtPmluZmVycmVkTmFtZSgpKQotICAgICwgbV9mdW5jdGlvbk5h
bWVJc0luU2NvcGVUb2dnbGUobm9kZS0+ZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlKCkpCitG
dW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqIHVubGlua2VkRXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0
TGluZSkKKyAgICA6IFNjcmlwdEV4ZWN1dGFibGUoZ2xvYmFsRGF0YS5mdW5jdGlvbkV4ZWN1dGFi
bGVTdHJ1Y3R1cmUuZ2V0KCksIGdsb2JhbERhdGEsIHNvdXJjZSwgdW5saW5rZWRFeGVjdXRhYmxl
LT5pc0luU3RyaWN0Q29udGV4dCgpKQorICAgICwgbV91bmxpbmtlZEV4ZWN1dGFibGUoZ2xvYmFs
RGF0YSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlKQogewotICAgIG1fZmlyc3RMaW5lID0gbm9k
ZS0+bGluZU5vKCk7Ci0gICAgbV9sYXN0TGluZSA9IG5vZGUtPmxhc3RMaW5lKCk7CisgICAgQVNT
RVJUKCFzb3VyY2UuaXNOdWxsKCkpOworICAgIEFTU0VSVChzb3VyY2UubGVuZ3RoKCkpOworICAg
IG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOworICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKIH0K
IAogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtMTkx
LDcgKzE5MCw2IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4
ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpJVENvCiAgICAgVU5VU0VEX1BBUkFNKGpp
dFR5cGUpOwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKICNlbmRpZgotICAgIEpT
T2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgCkBAIC0yMDAsMjggKzE5OCwy
MSBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDbwogICAgICAgICBuZXdDb2RlQmxvY2stPnNldEFs
dGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2su
cmVsZWFzZSgpKSk7CiAgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IG5ld0NvZGVCbG9jay5yZWxl
YXNlKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbERhdGEpOworICAgICAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdC0+ZXZhbEVu
YWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUV2YWxF
cnJvcihleGVjLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2Uo
KSkpOwotICAgICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gcGFyc2U8RXZhbE5vZGU+
KGdsb2JhbERhdGEsIGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlLCAwLCBJZGVudGlmaWVy
KCksIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEV2YWxO
b2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3Jh
bUNvZGUsIGxleGljYWxHbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24p
OwotICAgICAgICBpZiAoIWV2YWxOb2RlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9u
KTsKKworICAgICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKKyAgICAgICAgVW5saW5rZWRF
dmFsQ29kZUJsb2NrKiB1bmxpbmtlZEV2YWxDb2RlID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+Y3Jl
YXRlRXZhbENvZGVCbG9jayhleGVjLCB0aGlzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKCF1
bmxpbmtlZEV2YWxDb2RlKQogICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKLSAgICAgICAg
fQotICAgICAgICByZWNvcmRQYXJzZShldmFsTm9kZS0+ZmVhdHVyZXMoKSwgZXZhbE5vZGUtPmhh
c0NhcHR1cmVkVmFyaWFibGVzKCksIGV2YWxOb2RlLT5saW5lTm8oKSwgZXZhbE5vZGUtPmxhc3RM
aW5lKCkpOwotICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgCisKICAgICAgICAgT3duUHRyPENvZGVC
bG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpOwogICAg
ICAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJl
dmlvdXNDb2RlQmxvY2spOwotICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcg
RXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNj
b3BlLT5sb2NhbERlcHRoKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwotICAgICAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIHNjb3BlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCksIG1fZXZhbENvZGVCbG9jay5nZXQoKSwgISFtX2V2YWxDb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uKSkpOwot
ICAgICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAg
ICAgICAgIG1fZXZhbENvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9j
az4obV9ldmFsQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAgICBl
dmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKLSAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0YSgpOworICAg
ICAgICBtX3VubGlua2VkRXZhbENvZGVCbG9jay5zZXQoKmdsb2JhbERhdGEsIHRoaXMsIHVubGlu
a2VkRXZhbENvZGUpOworICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZh
bENvZGVCbG9jayh0aGlzLCB1bmxpbmtlZEV2YWxDb2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
b3VyY2UoKS5wcm92aWRlcigpLCBzY29wZS0+bG9jYWxEZXB0aCgpLCBwcmV2aW91c0NvZGVCbG9j
ay5yZWxlYXNlKCkpKTsKICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5jb3B5UG9zdFBhcnNlRGF0
YUZyb21BbHRlcm5hdGl2ZSgpOwogICAgIH0KIApAQCAtMjU3LDYgKzI0OCw3IEBAIHZvaWQgRXZh
bEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICBTY3JpcHRFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX2V2YWxDb2RlQmxvY2spCiAgICAgICAgIHRo
aXNPYmplY3QtPm1fZXZhbENvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrKTsKIH0K
IAogdm9pZCBFdmFsRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQpAQCAtMjcyLDE5ICsyNjQsMjAg
QEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQogdm9pZCBFdmFsRXhlY3V0YWJs
ZTo6Y2xlYXJDb2RlKCkKIHsKICAgICBtX2V2YWxDb2RlQmxvY2suY2xlYXIoKTsKKyAgICBtX3Vu
bGlua2VkRXZhbENvZGVCbG9jay5jbGVhcigpOwogICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQog
CiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKKyAgICBQYXJzZXJFcnJvciBlcnJv
cjsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwog
ICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJz
ZTxQcm9ncmFtTm9kZT4oZ2xvYmFsRGF0YSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2Us
IDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25O
b2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgbGV4aWNhbEds
b2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgZXhlYywgJmV4Y2VwdGlvbik7CisgICAgUmVmUHRyPFBy
b2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9iYWxEYXRhLCBt
X3NvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNG
dW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBl
cnJvcik7CiAgICAgaWYgKHByb2dyYW1Ob2RlKQogICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NF
UlQoZXhjZXB0aW9uKTsKLSAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIEFTU0VSVChlcnJvci5t
X3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSk7CisgICAgcmV0dXJuIGVycm9yLnRvRXJy
b3JPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UpOwogfQogCiBKU09iamVjdCog
UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Nj
b3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKQEAgLTMxMywzNSArMzA2LDEzIEBA
IEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTY29wZSogc2NvcGUsIEpJCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogICAg
IFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKICNlbmRpZgotICAgIEpTT2JqZWN0KiBleGNl
cHRpb24gPSAwOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgCiAgICAgaWYgKCEhbV9wcm9ncmFtQ29kZUJsb2Nr
KSB7CiAgICAgICAgIE93blB0cjxQcm9ncmFtQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBhZG9w
dFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKm1f
cHJvZ3JhbUNvZGVCbG9jaykpOwogICAgICAgICBuZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZl
KHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFz
ZSgpKSk7CiAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IG5ld0NvZGVCbG9jay5yZWxlYXNl
KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9k
ZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9iYWxEYXRhLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBt
X3NvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3Qg
OiBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVu
Y3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1
Z2dlcigpLCBleGVjLCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKCFwcm9ncmFtTm9kZSkgewot
ICAgICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uOwotICAgICAgICB9Ci0gICAgICAgIHJlY29yZFBhcnNlKHByb2dyYW1Ob2RlLT5mZWF0dXJl
cygpLCBwcm9ncmFtTm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcHJvZ3JhbU5vZGUtPmxp
bmVObygpLCBwcm9ncmFtTm9kZS0+bGFzdExpbmUoKSk7Ci0KICAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKLSAgICAKLSAgICAgICAg
T3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX3Byb2dyYW1Db2RlQmxvY2su
cmVsZWFzZSgpOwotICAgICAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGll
ckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOwotICAgICAgICBtX3Byb2dyYW1Db2RlQmxv
Y2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9i
YWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2Uo
KSkpOwotICAgICAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0
cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlLCBnbG9iYWxP
YmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgISFtX3Byb2dy
YW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJz
dENvbXBpbGF0aW9uKSkpOwotICAgICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2Vu
ZXJhdGUoKSkpIHsKLSAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IHN0YXRpY19wb2lu
dGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLT5yZWxlYXNlQWx0
ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURhdGEoKTsKLSAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBwcm9ncmFt
Tm9kZS0+ZGVzdHJveURhdGEoKTsKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRvcHRQ
dHIobmV3IFByb2dyYW1Db2RlQmxvY2sodGhpcywgbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2su
Z2V0KCksIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgbV9wcm9ncmFtQ29kZUJs
b2NrLnJlbGVhc2UoKSkpOwogICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmNvcHlQb3N0UGFy
c2VEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAgICAgfQogCkBAIC0zNzgsNiArMzQ5LDY3IEBAIHZv
aWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnVubGlua0NhbGxzKCkKICNlbmRpZgogfQogCitpbnQgUHJv
Z3JhbUV4ZWN1dGFibGU6OmFkZEdsb2JhbFZhcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgRnVu
Y3Rpb25Nb2RlIGZ1bmN0aW9uTW9kZSkKK3sKKyAgICAvLyBUcnkgdG8gc2hhcmUgdGhlIHN5bWJv
bFRhYmxlIGlmIHBvc3NpYmxlCisgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
Z2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpOworICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk1v
ZGUpOworICAgIGludCBpbmRleCA9IHN5bWJvbFRhYmxlLT5zaXplKCk7CisgICAgU3ltYm9sVGFi
bGVFbnRyeSBuZXdFbnRyeShpbmRleCwgKGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50KSA/IFJl
YWRPbmx5IDogMCk7CisgICAgaWYgKGZ1bmN0aW9uTW9kZSA9PSBJc0Z1bmN0aW9uVG9TcGVjaWFs
aXplKQorICAgICAgICBuZXdFbnRyeS5hdHRlbXB0VG9XYXRjaCgpOworICAgIFN5bWJvbFRhYmxl
OjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUtPmFkZChpZGVudC5pbXBsKCksIG5ld0Vu
dHJ5KTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKKyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldEluZGV4KCk7CisgICAgfQorICAgIHJldHVybiBpbmRleDsKK30KKworSlNP
YmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0YWxpemVHbG9iYWxQcm9wZXJ0aWVzKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2NvcGUqIHNjb3Bl
KQoreworICAgIEFTU0VSVChzY29wZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAg
ICBBU1NFUlQoJmdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpID09ICZnbG9iYWxEYXRhKTsKKwor
ICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOworICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayogdW5saW5rZWRDb2RlID0gZ2xvYmFsT2JqZWN0LT5jcmVhdGVQcm9ncmFtQ29kZUJsb2NrKGNh
bGxGcmFtZSwgdGhpcywgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbjsKKworICAgIG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLnNldChn
bG9iYWxEYXRhLCB0aGlzLCB1bmxpbmtlZENvZGUpOworCisgICAgQmF0Y2hlZFRyYW5zaXRpb25P
cHRpbWl6ZXIgb3B0aW1pemVyKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCk7CisKKyAgICBjb25z
dCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OlZhcmlhYmxlRGVjbGF0aW9ucyYgdmFyaWFibGVE
ZWNsYXJhdGlvbnMgPSB1bmxpbmtlZENvZGUtPnZhcmlhYmxlRGVjbGFyYXRpb25zKCk7CisgICAg
Y29uc3QgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpGdW5jdGlvbkRlY2xhdGlvbnMmIGZ1bmN0
aW9uRGVjbGFyYXRpb25zID0gdW5saW5rZWRDb2RlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpOwor
CisgICAgc2l6ZV90IG5ld0dsb2JhbHMgPSB2YXJpYWJsZURlY2xhcmF0aW9ucy5zaXplKCkgKyBm
dW5jdGlvbkRlY2xhcmF0aW9ucy5zaXplKCk7CisgICAgaWYgKCFuZXdHbG9iYWxzKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBnbG9iYWxPYmplY3QtPmFkZFJlZ2lzdGVycyhuZXdHbG9iYWxzKTsK
KyAgICBDYWxsRnJhbWUqIGdsb2JhbEV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25EZWNsYXJhdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgYm9vbCBwcm9wZXJ0eURpZEV4aXN0ID0gZ2xvYmFsT2JqZWN0LT5y
ZW1vdmVEaXJlY3QoZ2xvYmFsRGF0YSwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uZmlyc3QpOyAv
LyBOZXdseSBkZWNsYXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMu
CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSA9IGZ1bmN0aW9uRGVjbGFyYXRpb25zW2ldLnNlY29uZC5nZXQoKTsKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjLCB1bmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS0+bGluayhnbG9iYWxEYXRhLCBtX3NvdXJjZSwgbGluZU5vKCksIDAp
LCBzY29wZSk7CisgICAgICAgIGludCBpbmRleCA9IGFkZEdsb2JhbFZhcihnbG9iYWxPYmplY3Qs
IGZ1bmN0aW9uRGVjbGFyYXRpb25zW2ldLmZpcnN0LCBJc1ZhcmlhYmxlLAorICAgICAgICAgICAg
IXByb3BlcnR5RGlkRXhpc3QgPyBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplIDogTm90RnVuY3Rpb25P
ck5vdFNwZWNpYWxpemFibGUpOworICAgICAgICBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoaW5k
ZXgpLnNldChnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZhcmlhYmxlRGVjbGFyYXRpb25zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChnbG9iYWxPYmplY3QtPmhhc1Byb3BlcnR5KGdsb2JhbEV4ZWMsIHZhcmlh
YmxlRGVjbGFyYXRpb25zW2ldLmZpcnN0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBhZGRHbG9iYWxWYXIoZ2xvYmFsT2JqZWN0LCB2YXJpYWJsZURlY2xhcmF0aW9uc1tpXS5maXJz
dCwKKyAgICAgICAgICAgICh2YXJpYWJsZURlY2xhcmF0aW9uc1tpXS5zZWNvbmQgJiBEZWNsYXJh
dGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0YW50IDogSXNWYXJpYWJsZSwKKyAgICAg
ICAgICAgIE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlKTsKKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisKIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwpOwpAQCAtMzg1LDYgKzQx
Nyw3IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFn
cyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0
U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUlu
Zm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAgIFNjcmlwdEV4ZWN1dGFibGU6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKTsKICAgICBpZiAodGhpc09iamVj
dC0+bV9wcm9ncmFtQ29kZUJsb2NrKQogICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2Rl
QmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQpAQCAtMzkyLDYgKzQyNSw3IEBAIHZv
aWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiB7CiAg
ICAgbV9wcm9ncmFtQ29kZUJsb2NrLmNsZWFyKCk7CisgICAgbV91bmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2suY2xlYXIoKTsKICAgICBCYXNlOjpjbGVhckNvZGUoKTsKIH0KIApAQCAtNDM4LDEyICs0
NzIsMTIgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZv
ckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTU2MKICNpZiBFTkFCTEUoSklUKQogYm9vbCBG
dW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBtX2NvZGVC
bG9ja0ZvckNhbGwsIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlD
aGVjaywgbV9zeW1ib2xUYWJsZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwg
SklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZB
cHByb3ByaWF0ZShleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwsIG1faml0Q29kZUZvckNhbGwsIG1f
aml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBV
SU5UX01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIH0KIAogYm9vbCBGdW5jdGlvbkV4ZWN1
dGFibGU6OmppdENvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJl
dHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdp
dGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJ
TlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHJldHVybiBqaXRDb21waWxlRnVu
Y3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBKSVRD
b2RlOjpib3R0b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwog
fQogI2VuZGlmCiAKQEAgLTQ1Miw0OSArNDg2LDMwIEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvZGVCbG9ja1dpdGhCeXRlY29kZUZvcihDb2RlU3BlY2lhbGl6YXRp
CiAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOwogfQogCi1QYXNzT3duUHRy
PEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tG
b3IoSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktpbmQsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlv
bikKK1Bhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJv
ZHVjZUNvZGVCbG9ja0ZvcihKU1Njb3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBz
cGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQogewogICAgIGlmICghIWNv
ZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEZ1bmN0aW9uQ29kZUJsb2NrKENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqY29kZUJs
b2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpKTsKLSAgICAKLSAgICBleGNlcHRpb24gPSAwOwor
CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGUtPmdsb2JhbERhdGEoKTsKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwot
ICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5ID0gcGFyc2U8RnVuY3Rpb25Cb2R5Tm9k
ZT4oCi0gICAgICAgIGdsb2JhbERhdGEsCi0gICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAg
bV9zb3VyY2UsCi0gICAgICAgIG1fcGFyYW1ldGVycy5nZXQoKSwKLSAgICAgICAgbmFtZSgpLAot
ICAgICAgICBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLAot
ICAgICAgICBGdW5jdGlvbkJvZHlOb2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlv
bkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAg
ICAgICZleGNlcHRpb24KLSAgICApOwotCi0gICAgaWYgKCFib2R5KSB7Ci0gICAgICAgIEFTU0VS
VChleGNlcHRpb24pOworICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDog
RGVidWdnZXJPZmY7CisgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGdsb2JhbE9iamVj
dC0+aGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKKyAgICBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IG1fdW5saW5rZWRFeGVjdXRh
YmxlLT5jb2RlQmxvY2tGb3IoKmdsb2JhbERhdGEsIG1fc291cmNlLCBzcGVjaWFsaXphdGlvbktp
bmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CisgICAgcmVjb3JkUGFyc2Uo
bV91bmxpbmtlZEV4ZWN1dGFibGUtPmZlYXR1cmVzKCksIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5o
YXNDYXB0dXJlZFZhcmlhYmxlcygpLCBsaW5lTm8oKSwgbGFzdExpbmUoKSk7CisKKyAgICBpZiAo
IXVubGlua2VkQ29kZUJsb2NrKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGVycm9yLnRvRXJyb3JP
YmplY3QoZ2xvYmFsT2JqZWN0LCBtX3NvdXJjZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KLSAgICBpZiAobV9mb3JjZVVzZXNBcmd1bWVudHMpCi0gICAgICAgIGJvZHktPnNldFVz
ZXNBcmd1bWVudHMoKTsKLSAgICBib2R5LT5maW5pc2hQYXJzaW5nKG1fcGFyYW1ldGVycywgbV9u
YW1lLCBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSk7Ci0gICAgcmVjb3JkUGFyc2UoYm9k
eS0+ZmVhdHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+bGluZU5v
KCksIGJvZHktPmxhc3RMaW5lKCkpOwotCi0gICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBy
ZXN1bHQ7Ci0gICAgQVNTRVJUKChjb21waWxhdGlvbktpbmQgPT0gRmlyc3RDb21waWxhdGlvbikg
PT0gIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpKTsKLSAgICByZXN1bHQgPSBhZG9w
dFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmpl
Y3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHNwZWNpYWxp
emF0aW9uS2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2Vu
ZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0
KCksIHNjb3BlLCByZXN1bHQtPnN5bWJvbFRhYmxlKCksIHJlc3VsdC5nZXQoKSwgY29tcGlsYXRp
b25LaW5kKSkpOwotICAgIGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKLSAgICBi
b2R5LT5kZXN0cm95RGF0YSgpOwotICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwogCisgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFB0
cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9i
amVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSkpOwogICAg
IHJlc3VsdC0+Y29weVBvc3RQYXJzZURhdGFGcm9tKGNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlv
bktpbmQpLmdldCgpKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAorCiBKU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0
ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihz
YW1wbGluZ0Rlc2NyaXB0aW9uKGppdFR5cGUpKTsKQEAgLTUwNyw3ICs1MjIsNyBAQCBKU09iamVj
dCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTY29wZSogcwogI2VuZGlmCiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgSlNPYmplY3Qq
IGV4Y2VwdGlvbjsKLSAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9
IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsICEhbV9jb2RlQmxvY2tGb3JDYWxsID8gT3B0aW1p
emluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlv
bik7CisgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNl
Q29kZUJsb2NrRm9yKHNjb3BlLCBDb2RlRm9yQ2FsbCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5l
d0NvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIApAQCAtNTE2LDEwICs1MzEs
OSBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogcwogICAgIAogICAgIG1fbnVtUGFyYW1ldGVyc0Zv
ckNhbGwgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPm51bVBhcmFtZXRlcnMoKTsKICAgICBBU1NFUlQo
bV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCk7Ci0gICAgbV9zeW1ib2xUYWJsZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBtX2NvZGVCbG9ja0ZvckNhbGwtPnN5bWJvbFRhYmxlKCkpOwogCiAj
aWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoIXByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihleGVj
LCBtX2NvZGVCbG9ja0ZvckNhbGwsIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjaywgbV9zeW1ib2xUYWJsZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29k
ZUZvckNhbGwpKQorICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMsIG1f
Y29kZUJsb2NrRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhB
cml0eUNoZWNrLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBDb2RlRm9yQ2FsbCkpCiAgICAgICAg
IHJldHVybiAwOwogI2VuZGlmCiAKQEAgLTU0NCw3ICs1NTgsNyBAQCBKU09iamVjdCogRnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVj
LCBKU1NjbwogICAgIAogICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVy
SklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGV4Y2Vw
dGlvbjsKLSAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1
Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPyBPcHRpbWl6
aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uLCBDb2RlRm9yQ29uc3RydWN0LCBleGNl
cHRpb24pOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJv
ZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwgQ29kZUZvckNvbnN0cnVjdCwgZXhjZXB0aW9uKTsKICAg
ICBpZiAoIW5ld0NvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIApAQCAtNTUz
LDEwICs1NjcsOSBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29u
c3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1NjbwogICAgIAogICAgIG1fbnVtUGFy
YW1ldGVyc0ZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5udW1QYXJhbWV0
ZXJzKCk7CiAgICAgQVNTRVJUKG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCk7Ci0gICAgbV9z
eW1ib2xUYWJsZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdC0+c3ltYm9sVGFibGUoKSk7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJl
cGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBt
X2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNr
LCBtX3N5bWJvbFRhYmxlLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBDb2RlRm9yQ29uc3RydWN0
KSkKKyAgICBpZiAoIXByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1
Y3RXaXRoQXJpdHlDaGVjaywgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNvbnN0cnVj
dCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAKQEAgLTU5MiwxMiArNjA1LDExIEBAIHZv
aWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdG
bGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBTY3JpcHRFeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX25hbWVWYWx1ZSk7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3ltYm9s
VGFibGUpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwpCiAgICAgICAg
IHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ2FsbC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQogICAgICAgICB0
aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRFeGVjdXRhYmxl
KTsKIH0KIAogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZUlmTm90Q29tcGlsaW5n
KCkKQEAgLTYwNyw2ICs2MTksMTMgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29k
ZUlmTm90Q29tcGlsaW5nKCkKICAgICBjbGVhckNvZGUoKTsKIH0KIAordm9pZCBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNsZWFyVW5saW5rZWRDb2RlSWZOb3RDb21waWxpbmcoKQoreworICAgIGlmIChp
c0NvbXBpbGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV91bmxpbmtlZEV4ZWN1dGFibGUt
PmNsZWFyQ29kZSgpOworfQorCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkK
IHsKICAgICBtX2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKQEAgLTYzMCwzOSArNjQ5LDE5IEBA
IHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCiAKIEZ1bmN0aW9uRXhlY3V0
YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVy
JiBuYW1lLCBFeGVjU3RhdGUqIGV4ZWMsIERlYnVnZ2VyKiBkZWJ1Z2dlciwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikKIHsKLSAgICBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAg
ICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW0gPSBwYXJzZTxQcm9ncmFtTm9kZT4oJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgc291cmNlLCAwLCBJZGVudGlmaWVy
KCksIEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VG
dW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGRlYnVnZ2VyLCBleGVjLCBleGNlcHRp
b24pOwotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBBU1NFUlQoKmV4Y2VwdGlvbik7Cisg
ICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRnVuY3Rpb24gPSBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUobmFtZSwgZXhlYywgZGVidWdnZXIs
IHNvdXJjZSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIXVubGlua2VkRnVuY3Rpb24pCiAgICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBhbiBpbnB1
dCBzdHJpbmcgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBzaW5nbGUgYW5vbnltb3VzIGZ1bmN0aW9u
IGV4cHJlc3Npb24uCi0gICAgU3RhdGVtZW50Tm9kZSogZXhwclN0YXRlbWVudCA9IHByb2dyYW0t
PnNpbmdsZVN0YXRlbWVudCgpOwotICAgIEFTU0VSVChleHByU3RhdGVtZW50KTsKLSAgICBBU1NF
UlQoZXhwclN0YXRlbWVudC0+aXNFeHByU3RhdGVtZW50KCkpOwotICAgIEV4cHJlc3Npb25Ob2Rl
KiBmdW5jRXhwciA9IHN0YXRpY19jYXN0PEV4cHJTdGF0ZW1lbnROb2RlKj4oZXhwclN0YXRlbWVu
dCktPmV4cHIoKTsKLSAgICBBU1NFUlQoZnVuY0V4cHIpOwotICAgIEFTU0VSVChmdW5jRXhwci0+
aXNGdW5jRXhwck5vZGUoKSk7Ci0gICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9IHN0YXRpY19j
YXN0PEZ1bmNFeHByTm9kZSo+KGZ1bmNFeHByKS0+Ym9keSgpOwotICAgIEFTU0VSVChib2R5KTsK
LSAgICBBU1NFUlQoYm9keS0+aWRlbnQoKS5pc051bGwoKSk7Ci0KLSAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgYm9keSk7Ci0gICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVW
YWx1ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGpzU3RyaW5n
KCZleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUuc3RyaW5nKCkpKTsKLSAgICByZXR1cm4gZnVuY3Rp
b25FeGVjdXRhYmxlOworICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUo
KSArIHVubGlua2VkRnVuY3Rpb24tPmZpcnN0TGluZU9mZnNldCgpOworICAgIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCkgKyB1bmxpbmtlZEZ1bmN0aW9uLT5zdGFy
dE9mZnNldCgpOworICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRnVuY3Rpb24t
PnNvdXJjZUxlbmd0aCgpOworICAgIFNvdXJjZUNvZGUgZnVuY3Rpb25Tb3VyY2Uoc291cmNlLnBy
b3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RM
aW5lKTsKKyAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBmdW5jdGlvblNvdXJjZSwgdW5saW5rZWRGdW5jdGlvbiwgZmlyc3RMaW5lLCB1bmxp
bmtlZEZ1bmN0aW9uLT5saW5lQ291bnQoKSk7CiB9CiAKIFN0cmluZyBGdW5jdGlvbkV4ZWN1dGFi
bGU6OnBhcmFtU3RyaW5nKCkgY29uc3QKIHsKLSAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMgPSAqbV9wYXJhbWV0ZXJzOwotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBm
b3IgKHNpemVfdCBwb3MgPSAwOyBwb3MgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytwb3MpIHsKLSAg
ICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQocGFyYW1ldGVyc1twb3NdLnN0
cmluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1
cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnBhcmFtU3RyaW5nKCk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAppbmRleCA3NmE1MzdkYTMyNGFhYzky
MDNjZDg0ZDA5MWNjOGM5MzJmMmZmMDM2Li43NGI0YWRkNzVjMzJmMzg2ZDQ0Y2FlMjQ4OGIxOTI0
ZGUyYzgwYzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiTExJbnRDTG9vcC5oIgogI2luY2x1ZGUgIk5v
ZGVzLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2Rl
QmxvY2suaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTM2NCw5ICszNjUsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNTdHJp
Y3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcyAmIFN0cmljdE1vZGVGZWF0dXJlOyB9
CiAKICAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOworCisgICAgICAgIENvZGVGZWF0dXJlcyBm
ZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KICAgICAgICAgCiAgICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCisgICAgICAgIHZvaWQgcmVjb3JkUGFy
c2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQg
Zmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZmVhdHVy
ZXMgPSBmZWF0dXJlczsKKyAgICAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXND
YXB0dXJlZFZhcmlhYmxlczsKKyAgICAgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwor
ICAgICAgICAgICAgbV9sYXN0TGluZSA9IGxhc3RMaW5lOworICAgICAgICB9CisKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQogICAgICAgICB7CkBAIC0zNzksMTQgKzM5MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2Vu
ZGlmCiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcywgaW50IGZpcnN0TGluZSwgaW50IGxh
c3RMaW5lKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0g
ICAgICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRWYXJpYWJsZXM7
Ci0gICAgICAgICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKLSAgICAgICAgICAgIG1fbGFz
dExpbmUgPSBsYXN0TGluZTsKLSAgICAgICAgfQotCiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3Vy
Y2U7CiAgICAgICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAgICAgICBib29sIG1faGFz
Q2FwdHVyZWRWYXJpYWJsZXM7CkBAIC00NDgsNiArNDUxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAorICAgICAgICBFeGVjdXRhYmxlSW5mbyBleGVj
dXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlv
bigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UpOyB9CisKICAgICBwcml2YXRl
OgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAg
ICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sKTsK
QEAgLTQ1Niw2ICs0NjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIE93blB0cjxF
dmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxvY2s7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmxp
bmtlZEV2YWxDb2RlQmxvY2s+IG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrOwogICAgIH07CiAKICAg
ICBjbGFzcyBQcm9ncmFtRXhlY3V0YWJsZSA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAg
LTQ3MCw2ICs0NzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBleGVj
dXRhYmxlOwogICAgICAgICB9CiAKKworICAgICAgICBKU09iamVjdCogaW5pdGFsaXplR2xvYmFs
UHJvcGVydGllcyhKU0dsb2JhbERhdGEmLCBDYWxsRnJhbWUqLCBKU1Njb3BlKik7CisKICAgICAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgICAgICBKU09iamVjdCogY29t
cGlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKQpAQCAtNTE1LDEzICs1MjQsMjEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAorICAgICAg
ICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFi
bGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFs
c2UpOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6
U3RydWN0dXJlRmxhZ3M7CisKICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiwg
Y29uc3QgU291cmNlQ29kZSYpOwogCisgICAgICAgIGVudW0gQ29uc3RhbnRNb2RlIHsgSXNDb25z
dGFudCwgSXNWYXJpYWJsZSB9OworICAgICAgICBlbnVtIEZ1bmN0aW9uTW9kZSB7IElzRnVuY3Rp
b25Ub1NwZWNpYWxpemUsIE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlIH07CisgICAgICAg
IGludCBhZGRHbG9iYWxWYXIoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgQ29u
c3RhbnRNb2RlLCBGdW5jdGlvbk1vZGUpOworCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50
ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICAgICAg
T3duUHRyPFByb2dyYW1Db2RlQmxvY2s+IG1fcHJvZ3JhbUNvZGVCbG9jazsKICAgICB9OwogCkBA
IC01MzEsOSArNTQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0
eXBlZGVmIFNjcmlwdEV4ZWN1dGFibGUgQmFzZTsKIAotICAgICAgICBzdGF0aWMgRnVuY3Rpb25F
eGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBGdW5jdGlvbkJvZHlO
b2RlKiBub2RlKQorICAgICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGlu
ZSwgdW5zaWduZWQgbGFzdExpbmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9u
RXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERh
dGEsIG5vZGUpOworICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRh
LmhlYXApKSBGdW5jdGlvbkV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgc291cmNlLCB1bmxpbmtlZEV4
ZWN1dGFibGUsIGZpcnN0TGluZSwgbGFzdExpbmUpOwogICAgICAgICAgICAgZXhlY3V0YWJsZS0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJs
ZTsKICAgICAgICAgfQpAQCAtNTU0LDcgKzU3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAKICAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9ja1dpdGhCeXRlY29kZUZvcihD
b2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAgICAgCi0gICAgICAgIFBhc3NPd25QdHI8RnVu
Y3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VDb2RlQmxvY2tGb3IoSlNTY29wZSosIENvbXBpbGF0aW9u
S2luZCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24pOworICAg
ICAgICBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBwcm9kdWNlQ29kZUJsb2NrRm9yKEpT
U2NvcGUqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbik7CiAK
ICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29w
ZSogc2NvcGUpCiAgICAgICAgIHsKQEAgLTY3OSwxNCArNjk2LDE1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4g
bV9uYW1lOyB9Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0
dXJuIG1faW5mZXJyZWROYW1lOyB9Ci0gICAgICAgIEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX25hbWVWYWx1ZS5nZXQoKTsgfQotICAgICAgICBzaXplX3QgcGFyYW1ldGVy
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMtPnNpemUoKTsgfSAvLyBFeGNsdWRp
bmcgJ3RoaXMnIQorICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV91
bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWUoKTsgfQorICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBp
bmZlcnJlZE5hbWUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+aW5mZXJyZWROYW1l
KCk7IH0KKyAgICAgICAgSlNTdHJpbmcqIG5hbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRFeGVjdXRhYmxlLT5uYW1lVmFsdWUoKTsgfQorICAgICAgICBzaXplX3QgcGFyYW1ldGVy
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291
bnQoKTsgfSAvLyBFeGNsdWRpbmcgJ3RoaXMnIQogICAgICAgICBTdHJpbmcgcGFyYW1TdHJpbmco
KSBjb25zdDsKLSAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zeW1ib2xUYWJsZS5nZXQoKTsgfQorICAgICAgICBTaGFyZWRTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkRXhlY3V0YWJsZS0+c3ltYm9sVGFibGUoa2luZCk7IH0KIAogICAgICAgICB2
b2lkIGNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CisgICAgICAgIHZvaWQgY2xlYXJVbmxpbmtl
ZENvZGVJZk5vdENvbXBpbGluZygpOwogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgICAgIHsKQEAgLTY5OSwxNSArNzE3LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAotICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOwotICAgICAgICAgICAgbV9uYW1lVmFsdWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGpzU3Ry
aW5nKCZnbG9iYWxEYXRhLCBuYW1lKCkuc3RyaW5nKCkpKTsKLSAgICAgICAgfQotCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIEZ1bmN0aW9u
Qm9keU5vZGUqKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIGNv
bnN0IFNvdXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZp
cnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUpOwogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxl
Rm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwogICAgICAgICBKU09iamVjdCogY29t
cGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpK
SVRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwpAQCAtNzMyLDE2ICs3
NDMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3Jp
cHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKLSAgICAgICAgYm9vbCBtX2ZvcmNlVXNlc0Fy
Z3VtZW50czsKLQotICAgICAgICBSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBtX3BhcmFtZXRl
cnM7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gbV91
bmxpbmtlZEV4ZWN1dGFibGU7CiAgICAgICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9j
b2RlQmxvY2tGb3JDYWxsOwogICAgICAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0OwotICAgICAgICBJZGVudGlmaWVyIG1fbmFtZTsKLSAgICAgICAg
SWRlbnRpZmllciBtX2luZmVycmVkTmFtZTsKLSAgICAgICAgRnVuY3Rpb25OYW1lSXNJblNjb3Bl
VG9nZ2xlIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlOwotICAgICAgICBXcml0ZUJhcnJp
ZXI8SlNTdHJpbmc+IG1fbmFtZVZhbHVlOwotICAgICAgICBXcml0ZUJhcnJpZXI8U2hhcmVkU3lt
Ym9sVGFibGU+IG1fc3ltYm9sVGFibGU7CiAgICAgfTsKIAogICAgIGlubGluZSBKU0Z1bmN0aW9u
OjpKU0Z1bmN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAppbmRleCAwNjU3ODhhZWUxYmUyNWYzMGRmNjVi
Yzk5YTEzMTA1OGVlMTljNjU2Li5iNzFiNjAyMTdmYTVlNGMzMTQ0MTRhOTkwZTYxMGM5ZjU5NDZj
MThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25I
YXJuZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFy
bmVzcy5oCkBAIC00OSw3ICs0OSw3IEBAIGlubGluZSBib29sIHByZXBhcmVGb3JFeGVjdXRpb24o
RXhlY1N0YXRlKiBleGVjLCBPd25QdHI8Q29kZUJsb2NrVHlwZT4mIGNvZGVCbG9jCiAgICAgcmV0
dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0
VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIH0KIAot
aW5saW5lIGJvb2wgcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
T3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgV3JpdGVCYXJyaWVy
PFNoYXJlZFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFibGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlw
ZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQor
aW5saW5lIGJvb2wgcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
T3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6SklU
VHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShqaXRUeXBlKSkgewpAQCAtNjEsNyArNjEsNyBAQCBpbmxpbmUgYm9vbCBwcmVwYXJl
RnVuY3Rpb25Gb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2Rl
QmxvYwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oa2luZCk7CiAjZW5kaWYgLy8gRU5BQkxFKExM
SU5UKQotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIGNv
ZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBzeW1ib2xUYWJsZSwgaml0
VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBy
ZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBjb2RlQmxvY2ssIGpp
dENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVk
IDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCmluZGV4IGZhMjI5MTgx
M2Y5YmFhYmUwZDZmMGM2OWJlNjc3ODRjZDQzNGQxMWQuLmZjNjMzNjQ2MzE2ODU4YmRmNjlkZmRm
NDFiMmE3MjBiOGMwMTRlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQWN0aXZhdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5oCkBAIC00NiwxNSArNDYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVi
bGljOgogICAgICAgICB0eXBlZGVmIEpTVmFyaWFibGVPYmplY3QgQmFzZTsKIAotICAgICAgICBz
dGF0aWMgSlNBY3RpdmF0aW9uKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUp
CisgICAgICAgIHN0YXRpYyBKU0FjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAg
ICAgeworICAgICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJs
b2NrLT5zeW1ib2xUYWJsZSgpOwogICAgICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9u
ID0gbmV3ICgKICAgICAgICAgICAgICAgICBOb3ROdWxsLAogICAgICAgICAgICAgICAgIGFsbG9j
YXRlQ2VsbDxKU0FjdGl2YXRpb24+KAogICAgICAgICAgICAgICAgICAgICBnbG9iYWxEYXRhLmhl
YXAsCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25TaXplKGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+c3ltYm9sVGFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblNpemUoc3lt
Ym9sVGFibGUpCiAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgKSBKU0FjdGl2YXRpb24o
Z2xvYmFsRGF0YSwgY2FsbEZyYW1lLCBmdW5jdGlvbkV4ZWN1dGFibGUtPnN5bWJvbFRhYmxlKCkp
OworICAgICAgICAgICAgKSBKU0FjdGl2YXRpb24oZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLCBzeW1i
b2xUYWJsZSk7CiAgICAgICAgICAgICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKICAgICAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAppbmRleCA1ZmI2ODJi
ZGIwODhkZDNlMjJhMDdmYjJhMGFjYjI1ZWMxNDgyMjJkLi40ZTcyZjk0MGJiN2RmYmZiMWRjNzVk
OGE5NWMwOThkOGU5ZTAyMjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0dsb2JhbERh
dGEuaCIKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNp
bmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyQWN0aXZhdGlv
bi5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKQEAgLTU3LDYgKzU4LDcgQEAK
ICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlv
bi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVC
bG9jay5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KQEAgLTE5Niw2ICsxOTgsNyBA
QCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2luaXRpYWxpemluZ09iamVjdENsYXNzKDAp
CiAjZW5kaWYKICAgICAsIG1faW5EZWZpbmVPd25Qcm9wZXJ0eShmYWxzZSkKKyAgICAsIG1fY29k
ZUNhY2hlKENvZGVDYWNoZTo6Y3JlYXRlKCkpCiB7CiAgICAgaW50ZXJwcmV0ZXIgPSBuZXcgSW50
ZXJwcmV0ZXIoKnRoaXMpOwogCkBAIC0yMjEsNiArMjI0LDExIEBAIEpTR2xvYmFsRGF0YTo6SlNH
bG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICAgICBzaGFyZWRTeW1ib2xUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFNoYXJlZFN5bWJv
bFRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3RydWN0
dXJlQ2hhaW5TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CisgICAgd2l0aFNjb3BlU3RydWN0dXJlLnNldCgqdGhpcywgSlNXaXRo
U2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5s
aW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRFdmFsQ29kZUJs
b2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKIAogICAgIHd0ZlRo
cmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4aXN0aW5nRW50cnlJZGVudGlm
aWVyVGFibGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCmluZGV4IGU5N2MwYTAxNWQ0ODU0NDU0NzA3NzczZjE3MTY2ZTIwMDZjMDQzZGUuLjBmZmFj
Y2I2YWQxMjVmNzY0ZjRiNWQ1YjEyOTdlZWM1M2EyNmE5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCkBAIC02Myw2ICs2Myw3IEBAIHN0cnVjdCBP
cGFxdWVKU0NsYXNzQ29udGV4dERhdGE7CiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENv
ZGVCbG9jazsKKyAgICBjbGFzcyBDb2RlQ2FjaGU7CiAgICAgY2xhc3MgQ29tbW9uSWRlbnRpZmll
cnM7CiAgICAgY2xhc3MgSGFuZGxlU3RhY2s7CiAgICAgY2xhc3MgSWRlbnRpZmllclRhYmxlOwpA
QCAtODAsNiArODEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFD
SU5HKQogICAgIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgorICAgIGNsYXNzIFVubGlua2VkQ29kZUJs
b2NrOworICAgIGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKKyAgICBjbGFzcyBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTsKKyAgICBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7
CiAKICAgICBzdHJ1Y3QgSGFzaFRhYmxlOwogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKQEAgLTIy
Myw2ICsyMjgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHNoYXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBz
dHJ1Y3R1cmVDaGFpblN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3BhcnNl
QXJyYXlWYWx1ZU1hcFN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2l0aFNj
b3BlU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxp
bmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAKICAgICAgICAgSWRlbnRpZmllclRh
YmxlKiBpZGVudGlmaWVyVGFibGU7CiAgICAgICAgIENvbW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0
eU5hbWVzOwpAQCAtNDM2LDYgKzQ0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgSlNMb2NrJiBhcGlMb2NrKCkgeyByZXR1cm4gbV9hcGlMb2NrOyB9CisgICAgICAg
IENvZGVDYWNoZSogY29kZUNhY2hlKCkgeyByZXR1cm4gbV9jb2RlQ2FjaGUuZ2V0KCk7IH0KIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CkBAIC00NTYsNiArNDY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IENsYXNz
SW5mbyogbV9pbml0aWFsaXppbmdPYmplY3RDbGFzczsKICNlbmRpZgogICAgICAgICBib29sIG1f
aW5EZWZpbmVPd25Qcm9wZXJ0eTsKKyAgICAgICAgT3duUHRyPENvZGVDYWNoZT4gbV9jb2RlQ2Fj
aGU7CiAKICAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9pbnQ4QXJyYXlEZXNjcmlwdG9y
OwogICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDE2QXJyYXlEZXNjcmlwdG9yOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmlu
ZGV4IDAzMjUyZmFkMWNhNzEyODRjNmEwY2MyMGRiZTYxN2FlYzc3ODdiY2IuLjg2NGFlNTEyZjU4
YTY4Y2NjYWEzNWJkNDY1ZWFhY2FhZTkyOGI5MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNs
dWRlICJCb29sZWFuQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCb29sZWFuUHJvdG90eXBlLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVk
ZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1
ZGUgIkRlYnVnZ2VyLmgiCkBAIC01ODAsNCArNTgxLDU4IEBAIHZvaWQgc2xvd1ZhbGlkYXRlQ2Vs
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoZ2xvYmFsT2JqZWN0LCAmSlNHbG9iYWxPYmplY3Q6OnNfaW5mbyk7CiB9CiAKK1VubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayogSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVByb2dyYW1Db2RlQmxv
Y2soQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBK
U09iamVjdCoqIGV4Y2VwdGlvbikKK3sKKyAgICBQYXJzZXJFcnJvciBlcnJvcjsKKyAgICBKU1Bh
cnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcyA9IGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpID8g
SlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWw7CisgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2Vy
TW9kZSA9IGhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CisgICAgUHJv
ZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGhhc1Byb2ZpbGVyKCkgPyBQcm9maWxlck9uIDogUHJv
ZmlsZXJPZmY7CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGUgPSBn
bG9iYWxEYXRhKCkuY29kZUNhY2hlKCktPmdldFByb2dyYW1Db2RlQmxvY2soZ2xvYmFsRGF0YSgp
LCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVzcywgZGVidWdnZXJN
b2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKKworICAgIGlmIChoYXNEZWJ1Z2dlcigpKQorICAg
ICAgICBkZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoY2FsbEZyYW1lLCBleGVjdXRhYmxlLT5zb3Vy
Y2UoKS5wcm92aWRlcigpLCBlcnJvci5tX2xpbmUsIGVycm9yLm1fbWVzc2FnZSk7CisKKyAgICBp
ZiAoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpIHsKKyAgICAgICAgKmV4
Y2VwdGlvbiA9IGVycm9yLnRvRXJyb3JPYmplY3QodGhpcywgZXhlY3V0YWJsZS0+c291cmNlKCkp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHVubGlu
a2VkQ29kZTsKK30KKworVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdDo6Y3Jl
YXRlRXZhbENvZGVCbG9jayhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXZhbEV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQoreworICAgIFBhcnNlckVycm9yIGVycm9y
OworICAgIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzID0gZXhlY3V0YWJsZS0+aXNTdHJp
Y3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbDsKKyAgICBEZWJ1Z2dlck1v
ZGUgZGVidWdnZXJNb2RlID0gaGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9m
ZjsKKyAgICBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlID0gaGFzUHJvZmlsZXIoKSA/IFByb2Zp
bGVyT24gOiBQcm9maWxlck9mZjsKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2Vk
Q29kZSA9IGdsb2JhbERhdGEoKS5jb2RlQ2FjaGUoKS0+Z2V0RXZhbENvZGVCbG9jayhnbG9iYWxE
YXRhKCksIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1
Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworCisgICAgaWYgKGhhc0RlYnVnZ2VyKCkp
CisgICAgICAgIGRlYnVnZ2VyKCktPnNvdXJjZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUt
PnNvdXJjZSgpLnByb3ZpZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKKwor
ICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkgeworICAgICAg
ICAqZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdCh0aGlzLCBleGVjdXRhYmxlLT5zb3Vy
Y2UoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiB1bmxp
bmtlZENvZGU7Cit9CisKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBKU0dsb2JhbE9iamVj
dDo6Y3JlYXRlRnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIGNvZGUsIEpT
T2JqZWN0KiogZXhjZXB0aW9uKQoreworICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZ2xvYmFsRGF0YSgpLmNvZGVDYWNo
ZSgpLT5nZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShnbG9iYWxEYXRhKCksIG5h
bWUsIGNvZGUsIGVycm9yKTsKKyAgICBpZiAoaGFzRGVidWdnZXIoKSkKKyAgICAgICAgZGVidWdn
ZXIoKS0+c291cmNlUGFyc2VkKGNhbGxGcmFtZSwgY29kZS5wcm92aWRlcigpLCBlcnJvci5tX2xp
bmUsIGVycm9yLm1fbWVzc2FnZSk7CisKKyAgICBpZiAoZXJyb3IubV90eXBlICE9IFBhcnNlckVy
cm9yOjpFcnJvck5vbmUpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGVycm9yLnRvRXJyb3JPYmpl
Y3QodGhpcywgY29kZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJl
dHVybiBleGVjdXRhYmxlOworfQorCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggNjVmZGE0OWQ4NDg4
NDgyMDIyMzI2OGY1YTNiMWE1NTA1NWZlN2QyMi4uMzIxMjM2M2FiNGU3MTNhZmI0YTE2NDI5OTNj
MDM1NjQ0NDdmZmFkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCkBAIC00Myw2ICs0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBEZWJ1Z2dlcjsKICAgICBjbGFzcyBFcnJvckNvbnN0cnVjdG9yOwogICAgIGNsYXNzIEVycm9y
UHJvdG90eXBlOworICAgIGNsYXNzIEV2YWxDb2RlQmxvY2s7CisgICAgY2xhc3MgRXZhbEV4ZWN1
dGFibGU7CisgICAgY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CisgICAgY2xhc3MgRnVuY3Rpb25F
eGVjdXRhYmxlOwogICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwogICAgIGNsYXNzIEdldHRl
clNldHRlcjsKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2s7CkBAIC01MCw5ICs1NCwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgY2xh
c3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcjsKICAgICBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrOwor
ICAgIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlOwogICAgIGNsYXNzIFJlZ0V4cENvbnN0cnVjdG9y
OwogICAgIGNsYXNzIFJlZ0V4cFByb3RvdHlwZTsKLQorICAgIGNsYXNzIFNvdXJjZUNvZGU7CiAg
ICAgc3RydWN0IEFjdGl2YXRpb25TdGFja05vZGU7CiAgICAgc3RydWN0IEhhc2hUYWJsZTsKIApA
QCAtMTg1LDYgKzE5MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBKU19F
WFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKKyAgICAgICAgYm9vbCBoYXNEZWJ1
Z2dlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KKyAgICAgICAgYm9vbCBoYXNQcm9m
aWxlcigpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRz
UHJvZmlsaW5nKHRoaXMpOyB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSos
IGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDApOwogCkBAIC0zNjYsNiArMzc0LDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGRvdWJsZSB3ZWFrUmFuZG9tTnVtYmVyKCkg
eyByZXR1cm4gbV93ZWFrUmFuZG9tLmdldCgpOyB9CiAgICAgICAgIHVuc2lnbmVkIHdlYWtSYW5k
b21JbnRlZ2VyKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9tLmdldFVpbnQzMigpOyB9CisKKyAgICAg
ICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGVQcm9ncmFtQ29kZUJsb2NrKENhbGxG
cmFtZSosIFByb2dyYW1FeGVjdXRhYmxlKiwgSlNPYmplY3QqKiBleGNlcHRpb24pOworICAgICAg
ICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNyZWF0ZUV2YWxDb2RlQmxvY2soQ2FsbEZyYW1lKiwg
RXZhbEV4ZWN1dGFibGUqLCBKU09iamVjdCoqIGV4Y2VwdGlvbik7CisgICAgICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGVGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29k
ZShDYWxsRnJhbWUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYsIEpTT2Jq
ZWN0KiogZXhjZXB0aW9uKTsKKwogICAgIHByb3RlY3RlZDoKIAogICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaApp
bmRleCAwM2Y0YTc3OTA5MDc3ZTZhNmM1ZGFhMzhiNWIzMjllMDA2MWM2MjhiLi4xMGQ5OGQyYmQy
NWE2ZDFlMjI3NDdiNzAwM2E4MTYwZDgzMWIzMTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGUuaApAQCAtNDEsNiArNDEsMTEgQEAgZW51bSBKU1R5cGUgewogICAgIFByb2dy
YW1FeGVjdXRhYmxlVHlwZSwKICAgICBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLAogCisgICAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLAorICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
a1R5cGUsCisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrVHlwZSwKKyAgICBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrVHlwZSwKKwogICAgIC8vIFRoZSBPYmplY3RUeXBlIHZhbHVlIG11c3QgY29t
ZSBiZWZvcmUgYW55IEpTVHlwZSB0aGF0IGlzIGEgc3ViY2xhc3Mgb2YgSlNPYmplY3QuCiAgICAg
T2JqZWN0VHlwZSwKICAgICBGaW5hbE9iamVjdFR5cGUsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172184</attachid>
            <date>2012-11-02 17:31:36 -0700</date>
            <delta_ts>2012-11-05 17:23:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101127-20121102172955.patch</filename>
            <type>text/plain</type>
            <size>221287</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMzY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZDA2YmIxNTFiZDk3NjQ0ZTQ0YWQ5ZmVmNzZjNmFiYjZmMWJkNDc2Li4xZTIzZTg3ZTJkNmQwMmEy
NDMwMjE5YmU3N2FjZTVmMzhiZDRjMDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MiBAQAorMjAxMi0xMS0wMiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZHVjZSBwYXJzZXIgb3ZlcmhlYWQgaW4gSlNDCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExMjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbiBleGNpdGluZyBqb3VybmV5IGludG8g
dGhlIHdvcmxkIG9mIGFyY2hpdGVjdHVyZSBpbiB3aGljaCBvdXIgaGVybworICAgICAgICBhZGRz
IHlldCBhbm90aGVyIGxheWVyIHRvIEpTQyBjb2RlZ2VuZXJhdGlvbi4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgYSBtYXJnaW5hbGx5IG1vcmUgY29tcGFjdCBmb3JtIG9mIGJ5dGVjb2RlIHRo
YXQgaXMKKyAgICAgICAgZnJlZSBmcm9tIGFueSBkYXRhIHNwZWNpZmljIHRvIGEgZ2l2ZW4gZXhl
Y3V0aW9uIGNvbnRleHQsIGFuZCB0aGF0CisgICAgICAgIGRvZXMgc3RvcmUgYW55IGRhdGEgc3Ry
dWN0dXJlcyBuZWNlc3NhcnkgZm9yIGV4ZWN1dGlvbi4gIFRvIGFjdHVhbGx5CisgICAgICAgIGV4
ZWN1dGUgdGhpcyBVbmxpbmtlZEJ5dGVjb2RlIHdlIHN0aWxsIG5lZWQgdG8gaW5zdGFudGlhdGUg
YSByZWFsCisgICAgICAgIENvZGVCbG9jaywgYnV0IHRoaXMgaXMgYSBtdWNoIGZhc3RlciBsaW5l
YXIgdGltZSBvcGVyYXRpb24gdGhhbiBhbnkKKyAgICAgICAgb2YgdGhlIGVhcmxpZXIgcGFyc2lu
ZyBvciBjb2RlIGdlbmVyYXRpb24gcGFzc2VzLgorCisgICAgICAgIEFzIHRoZSB1bmxpbmtlZCBj
b2RlIGlzIGNvbnRleHQgZnJlZSB3ZSBjYW4gdGhlbiBzaW1wbHkgdXNlIGEgY2FjaGUKKyAgICAg
ICAgZnJvbSBzb3VyY2UgdG8gdW5saW5rZWQgY29kZSBtYXBwaW5nIHRvIGNvbXBsZXRlbHkgYXZv
aWQgYWxsIG9mIHRoZQorICAgICAgICBvbGQgcGFyc2VyIG92ZXJoZWFkLiAgVGhlIGNhY2hlIGlz
IGN1cnJlbnRseSB2ZXJ5IHNpbXBsZSBhbmQgbWVtb3J5CisgICAgICAgIGhlYXZ5LCB1c2luZyB0
aGUgY29tcGxldGUgc291cmNlIHRleHQgYXMgYSBrZXkgKHJhdGhlciB0aGFuIFNvdXJjZUNvZGUK
KyAgICAgICAgb3IgZXF1aXZhbGVudCksIGFuZCBhIHJhbmRvbSBldmljdGlvbiBwb2xpY3kuCisK
KyAgICAgICAgVGhpcyBzZWVtcyB0byBwcm9kdWNlIGEgc3Vic3RhbnRpYWwgd2luIHdoZW4gbG9h
ZGluZyBpZGVudGljYWwgY29udGVudAorICAgICAgICBpbiBkaWZmZXJlbnQgY29udGV4dHMuCisK
KyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgICAgIE1vdmVkIGEgbnVtYmVyIG9mIGZpZWxkcywgYW5k
IGEgYnVuY2ggb2YgbG9naWMgdG8gVW5saW5rZWRDb2RlQmxvY2suaC9jcHAKKyAgICAgICAgKiBi
eXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgICAgIEFkZGVkIGEgZ2xvYmFsIGNvbnN0IGluaXQg
bm8gb3AgaW5zdHJ1Y3Rpb24gbmVlZGVkIHRvIGdldCBjb3JyZWN0CisgICAgICAgICAgICBiZWhh
dmlvdXIgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBzZW1hbnRpY3MuCisgICAgICAgICogYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgICAgIEEgZmFpcmx5IHNoYWxsb3csIEdD
IGFsbG9jYXRlZCB2ZXJzaW9uIG9mIHRoZSBvbGQgQ29kZUJsb2NrCisgICAgICAgICAgICBjbGFz
c2VzIHdpdGggYSAzMmJpdCBpbnN0cnVjdGlvbiBzaXplLCBhbmQganVzdCBtZXRhZGF0YQorICAg
ICAgICAgICAgc2l6ZSB0cmFja2luZy4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
OgorICAgICAgICAgICAgUmVwbGFjZSBkaXJlY3QgYWNjZXNzIHRvIG1fc3ltYm9sVGFibGUgd2l0
aCBhY2Nlc3MgdGhyb3VnaAorICAgICAgICAgICAgc3ltYm9sVGFibGUoKS4gIFByb2dyYW1Db2Rl
IG5vIGxvbmdlciBoYXMgYSBzeW1ib2wgdGFibGUgYXQKKyAgICAgICAgICAgIGFsbCBzbyBzb21l
IHByZXZpb3VzbHkgdW5jb25kaXRpb25hbCAoYW5kIHBvaW50bGVzcykgdXNlcworICAgICAgICAg
ICAgb2Ygc3ltYm9sVGFibGUgZ2V0IG51bGwgY2hlY2tzLgorICAgICAgICAgICAgQSBmZXcgb3Ro
ZXIgY2hhbmdlcyB0byBkZWFsIHdpdGggdHlwZSBjaGFuZ2VzIGR1ZSB0byB1cyBnZW5lcmF0aW5n
CisgICAgICAgICAgICB1bmxpbmtlZCBjb2RlIChlZy4gcG9pbnRlciBmcmVlLCBzbyBwcm9maWxl
IGluZGljZXMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIHBvaW50ZXJzKS4KKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMu
aDoKKyAgICAgICAgICAgIFN1cHBvcnQgZ2xvYmFsX2luaXRfbm9wICAgICAgICAKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgICAgICBOb3cgZ2V0IHRoZSBQ
cm9ncmFtRXhlY3V0YWJsZSB0byBpbml0aWFsaXNlIG5ldyBnbG9iYWwgcHJvcGVydGllcworICAg
ICAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIGV4ZWN1dGlvbi4gICAgICAgIAorICAgICAgICAqIGpp
dC9KSVQuY3BwOgorICAgICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKiBqaXQvSklU
U3R1YnMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgICAgIEFk
ZGluZyBpbml0X2dsb2JhbF9jb25zdF9ub3AgZXZlcnl3aGVyZSBlbHNlCisgICAgICAgICogcGFy
c2VyL1BhcnNlci5oOgorICAgICAgICAqIHBhcnNlci9QYXJzZXJNb2Rlcy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyVG9rZW5zLmg6CisgICAgICAgICAgICBQYXJzZXIgbm8gbG9u
Z2VyIG5lZWRzIGEgZ2xvYmFsIG9iamVjdCBvciBjYWxsZnJhbWUgdG8gZnVuY3Rpb24gICAgICAg
IAorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9Db2RlQ2FjaGUuaDogQWRkZWQuCisgICAgICAgICAgICBBIHNpbXBsZSwgcmFuZG9tIGV2
aWN0aW9uLCBTb3VyY2UtPlVubGlua2VkQ29kZSBjYWNoZSAgICAgICAgCisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAg
ICAgICAgICAgIEV4ZWN1dGFibGVzIG5vdyByZWZlcmVuY2UgdGhlaXIgdW5saW5rZWQgY291bnRl
cnBhcnRzLCBhbmQKKyAgICAgICAgICAgIHJlcXVlc3QgY29kZSBzcGVjaWZpY2FsbHkgZm9yIHRo
ZSB0YXJnZXQgZ2xvYmFsIG9iamVjdC4gICAgICAgIAorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAg
ICAgR2xvYmFsRGF0YSBub3cgb3ducyBhIENvZGVDYWNoZSBhbmQgYSBzZXQgb2YgbmV3IHN0cnVj
dHVyZXMKKyAgICAgICAgICAgIGZvciB0aGUgdW5saW5rZWQgY29kZSB0eXBlcy4gIAorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgICAgIFV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgZXhlY3V0
YWJsZXMgdG8gcGVyZm9ybSBjb21waWxhdGlvbgorIAorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBl
Lmg6CisgICAgICAgICAgQWRkIG5ldyBKU1R5cGVzIGZvciB1bmxpbmtlZCBjb2RlCisKIDIwMTIt
MTEtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkc6Ok5v
ZGU6OmNvbnZlclRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQgc2hvdWxkIHRha2Uga2lu
ZGx5IHRvIEFycmF5aWZ5VG9TdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpLmMKaW5kZXggYjUyYTJiNDQwNzJhYTY4NWU5OWM1ZDA4MDM5MzVmYzJhMDM5OGVk
Mi4uZmNhYjlhNThiNjYwMTU0NGY0NzgyZmQzYTk5YjlkZTcwNTlkYWQ5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKQEAgLTE0NTgsNyArMTQ1OCw5IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgSlNTdHJpbmdSZWxlYXNlKGZ1bmN0
aW9uQm9keSk7CiAgICAgQVNTRVJUKCFleGNlcHRpb24pOwogICAgIEFTU0VSVChKU09iamVjdElz
RnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24pKTsKLSAgICB2ID0gSlNPYmplY3RDYWxsQXNGdW5j
dGlvbihjb250ZXh0LCBmdW5jdGlvbiwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CisgICAgZXhjZXB0
aW9uID0gMDsKKyAgICB2ID0gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBmdW5jdGlv
biwgTlVMTCwgMCwgTlVMTCwgJmV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFleGNlcHRpb24pOwog
ICAgIEFTU0VSVCh2KTsKICAgICBBU1NFUlQoSlNWYWx1ZUlzRXF1YWwoY29udGV4dCwgdiwgYXJy
YXlDb25zdHJ1Y3RvciwgTlVMTCkpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGM3MDZmNjVlOWQzOWIxYjg2MWRkNDBjOTg5NmEyZmQyZDc3NWYxZjEuLmRlOWQx
NjZlOWQ1ZjQ2M2RkNTU4MDE2YTc0ODQ3ZDQzNzBiNjMwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTYxLDYgKzYxLDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBieXRlY29kZS9TcGVjaWFsUG9pbnRlci5jcHAKICAgICBieXRlY29kZS9TdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAogICAgIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAorICAgIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAogICAgIGJ5dGVjb2Rl
L1dhdGNocG9pbnQuY3BwCiAKICAgICBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CkBAIC0xNzYsNiArMTc3LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50
aW1lL0Jvb2xlYW5PYmplY3QuY3BwCiAgICAgcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAog
ICAgIHJ1bnRpbWUvQ2FsbERhdGEuY3BwCisgICAgcnVudGltZS9Db2RlQ2FjaGUuY3BwCiAgICAg
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAKICAgICBydW50aW1lL0NvbXBsZXRpb24uY3Bw
CiAgICAgcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQppbmRleCA2ZTc0YzNiNTMxZmMwZWU5MjU4YjQ4OGI1YTE1NjRiZWNm
M2E5ZWQzLi5hNWIyZmQ1ZDAyMWM5MDEwOTgwOWYzOTNjMmU4NGU3MTRmZDBmMGRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTQyLDYgKzE0Miw4IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBcCkBAIC00NDgsNiArNDUwLDcgQEAgamF2
YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJUb2tlbnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUmVzdWx0VHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Nv
dXJjZUNvZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRl
ci5oIFwKQEAgLTQ4OCw2ICs0OTEsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2Rl
Q2FjaGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZVNwZWNpYWxpemF0aW9uS2luZC5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvagppbmRleCAwZjk2YTYwZWRkMTI0OTQ3ZjljMDcwZDk5OTVmNTFlZDkzZmMyYjcyLi4yNzk4
YzkwNWUwYzgyMjk3M2U1NGRhYjhjNjk2MDQ3MWYyNjMwOTZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpAQCAtNjM4LDYg
KzYzOCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxydW50aW1lXENvZGVDYWNoZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQ29kZUNhY2hlLmgiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQ29t
bW9uSWRlbnRpZmllcnMuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE3NjIsNiArMTc3MCwx
NCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwu
LlxieXRlY29kZVxVbmxpbmtlZENvZGVCbG9jay5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXFVubGlua2VkQ29kZUJsb2Nr
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGJ5dGVjb2RlXFZhbHVlUHJvZmlsZS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTIyNDYsNiAr
MjI2MiwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxwYXJzZXJcUGFyc2VyTW9kZXMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGFyc2VyXFBhcnNlckFyZW5hLmNwcCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJhNmE1YzRjMGZl
MTlmNzJlY2RjOWY1NjI2MWEzYmI2NzE5OWNlMDUuLjU3NGJmYTBkNjBhNDY2Yzc1YmI5M2NhNGI3
MmJjZGM0ZWJmNmQzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01ODQsMTIg
KzU4NCwxNyBAQAogCQlBNzU3MDZERTExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMy
XzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3BwICovOyB9Owog
CQlBNzY2QjQ0RjBFRThEQ0QxMDA5NTE4Q0EgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjUwRUU3NENG
QzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzZDNTE3NjExODI3NDhEMDA3MTVCMDUgLyog
SlNJbnRlcmZhY2VKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3NkYyNzk0MTVG
MTNDOTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUgLyog
VW5saW5rZWRDb2RlQmxvY2suY3BwICovOyB9OwogCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0Ug
LyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmgg
Ki87IH07CisJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3RjE4MUYxNjQwODhC
MjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgKi87IH07CisJCUE3N0YxODIyMTY0MDg4QjIwMDY0
MEE0NyAvKiBDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzdGMTgyNTE2NDE5
MkM3MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyog
QVNUQnVpbGRlci5oICovOyB9OwogCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4
Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLzsgfTsKIAkJQTdB
RkMxNzkxNUY3RUZFMzAwNDhGNTdCIC8qIFJlc29sdmVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QUZDMTc3MTVGN0VGRTMwMDQ4RjU3
QiAvKiBSZXNvbHZlT3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTdCNDhGNDkwRUU4OTM2RjAwRENCREI2IC8qIEV4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICov
OyB9OwogCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjRBQ0FFMTQ4NEM5
Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3QjYwMTgyMTYzOUZEMkEwMDM3MkJBMyAvKiBVbmxp
bmtlZENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc5RTc4MUYxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdDMUU4RTQx
MTJFNzJFRjAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDMUU4QzgxMTJFNzAxQzAwQTM3
Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovOyB9OwogCQlBN0RDQjk3MzEyRTUx
OTNGMDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0RDQjc3OTEyRTNEOTA1MDA5MTE5NDAgLyogV3JpdGVCYXJy
aWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTJFQTY5MEZCNDYwQ0YwMDYwMUYw
NiAvKiBMaXRlcmFsUGFyc2VyLmggKi87IH07CkBAIC0xMzg2LDYgKzEzOTEsMTEgQEAKIAkJQTc2
N0ZGOUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5cGVkQXJyYXlTdHVicy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NUeXBlZEFycmF5U3R1YnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNl
SklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJmYWNlSklULmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAv
KiBKSVRXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
V3JpdGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3N0YxODFGMTY0
MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTc3RjE4MjAxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb2RlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3OUU3ODFF
MTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmxpbmtlZENvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENv
ZGVCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtlZENvZGVC
bG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzlFREIwODExNTMxQ0Q2MDAx
OUU5MTIgLyogSlNPYmplY3RSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTT2JqZWN0UmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyogQVNUQnVpbGRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBU1RCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bnRheENoZWNrZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNzEsNiArMjA4MSw3IEBACiAJCQkJRTQ5REMxNTExMkVGMjcy
MjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCAqLywKIAkJCQlFNDlEQzE0OTEyRUYy
NjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLywKIAkJCQlBN0E3RUU3
NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovLAorCQkJCUE3N0YxODI0MTY0
MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovLAogCQkJKTsKIAkJCXBhdGggPSBwYXJz
ZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjMwNSw2ICsyMzE2LDggQEAKIAkJ
CQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3RENC
Nzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQlDMkQ1OEMzMzE1
OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKKwkJCQlBNzdGMTgx
RjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCAqLywKKwkJCQlBNzdGMTgyMDE2NDA4
OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHJ1bnRpbWU7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjU4MSw2ICsyNTk0LDggQEAKIAkJCQkw
RjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8sCiAJCQkJMEY5
MTlEMjIxNTg1M0NERTAwNEE0RTdEIC8qIFdhdGNocG9pbnQuY3BwICovLAogCQkJCTBGOTE5RDIz
MTU4NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmggKi8sCisJCQkJQTc5RTc4MUUxNUVFQ0JB
ODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCAqLywKKwkJCQlBNzlFNzgxRjE1RUVD
QkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suaCAqLywKIAkJCSk7CiAJCQlwYXRoID0g
Ynl0ZWNvZGU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzAwOSw2ICszMDI0LDkg
QEAKIAkJCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIy
MzlEMUIxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
N0I2MDE4MjE2MzlGRDJBMDAzNzJCQTMgLyogVW5saW5rZWRDb2RlQmxvY2suaCBpbiBIZWFkZXJz
ICovLAorCQkJCUE3N0YxODIyMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0zNTg3LDYgKzM2MDUsOCBAQAogCQkJCUMyNEQzMUUyMTYxQ0Q2OTUw
MDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjIzOUQx
NzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzIyMzlEMUExNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBNzdGMTgyMTE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAppbmRleCA3MjlmODVmNzgwMzQ4NmU1ZGIxYjY4NGQ3OTc1YTg2YTQwNDZjNGQ2Li45
Y2Y2ZmFmYjQ0OGRlY2FiZTQxZDMxMzZmNDY0Y2ZkZmU0YTU1MjE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNDkxLDEzICs0OTEsMTMgQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICArK2luc3RydWN0
aW9uQ291bnQ7CiAKICAgICBkYXRhTG9nKAotICAgICAgICAiJWx1IG1faW5zdHJ1Y3Rpb25zOyAl
bHUgYnl0ZXMgYXQgJXAgKCVzKTsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVnaXN0ZXIo
cyk7ICVkIHZhcmlhYmxlKHMpIiwKKyAgICAgICAgIiVsdSBtX2luc3RydWN0aW9uczsgJWx1IGJ5
dGVzIGF0ICVwICglcyk7ICVkIHBhcmFtZXRlcihzKTsgJWQgY2FsbGVlIHJlZ2lzdGVyKHMpOyAl
ZCB2YXJpYWJsZShzKSwgMHglMDR4IGZlYXR1cmVzIiwKICAgICAgICAgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZz4oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9u
KSksCiAgICAgICAgIHRoaXMsIGNvZGVUeXBlVG9TdHJpbmcoY29kZVR5cGUoKSksIG1fbnVtUGFy
YW1ldGVycywgbV9udW1DYWxsZWVSZWdpc3RlcnMsCi0gICAgICAgIG1fbnVtVmFycyk7Ci0gICAg
aWYgKG1fc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpKQotICAgICAgICBkYXRhTG9nKCI7ICVk
IGNhcHR1cmVkIHZhcihzKSIsIG1fc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpKTsKKyAgICAg
ICAgbV9udW1WYXJzLCBtX293bmVyRXhlY3V0YWJsZS0+ZmVhdHVyZXMoKSk7CisgICAgaWYgKHN5
bWJvbFRhYmxlKCkgJiYgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCkpCisgICAgICAgIGRh
dGFMb2coIjsgJWQgY2FwdHVyZWQgdmFyKHMpIiwgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50
KCkpOwogICAgIGlmICh1c2VzQXJndW1lbnRzKCkpIHsKICAgICAgICAgZGF0YUxvZygKICAgICAg
ICAgICAgICI7IHVzZXMgYXJndW1lbnRzLCBpbiByJWQsIHIlZCIsCkBAIC01MzEsMTMgKzUzMSwx
MyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIH0gd2hp
bGUgKGkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgfQogCi0gICAgaWYgKG1f
cmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fcmVnZXhwcy5pc0VtcHR5KCkpIHsKKyAgICBpZiAo
c2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mUmVnRXhwcygpKSB7CiAgICAg
ICAgIGRhdGFMb2coIlxubV9yZWdleHBzOlxuIik7CiAgICAgICAgIHNpemVfdCBpID0gMDsKICAg
ICAgICAgZG8gewotICAgICAgICAgICAgZGF0YUxvZygiICByZSV1ID0gJXNcbiIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpKSwgcmVnZXhwVG9Tb3VyY2VTdHJpbmcobV9yYXJlRGF0YS0+bV9yZWdl
eHBzW2ldLmdldCgpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgcmUl
dSA9ICVzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSksIHJlZ2V4cFRvU291cmNlU3RyaW5n
KG1fdW5saW5rZWRDb2RlLT5yZWdleHAoaSkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAg
KytpOwotICAgICAgICB9IHdoaWxlIChpIDwgbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKSk7
CisgICAgICAgIH0gd2hpbGUgKGkgPCBjb3VudCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkK
QEAgLTY3MSw3ICs2NzEsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJgogICAgICAgICAgICAg
aW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ3YgPSAoKytp
dCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmdjID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBuZXdfYXJyYXlfYnVmZmVyICVzLCAlZCwgJWQi
LCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIGRzdCkuZGF0YSgpLCBhcmd2LCBhcmdjKTsK
KyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIG5ld19hcnJheV9idWZmZXJcdCAlcywgJWQsICVk
IiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCBkc3QpLmRhdGEoKSwgYXJndiwgYXJnYyk7
CiAgICAgICAgICAgICBkdW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3TGluZShsb2NhdGlvbik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNjc5LDcgKzY3OSw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6
Y29uc3RfaXRlcmF0b3ImCiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICAgICAgICAgIGludCByZTAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGRh
dGFMb2coIlslNGRdIG5ld19yZWdleHBcdCAlcywgIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShl
eGVjLCByMCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChyMCA+PTAgJiYgcjAgPCAoaW50KW51
bWJlck9mUmVnRXhwcygpKQorICAgICAgICAgICAgaWYgKHIwID49MCAmJiByMCA8IChpbnQpbV91
bmxpbmtlZENvZGUtPm51bWJlck9mUmVnRXhwcygpKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
IiVzIiwgcmVnZXhwTmFtZShyZTAsIHJlZ2V4cChyZTApKS5kYXRhKCkpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIGRhdGFMb2coImJhZF9yZWdleHAoJWQpIiwgcmUwKTsKQEAg
LTg4OSwxMSArODg5LDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImCiAgICAgICAgICAgICBp
dCsrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pbml0
X2dsb2JhbF9jb25zdF9ub3A6IHsKKyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGluaXRfZ2xv
YmFsX2NvbnN0X25vcFx0IiwgbG9jYXRpb24pOworICAgICAgICAgICAgZHVtcEJ5dGVjb2RlQ29t
bWVudEFuZE5ld0xpbmUobG9jYXRpb24pOworICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgICAg
IGl0Kys7CisgICAgICAgICAgICBpdCsrOworICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6IHsK
ICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gKCsr
aXQpLT51LnJlZ2lzdGVyUG9pbnRlcjsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwogICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gaW5pdF9nbG9iYWxfY29uc3RcdCBn
JWQoJXApLCAlcyIsIGxvY2F0aW9uLCBtX2dsb2JhbE9iamVjdC0+ZmluZFJlZ2lzdGVySW5kZXgo
cmVnaXN0ZXJQb2ludGVyKSwgcmVnaXN0ZXJQb2ludGVyLCByZWdpc3Rlck5hbWUoZXhlYywgcjAp
LmRhdGEoKSk7CiAgICAgICAgICAgICBkdW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3TGluZShsb2Nh
dGlvbik7CisgICAgICAgICAgICBpdCsrOworICAgICAgICAgICAgaXQrKzsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3RfY2hl
Y2s6IHsKQEAgLTE1MzEsOSArMTU0Miw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wU3RhdGlzdGlj
cygpCiAgICAgICAgICAgICBGT1JfRUFDSF9NRU1CRVJfVkVDVE9SKEdFVF9TVEFUUykKICAgICAg
ICAgI3VuZGVmIEdFVF9TVEFUUwogCi0gICAgICAgIGlmICghY29kZUJsb2NrLT5tX3N5bWJvbFRh
YmxlLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpICYm
ICFjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgc3lt
Ym9sVGFibGVJc05vdEVtcHR5Kys7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZVRvdGFsU2l6ZSAr
PSAoY29kZUJsb2NrLT5tX3N5bWJvbFRhYmxlLmNhcGFjaXR5KCkgKiAoc2l6ZW9mKFN5bWJvbFRh
YmxlOjpLZXlUeXBlKSArIHNpemVvZihTeW1ib2xUYWJsZTo6TWFwcGVkVHlwZSkpKTsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlVG90YWxTaXplICs9IChjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkt
PmNhcGFjaXR5KCkgKiAoc2l6ZW9mKFN5bWJvbFRhYmxlOjpLZXlUeXBlKSArIHNpemVvZihTeW1i
b2xUYWJsZTo6TWFwcGVkVHlwZSkpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjb2RlQmxv
Y2stPm1fcmFyZURhdGEpIHsKQEAgLTE2MDEsMzMgKzE2MTIsMjYgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKQogICAgICwgbV9udW1D
YWxsZWVSZWdpc3RlcnMob3RoZXIubV9udW1DYWxsZWVSZWdpc3RlcnMpCiAgICAgLCBtX251bVZh
cnMob3RoZXIubV9udW1WYXJzKQogICAgICwgbV9pc0NvbnN0cnVjdG9yKG90aGVyLm1faXNDb25z
dHJ1Y3RvcikKKyAgICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX2dsb2JhbERhdGEsIG90aGVy
Lm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX3VubGlua2VkQ29kZS5nZXQoKSkKICAg
ICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX2dsb2JhbERhdGEsIG90aGVyLm1fb3duZXJF
eGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1f
Z2xvYmFsRGF0YShvdGhlci5tX2dsb2JhbERhdGEpCiAgICAgLCBtX2luc3RydWN0aW9ucyhvdGhl
ci5tX2luc3RydWN0aW9ucykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKG90aGVyLm1fdGhpc1JlZ2lz
dGVyKQogICAgICwgbV9hcmd1bWVudHNSZWdpc3RlcihvdGhlci5tX2FyZ3VtZW50c1JlZ2lzdGVy
KQogICAgICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIob3RoZXIubV9hY3RpdmF0aW9uUmVnaXN0ZXIp
Ci0gICAgLCBtX25lZWRzRnVsbFNjb3BlQ2hhaW4ob3RoZXIubV9uZWVkc0Z1bGxTY29wZUNoYWlu
KQotICAgICwgbV91c2VzRXZhbChvdGhlci5tX3VzZXNFdmFsKQotICAgICwgbV9pc051bWVyaWND
b21wYXJlRnVuY3Rpb24ob3RoZXIubV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24pCiAgICAgLCBt
X2lzU3RyaWN0TW9kZShvdGhlci5tX2lzU3RyaWN0TW9kZSkKLSAgICAsIG1fY29kZVR5cGUob3Ro
ZXIubV9jb2RlVHlwZSkKICAgICAsIG1fc291cmNlKG90aGVyLm1fc291cmNlKQogICAgICwgbV9z
b3VyY2VPZmZzZXQob3RoZXIubV9zb3VyY2VPZmZzZXQpCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJ
TEVSKQogICAgICwgbV9leGVjdXRpb25FbnRyeUNvdW50KDApCiAjZW5kaWYKLSAgICAsIG1fanVt
cFRhcmdldHMob3RoZXIubV9qdW1wVGFyZ2V0cykKLSAgICAsIG1fbG9vcFRhcmdldHMob3RoZXIu
bV9sb29wVGFyZ2V0cykKICAgICAsIG1faWRlbnRpZmllcnMob3RoZXIubV9pZGVudGlmaWVycykK
ICAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVycykKICAg
ICAsIG1fZnVuY3Rpb25EZWNscyhvdGhlci5tX2Z1bmN0aW9uRGVjbHMpCiAgICAgLCBtX2Z1bmN0
aW9uRXhwcnMob3RoZXIubV9mdW5jdGlvbkV4cHJzKQotICAgICwgbV9zeW1ib2xUYWJsZSgqb3Ro
ZXIubV9nbG9iYWxEYXRhLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIuc3lt
Ym9sVGFibGUoKSkKICAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKICAgICAsIG1fb3B0aW1pemF0
aW9uRGVsYXlDb3VudGVyKDApCiAgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDAp
Ci0gICAgLCBtX2xpbmVJbmZvKG90aGVyLm1fbGluZUluZm8pCiAgICAgLCBtX3Jlc29sdmVPcGVy
YXRpb25zKG90aGVyLm1fcmVzb2x2ZU9wZXJhdGlvbnMpCiAgICAgLCBtX3B1dFRvQmFzZU9wZXJh
dGlvbnMob3RoZXIubV9wdXRUb0Jhc2VPcGVyYXRpb25zKQogI2lmIEVOQUJMRShCWVRFQ09ERV9D
T01NRU5UUykKQEAgLTE2NDUsMzYgKzE2NDksMzEgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29w
eVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKQogICAgICAgICBjcmVhdGVSYXJlRGF0
YUlmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAogICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyczsKLSAgICAg
ICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9yZWdleHBzOwog
ICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycyA9IG90aGVyLm1fcmFyZURhdGEt
Pm1fY29uc3RhbnRCdWZmZXJzOwogICAgICAgICBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRj
aEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZXM7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcyA9IG90
aGVyLm1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlczsKICAgICAgICAgbV9y
YXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25J
bmZvID0gb3RoZXIubV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mbzsKICAgICB9CiB9CiAKLUNv
ZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29k
ZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0ICpnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJv
b2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorQ29k
ZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxp
bmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIHVuc2lnbmVkIGJhc2VTY29wZURlcHRoLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQYXNzT3duUHRyPENvZGVC
bG9jaz4gYWx0ZXJuYXRpdmUpCiAgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCiAgICAgLCBtX2hlYXAo
Jm1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkKLSAgICAsIG1fbnVtQ2FsbGVlUmVn
aXN0ZXJzKDApCi0gICAgLCBtX251bVZhcnMoMCkKLSAgICAsIG1faXNDb25zdHJ1Y3Rvcihpc0Nv
bnN0cnVjdG9yKQotICAgICwgbV9udW1QYXJhbWV0ZXJzKDApCisgICAgLCBtX251bUNhbGxlZVJl
Z2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCisgICAgLCBt
X251bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtVmFycykKKyAgICAsIG1faXNDb25zdHJ1
Y3Rvcih1bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICwgbV91bmxpbmtl
ZENvZGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5r
ZWRDb2RlQmxvY2spCiAgICAgLCBtX293bmVyRXhlY3V0YWJsZShnbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCi0gICAgLCBtX2dsb2Jh
bERhdGEoMCkKLSAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIoLTEpCi0gICAgLCBtX25lZWRzRnVs
bFNjb3BlQ2hhaW4ob3duZXJFeGVjdXRhYmxlLT5uZWVkc0FjdGl2YXRpb24oKSkKLSAgICAsIG1f
dXNlc0V2YWwob3duZXJFeGVjdXRhYmxlLT51c2VzRXZhbCgpKQotICAgICwgbV9pc051bWVyaWND
b21wYXJlRnVuY3Rpb24oZmFsc2UpCi0gICAgLCBtX2lzU3RyaWN0TW9kZShvd25lckV4ZWN1dGFi
bGUtPmlzU3RyaWN0TW9kZSgpKQotICAgICwgbV9jb2RlVHlwZShjb2RlVHlwZSkKKyAgICAsIG1f
Z2xvYmFsRGF0YSh1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsRGF0YSgpKQorICAgICwgbV90aGlz
UmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpKQorICAgICwgbV9hcmd1
bWVudHNSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkKKyAg
ICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5hY3RpdmF0aW9uUmVn
aXN0ZXIoKSkKKyAgICAsIG1faXNTdHJpY3RNb2RlKHVubGlua2VkQ29kZUJsb2NrLT5pc1N0cmlj
dE1vZGUoKSkKICAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQogICAgICwgbV9zb3VyY2VP
ZmZzZXQoc291cmNlT2Zmc2V0KQogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAsIG1f
ZXhlY3V0aW9uRW50cnlDb3VudCgwKQogI2VuZGlmCi0gICAgLCBtX3N5bWJvbFRhYmxlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIFNoYXJlZFN5bWJvbFRhYmxl
OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpKQogICAgICwgbV9hbHRlcm5hdGl2
ZShhbHRlcm5hdGl2ZSkKICAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKICAgICAsIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKDApCkBAIC0xNjgzLDcgKzE2ODIsMTAgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2Rl
VHlwZSwgSlNHbG8KICAgICAsIG1fYnl0ZWNvZGVDb21tZW50SXRlcmF0b3IoMCkKICNlbmRpZgog
eworICAgIG1fZ2xvYmFsRGF0YS0+c3RhcnRlZENvbXBpbGluZyh0aGlzKTsKKwogICAgIEFTU0VS
VChtX3NvdXJjZSk7CisgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpKTsKIAogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICBqaXRBZnRl
cldhcm1VcCgpOwpAQCAtMTY5MSw5ICsxNjkzLDE5OSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0ds
bwogI2lmIERVTVBfQ09ERV9CTE9DS19TVEFUSVNUSUNTCiAgICAgbGl2ZUNvZGVCbG9ja1NldC5h
ZGQodGhpcyk7CiAjZW5kaWYKLSAgICAvLyBXZSBoYXZlIGEgc3R1YiBwdXRUb0Jhc2Ugb3BlcmF0
aW9uIHRvIGFsbG93IHJlc29sdmVfYmFzZSB0bwotICAgIC8vIHJlbWFpbiBicmFuY2hsZXNzCi0g
ICAgbV9wdXRUb0Jhc2VPcGVyYXRpb25zLmFwcGVuZChQdXRUb0Jhc2VPcGVyYXRpb24oaXNTdHJp
Y3RNb2RlKCkpKTsKKyAgICBzZXRJZGVudGlmaWVycyh1bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcnMoKSk7CisgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXJzKCkpOworCisgICAgbV9mdW5jdGlvbkRlY2xzLmdyb3codW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpKTsKKyAgICBmb3IgKHNpemVfdCBjb3Vu
dCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSwgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxp
bmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpOworICAg
ICAgICB1bnNpZ25lZCBsaW5lQ291bnQgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmVDb3VudCgp
OworICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBvd25lckV4ZWN1dGFibGUtPmxpbmVObygp
ICsgdW5saW5rZWRFeGVjdXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKTsKKyAgICAgICAgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2VPZmZzZXQgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPnN0YXJ0
T2Zmc2V0KCk7CisgICAgICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRXhlY3V0
YWJsZS0+c291cmNlTGVuZ3RoKCk7CisgICAgICAgIFNvdXJjZUNvZGUgY29kZShtX3NvdXJjZSwg
c3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUpOworICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGlu
ZSwgZmlyc3RMaW5lICsgbGluZUNvdW50KTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNl
dCgqbV9nbG9iYWxEYXRhLCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUpOworICAgIH0KKwor
ICAgIG1fZnVuY3Rpb25FeHBycy5ncm93KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0
aW9uRXhwcnMoKSk7CisgICAgZm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5r
ZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKTsKKyAgICAgICAgdW5zaWduZWQgbGluZUNvdW50
ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5lQ291bnQoKTsKKyAgICAgICAgdW5zaWduZWQgZmly
c3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5saW5lTm8oKSArIHVubGlua2VkRXhlY3V0YWJsZS0+
Zmlyc3RMaW5lT2Zmc2V0KCk7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNl
T2Zmc2V0ICsgdW5saW5rZWRFeGVjdXRhYmxlLT5zdGFydE9mZnNldCgpOworICAgICAgICB1bnNp
Z25lZCBzb3VyY2VMZW5ndGggPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnNvdXJjZUxlbmd0aCgpOwor
ICAgICAgICBTb3VyY2VDb2RlIGNvZGUobV9zb3VyY2UsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNl
dCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwg
Y29kZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIGxpbmVDb3Vu
dCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fZ2xvYmFsRGF0YSwgb3duZXJF
eGVjdXRhYmxlLCBleGVjdXRhYmxlKTsKKyAgICB9CisKKyAgICBpZiAodW5saW5rZWRDb2RlQmxv
Y2stPmhhc1JhcmVEYXRhKCkpIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OworICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50
QnVmZmVyQ291bnQoKSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZl
cnMuZ3Jvdyhjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZENvZGVCbG9jazo6Q29uc3Rh
bnRCdWZmZXImIGJ1ZmZlciA9IHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihpKTsK
KyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpXSA9IGJ1ZmZl
cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0g
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgeworICAgICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5ncm93KGNvdW50KTsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAg
ICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIgPSB1bmxpbmtlZENvZGVCbG9j
ay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzW2ldLnN0YXJ0ID0gaGFuZGxlci5zdGFydDsKKyAgICAgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldLmVuZCA9IGhhbmRsZXIuZW5kOwor
ICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0udGFyZ2V0
ID0gaGFuZGxlci50YXJnZXQ7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVyc1tpXS5zY29wZURlcHRoID0gaGFuZGxlci5zY29wZURlcHRoICsgYmFzZVNjb3Bl
RGVwdGg7CisjaWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKExMSU5UKQorICAgICAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0ubmF0aXZlQ29kZSA9IENvZGVMb2Nh
dGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKExMSW50OjpnZXRDb2RlUHRyKGxsaW50X29wX2NhdGNoKSkpOworI2VuZGlmCisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZ3Jvdyhjb3VudCk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9y
IHB0ciA9IHVubGlua2VkQ29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoaSkub2Zmc2V0
VGFibGUuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6
U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHVubGlua2VkQ29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaSkub2Zmc2V0VGFibGUuZW5kKCk7CisgICAgICAgICAgICAgICAg
Zm9yICg7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7CisgICAgICAgICAgICAgICAgICAgIE9mZnNldExv
Y2F0aW9uIG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmJyYW5jaE9mZnNldCA9
IHB0ci0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRUYWJsZS5hZGQocHRyLT5rZXksIG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNp
emVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1
bXBUYWJsZXMoKSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hK
dW1wVGFibGVzLmdyb3coY291bnQpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUm
IHNvdXJjZVRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZShpKTsKKyAgICAgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGRlc3RUYWJsZSA9IG1fcmFy
ZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlc1tpXTsKKyAgICAgICAgICAgICAgICBk
ZXN0VGFibGUuYnJhbmNoT2Zmc2V0cyA9IHNvdXJjZVRhYmxlLmJyYW5jaE9mZnNldHM7CisgICAg
ICAgICAgICAgICAgZGVzdFRhYmxlLm1pbiA9IHNvdXJjZVRhYmxlLm1pbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcy5ncm93KGNvdW50KTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAg
ICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBzb3VyY2VUYWJsZSA9IHVubGlua2VkQ29k
ZUJsb2NrLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoaSk7CisgICAgICAgICAgICAgICAgU2lt
cGxlSnVtcFRhYmxlJiBkZXN0VGFibGUgPSBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1
bXBUYWJsZXNbaV07CisgICAgICAgICAgICAgICAgZGVzdFRhYmxlLmJyYW5jaE9mZnNldHMgPSBz
b3VyY2VUYWJsZS5icmFuY2hPZmZzZXRzOworICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5taW4g
PSBzb3VyY2VUYWJsZS5taW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBBbGxvY2F0ZSBtZXRhZGF0YSBidWZmZXJzIGZvciB0aGUgYnl0ZWNvZGUKKyAgICBpZiAo
c2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZMTGludENhbGxMaW5rSW5m
b3MoKSkKKyAgICAgICAgbV9sbGludENhbGxMaW5rSW5mb3MuZ3JvdyhzaXplKTsKKyAgICBpZiAo
c2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkp
CisgICAgICAgIG1fYXJyYXlQcm9maWxlcy5ncm93KHNpemUpOworICAgIGlmIChzaXplX3Qgc2l6
ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlZhbHVlUHJvZmlsZXMoKSkKKyAgICAgICAg
bV92YWx1ZVByb2ZpbGVzLmdyb3coc2l6ZSk7CisgICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mUmVzb2x2ZU9wZXJhdGlvbnMoKSkKKyAgICAgICAgbV9yZXNv
bHZlT3BlcmF0aW9ucy5ncm93KHNpemUpOworICAgIHNpemVfdCBwdXRUb0Jhc2VDb3VudCA9IHVu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlB1dFRvQmFzZU9wZXJhdGlvbnMoKTsKKyAgICBtX3B1
dFRvQmFzZU9wZXJhdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KHB1dFRvQmFzZUNvdW50KTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHB1dFRvQmFzZUNvdW50OyArK2kpCisgICAgICAgIG1fcHV0
VG9CYXNlT3BlcmF0aW9ucy5hcHBlbmQoUHV0VG9CYXNlT3BlcmF0aW9uKGlzU3RyaWN0TW9kZSgp
KSk7CisKKyAgICBBU1NFUlQobV9wdXRUb0Jhc2VPcGVyYXRpb25zLmNhcGFjaXR5KCkgPT0gcHV0
VG9CYXNlQ291bnQpOworCisgICAgLy8gQ29weSBhbmQgdHJhbnNsYXRlIHRoZSBVbmxpbmtlZElu
c3RydWN0aW9ucworICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50ID0gdW5saW5rZWRDb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBVbmxpbmtlZEluc3RydWN0aW9uKiBwYyA9
IHVubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5kYXRhKCk7CisgICAgVmVjdG9yPElu
c3RydWN0aW9uPiBpbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25Db3VudCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyAp
IHsKKyAgICAgICAgdW5zaWduZWQgb3BMZW5ndGggPSBvcGNvZGVMZW5ndGgocGNbaV0udS5vcGNv
ZGUpOworICAgICAgICBpbnN0cnVjdGlvbnNbaV0gPSBnbG9iYWxEYXRhKCktPmludGVycHJldGVy
LT5nZXRPcGNvZGUocGNbaV0udS5vcGNvZGUpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMTsg
aiA8IG9wTGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIGlmIChzaXplb2YoaW50MzJfdCkgIT0g
c2l6ZW9mKGludHB0cl90KSkKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUu
cG9pbnRlciA9IDA7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUub3BlcmFuZCA9
IHBjW2kgKyBqXS51Lm9wZXJhbmQ7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChwY1tpXS51
Lm9wY29kZSkgeworICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIGNhc2Ugb3Bf
Z2V0X2FyZ3VtZW50X2J5X3ZhbDogeworICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4
ID0gcGNbaSArIG9wTGVuZ3RoIC0gMl0udS5vcGVyYW5kOworICAgICAgICAgICAgbV9hcnJheVBy
b2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmlsZShpKTsKKyAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQ
cm9maWxlSW5kZXhdOworICAgICAgICAgICAgLy8gZmFsbHRocm91Z2gKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2NvbnZlcnRfdGhpczoKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlOgorICAg
ICAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZToKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3dpdGhf
YmFzZToKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3dpdGhfdGhpczoKKyAgICAgICAgY2FzZSBv
cF9nZXRfYnlfaWQ6CisgICAgICAgIGNhc2Ugb3BfY2FsbF9wdXRfcmVzdWx0OiB7CisgICAgICAg
ICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3BjW2kgKyBvcExl
bmd0aCAtIDFdLnUub3BlcmFuZF07CisgICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9ieXRl
Y29kZU9mZnNldCA9PSAtMSk7CisgICAgICAgICAgICBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0
ID0gaTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IHByb2Zp
bGU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9i
eV92YWw6IHsKKyAgICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW2kgKyBvcExl
bmd0aCAtIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVBy
b2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNb
aSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X291dF9vZl9saW5lOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgorICAgICAgICBj
YXNlIG9wX2dldF9ieV9pZF9wcm90bzoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46
CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgorICAgICAgICBjYXNlIG9w
X2dldF9ieV9pZF9nZXR0ZXJfcHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRl
cl9jaGFpbjoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGY6CisgICAgICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9wcm90bzoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlf
aWRfY3VzdG9tX2NoYWluOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZW5lcmljOgorICAg
ICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6CisgICAgICAgIGNhc2Ugb3BfZ2V0X3N0cmlu
Z19sZW5ndGg6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKKyAgICAgICAgICAgIGlu
dCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW2kgKyBvcExlbmd0aCAtIDFdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2Zp
bGUoaSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9h
cnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIC8vIGZhbGx0aHJv
dWdoCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDRdID0gJm1fbGxpbnRDYWxsTGlua0luZm9zW3BjW2kgKyA0XS51Lm9w
ZXJhbmRdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBvcF9pbml0X2dsb2Jh
bF9jb25zdF9ub3A6IHsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlVHlwZSgpID09IEdsb2JhbENv
ZGUpOworICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IGlkZW50aWZpZXIocGNbaSArIDRd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFs
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQoaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIGlm
IChlbnRyeS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
aWYgKGVudHJ5LmNvdWxkQmVXYXRjaGVkKCkpIHsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDBdID0gZ2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2luaXRf
Z2xvYmFsX2NvbnN0X2NoZWNrKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDFd
ID0gJmdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDNdID0gZW50cnkuYWRkcmVzc09mSXNXYXRjaGVkKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgMF0gPSBnbG9iYWxEYXRhKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUo
b3BfaW5pdF9nbG9iYWxfY29uc3QpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAxXSA9
ICZnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgaSArPSBvcExlbmd0aDsKKyAgICB9CisgICAgbV9pbnN0cnVj
dGlvbnMgPSBXVEY6OlJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4oaW5zdHJ1Y3Rpb25zKTsK
KworICAgIGlmIChCeXRlY29kZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCisgICAg
ICAgIGR1bXAobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CisgICAgbV9nbG9iYWxEYXRh
LT5maW5pc2hlZENvbXBpbGluZyh0aGlzKTsKIH0KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkK
QEAgLTE3NDQsMTUgKzE5MzYsNiBAQCB2b2lkIENvZGVCbG9jazo6c2V0TnVtUGFyYW1ldGVycyhp
bnQgbmV3VmFsdWUpCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmFkZFBhcmFtZXRlcigp
Ci17Ci0gICAgbV9udW1QYXJhbWV0ZXJzKys7Ci0KLSNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIp
Ci0gICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuYXBwZW5kKFZhbHVlUHJvZmlsZSgpKTsKLSNl
bmRpZgotfQotCiB2b2lkIENvZGVCbG9jazo6dmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBJbnN0cnVjdGlvbiogdlBDKQogewogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRl
ciA9IG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7CkBAIC0xODM1LDYgKzIwMTgsOCBAQCB2b2lk
IENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgaWYg
KCEhbV9hbHRlcm5hdGl2ZSkKICAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiAKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV91bmxpbmtlZENvZGUpOworCiAgICAg
Ly8gVGhlcmUgYXJlIHRocmVlIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25hbCBmaW5h
bGl6ZXJzOiBsYXp5IGJ5dGVjb2RlIGZyZWVpbmcsCiAgICAgLy8gaW5saW5lIGNhY2hlIGNsZWFy
aW5nLCBhbmQgamV0dGlzb25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRv
IGF0CiAgICAgLy8gbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncyBpcyBwcm9iYWJseSBxdWl0ZSBj
bG9zZSB0byAxLiBTbyB3ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0CkBAIC0xOTQ5LDggKzIxMzQs
OSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQogI2lmIEVOQUJM
RShMTElOVCkKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmlu
dGVycHJldGVyOwogICAgIGlmICghIW51bWJlck9mSW5zdHJ1Y3Rpb25zKCkpIHsKLSAgICAgICAg
Zm9yIChzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpLCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3Ry
dWN0aW9uID0gJmluc3RydWN0aW9ucygpW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV1d
OworICAgICAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9ucyA9IG1fdW5saW5rZWRDb2RlLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpOworICAg
ICAgICBmb3IgKHNpemVfdCBzaXplID0gcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgp
LCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cklu
c3RydWN0aW9uID0gJmluc3RydWN0aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ld
XTsKICAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1ckluc3Ry
dWN0aW9uWzBdLnUub3Bjb2RlKSkgewogICAgICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CiAg
ICAgICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToKQEAgLTIxMzIsMTQgKzIz
MTgsOSBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fZ2xvYmFsT2JqZWN0
KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmbV9vd25lckV4ZWN1dGFibGUpOwotICAgIHZpc2l0b3Iu
YXBwZW5kKCZtX3N5bWJvbFRhYmxlKTsKLSAgICBpZiAobV9yYXJlRGF0YSkgeworICAgIHZpc2l0
b3IuYXBwZW5kKCZtX3VubGlua2VkQ29kZSk7CisgICAgaWYgKG1fcmFyZURhdGEpCiAgICAgICAg
IG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLSAg
ICAgICAgc2l6ZV90IHJlZ0V4cENvdW50ID0gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFJlZ0V4cD4qIHJlZ2V4cHMgPSBtX3JhcmVEYXRhLT5tX3Jl
Z2V4cHMuZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ0V4cENvdW50
OyBpKyspCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChyZWdleHBzICsgaSk7Ci0gICAgfQog
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKG1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCBtX2Nv
bnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1
bmN0aW9uRXhwcnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2Z1bmN0
aW9uRXhwcnNbaV0pOwpAQCAtMjI2Niw2NCArMjQ0NywxNyBAQCBIYW5kbGVySW5mbyogQ29kZUJs
b2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiBp
bnQgQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCiB7CiAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpKTsKLQotICAgIFZlY3RvcjxMaW5lSW5mbz4mIGxpbmVJbmZvID0gbV9saW5lSW5mbzsK
LQotICAgIGludCBsb3cgPSAwOwotICAgIGludCBoaWdoID0gbGluZUluZm8uc2l6ZSgpOwotICAg
IHdoaWxlIChsb3cgPCBoaWdoKSB7Ci0gICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxv
dykgLyAyOwotICAgICAgICBpZiAobGluZUluZm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNldCA8PSBi
eXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGhpZ2ggPSBtaWQ7Ci0gICAgfQotCi0gICAgaWYgKCFsb3cpCi0gICAgICAg
IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS0+c291cmNlKCkuZmlyc3RMaW5lKCk7Ci0gICAgcmV0
dXJuIGxpbmVJbmZvW2xvdyAtIDFdLmxpbmVOdW1iZXI7CisgICAgcmV0dXJuIG1fb3duZXJFeGVj
dXRhYmxlLT5saW5lTm8oKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJh
bmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3Qs
IGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KQogewotICAgIEFTU0VSVChieXRlY29k
ZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICBpZiAoIW1fcmFyZURhdGEp
IHsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBlbmRPZmZzZXQgPSAwOwotICAg
ICAgICBkaXZvdCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RXhw
cmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9yYXJlRGF0YS0+bV9leHByZXNz
aW9uSW5mbzsKLQotICAgIGludCBsb3cgPSAwOwotICAgIGludCBoaWdoID0gZXhwcmVzc2lvbklu
Zm8uc2l6ZSgpOwotICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7Ci0gICAgICAgIGludCBtaWQgPSBs
b3cgKyAoaGlnaCAtIGxvdykgLyAyOwotICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5p
bnN0cnVjdGlvbk9mZnNldCA8PSBieXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgIGxvdyA9IG1p
ZCArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhpZ2ggPSBtaWQ7Ci0gICAgfQotCi0g
ICAgQVNTRVJUKGxvdyk7Ci0gICAgaWYgKCFsb3cpIHsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSAw
OwotICAgICAgICBlbmRPZmZzZXQgPSAwOwotICAgICAgICBkaXZvdCA9IDA7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBzdGFydE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFd
LnN0YXJ0T2Zmc2V0OwotICAgIGVuZE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmVu
ZE9mZnNldDsKLSAgICBkaXZvdCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmRpdm90UG9pbnQg
KyBtX3NvdXJjZU9mZnNldDsKLSAgICByZXR1cm47CisgICAgbV91bmxpbmtlZENvZGUtPmV4cHJl
c3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCk7CisgICAgZGl2b3QgKz0gbV9zb3VyY2VPZmZzZXQ7CiB9CiAKIHZv
aWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiB7Ci0gICAg
bV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwogI2lmIEVOQUJMRShM
TElOVCkKICAgICBtX2xsaW50Q2FsbExpbmtJbmZvcy5zaHJpbmtUb0ZpdCgpOwogI2VuZGlmCkBA
IC0yMzM1LDcgKzI0NjksNiBAQCB2b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9k
ZSBzaHJpbmtNb2RlKQogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBpZiAoc2hyaW5r
TW9kZSA9PSBFYXJseVNocmluaykKICAgICAgICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2hy
aW5rVG9GaXQoKTsKLSAgICBtX3ZhbHVlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKICAgICBtX3Jh
cmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKICAgICBtX3NwZWNpYWxGYXN0Q2FzZVByb2Zp
bGVzLnNocmlua1RvRml0KCk7CiAjZW5kaWYKQEAgLTIzNDcsMTUgKzI0ODAsMTEgQEAgdm9pZCBD
b2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkKICAgICAgICAgbV9j
b25zdGFudFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOwogICAgIH0gLy8gZWxzZSBkb24ndCBzaHJp
bmsgdGhlc2UsIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgcG9pbnRlcnMg
aW50byB0aGVzZSB0YWJsZXMuCiAKLSAgICBtX3Jlc29sdmVPcGVyYXRpb25zLnNocmlua1RvRml0
KCk7Ci0gICAgbV9saW5lSW5mby5zaHJpbmtUb0ZpdCgpOwogICAgIGlmIChtX3JhcmVEYXRhKSB7
CiAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2hyaW5rVG9GaXQoKTsK
LSAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNocmlua1RvRml0KCk7CiAgICAgICAgIG1f
cmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwogICAg
ICAgICBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQo
KTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNocmlua1Rv
Rml0KCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm8uc2hyaW5rVG9GaXQo
KTsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBtX3JhcmVEYXRhLT5tX2NhbGxSZXR1cm5JbmRl
eFZlY3Rvci5zaHJpbmtUb0ZpdCgpOwogI2VuZGlmCkBAIC0yMzgzLDcgKzI1MTIsNyBAQCB2b2lk
IENvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBB
U1NFUlQoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOwogICAgIEFTU0VSVChuZWVkc0Z1bGxT
Y29wZUNoYWluKCkpOwogICAgIEFTU0VSVCghY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRp
b25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9
IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUs
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKSk7Cisg
ICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSwgdGhpcyk7CiAgICAgY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAg
Y2FsbEZyYW1lLT5zZXRTY29wZShhY3RpdmF0aW9uKTsKIH0KQEAgLTI4NzgsOCArMzAwNyw4IEBA
IGJvb2wgQ29kZUJsb2NrOjp1c2VzT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQogCiBTdHJpbmcg
Q29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoaW50IHJlZ2lzdGVyTnVtYmVyKQogewotICAgIFN5
bWJvbFRhYmxlOjppdGVyYXRvciBlbmQgPSBtX3N5bWJvbFRhYmxlLT5lbmQoKTsKLSAgICBmb3Ig
KFN5bWJvbFRhYmxlOjppdGVyYXRvciBwdHIgPSBtX3N5bWJvbFRhYmxlLT5iZWdpbigpOyBwdHIg
IT0gZW5kOyArK3B0cikgeworICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBlbmQgPSBzeW1ib2xU
YWJsZSgpLT5lbmQoKTsKKyAgICBmb3IgKFN5bWJvbFRhYmxlOjppdGVyYXRvciBwdHIgPSBzeW1i
b2xUYWJsZSgpLT5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikgewogICAgICAgICBpZiAocHRy
LT52YWx1ZS5nZXRJbmRleCgpID09IHJlZ2lzdGVyTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhwdHItPmtleSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCmluZGV4IGI4ZjA0NzM4YjM5Yjc4ZWEyMGJmYThiNzQ2ZmY0MzA0Y2QwNTNj
NDMuLjU1OWNmYzVjN2VkYzY0NWI1ZTY1MzM4ZTFhODM0MDY0ZTUyNzY5M2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTEyMSw3ICsxMjEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIENvZGVCbG9jayhDb3B5UGFy
c2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOwogICAgICAgICAKLSAgICAgICAgQ29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xvYmFs
T2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNl
dCwgYm9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUp
OworICAgICAgICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmtlZENvZGVCbG9jayosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgYmFzZVNjb3BlRGVw
dGgsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFBh
c3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSk7CiAKICAgICAgICAgV3JpdGVCYXJyaWVy
PEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICAgICAgSGVhcCogbV9oZWFwOwpA
QCAtMTMxLDcgKzEzMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgaW50
IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KICAgICAg
ICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSk7Ci0gICAgICAgIHZvaWQgYWRk
UGFyYW1ldGVyKCk7CiAgICAgICAgIAogICAgICAgICBpbnQqIGFkZHJlc3NPZk51bVBhcmFtZXRl
cnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQpAQCAtNDQ1LDggKzQ0NCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3RydWN0aW9uKj4ocmV0dXJu
QWRkcmVzcykgLSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCBzZXRJc051bWVyaWNDb21wYXJlRnVuY3Rpb24oYm9vbCBpc051bWVyaWNDb21wYXJlRnVu
Y3Rpb24pIHsgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24gPSBpc051bWVyaWNDb21wYXJlRnVu
Y3Rpb247IH0KLSAgICAgICAgYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oKSB7IHJldHVy
biBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQorICAgICAgICBib29sIGlzTnVtZXJpY0Nv
bXBhcmVGdW5jdGlvbigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pc051bWVyaWNDb21wYXJl
RnVuY3Rpb24oKTsgfQogCiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mSW5zdHJ1Y3Rpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CiAgICAgICAgIFJlZkNvdW50
ZWRBcnJheTxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rp
b25zOyB9CkBAIC01MzUsMTAgKzUzMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IHNldFRoaXNSZWdpc3RlcihpbnQgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhp
c1JlZ2lzdGVyOyB9CiAgICAgICAgIGludCB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBt
X3RoaXNSZWdpc3RlcjsgfQogCi0gICAgICAgIHZvaWQgc2V0TmVlZHNGdWxsU2NvcGVDaGFpbihi
b29sIG5lZWRzRnVsbFNjb3BlQ2hhaW4pIHsgbV9uZWVkc0Z1bGxTY29wZUNoYWluID0gbmVlZHNG
dWxsU2NvcGVDaGFpbjsgfQotICAgICAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSBjb25z
dCB7IHJldHVybiBtX25lZWRzRnVsbFNjb3BlQ2hhaW47IH0KLSAgICAgICAgdm9pZCBzZXRVc2Vz
RXZhbChib29sIHVzZXNFdmFsKSB7IG1fdXNlc0V2YWwgPSB1c2VzRXZhbDsgfQotICAgICAgICBi
b29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQorICAgICAgICBib29s
IG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bmVl
ZHNGdWxsU2NvcGVDaGFpbigpOyB9CisgICAgICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJl
dHVybiBtX3VubGlua2VkQ29kZS0+dXNlc0V2YWwoKTsgfQogICAgICAgICAKICAgICAgICAgdm9p
ZCBzZXRBcmd1bWVudHNSZWdpc3RlcihpbnQgYXJndW1lbnRzUmVnaXN0ZXIpCiAgICAgICAgIHsK
QEAgLTYwMCwzNyArNTk2LDI4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKHVz
ZXNBcmd1bWVudHMoKSAmJiBvcGVyYW5kID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihh
cmd1bWVudHNSZWdpc3RlcigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhbmQgPj0gbV9zeW1ib2xUYWJsZS0+Y2FwdHVyZVN0YXJ0KCkg
Ci0gICAgICAgICAgICAgICAgJiYgb3BlcmFuZCA8IG1fc3ltYm9sVGFibGUtPmNhcHR1cmVFbmQo
KTsKKyAgICAgICAgICAgIC8vIFdlJ3JlIGluIGdsb2JhbCBjb2RlIHNvIHRoZXJlIGFyZSBubyBs
b2NhbHMgdG8gY2FwdHVyZQorICAgICAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQgPj0g
c3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkKKyAgICAgICAgICAgICAgICAmJiBvcGVyYW5k
IDwgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgQ29k
ZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CisgICAgICAgIENv
ZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvZGVUeXBl
KCk7IH0KIAogICAgICAgICBTb3VyY2VQcm92aWRlciogc291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2UuZ2V0KCk7IH0KICAgICAgICAgdW5zaWduZWQgc291cmNlT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VPZmZzZXQ7IH0KIAotICAgICAgICBzaXplX3QgbnVtYmVyT2ZKdW1w
VGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgpOyB9Ci0gICAgICAg
IHZvaWQgYWRkSnVtcFRhcmdldCh1bnNpZ25lZCBqdW1wVGFyZ2V0KSB7IG1fanVtcFRhcmdldHMu
YXBwZW5kKGp1bXBUYXJnZXQpOyB9Ci0gICAgICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzW2luZGV4XTsgfQotICAgICAgICB1bnNp
Z25lZCBsYXN0SnVtcFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMubGFzdCgp
OyB9CisgICAgICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPm51bWJlck9mSnVtcFRhcmdldHMoKTsgfQorICAgICAgICB1bnNpZ25l
ZCBqdW1wVGFyZ2V0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmp1
bXBUYXJnZXQoaW5kZXgpOyB9CiAKICAgICAgICAgdm9pZCBjcmVhdGVBY3RpdmF0aW9uKENhbGxG
cmFtZSopOwogCiAgICAgICAgIHZvaWQgY2xlYXJFdmFsQ2FjaGUoKTsKICAgICAgICAgCiAgICAg
ICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoaW50IHJlZ2lzdGVyTnVtYmVyKTsKLSAgICAgICAg
Ci0gICAgICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbih1bnNpZ25lZCBwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zLmFwcGVuZChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKTsKLSAg
ICAgICAgfQotI2lmIEVOQUJMRShMTElOVCkKLSAgICAgICAgTExJbnRDYWxsTGlua0luZm8qIGFk
ZExMSW50Q2FsbExpbmtJbmZvKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9sbGludENhbGxM
aW5rSW5mb3MuYXBwZW5kKExMSW50Q2FsbExpbmtJbmZvKCkpOwotICAgICAgICAgICAgcmV0dXJu
ICZtX2xsaW50Q2FsbExpbmtJbmZvcy5sYXN0KCk7Ci0gICAgICAgIH0KLSNlbmRpZgorCiAjaWYg
RU5BQkxFKEpJVCkKICAgICAgICAgdm9pZCBzZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcyhz
aXplX3Qgc2l6ZSkgeyBtX3N0cnVjdHVyZVN0dWJJbmZvcy5ncm93KHNpemUpOyB9CiAgICAgICAg
IHNpemVfdCBudW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlU3R1YkluZm9zLnNpemUoKTsgfQpAQCAtNjYyLDE0ICs2NDksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgVmFsdWVQcm9maWxlKiBhZGRWYWx1ZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgIT0gLTEpOwotICAgICAg
ICAgICAgQVNTRVJUKG1fdmFsdWVQcm9maWxlcy5pc0VtcHR5KCkgfHwgbV92YWx1ZVByb2ZpbGVz
Lmxhc3QoKS5tX2J5dGVjb2RlT2Zmc2V0IDwgYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICAgICAg
bV92YWx1ZVByb2ZpbGVzLmFwcGVuZChWYWx1ZVByb2ZpbGUoYnl0ZWNvZGVPZmZzZXQpKTsKLSAg
ICAgICAgICAgIHJldHVybiAmbV92YWx1ZVByb2ZpbGVzLmxhc3QoKTsKLSAgICAgICAgfQorCiAg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFsdWVQ
cm9maWxlcy5zaXplKCk7IH0KICAgICAgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUoaW50
IGluZGV4KQogICAgICAgICB7CkBAIC03OTUsMjUgKzc3NSwyNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgLy8gRXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKIAogICAgICAgICBzaXplX3Qg
bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0KLSAgICAgICAgdm9p
ZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IEhhbmRsZXJJbmZvJiBoYW5sZXIpIHsgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVycy5hcHBlbmQoaGFubGVyKTsgfQotICAgICAgICBIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFu
ZGxlcihpbnQgaW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KLQotICAgICAgICB2b2lkIGFkZEV4cHJlc3Np
b25JbmZvKGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mIGV4cHJlc3Npb25JbmZvKQorICAgICAg
ICB2b2lkIGFsbG9jYXRlSGFuZGxlcnMoY29uc3QgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+
JiB1bmxpbmtlZEhhbmRsZXJzKQogICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgY291bnQg
PSB1bmxpbmtlZEhhbmRsZXJzLnNpemUoKTsKKyAgICAgICAgICAgIGlmICghY291bnQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpOwotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mby5hcHBlbmQoZXhw
cmVzc2lvbkluZm8pOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGRMaW5lSW5mbyh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgaW50IGxpbmVObykKLSAgICAgICAgewotICAgICAgICAgICAg
VmVjdG9yPExpbmVJbmZvPiYgbGluZUluZm8gPSBtX2xpbmVJbmZvOwotICAgICAgICAgICAgaWYg
KCFsaW5lSW5mby5zaXplKCkgfHwgbGluZUluZm8ubGFzdCgpLmxpbmVOdW1iZXIgIT0gbGluZU5v
KSB7Ci0gICAgICAgICAgICAgICAgTGluZUluZm8gaW5mbyA9IHsgYnl0ZWNvZGVPZmZzZXQsIGxp
bmVObyB9OwotICAgICAgICAgICAgICAgIGxpbmVJbmZvLmFwcGVuZChpbmZvKTsKKyAgICAgICAg
ICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMucmVzaXplKGNvdW50KTsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAg
ICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0uc3RhcnQgPSB1bmxpbmtlZEhh
bmRsZXJzW2ldLnN0YXJ0OworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9u
SGFuZGxlcnNbaV0uZW5kID0gdW5saW5rZWRIYW5kbGVyc1tpXS5lbmQ7CisgICAgICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXS50YXJnZXQgPSB1bmxpbmtlZEhh
bmRsZXJzW2ldLnRhcmdldDsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzW2ldLnNjb3BlRGVwdGggPSB1bmxpbmtlZEhhbmRsZXJzW2ldLnNjb3BlRGVwdGg7
CiAgICAgICAgICAgICB9CisKICAgICAgICAgfQorICAgICAgICBIYW5kbGVySW5mbyYgZXhjZXB0
aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJl
RGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KIAotICAgICAgICBib29sIGhhc0V4
cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9yYXJlRGF0YSAmJiBtX3JhcmVEYXRhLT5tX2V4cHJl
c3Npb25JbmZvLnNpemUoKTsgfQorICAgICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0V4cHJlc3Npb25JbmZvKCk7IH0KIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgICAgIFZlY3RvcjxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldD4m
IGNhbGxSZXR1cm5JbmRleFZlY3RvcigpCkBAIC04ODgsNiArODY3LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQobV9nbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHYpOwogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQorCisKICAgICAgICAgdW5zaWduZWQgYWRk
T3JGaW5kQ29uc3RhbnQoSlNWYWx1ZSk7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
Y29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KICAgICAgICAgQUxXQVlTX0lO
TElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1
cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KQEAgLTkxMSwyMCArODky
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5k
ZXhdLmdldCgpOyB9CiAKLSAgICAgICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikKLSAg
ICAgICAgewotICAgICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAg
ICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7Ci0gICAg
ICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKFdyaXRlQmFycmllcjxSZWdFeHA+
KCptX2dsb2JhbERhdGEsIG93bmVyRXhlY3V0YWJsZSgpLCByKSk7Ci0gICAgICAgICAgICByZXR1
cm4gc2l6ZTsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ0V4cHMoKSBj
b25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBz
LnNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNv
bnN0IHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzW2lu
ZGV4XS5nZXQoKTsgfQorICAgICAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5yZWdleHAoaW5kZXgpOyB9CiAKICAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSBjb25zdAogICAgICAgICB7CkBAIC05MzksMTAg
KzkwNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25z
dGFudEJ1ZmZlcnMuYXBwZW5kKGJ1ZmZlcik7CiAgICAgICAgICAgICByZXR1cm4gc2l6ZTsKICAg
ICAgICAgfQotICAgICAgICB1bnNpZ25lZCBhZGRDb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBsZW5n
dGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZGRDb25zdGFudEJ1ZmZlcihWZWN0
b3I8SlNWYWx1ZT4obGVuZ3RoKSk7Ci0gICAgICAgIH0KIAogICAgICAgICBWZWN0b3I8SlNWYWx1
ZT4mIGNvbnN0YW50QnVmZmVyQXNWZWN0b3IodW5zaWduZWQgaW5kZXgpCiAgICAgICAgIHsKQEAg
LTk3OSw3ICs5NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RyaW5nSnVtcFRhYmxl
JiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURh
dGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOyB9CiAKIAotICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSB7IHJl
dHVybiBtX3N5bWJvbFRhYmxlLmdldCgpOyB9CisgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5zeW1ib2xUYWJsZSgp
OyB9CiAKICAgICAgICAgRXZhbENvZGVDYWNoZSYgZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFy
ZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9
CiAKQEAgLTEyMjMsNiArMTE4Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKIAorICAgICAgICBVbmxpbmtlZENvZGVC
bG9jayogdW5saW5rZWRDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS5n
ZXQoKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIERGR0NvZGVCbG9j
a3M7CiAgICAgICAgIApAQCAtMTIzNCw3ICsxMjAwLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogI2lm
IEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9u
c0FuZENvdW50TGl2ZW5lc3MoT3BlcmF0aW9uSW5Qcm9ncmVzcywgdW5zaWduZWQmIG51bWJlck9m
TGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0lu
UHJvZmlsZXMpOwogI2VuZGlmCi0gICAgICAgIAorCisgICAgICAgIHZvaWQgc2V0SWRlbnRpZmll
cnMoY29uc3QgVmVjdG9yPElkZW50aWZpZXI+JiBpZGVudGlmaWVycykKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKG1faWRlbnRpZmllcnMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIG1f
aWRlbnRpZmllcnMuYXBwZW5kVmVjdG9yKGlkZW50aWZpZXJzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPiA+JiBjb25zdGFudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBjb3Vu
dCA9IGNvbnN0YW50cy5zaXplKCk7CisgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnJl
c2l6ZShjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fZ2xvYmFs
RGF0YSwgb3duZXJFeGVjdXRhYmxlKCksIGNvbnN0YW50c1tpXS5nZXQoKSk7CisgICAgICAgIH0K
KwogICAgICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9yPEluc3RydWN0aW9u
Pjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVy
YXRvciYpOwogCiAgICAgICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKEV4ZWNTdGF0ZSosIGludCBy
KSBjb25zdDsKQEAgLTEyODQsMjkgKzEyNjQsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgdm9pZCByZXNldFN0dWJJbnRlcm5hbChSZXBhdGNoQnVmZmVyJiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKICNlbmRpZgotICAgICAgICAKKyAgICAgICAgV3JpdGVCYXJy
aWVyPFVubGlua2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICAgICAgaW50IG1fbnVt
UGFyYW1ldGVyczsKLQogICAgICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gbV9v
d25lckV4ZWN1dGFibGU7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogCiAg
ICAgICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7Ci0KICAg
ICAgICAgaW50IG1fdGhpc1JlZ2lzdGVyOwogICAgICAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3Rl
cjsKICAgICAgICAgaW50IG1fYWN0aXZhdGlvblJlZ2lzdGVyOwogCi0gICAgICAgIGJvb2wgbV9u
ZWVkc0Z1bGxTY29wZUNoYWluOwotICAgICAgICBib29sIG1fdXNlc0V2YWw7Ci0gICAgICAgIGJv
b2wgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb247CiAgICAgICAgIGJvb2wgbV9pc1N0cmljdE1v
ZGU7CiAKLSAgICAgICAgQ29kZVR5cGUgbV9jb2RlVHlwZTsKLQogICAgICAgICBSZWZQdHI8U291
cmNlUHJvdmlkZXI+IG1fc291cmNlOwogICAgICAgICB1bnNpZ25lZCBtX3NvdXJjZU9mZnNldDsK
IAotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7
CiAjaWYgRU5BQkxFKExMSU5UKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TExJbnRDYWxsTGlu
a0luZm8sIDg+IG1fbGxpbnRDYWxsTGlua0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8TExJbnRDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJ
bmZvPiA+IG1faW5jb21pbmdMTEludENhbGxzOwpAQCAtMTM3OCwxOCArMTM1MCwxNSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9leGVjdXRpb25FbnRyeUNvdW50OwogI2Vu
ZGlmCiAKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2p1bXBUYXJnZXRzOwotICAgICAgICBW
ZWN0b3I8dW5zaWduZWQ+IG1fbG9vcFRhcmdldHM7Ci0KICAgICAgICAgLy8gQ29uc3RhbnQgUG9v
bAogICAgICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSwgUmVnaXN0ZXJfbXVzdF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyX1Vua25vd24p
OworICAgICAgICAvLyBUT0RPOiBUaGlzIGNvdWxkIGp1c3QgYmUgYSBwb2ludGVyIHRvIG1fdW5s
aW5rZWRDb2RlQmxvY2sncyBkYXRhLCBidXQgdGhlIERGRyBtdXRhdGVzCisgICAgICAgIC8vIGl0
LCBzbyB3ZSdyZSBzdHVjayB3aXRoIGl0IGZvciBub3cuCiAgICAgICAgIFZlY3RvcjxXcml0ZUJh
cnJpZXI8VW5rbm93bj4gPiBtX2NvbnN0YW50UmVnaXN0ZXJzOwogICAgICAgICBWZWN0b3I8V3Jp
dGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gPiBtX2Z1bmN0aW9uRGVjbHM7CiAgICAgICAg
IFZlY3RvcjxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPiA+IG1fZnVuY3Rpb25FeHBy
czsKIAotICAgICAgICBXcml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFi
bGU7Ci0KICAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAgICAg
CiAgICAgICAgIEV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwpAQCAtMTQw
MCwxMSArMTM2OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1aW50MTZfdCBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcjsKICAgICAgICAgdWludDE2X3QgbV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlcjsKIAotICAgICAgICBWZWN0b3I8TGluZUluZm8+IG1fbGluZUluZm87Ci0jaWYg
RU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQotICAgICAgICBWZWN0b3I8Q29tbWVudD4gIG1fYnl0
ZWNvZGVDb21tZW50czsKLSAgICAgICAgc2l6ZV90IG1fYnl0ZWNvZGVDb21tZW50SXRlcmF0b3I7
Ci0jZW5kaWYKICAgICAgICAgVmVjdG9yPFJlc29sdmVPcGVyYXRpb25zPiBtX3Jlc29sdmVPcGVy
YXRpb25zOwogICAgICAgICBWZWN0b3I8UHV0VG9CYXNlT3BlcmF0aW9uLCAxPiBtX3B1dFRvQmFz
ZU9wZXJhdGlvbnM7CiAKQEAgLTE0MTMsOSArMTM3Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBwdWJsaWM6CiAgICAgICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+IG1fZXhjZXB0aW9u
SGFuZGxlcnM7CiAKLSAgICAgICAgICAgIC8vIFJhcmUgQ29uc3RhbnRzCi0gICAgICAgICAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPFJlZ0V4cD4gPiBtX3JlZ2V4cHM7Ci0KICAgICAgICAgICAgIC8v
IEJ1ZmZlcnMgdXNlZCBmb3IgbGFyZ2UgYXJyYXkgbGl0ZXJhbHMKICAgICAgICAgICAgIFZlY3Rv
cjxWZWN0b3I8SlNWYWx1ZT4gPiBtX2NvbnN0YW50QnVmZmVyczsKICAgICAgICAgICAgIApAQCAt
MTQyNiw5ICsxMzg3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgICAgIEV2YWxDb2Rl
Q2FjaGUgbV9ldmFsQ29kZUNhY2hlOwogCi0gICAgICAgICAgICAvLyBFeHByZXNzaW9uIGluZm8g
LSBwcmVzZW50IGlmIGRlYnVnZ2luZy4KLSAgICAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uUmFu
Z2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOwotICAgICAgICAgICAgLy8gTGluZSBpbmZvIC0gcHJl
c2VudCBpZiBwcm9maWxpbmcgb3IgZGVidWdnaW5nLgogI2lmIEVOQUJMRShKSVQpCiAgICAgICAg
ICAgICBWZWN0b3I8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQ+IG1fY2FsbFJldHVy
bkluZGV4VmVjdG9yOwogI2VuZGlmCkBAIC0xNDU2LDggKzE0MTQsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBHbG9iYWxDb2RlQmxv
Y2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2RlQmxv
Y2s+IGFsdGVybmF0aXZlKQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxl
LCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBm
YWxzZSwgYWx0ZXJuYXRpdmUpCisgICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
aywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgYmFzZVNjb3BlRGVwdGgs
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3Vy
Y2VPZmZzZXQsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAg
IDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9i
amVjdCwgYmFzZVNjb3BlRGVwdGgsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGFsdGVy
bmF0aXZlKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMTQ2OSwxMSArMTQyNywx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgUHJv
Z3JhbUNvZGVCbG9jayhQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlw
ZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3Vy
Y2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5h
dGl2ZSkKLSAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29k
ZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQorICAg
ICAgICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3Zp
ZGVyLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IEds
b2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIDAsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAg
ICAgICB9Ci0gICAgICAgIAorCiAjaWYgRU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29w
ZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwpAQCAtMTQ4OCwyNiArMTQ0NiwxNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV2YWxDb2RlQmxvY2soQ29weVBhcnNl
ZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKICAgICAgICAgICAgIDogR2xvYmFsQ29k
ZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgICAgICAgICAsIG1fYmFzZVNjb3Bl
RGVwdGgob3RoZXIubV9iYXNlU2NvcGVEZXB0aCkKLSAgICAgICAgICAgICwgbV92YXJpYWJsZXMo
b3RoZXIubV92YXJpYWJsZXMpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgRXZhbENvZGVCbG9jayhFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgaW50IGJhc2VTY29wZURlcHRoLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJu
YXRpdmUpCi0gICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2
YWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKLSAg
ICAgICAgICAgICwgbV9iYXNlU2NvcGVEZXB0aChiYXNlU2NvcGVEZXB0aCkKKyAgICAgICAgRXZh
bENvZGVCbG9jayhFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxD
b2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgaW50IGJhc2VTY29w
ZURlcHRoLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6
IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9i
YWxPYmplY3QsIGJhc2VTY29wZURlcHRoLCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUp
CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIGludCBiYXNlU2NvcGVEZXB0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFzZVNjb3BlRGVwdGg7IH0KLQotICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXhd
OyB9Ci0gICAgICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdmFyaWFibGVz
LnNpemUoKTsgfQotICAgICAgICB2b2lkIGFkb3B0VmFyaWFibGVzKFZlY3RvcjxJZGVudGlmaWVy
PiYgdmFyaWFibGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV92YXJpYWJsZXMu
aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFibGVzKTsKLSAg
ICAgICAgfQorICAgICAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPnZhcmlhYmxlKGluZGV4KTsgfQor
ICAgICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiB1bmxpbmtlZEV2YWxDb2Rl
QmxvY2soKS0+bnVtVmFyaWFibGVzKCk7IH0KICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBwcm90ZWN0ZWQ6CkBAIC0xNTE5LDggKzE0NjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRp
ZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IG1fYmFzZVNjb3BlRGVwdGg7Ci0gICAgICAg
IFZlY3RvcjxJZGVudGlmaWVyPiBtX3ZhcmlhYmxlczsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrKiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8VW5s
aW5rZWRFdmFsQ29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0KICAgICB9OwogCiAg
ICAgY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKQEAgLTE1MzAs
OCArMTQ3Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZl
ID0gbnVsbHB0cikKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29k
ZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgaXNDb25z
dHJ1Y3RvciwgYWx0ZXJuYXRpdmUpCisgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9u
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1
bmxpbmtlZENvZGVCbG9jaywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
UGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlID0gbnVsbHB0cikKKyAgICAgICAgICAg
IDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9i
amVjdCwgMCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgYWx0ZXJuYXRpdmUpCiAgICAg
ICAgIHsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGNvZGUuaAppbmRleCAzY2U1NmM4MGVlZWIwYmIxNjM4NjUzYmUyOTQ1OWNjNDJjMjQ2M2FiLi4w
OTI5MDNjZjVhNWMxMmU0Yzg2NTk4NGY3NjZmODBmNTRhZTZiNWMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCkBAIC0xMTgsNyArMTE4LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIG1hY3JvKG9wX3B1dF90b19iYXNlLCA1KSBcCiAgICAgICAgIG1hY3JvKG9w
X3B1dF90b19iYXNlX3ZhcmlhYmxlLCA1KSBcCiAgICAgICAgIFwKLSAgICAgICAgbWFjcm8ob3Bf
aW5pdF9nbG9iYWxfY29uc3QsIDMpIFwKKyAgICAgICAgbWFjcm8ob3BfaW5pdF9nbG9iYWxfY29u
c3Rfbm9wLCA1KSBcCisgICAgICAgIG1hY3JvKG9wX2luaXRfZ2xvYmFsX2NvbnN0LCA1KSBcCiAg
ICAgICAgIG1hY3JvKG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrLCA1KSBcCiAgICAgICAgIG1h
Y3JvKG9wX2dldF9ieV9pZCwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAgICAg
IG1hY3JvKG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZSwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGlu
ZyAqLyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTdiNmU2MmU1N2I0OWUzMjdlMmZjMGQ2MGY1MjI5
NmI3NDc5NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCisKKyNpbmNsdWRlICJCeXRlY29kZUdlbmVy
YXRvci5oIgorI2luY2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgor
I2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUg
IlNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3lt
Ym9sVGFibGUuaCIKKworCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUpIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRDb2RlQmxvY2s6OnNfaW5mbyA9IHsg
IlVubGlua2VkQ29kZUJsb2NrIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtl
ZENvZGVCbG9jaykgfTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jazo6
c19pbmZvID0geyAiVW5saW5rZWRHbG9iYWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKSB9OworY29uc3Qg
Q2xhc3NJbmZvIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2spIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRF
dmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEV2YWxDb2RlQmxvY2siLCAmQmFzZTo6
c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRXZhbENvZGVCbG9jaykg
fTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpzX2luZm8gPSB7
ICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKSB9OworCit1bnNpZ25lZCBV
bmxpbmtlZENvZGVCbG9jazo6YWRkT3JGaW5kQ29uc3RhbnQoSlNWYWx1ZSB2KQoreworICAgIHVu
c2lnbmVkIG51bWJlck9mQ29uc3RhbnRzID0gbnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbnN0YW50czsgKytpKSB7Cisg
ICAgICAgIGlmIChnZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGkpID09
IHYpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIGFkZENvbnN0YW50
KHYpOworfQorCitVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQorICAgIDog
QmFzZSgqZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgICwgbV9udW1DYXB0dXJlZFZhcmlhYmxl
cyhub2RlLT5jYXB0dXJlZFZhcmlhYmxlQ291bnQoKSkKKyAgICAsIG1fZm9yY2VVc2VzQXJndW1l
bnRzKG5vZGUtPnVzZXNBcmd1bWVudHMoKSkKKyAgICAsIG1faXNJblN0cmljdENvbnRleHQobm9k
ZS0+aXNTdHJpY3RNb2RlKCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKG5vZGUtPmhh
c0NhcHR1cmVkVmFyaWFibGVzKCkpCisgICAgLCBtX25hbWUobm9kZS0+aWRlbnQoKSkKKyAgICAs
IG1faW5mZXJyZWROYW1lKG5vZGUtPmluZmVycmVkTmFtZSgpKQorICAgICwgbV9wYXJhbWV0ZXJz
KG5vZGUtPnBhcmFtZXRlcnMoKSkKKyAgICAsIG1fZmlyc3RMaW5lT2Zmc2V0KG5vZGUtPmZpcnN0
TGluZSgpIC0gc291cmNlLmZpcnN0TGluZSgpKQorICAgICwgbV9saW5lQ291bnQobm9kZS0+bGFz
dExpbmUoKSAtIG5vZGUtPmZpcnN0TGluZSgpKQorICAgICwgbV9zdGFydE9mZnNldChub2RlLT5z
b3VyY2UoKS5zdGFydE9mZnNldCgpIC0gc291cmNlLnN0YXJ0T2Zmc2V0KCkpCisgICAgLCBtX3Nv
dXJjZUxlbmd0aChub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSkKKyAgICAsIG1fZmVhdHVyZXMobm9k
ZS0+ZmVhdHVyZXMoKSkKKyAgICAsIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlKG5vZGUt
PmZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSgpKQoreworfQorCit2b2lkIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIENPTVBJTEVfQVNT
RVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX25hbWVWYWx1ZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fc3ltYm9sVGFibGVGb3JDYWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9zeW1ib2xUYWJsZUZvckNvbnN0cnVjdCk7Cit9CisKK0Z1bmN0aW9uRXhlY3V0YWJsZSog
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmsoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIHNpemVfdCBsaW5lT2Zmc2V0LCBzaXplX3Qgc291
cmNlT2Zmc2V0KQoreworICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IGxpbmVPZmZzZXQgKyBtX2Zp
cnN0TGluZU9mZnNldDsKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJjZU9mZnNldCAr
IG1fc3RhcnRPZmZzZXQ7CisgICAgU291cmNlQ29kZSBjb2RlKHNvdXJjZS5wcm92aWRlcigpLCBz
dGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBtX3NvdXJjZUxlbmd0aCwgZmlyc3RMaW5lKTsKKyAg
ICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgY29kZSwgdGhp
cywgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBtX2xpbmVDb3VudCk7Cit9CisKK1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENv
ZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhlY1N0YXRlKiBleGVjLCBEZWJ1Z2dlciosIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCit7CisgICAgUGFy
c2VyRXJyb3IgZXJyb3I7CisgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUgPSBleGVjLT5nbG9iYWxE
YXRhKCkuY29kZUNhY2hlKCk7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBjb2RlQ2FjaGUtPmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSwgc291cmNlLCBlcnJvcik7CisgICAgaWYgKGVycm9yLm1f
dHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKSB7CisgICAgICAgICpleGNlcHRpb24gPSBl
cnJvci50b0Vycm9yT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNlKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7
Cit9CisKK1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb2RlQmxvY2tGb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJz
ZXJFcnJvciYgZXJyb3IpCit7CisgICAgc3dpdGNoIChzcGVjaWFsaXphdGlvbktpbmQpIHsKKyAg
ICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsKQorICAg
ICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpCisgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIHJlc3VsdCA9IGdsb2JhbERhdGEuY29kZUNhY2hlKCktPmdldEZ1bmN0aW9uQ29kZUJsb2Nr
KGdsb2JhbERhdGEsIHRoaXMsIHNvdXJjZSwgc3BlY2lhbGl6YXRpb25LaW5kLCBkZWJ1Z2dlck1v
ZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworICAgIAorICAgIGlmIChlcnJvci5tX3R5cGUgIT0g
UGFyc2VyRXJyb3I6OkVycm9yTm9uZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBz
d2l0Y2ggKHNwZWNpYWxpemF0aW9uS2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAg
ICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0KTsKKyAg
ICAgICAgbV9zeW1ib2xUYWJsZUZvckNhbGwuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlc3VsdC0+
c3ltYm9sVGFibGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVj
dDoKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Quc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHJlc3VsdCk7CisgICAgICAgIG1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3Quc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHJlc3VsdC0+c3ltYm9sVGFibGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJpbmcgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OnBhcmFtU3RyaW5nKCkgY29uc3QKK3sKKyAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMgPSAqbV9wYXJhbWV0ZXJzOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBm
b3IgKHNpemVfdCBwb3MgPSAwOyBwb3MgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytwb3MpIHsKKyAg
ICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQocGFyYW1ldGVyc1twb3NdLnN0
cmluZygpKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworVW5s
aW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYgaW5mbykKKyAgICA6IEJhc2UoKmdsb2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICAs
IG1fbnVtVmFycygwKQorICAgICwgbV9udW1DYWxsZWVSZWdpc3RlcnMoMCkKKyAgICAsIG1fbnVt
UGFyYW1ldGVycygwKQorICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX2Fy
Z3VtZW50c1JlZ2lzdGVyKC0xKQorICAgICwgbV9uZWVkc0Z1bGxTY29wZUNoYWluKGluZm8ubV9u
ZWVkc0FjdGl2YXRpb24pCisgICAgLCBtX3VzZXNFdmFsKGluZm8ubV91c2VzRXZhbCkKKyAgICAs
IG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKGZhbHNlKQorICAgICwgbV9pc1N0cmljdE1vZGUo
aW5mby5tX2lzU3RyaWN0TW9kZSkKKyAgICAsIG1faXNDb25zdHJ1Y3RvcihpbmZvLm1faXNDb25z
dHJ1Y3RvcikKKyAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCisgICAgLCBtX2Zp
cnN0TGluZSgwKQorICAgICwgbV9saW5lQ291bnQoMCkKKyAgICAsIG1fZmVhdHVyZXMoMCkKKyAg
ICAsIG1fY29kZVR5cGUoY29kZVR5cGUpCisgICAgLCBtX3Jlc29sdmVPcGVyYXRpb25Db3VudCgw
KQorICAgICwgbV9wdXRUb0Jhc2VPcGVyYXRpb25Db3VudCgxKQorICAgICwgbV9hcnJheVByb2Zp
bGVDb3VudCgwKQorICAgICwgbV92YWx1ZVByb2ZpbGVDb3VudCgwKQorICAgICwgbV9sbGludENh
bGxMaW5rSW5mb0NvdW50KDApCisjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQorICAgICwg
bV9ieXRlY29kZUNvbW1lbnRJdGVyYXRvcigwKQorI2VuZGlmCit7CisKK30KKwordm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVu
bGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAm
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0
dGluZ0ZsYWcpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3lt
Ym9sVGFibGUpOworICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBw
dHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVj
dC0+bV9mdW5jdGlvbkRlY2xzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKKyAgICAgICAgdmlz
aXRvci5hcHBlbmQocHRyKTsKKyAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRl
cmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmJlZ2luKCksIGVuZCA9IHRo
aXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09i
amVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIHRoaXNPYmplY3QtPm1fY29uc3RhbnRS
ZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5kID0gdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+bV9y
ZWdleHBzLnNpemUoKTsgaSAhPSBlbmQ7IGkrKykKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaV0pOworICAgIH0KK30KKworaW50
IFVubGlua2VkQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKTsKKyAgICBWZWN0b3I8TGluZUluZm8+JiBsaW5lSW5mbyA9IG1fbGluZUlu
Zm87CisgICAgCisgICAgaW50IGxvdyA9IDA7CisgICAgaW50IGhpZ2ggPSBsaW5lSW5mby5zaXpl
KCk7CisgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHsKKyAgICAgICAgaW50IG1pZCA9IGxvdyArICho
aWdoIC0gbG93KSAvIDI7CisgICAgICAgIGlmIChsaW5lSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zm
c2V0IDw9IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaGlnaCA9IG1pZDsKKyAgICB9CisgICAgCisgICAgaWYgKCFs
b3cpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBsaW5lSW5mb1tsb3cgLSAxXS5saW5l
TnVtYmVyOworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwgaW50JiBz
dGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0
IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKworICAgIGlmICghbV9leHByZXNzaW9uSW5mby5z
aXplKCkpIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSAwOworICAgICAgICBlbmRPZmZzZXQgPSAw
OworICAgICAgICBkaXZvdCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0
b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHByZXNzaW9uSW5m
bzsKKworICAgIGludCBsb3cgPSAwOworICAgIGludCBoaWdoID0gZXhwcmVzc2lvbkluZm8uc2l6
ZSgpOworICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7CisgICAgICAgIGludCBtaWQgPSBsb3cgKyAo
aGlnaCAtIGxvdykgLyAyOworICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5pbnN0cnVj
dGlvbk9mZnNldCA8PSBieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhpZ2ggPSBtaWQ7CisgICAgfQorCisgICAgQVNT
RVJUKGxvdyk7CisgICAgaWYgKCFsb3cpIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSAwOworICAg
ICAgICBlbmRPZmZzZXQgPSAwOworICAgICAgICBkaXZvdCA9IDA7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBzdGFydE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLnN0YXJ0
T2Zmc2V0OworICAgIGVuZE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmVuZE9mZnNl
dDsKKyAgICBkaXZvdCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmRpdm90UG9pbnQ7Cit9CisK
K3ZvaWQgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAg
Q09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQodGhp
c09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigp
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbGFyYXRpb25z
LnNpemUoKTsgaSAhPSBlbmQ7IGkrKykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uc2Vjb25kKTsKK30KKworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjEzMzA2NTNkOWFiMzc1ZDg5Y2M0ZjczYjk1YzE0MGQxYTI3MWM5NjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaApAQCAtMCwwICsxLDY5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgVW5saW5rZWRDb2RlQmxvY2tfaAorI2RlZmluZSBVbmxpbmtl
ZENvZGVCbG9ja19oCisKKyNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVk
ZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1ZGUgIkNvZGVUeXBlLmgiCisjaW5j
bHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgorI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJMaW5lSW5mby5oIgorI2luY2x1ZGUgIk5vZGVz
LmgiCisjaW5jbHVkZSAiUmVnRXhwLmgiCisjaW5jbHVkZSAiU3BlY2lhbFBvaW50ZXIuaCIKKwor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBEZWJ1Z2dlcjsKK2NsYXNzIEZ1bmN0aW9uQm9k
eU5vZGU7CitjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBGdW5jdGlvblBhcmFtZXRl
cnM7CitzdHJ1Y3QgUGFyc2VyRXJyb3I7CitjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworY2xhc3Mg
U291cmNlQ29kZTsKK2NsYXNzIFNvdXJjZVByb3ZpZGVyOworY2xhc3MgU2hhcmVkU3ltYm9sVGFi
bGU7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s7CisKK3R5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRWYWx1ZVByb2ZpbGU7Cit0eXBlZGVm
IHVuc2lnbmVkIFVubGlua2VkQXJyYXlQcm9maWxlOwordHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtl
ZExMSW50Q2FsbExpbmtJbmZvOworCitzdHJ1Y3QgRXhlY3V0YWJsZUluZm8geworICAgIEV4ZWN1
dGFibGVJbmZvKGJvb2wgbmVlZHNBY3RpdmF0aW9uLCBib29sIHVzZXNFdmFsLCBib29sIGlzU3Ry
aWN0TW9kZSwgYm9vbCBpc0NvbnN0cnVjdG9yKQorICAgICAgICA6IG1fbmVlZHNBY3RpdmF0aW9u
KG5lZWRzQWN0aXZhdGlvbikKKyAgICAgICAgLCBtX3VzZXNFdmFsKHVzZXNFdmFsKQorICAgICAg
ICAsIG1faXNTdHJpY3RNb2RlKGlzU3RyaWN0TW9kZSkKKyAgICAgICAgLCBtX2lzQ29uc3RydWN0
b3IoaXNDb25zdHJ1Y3RvcikKKyAgICB7CisgICAgfQorICAgIGJvb2wgbV9uZWVkc0FjdGl2YXRp
b247CisgICAgYm9vbCBtX3VzZXNFdmFsOworICAgIGJvb2wgbV9pc1N0cmljdE1vZGU7CisgICAg
Ym9vbCBtX2lzQ29uc3RydWN0b3I7Cit9OworCitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2Fj
aGU7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLT5oZWFwKSkgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgbm9kZSk7CisgICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKKyAgICB9CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3QgSWRlbnRpZmllciYgaW5mZXJyZWROYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0KKyAgICBKU1N0cmluZyogbmFtZVZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lVmFsdWUuZ2V0KCk7IH0KKyAgICBTaGFyZWRTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIChraW5kID09IENvZGVGb3JDYWxsKSA/IG1fc3ltYm9sVGFibGVGb3JDYWxsLmdl
dCgpIDogbV9zeW1ib2xUYWJsZUZvckNvbnN0cnVjdC5nZXQoKTsKKyAgICB9CisgICAgc2l6ZV90
IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0K
KyAgICBib29sIGlzSW5TdHJpY3RDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0
Q29udGV4dDsgfQorICAgIEZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSBmdW5jdGlvbk5hbWVJ
c0luU2NvcGVUb2dnbGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRv
Z2dsZTsgfQorCisgICAgdW5zaWduZWQgZmlyc3RMaW5lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9maXJzdExpbmVPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVDb3VudDsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCgpIHsgcmV0
dXJuIG1fc291cmNlTGVuZ3RoOyB9CisKKyAgICBTdHJpbmcgcGFyYW1TdHJpbmcoKSBjb25zdDsK
KworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9ja0ZvcihKU0dsb2JhbERh
dGEmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgRGVidWdnZXJN
b2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CisKKyAgICBzdGF0aWMgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIGZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeGVj
U3RhdGUqLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCoqIGV4Y2VwdGlv
bik7CisKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGxpbmsoSlNHbG9iYWxEYXRhJiwgY29uc3Qg
U291cmNlQ29kZSYsIHNpemVfdCBsaW5lT2Zmc2V0LCBzaXplX3Qgc291cmNlT2Zmc2V0KTsKKwor
ICAgIHZvaWQgY2xlYXJDb2RlKCkKKyAgICB7CisgICAgICAgIG1fc3ltYm9sVGFibGVGb3JDYWxs
LmNsZWFyKCk7CisgICAgICAgIG1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3QuY2xlYXIoKTsKKyAg
ICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7CisgICAgICAgIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LmNsZWFyKCk7CisgICAgfQorCisgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9CisKKyAgICB2b2lkIHJlY29y
ZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcywg
aW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQorICAgIHsKKyAgICAgICAgbV9mZWF0dXJlcyA9
IGZlYXR1cmVzOworICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRW
YXJpYWJsZXM7CisgICAgICAgIG1fbGluZUNvdW50ID0gbGFzdExpbmUgLSBmaXJzdExpbmU7Cisg
ICAgfQorCisgICAgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Zv
cmNlVXNlc0FyZ3VtZW50czsgfQorCisgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzKCkgY29uc3Qg
eyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAgIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSBj
b25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOyB9CisKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisKK3ByaXZhdGU6CisgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29k
ZSYsIEZ1bmN0aW9uQm9keU5vZGUqKTsKKyAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOworICAgIFdyaXRlQmFycmllcjxVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKKworICAgIHVuc2ln
bmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgOiAyOTsKKyAgICBib29sIG1fZm9yY2VVc2VzQXJn
dW1lbnRzIDogMTsKKyAgICBib29sIG1faXNJblN0cmljdENvbnRleHQgOiAxOworICAgIGJvb2wg
bV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CisKKyAgICBJZGVudGlmaWVyIG1fbmFtZTsKKyAg
ICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOworICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4g
bV9uYW1lVmFsdWU7CisgICAgV3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5bWJv
bFRhYmxlRm9yQ2FsbDsKKyAgICBXcml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3lt
Ym9sVGFibGVGb3JDb25zdHJ1Y3Q7CisgICAgUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gbV9w
YXJhbWV0ZXJzOworICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0OworICAgIHVuc2lnbmVk
IG1fbGluZUNvdW50OworICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQg
bV9zb3VyY2VMZW5ndGg7CisKKyAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKKworICAgIEZ1
bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZTsK
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CisgICAgICAgIG1fbmFtZVZhbHVlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBqc1N0cmluZygmZ2xv
YmFsRGF0YSwgbmFtZSgpLnN0cmluZygpKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwdWJsaWM6CisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
LCBUeXBlSW5mbyhVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJlRmxhZ3M7
CisKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK3N0cnVjdCBVbmxp
bmtlZFN0cmluZ0p1bXBUYWJsZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJ
bXBsPiwgaW50MzJfdD4gU3RyaW5nT2Zmc2V0VGFibGU7CisgICAgU3RyaW5nT2Zmc2V0VGFibGUg
b2Zmc2V0VGFibGU7CisKKyAgICBpbmxpbmUgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShTdHJpbmdJ
bXBsKiB2YWx1ZSwgaW50MzJfdCBkZWZhdWx0T2Zmc2V0KQorICAgIHsKKyAgICAgICAgU3RyaW5n
T2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9mZnNldFRhYmxlLmVuZCgpOworICAg
ICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUu
ZmluZCh2YWx1ZSk7CisgICAgICAgIGlmIChsb2MgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJu
IGRlZmF1bHRPZmZzZXQ7CisgICAgICAgIHJldHVybiBsb2MtPnZhbHVlOworICAgIH0KKworfTsK
Kworc3RydWN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlIHsKKyAgICBWZWN0b3I8aW50MzJfdD4g
YnJhbmNoT2Zmc2V0czsKKyAgICBpbnQzMl90IG1pbjsKKworICAgIGludDMyX3Qgb2Zmc2V0Rm9y
VmFsdWUoaW50MzJfdCB2YWx1ZSwgaW50MzJfdCBkZWZhdWx0T2Zmc2V0KTsKKyAgICB2b2lkIGFk
ZChpbnQzMl90IGtleSwgaW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIWJyYW5j
aE9mZnNldHNba2V5XSkKKyAgICAgICAgICAgIGJyYW5jaE9mZnNldHNba2V5XSA9IG9mZnNldDsK
KyAgICB9Cit9OworCitzdHJ1Y3QgVW5saW5rZWRIYW5kbGVySW5mbyB7CisgICAgdWludDMyX3Qg
c3RhcnQ7CisgICAgdWludDMyX3QgZW5kOworICAgIHVpbnQzMl90IHRhcmdldDsKKyAgICB1aW50
MzJfdCBzY29wZURlcHRoOworfTsKKworc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rpb24geworICAg
IFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KKyAgICBVbmxpbmtlZElu
c3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsgfQorICAgIFVu
bGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3BlcmFuZDsgfQor
ICAgIHVuaW9uIHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlOworICAgICAgICBpbnQzMl90IG9w
ZXJhbmQ7CisgICAgfSB1OworfTsKKworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMg
SlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKworICAgIGVudW0geyBDYWxsRnVuY3Rpb24s
IEFwcGx5RnVuY3Rpb24gfTsKKworICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0
dXJuIG1faXNDb25zdHJ1Y3RvcjsgfQorICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1N0cmljdE1vZGU7IH0KKyAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1
cm4gbV91c2VzRXZhbDsgfQorCisgICAgYm9vbCBuZWVkc0Z1bGxTY29wZUNoYWluKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc0Z1bGxTY29wZUNoYWluOyB9CisgICAgdm9pZCBzZXROZWVkc0Z1bGxT
Y29wZUNoYWluKGJvb2wgbmVlZHNGdWxsU2NvcGVDaGFpbikgeyBtX25lZWRzRnVsbFNjb3BlQ2hh
aW4gPSBuZWVkc0Z1bGxTY29wZUNoYWluOyB9CisKKyAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZv
KGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mIGV4cHJlc3Npb25JbmZvKQorICAgIHsKKyAgICAg
ICAgbV9leHByZXNzaW9uSW5mby5hcHBlbmQoZXhwcmVzc2lvbkluZm8pOworICAgIH0KKworICAg
IHZvaWQgYWRkTGluZUluZm8odW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCBsaW5lTm8pCisg
ICAgeworICAgICAgICBWZWN0b3I8TGluZUluZm8+JiBsaW5lSW5mbyA9IG1fbGluZUluZm87Cisg
ICAgICAgIGlmICghbGluZUluZm8uc2l6ZSgpIHx8IGxpbmVJbmZvLmxhc3QoKS5saW5lTnVtYmVy
ICE9IGxpbmVObykgeworICAgICAgICAgICAgTGluZUluZm8gaW5mbyA9IHsgYnl0ZWNvZGVPZmZz
ZXQsIGxpbmVObyB9OworICAgICAgICAgICAgbGluZUluZm8uYXBwZW5kKGluZm8pOworICAgICAg
ICB9CisgICAgfQorCisgICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhw
cmVzc2lvbkluZm8uc2l6ZSgpOyB9CisKKyAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycworICAgIHZv
aWQgc2V0VGhpc1JlZ2lzdGVyKGludCB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0
aGlzUmVnaXN0ZXI7IH0KKyAgICB2b2lkIHNldEFjdGl2YXRpb25SZWdpc3RlcihpbnQgYWN0aXZh
dGlvblJlZ2lzdGVyKSB7IG1fYWN0aXZhdGlvblJlZ2lzdGVyID0gYWN0aXZhdGlvblJlZ2lzdGVy
OyB9CisKKyAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lzdGVyKGludCBhcmd1bWVudHNSZWdpc3Rl
cikgeyBtX2FyZ3VtZW50c1JlZ2lzdGVyID0gYXJndW1lbnRzUmVnaXN0ZXI7IH0KKyAgICBib29s
IHVzZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyICE9IC0x
OyB9CisgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVu
dHNSZWdpc3RlcjsgfQorCisgICAgLy8gUGFyYW1ldGVyIGluZm9ybWF0aW9uCisgICAgdm9pZCBz
ZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkgeyBtX251bVBhcmFtZXRlcnMgPSBuZXdWYWx1
ZTsgfQorICAgIHZvaWQgYWRkUGFyYW1ldGVyKCkgeyBtX251bVBhcmFtZXRlcnMrKzsgfQorICAg
IHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7
IH0KKworICAgIHVuc2lnbmVkIGFkZFJlZ0V4cChSZWdFeHAqIHIpCisgICAgeworICAgICAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3Jh
cmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOworICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMu
YXBwZW5kKFdyaXRlQmFycmllcjxSZWdFeHA+KCptX2dsb2JhbERhdGEsIHRoaXMsIHIpKTsKKyAg
ICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnRXhwcygp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7CisgICAg
fQorICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyBBU1NFUlQobV9yYXJlRGF0
YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaW5kZXhdLmdldCgpOyB9CisKKyAgICAv
LyBDb25zdGFudCBQb29scworCisgICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXJzLnNpemUoKTsgfQorICAgIHZvaWQgYWRkSWRlbnRpZmll
cihjb25zdCBJZGVudGlmaWVyJiBpKSB7IHJldHVybiBtX2lkZW50aWZpZXJzLmFwcGVuZChpKTsg
fQorICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXJzW2luZGV4XTsgfQorICAgIGNvbnN0IFZlY3RvcjxJZGVudGlmaWVy
PiYgaWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzOyB9CisKKyAgICBz
aXplX3QgbnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5z
aXplKCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxV
bmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCptX2ds
b2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICB1
bnNpZ25lZCBhZGRPckZpbmRDb25zdGFudChKU1ZhbHVlKTsKKyAgICBjb25zdCBWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+ID4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25z
dGFudFJlZ2lzdGVyczsgfQorICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBp
bmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKwor
ICAgIC8vIEp1bXBzCisgICAgc2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJl
dHVybiBtX2p1bXBUYXJnZXRzLnNpemUoKTsgfQorICAgIHZvaWQgYWRkSnVtcFRhcmdldCh1bnNp
Z25lZCBqdW1wVGFyZ2V0KSB7IG1fanVtcFRhcmdldHMuYXBwZW5kKGp1bXBUYXJnZXQpOyB9Cisg
ICAgdW5zaWduZWQganVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRh
cmdldHNbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJl
dHVybiBtX2p1bXBUYXJnZXRzLmxhc3QoKTsgfQorCisgICAgdm9pZCBzZXRJc051bWVyaWNDb21w
YXJlRnVuY3Rpb24oYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24pIHsgbV9pc051bWVyaWND
b21wYXJlRnVuY3Rpb24gPSBpc051bWVyaWNDb21wYXJlRnVuY3Rpb247IH0KKyAgICBib29sIGlz
TnVtZXJpY0NvbXBhcmVGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNOdW1lcmljQ29tcGFy
ZUZ1bmN0aW9uOyB9CisKKyAgICB2b2lkIHNocmlua1RvRml0KCkKKyAgICB7CisgICAgICAgIG1f
anVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9pZGVudGlmaWVycy5zaHJpbmtU
b0ZpdCgpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7CisgICAg
ICAgIG1fZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2Z1bmN0aW9uRXhw
cnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9saW5lSW5mby5zaHJpbmtUb0ZpdCgpOworICAg
ICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNocmlua1RvRml0KCk7CisgICAgICAg
IG1fZXhwcmVzc2lvbkluZm8uc2hyaW5rVG9GaXQoKTsKKworI2lmIEVOQUJMRShCWVRFQ09ERV9D
T01NRU5UUykKKyAgICAgICAgbV9ieXRlY29kZUNvbW1lbnRzLnNocmlua1RvRml0KCk7CisjZW5k
aWYKKyAgICAgICAgaWYgKG1fcmFyZURhdGEpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEt
Pm1fcmVnZXhwcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25z
dGFudEJ1ZmZlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1faW1t
ZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJl
RGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CisgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIG51bWJlck9mSW5zdHJ1Y3Rpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEluc3RydWN0aW9ucy5zaXplKCk7IH0KKyAgICBSZWZD
b3VudGVkQXJyYXk8VW5saW5rZWRJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJu
IG1fdW5saW5rZWRJbnN0cnVjdGlvbnM7IH0KKyAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8VW5s
aW5rZWRJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRJbnN0cnVjdGlvbnM7IH0KKworICAgIGludCBtX251bVZhcnM7CisgICAgaW50IG1fbnVtQ2Fw
dHVyZWRWYXJzOworICAgIGludCBtX251bUNhbGxlZVJlZ2lzdGVyczsKKworICAgIC8vIEp1bXAg
VGFibGVzCisKKyAgICBzaXplX3QgbnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNo
SnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGFk
ZEltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OyBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hK
dW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBpbW1lZGlh
dGVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyBy
ZXR1cm4gbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OyB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVt
cFRhYmxlcy5zaXplKCkgOiAwOyB9CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGFkZENo
YXJhY3RlclN3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBt
X3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1w
VGFibGVzLmxhc3QoKTsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBjaGFyYWN0ZXJT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1
cm4gbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9
CisKKyAgICBzaXplX3QgbnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5z
aXplKCkgOiAwOyB9CisgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGFkZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2VkU3RyaW5nSnVtcFRhYmxlKCkp
OyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQor
ICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAgICB1bnNpZ25lZCBhZGRGdW5j
dGlvbkRlY2woVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICB1
bnNpZ25lZCBzaXplID0gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlv
bkRlY2xzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkp
OworICAgICAgICBtX2Z1bmN0aW9uRGVjbHMubGFzdCgpLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlz
LCBuKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorICAgIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVj
bHNbaW5kZXhdLmdldCgpOyB9CisgICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsg
cmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRGdW5jdGlv
bkV4cHIoVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICB1bnNp
Z25lZCBzaXplID0gbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4
cHJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOwor
ICAgICAgICBtX2Z1bmN0aW9uRXhwcnMubGFzdCgpLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlzLCBu
KTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNb
aW5kZXhdLmdldCgpOyB9CisgICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25FeHBycygpIHsgcmV0
dXJuIG1fZnVuY3Rpb25FeHBycy5zaXplKCk7IH0KKworICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGlu
ZyBzdXBwb3J0CisgICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXpl
KCkgOiAwOyB9CisgICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IFVubGlua2VkSGFu
ZGxlckluZm8mIGhhbmxlcikgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZChoYW5sZXIpOyB9CisgICAgVW5s
aW5rZWRIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgQVNTRVJUKG1f
cmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07
IH0KKworICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3ltYm9sVGFibGUuZ2V0KCk7IH0KKworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorCisgICAgdW5zaWduZWQgYWRkUmVzb2x2
ZSgpIHsgcmV0dXJuIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBu
dW1iZXJPZlJlc29sdmVPcGVyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlT3BlcmF0
aW9uQ291bnQ7IH0KKyAgICB1bnNpZ25lZCBhZGRQdXRUb0Jhc2UoKSB7IHJldHVybiBtX3B1dFRv
QmFzZU9wZXJhdGlvbkNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlB1dFRvQmFzZU9w
ZXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3B1dFRvQmFzZU9wZXJhdGlvbkNvdW50OyB9CisK
KyAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhZGRBcnJheVByb2ZpbGUoKSB7IHJldHVybiBtX2Fy
cmF5UHJvZmlsZUNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5UHJvZmlsZXMo
KSB7IHJldHVybiBtX2FycmF5UHJvZmlsZUNvdW50OyB9CisgICAgVW5saW5rZWRWYWx1ZVByb2Zp
bGUgYWRkVmFsdWVQcm9maWxlKCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVDb3VudCsrOyB9Cisg
ICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92YWx1ZVByb2Zp
bGVDb3VudDsgfQorCisgICAgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbyBhZGRMTEludENhbGxM
aW5rSW5mbygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudCsrOyB9CisgICAgdW5z
aWduZWQgbnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3MoKSB7IHJldHVybiBtX2xsaW50Q2FsbExp
bmtJbmZvQ291bnQ7IH0KKworICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlVHlwZTsgfQorCisgICAgaW50IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1f
dGhpc1JlZ2lzdGVyOyB9CisgICAgaW50IGFjdGl2YXRpb25SZWdpc3RlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYWN0aXZhdGlvblJlZ2lzdGVyOyB9CisKKworICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbih1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQorICAgIHsK
KyAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5hcHBlbmQocHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbik7CisgICAgfQorCisgICAgc2l6ZV90IG51bWJlck9mUHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25zLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
czsgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8SlNWYWx1ZT4gQ29uc3RhbnRCdWZmZXI7CisKKyAg
ICBzaXplX3QgY29uc3RhbnRCdWZmZXJDb3VudCgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1
cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQg
YWRkQ29uc3RhbnRCdWZmZXIodW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0
YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOworICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50QnVmZmVycy5hcHBlbmQoVmVjdG9yPEpTVmFsdWU+KGxlbmd0aCkpOworICAgICAgICByZXR1
cm4gc2l6ZTsKKyAgICB9CisKKyAgICBjb25zdCBDb25zdGFudEJ1ZmZlciYgY29uc3RhbnRCdWZm
ZXIodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9yYXJlRGF0
YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpbmRleF07
CisgICAgfQorCisgICAgQ29uc3RhbnRCdWZmZXImIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGlu
ZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOworICAgICAgICByZXR1cm4g
bV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaW5kZXhdOworICAgIH0KKworICAgIGJvb2wg
aGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhOyB9CisKKyAgICBpbnQgbGlu
ZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKworICAg
IHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KTsKKwor
ICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1
cmVkVmFyaWFibGVzLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxpbmVDb3VudCkKKyAg
ICB7CisgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJlczsKKyAgICAgICAgbV9oYXNDYXB0dXJl
ZFZhcmlhYmxlcyA9IGhhc0NhcHR1cmVkVmFyaWFibGVzOworICAgICAgICBtX2ZpcnN0TGluZSA9
IGZpcnN0TGluZTsKKyAgICAgICAgbV9saW5lQ291bnQgPSBsaW5lQ291bnQ7CisgICAgfQorCisg
ICAgQ29kZUZlYXR1cmVzIGNvZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7
IH0KKyAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXND
YXB0dXJlZFZhcmlhYmxlczsgfQorICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmlyc3RMaW5lOyB9CisgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9saW5lQ291bnQ7IH0KKworcHJvdGVjdGVkOgorICAgIFVubGlua2VkQ29kZUJsb2NrKEpT
R2xvYmFsRGF0YSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYp
OworICAgIH5VbmxpbmtlZENvZGVCbG9jaygpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gR2xvYmFsQ29kZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhKSk7CisgICAgfQor
Citwcml2YXRlOgorCisgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKKyAgICB7
CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9w
dFB0cihuZXcgUmFyZURhdGEpOworICAgIH0KKworICAgIFJlZkNvdW50ZWRBcnJheTxVbmxpbmtl
ZEluc3RydWN0aW9uPiBtX3VubGlua2VkSW5zdHJ1Y3Rpb25zOworCisgICAgaW50IG1fbnVtUGFy
YW1ldGVyczsKKyAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKworICAgIGludCBtX3Ro
aXNSZWdpc3RlcjsKKyAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3RlcjsKKyAgICBpbnQgbV9hY3Rp
dmF0aW9uUmVnaXN0ZXI7CisKKyAgICBib29sIG1fbmVlZHNGdWxsU2NvcGVDaGFpbiA6IDE7Cisg
ICAgYm9vbCBtX3VzZXNFdmFsIDogMTsKKyAgICBib29sIG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0
aW9uIDogMTsKKyAgICBib29sIG1faXNTdHJpY3RNb2RlIDogMTsKKyAgICBib29sIG1faXNDb25z
dHJ1Y3RvciA6IDE7CisgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKKyAgICB1
bnNpZ25lZCBtX2ZpcnN0TGluZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKKworICAgIENv
ZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CisKKyAgICBW
ZWN0b3I8dW5zaWduZWQ+IG1fanVtcFRhcmdldHM7CisKKyAgICAvLyBDb25zdGFudCBQb29scwor
ICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOworICAgIFZlY3RvcjxXcml0ZUJh
cnJpZXI8VW5rbm93bj4gPiBtX2NvbnN0YW50UmVnaXN0ZXJzOworICAgIHR5cGVkZWYgVmVjdG9y
PFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gPiBGdW5jdGlvbkV4cHJl
c3Npb25WZWN0b3I7CisgICAgRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNs
czsKKyAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkV4cHJzOworCisgICAg
V3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOworCisgICAgVmVj
dG9yPExpbmVJbmZvPiBtX2xpbmVJbmZvOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOworCisjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQor
ICAgIFZlY3RvcjxDb21tZW50PiAgbV9ieXRlY29kZUNvbW1lbnRzOworICAgIHNpemVfdCBtX2J5
dGVjb2RlQ29tbWVudEl0ZXJhdG9yOworI2VuZGlmCisKKyAgICB1bnNpZ25lZCBtX3Jlc29sdmVP
cGVyYXRpb25Db3VudDsKKyAgICB1bnNpZ25lZCBtX3B1dFRvQmFzZU9wZXJhdGlvbkNvdW50Owor
ICAgIHVuc2lnbmVkIG1fYXJyYXlQcm9maWxlQ291bnQ7CisgICAgdW5zaWduZWQgbV92YWx1ZVBy
b2ZpbGVDb3VudDsKKyAgICB1bnNpZ25lZCBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7CisKKyAg
ICBzdHJ1Y3QgUmFyZURhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlv
bkhhbmRsZXJzOworCisgICAgICAgIC8vIFJhcmUgQ29uc3RhbnRzCisgICAgICAgIFZlY3RvcjxX
cml0ZUJhcnJpZXI8UmVnRXhwPiA+IG1fcmVnZXhwczsKKworICAgICAgICAvLyBCdWZmZXJzIHVz
ZWQgZm9yIGxhcmdlIGFycmF5IGxpdGVyYWxzCisgICAgICAgIFZlY3RvcjxDb25zdGFudEJ1ZmZl
cj4gbV9jb25zdGFudEJ1ZmZlcnM7CisKKyAgICAgICAgLy8gSnVtcCBUYWJsZXMKKyAgICAgICAg
VmVjdG9yPFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPiBtX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZXM7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9jaGFyYWN0ZXJT
d2l0Y2hKdW1wVGFibGVzOworICAgICAgICBWZWN0b3I8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICAvLyBFeHByZXNzaW9uIGluZm8g
LSBwcmVzZW50IGlmIGRlYnVnZ2luZy4KKyAgICB9OworICAgIE93blB0cjxSYXJlRGF0YT4gbV9y
YXJlRGF0YTsKKyAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5m
bzsKKworcHJvdGVjdGVkOgorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworY2xhc3MgVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgeworcHVibGlj
OgorICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKKworcHJvdGVjdGVkOgorICAg
IFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYg
aW5mbykKKyAgICAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgY29kZVR5cGUsIGlu
Zm8pCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKwor
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworY2xhc3MgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKKyAgICBzdGF0aWMgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s+KGdsb2JhbERhdGEtPmhlYXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soZ2xv
YmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdl
dCgpLCBpbmZvKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCpnbG9iYWxEYXRh
KTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworcHVibGljOgorICAgIHR5cGVk
ZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKKworICAgIHZvaWQgYWRkRnVuY3Rpb25E
ZWNsYXJhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIG5h
bWUsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUpCisgICAg
eworICAgICAgICBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihu
YW1lLCBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2JhbERhdGEs
IHRoaXMsIGZ1bmN0aW9uRXhlY3V0YWJsZSkpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFZhcmlh
YmxlRGVjbGFyYXRpb24oY29uc3QgSWRlbnRpZmllciYgbmFtZSwgYm9vbCBpc0NvbnN0YW50KQor
ICAgIHsKKyAgICAgICAgbV92YXJEZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5h
bWUsIGlzQ29uc3RhbnQpKTsKKyAgICB9CisKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8
SWRlbnRpZmllciwgYm9vbD4gPiBWYXJpYWJsZURlY2xhdGlvbnM7CisgICAgdHlwZWRlZiBWZWN0
b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZT4gPiA+IEZ1bmN0aW9uRGVjbGF0aW9uczsKKworICAgIGNvbnN0IFZhcmlhYmxlRGVj
bGF0aW9ucyYgdmFyaWFibGVEZWNsYXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3ZhckRlY2xh
cmF0aW9uczsgfQorICAgIGNvbnN0IEZ1bmN0aW9uRGVjbGF0aW9ucyYgZnVuY3Rpb25EZWNsYXJh
dGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOyB9CisKKyAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3ByaXZh
dGU6CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAg
ICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBHbG9iYWxDb2RlLCBpbmZvKQorICAg
IHsKKyAgICB9CisKKyAgICBWYXJpYWJsZURlY2xhdGlvbnMgbV92YXJEZWNsYXJhdGlvbnM7Cisg
ICAgRnVuY3Rpb25EZWNsYXRpb25zIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1R5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOworCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFz
cyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sg
eworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOworCisgICAgc3RhdGljIFVu
bGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgeworICAgICAgICBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFs
Q29kZUJsb2NrPihnbG9iYWxEYXRhLT5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEtPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwg
aW5mbyk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVu
bGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJp
YWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXhdOyB9CisgICAg
dW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9Cisg
ICAgdm9pZCBhZG9wdFZhcmlhYmxlcyhWZWN0b3I8SWRlbnRpZmllcj4mIHZhcmlhYmxlcykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5pc0VtcHR5KCkpOworICAgICAgICBtX3Zh
cmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFVubGlua2Vk
RXZhbENvZGVCbG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICAgICAgOiBCYXNlKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8pCisgICAgeworICAgIH0KKworICAgIFZlY3Rv
cjxJZGVudGlmaWVyPiBtX3ZhcmlhYmxlczsKKworcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUlu
Zm8oVW5saW5rZWRFdmFsQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgeworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgQ29kZUNhY2hlOworCisgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sq
IGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25z
dCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jaz4oZ2xvYmFsRGF0YS0+aGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2soZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0
cnVjdHVyZS5nZXQoKSwgY29kZVR5cGUsIGluZm8pOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNo
Q3JlYXRpb24oKmdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQor
CitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOworCitwcml2YXRl
OgorICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFi
bGVJbmZvJiBpbmZvKQorICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBjb2Rl
VHlwZSwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlw
ZUluZm8oVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCit9CisKKyNlbmRpZiAvLyBVbmxp
bmtlZENvZGVCbG9ja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IGZiMDg0ZTNmOTdiZTU3ZDY5OGMx
MTUwYTg4OTM1MTEwNmE1MTIyOGMuLmJjMmY1NWY3ODE5M2M0YTlkYzZmZjg4OWJlMGZhNjY4MzY0
NDFhNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkKICAgICByZXR1cm4gc19kdW1wc0dlbmVy
YXRlZENvZGU7CiB9CiAKLUpTT2JqZWN0KiBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQor
UGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkKIHsKICAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiQnl0ZWNvZGUgR2VuZXJhdGlvbiIpOwogICAgIApAQCAt
MTY5LDM2ICsxNjksMjEgQEAgSlNPYmplY3QqIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgp
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdHJ5UmFuZ2VzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIFRyeVJhbmdlJiByYW5nZSA9IG1fdHJ5UmFuZ2VzW2ldOwogICAgICAgICBBU1NF
UlQocmFuZ2UudHJ5RGF0YS0+dGFyZ2V0U2NvcGVEZXB0aCAhPSBVSU5UX01BWCk7Ci0gICAgICAg
IEhhbmRsZXJJbmZvIGluZm8gPSB7CisgICAgICAgIFVubGlua2VkSGFuZGxlckluZm8gaW5mbyA9
IHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5nZS5zdGFydC0+YmluZCgw
LCAwKSksIHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5nZS5lbmQtPmJpbmQoMCwgMCkpLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLnRyeURhdGEtPnRhcmdldC0+Ymlu
ZCgwLCAwKSksIHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5nZS50cnlEYXRhLT50YXJnZXRTY29w
ZURlcHRoKQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICAsCi0jaWYgRU5BQkxFKExMSU5U
KQotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpj
cmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoTExJbnQ6OmdldENvZGVQdHIobGxpbnRfb3BfY2F0
Y2gpKSkKLSNlbHNlCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCgpCi0jZW5kaWYKLSNl
bmRpZgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLnRyeURhdGEtPnRh
cmdldC0+YmluZCgwLCAwKSksCisgICAgICAgICAgICByYW5nZS50cnlEYXRhLT50YXJnZXRTY29w
ZURlcHRoCiAgICAgICAgIH07CiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5k
bGVyKGluZm8pOwogICAgIH0KICAgICAKLSAgICBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkg
PSBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+KG1faW5zdHJ1Y3Rpb25zKTsKLQotICAgIGlm
IChzX2R1bXBzR2VuZXJhdGVkQ29kZSkKLSAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAobV9zY29w
ZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7CisgICAgbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpID0gUmVmQ291bnRlZEFycmF5PFVubGlua2VkSW5zdHJ1Y3Rpb24+KG1faW5zdHJ1
Y3Rpb25zKTsKIAotI2lmZGVmIE5ERUJVRwotICAgIGlmICgobV9jb2RlVHlwZSA9PSBGdW5jdGlv
bkNvZGUgJiYgIW1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkgJiYgIW1fY29kZUJs
b2NrLT51c2VzQXJndW1lbnRzKCkpIHx8IG1fY29kZVR5cGUgPT0gRXZhbENvZGUpCi0gICAgICAg
IHN5bWJvbFRhYmxlKCkuY2xlYXIoKTsKLSNlbmRpZgotCi0gICAgbV9jb2RlQmxvY2stPnNocmlu
a1RvRml0KENvZGVCbG9jazo6RWFybHlTaHJpbmspOworICAgIG1fY29kZUJsb2NrLT5zaHJpbmtU
b0ZpdCgpOwogCiAgICAgaWYgKG1fZXhwcmVzc2lvblRvb0RlZXApCi0gICAgICAgIHJldHVybiBj
cmVhdGVPdXRPZk1lbW9yeUVycm9yKG1fc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKLSAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yOjpPdXRPZk1lbW9yeTsKKyAgICByZXR1
cm4gUGFyc2VyRXJyb3I6OkVycm9yTm9uZTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6
YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJlZ2lzdGVy
SUQqJiByMCkKQEAgLTIxNiw1MSArMjAxLDMyIEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFk
ZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50LCBSZWdpc3RlCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkR2xvYmFsVmFy
KAotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2Rl
LCBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQotewotICAgIFVOVVNFRF9QQVJBTShmdW5jdGlv
bk1vZGUpOwotICAgIGludCBpbmRleCA9IHN5bWJvbFRhYmxlKCkuc2l6ZSgpOwotICAgIFN5bWJv
bFRhYmxlRW50cnkgbmV3RW50cnkoaW5kZXgsIChjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCkg
PyBSZWFkT25seSA6IDApOwotICAgIGlmIChmdW5jdGlvbk1vZGUgPT0gSXNGdW5jdGlvblRvU3Bl
Y2lhbGl6ZSkKLSAgICAgICAgbmV3RW50cnkuYXR0ZW1wdFRvV2F0Y2goKTsKLSAgICBTeW1ib2xU
YWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LmltcGwoKSwg
bmV3RW50cnkpOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOwotICAgICAgICBpbmRleCA9IHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotfQot
CiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwcmVzZXJ2ZUxhc3RWYXIoKQogewogICAgIGlmICgo
bV9maXJzdENvbnN0YW50SW5kZXggPSBtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpICE9IDApCiAg
ICAgICAgIG1fbGFzdFZhciA9ICZtX2NhbGxlZVJlZ2lzdGVycy5sYXN0KCk7CiB9CiAKLUJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUs
IEpTU2NvcGUqIHNjb3BlLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFByb2dyYW1D
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCkKLSAg
ICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dl
cigpKQotICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3BlLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNQcm9maWxpbmcoc2NvcGUtPmds
b2JhbE9iamVjdCgpKSkKLSAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNSaWNoU291
cmNlSW5mbyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkpKQotICAgICwgbV9zY29wZSgqc2NvcGUtPmds
b2JhbERhdGEoKSwgc2NvcGUpCi0gICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQorQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNv
ZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVy
TW9kZSkKKyAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3MoZGVidWdnZXJNb2RlID09IERlYnVn
Z2VyT24pCisgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MocHJvZmlsZXJNb2RlID09IFBy
b2ZpbGVyT24pCiAjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQogICAgICwgbV9jdXJyZW50
Q29tbWVudFN0cmluZygwKQogI2VuZGlmCisgICAgLCBtX3N5bWJvbFRhYmxlKDApCiAgICAgLCBt
X3Njb3BlTm9kZShwcm9ncmFtTm9kZSkKLSAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAg
ICAsIG1fY29kZUJsb2NrKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICAsIG1fdGhpc1JlZ2lz
dGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAgICAgLCBtX2VtcHR5VmFsdWVS
ZWdpc3RlcigwKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3Bl
RGVwdGgoMCkKLSAgICAsIG1fYmFzZVNjb3BlRGVwdGgoMCkKICAgICAsIG1fY29kZVR5cGUoR2xv
YmFsQ29kZSkKICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCiAgICAgLCBtX2dsb2JhbENv
bnN0YW50SW5kZXgoMCkKICAgICAsIG1faGFzQ3JlYXRlZEFjdGl2YXRpb24odHJ1ZSkKICAgICAs
IG1fZmlyc3RMYXp5RnVuY3Rpb24oMCkKICAgICAsIG1fbGFzdExhenlGdW5jdGlvbigwKQotICAg
ICwgbV9nbG9iYWxEYXRhKHNjb3BlLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2JhbERhdGEo
Jmdsb2JhbERhdGEpCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCiAjaWZuZGVmIE5ERUJV
RwogICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTI2OSw4MSArMjM1LDQ4IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5v
ZGUsIEpTU2NvcGUqIHNjb3BlLCBTCiAgICAgLCBtX3VzZXNFeGNlcHRpb25zKGZhbHNlKQogICAg
ICwgbV9leHByZXNzaW9uVG9vRGVlcChmYWxzZSkKIHsKLSAgICBtX2dsb2JhbERhdGEtPnN0YXJ0
ZWRDb21waWxpbmcobV9jb2RlQmxvY2spOwotICAgIAogICAgIGlmIChtX3Nob3VsZEVtaXREZWJ1
Z0hvb2tzKQogICAgICAgICBtX2NvZGVCbG9jay0+c2V0TmVlZHNGdWxsU2NvcGVDaGFpbih0cnVl
KTsKIAotICAgIGNvZGVCbG9jay0+c2V0R2xvYmFsRGF0YShtX2dsb2JhbERhdGEpOwotICAgIHN5
bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYg
IWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOyAgICAKICAgICBtX2NvZGVCbG9jay0+c2V0TnVt
UGFyYW1ldGVycygxKTsgLy8gQWxsb2NhdGUgc3BhY2UgZm9yICJ0aGlzIgogCiAgICAgcHJlcGVu
ZENvbW1lbnQoImVudGVyaW5nIFByb2dyYW0gYmxvY2siKTsKICAgICBlbWl0T3Bjb2RlKG9wX2Vu
dGVyKTsKIAotICAgIC8vIEZJWE1FOiBNb3ZlIGNvZGUgdGhhdCBtb2RpZmllcyB0aGUgZ2xvYmFs
IG9iamVjdCB0byBJbnRlcnByZXRlcjo6ZXhlY3V0ZS4KLSAgICAKLSAgICBpZiAoY29tcGlsYXRp
b25LaW5kID09IE9wdGltaXppbmdDb21waWxhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAKLSAg
ICBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplciBvcHRpbWl6ZXIoKm1fZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0KTsKLQogICAgIGNvbnN0IFZhclN0YWNrJiB2YXJTdGFjayA9IHByb2dyYW1Ob2Rl
LT52YXJTdGFjaygpOwogICAgIGNvbnN0IEZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2sgPSBw
cm9ncmFtTm9kZS0+ZnVuY3Rpb25TdGFjaygpOwogCi0gICAgc2l6ZV90IG5ld0dsb2JhbHMgPSB2
YXJTdGFjay5zaXplKCkgKyBmdW5jdGlvblN0YWNrLnNpemUoKTsKLSAgICBpZiAoIW5ld0dsb2Jh
bHMpCi0gICAgICAgIHJldHVybjsKLSAgICBnbG9iYWxPYmplY3QtPmFkZFJlZ2lzdGVycyhuZXdH
bG9iYWxzKTsKLQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25TdGFjay5zaXpl
KCk7ICsraSkgewogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9u
U3RhY2tbaV07Ci0gICAgICAgIGJvb2wgcHJvcGVydHlEaWRFeGlzdCA9IAotICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0LT5yZW1vdmVEaXJlY3QoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24tPmlkZW50
KCkpOyAvLyBOZXdseSBkZWNsYXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3Bl
cnRpZXMuCi0KLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVj
LCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbiksIHNj
b3BlKTsKLSAgICAgICAgaW50IGluZGV4ID0gYWRkR2xvYmFsVmFyKAotICAgICAgICAgICAgZnVu
Y3Rpb24tPmlkZW50KCksIElzVmFyaWFibGUsCi0gICAgICAgICAgICAhcHJvcGVydHlEaWRFeGlz
dCA/IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUgOiBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6YWJs
ZSk7Ci0gICAgICAgIGdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChpbmRleCkuc2V0KCptX2dsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogdW5saW5rZWRGdW5jdGlvbiA9IG1ha2VGdW5jdGlvbihmdW5jdGlvbik7CisgICAg
ICAgIGNvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsYXJhdGlvbigqbV9nbG9iYWxEYXRhLCBmdW5j
dGlvbi0+aWRlbnQoKSwgdW5saW5rZWRGdW5jdGlvbik7CiAgICAgfQogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoZ2xvYmFs
T2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCAqdmFyU3RhY2tbaV0uZmlyc3QpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGFkZEdsb2JhbFZhcigKLSAgICAgICAgICAgICp2YXJTdGFj
a1tpXS5maXJzdCwKLSAgICAgICAgICAgICh2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlv
blN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0YW50IDogSXNWYXJpYWJsZSwKLSAgICAgICAg
ICAgIE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlKTsKLSAgICB9CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkKKyAgICAgICAgY29kZUJsb2NrLT5h
ZGRWYXJpYWJsZURlY2xhcmF0aW9uKCp2YXJTdGFja1tpXS5maXJzdCwgISEodmFyU3RhY2tbaV0u
c2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpKTsKKwogfQogCi1CeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25C
b2R5LCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kKQotICAgIDogbV9zaG91bGRFbWl0RGVi
dWdIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCi0gICAgLCBtX3Nob3Vs
ZEVtaXRQcm9maWxlSG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSgpLT5zdXBwb3J0c1Byb2ZpbGluZyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkpKQotICAg
ICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9i
YWxPYmplY3QoKSkpCi0gICAgLCBtX3Njb3BlKCpzY29wZS0+Z2xvYmFsRGF0YSgpLCBzY29wZSkK
LSAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBGdW5jdGlvbkJvZHlOb2Rl
KiBmdW5jdGlvbkJvZHksIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgRGVi
dWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKKyAgICA6
IG1fc2hvdWxkRW1pdERlYnVnSG9va3MoZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT24pCisgICAg
LCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MocHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24pCisg
ICAgLCBtX3N5bWJvbFRhYmxlKGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKICNpZiBFTkFCTEUo
QllURUNPREVfQ09NTUVOVFMpCiAgICAgLCBtX2N1cnJlbnRDb21tZW50U3RyaW5nKDApCiAjZW5k
aWYKICAgICAsIG1fc2NvcGVOb2RlKGZ1bmN0aW9uQm9keSkKLSAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKKyAgICAsIG1fY29kZUJsb2NrKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICAs
IG1fYWN0aXZhdGlvblJlZ2lzdGVyKDApCiAgICAgLCBtX2VtcHR5VmFsdWVSZWdpc3RlcigwKQog
ICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKLSAg
ICAsIG1fYmFzZVNjb3BlRGVwdGgoMCkKICAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2RlKQog
ICAgICwgbV9uZXh0Q29uc3RhbnRPZmZzZXQoMCkKICAgICAsIG1fZ2xvYmFsQ29uc3RhbnRJbmRl
eCgwKQogICAgICwgbV9oYXNDcmVhdGVkQWN0aXZhdGlvbihmYWxzZSkKICAgICAsIG1fZmlyc3RM
YXp5RnVuY3Rpb24oMCkKICAgICAsIG1fbGFzdExhenlGdW5jdGlvbigwKQotICAgICwgbV9nbG9i
YWxEYXRhKHNjb3BlLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERh
dGEpCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCiAjaWZuZGVmIE5ERUJVRwogICAgICwg
bV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTM1MiwxNCArMjg1LDExIEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHks
IEpTU2NvcGUqIHNjCiAgICAgLCBtX3VzZXNFeGNlcHRpb25zKGZhbHNlKQogICAgICwgbV9leHBy
ZXNzaW9uVG9vRGVlcChmYWxzZSkKIHsKLSAgICBtX2dsb2JhbERhdGEtPnN0YXJ0ZWRDb21waWxp
bmcobV9jb2RlQmxvY2spOwotCiAgICAgaWYgKG1fc2hvdWxkRW1pdERlYnVnSG9va3MpCiAgICAg
ICAgIG1fY29kZUJsb2NrLT5zZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOwogCi0gICAgY29k
ZUJsb2NrLT5zZXRHbG9iYWxEYXRhKG1fZ2xvYmFsRGF0YSk7Ci0gICAgc3ltYm9sVGFibGUtPnNl
dFVzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhY29kZUJsb2NrLT5p
c1N0cmljdE1vZGUoKSk7Ci0gICAgc3ltYm9sVGFibGUtPnNldFBhcmFtZXRlckNvdW50SW5jbHVk
aW5nVGhpcyhmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKS0+c2l6ZSgpICsgMSk7CisgICAgbV9z
eW1ib2xUYWJsZS0+c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYm
ICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsKKyAgICBtX3N5bWJvbFRhYmxlLT5zZXRQYXJh
bWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoZnVuY3Rpb25Cb2R5LT5wYXJhbWV0ZXJzKCktPnNpemUo
KSArIDEpOwogCiAgICAgcHJlcGVuZENvbW1lbnQoImVudGVyaW5nIEZ1bmN0aW9uIGJsb2NrIik7
CiAgICAgZW1pdE9wY29kZShvcF9lbnRlcik7CkBAIC0zNzAsNyArMzAwLDcgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9k
eSwgSlNTY29wZSogc2MKICAgICAgICAgbV9jb2RlQmxvY2stPnNldEFjdGl2YXRpb25SZWdpc3Rl
cihtX2FjdGl2YXRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgfQogCi0gICAgc3ltYm9sVGFi
bGUtPnNldENhcHR1cmVTdGFydChtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICBtX3N5bWJv
bFRhYmxlLT5zZXRDYXB0dXJlU3RhcnQobV9jb2RlQmxvY2stPm1fbnVtVmFycyk7CiAKICAgICBp
ZiAoZnVuY3Rpb25Cb2R5LT51c2VzQXJndW1lbnRzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgp
IHx8IG1fc2hvdWxkRW1pdERlYnVnSG9va3MpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmpl
Y3QuCiAgICAgICAgIFJlZ2lzdGVySUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFk
ZFZhcigpOyAvLyBBbm9ueW1vdXMsIHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29k
ZS4KQEAgLTQyMCw3ICszNTAsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgIH0KIAog
ICAgIGlmIChjYXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lICYmICFjb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpKSB7Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCA9IHN5bWJvbFRhYmxlLT5w
YXJhbWV0ZXJDb3VudCgpOworICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQgPSBtX3N5bWJv
bFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOwogICAgICAgICBPd25BcnJheVB0cjxTbG93QXJndW1l
bnQ+IHNsb3dBcmd1bWVudHMgPSBhZG9wdEFycmF5UHRyKG5ldyBTbG93QXJndW1lbnRbcGFyYW1l
dGVyQ291bnRdKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3Vu
dDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWNhcHR1cmVkQXJndW1lbnRzW2ldKSB7CkBAIC00
MzEsNyArMzYxLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0
aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgSlNTY29wZSogc2MKICAgICAgICAgICAgIHNsb3dB
cmd1bWVudHNbaV0uc3RhdHVzID0gU2xvd0FyZ3VtZW50OjpDYXB0dXJlZDsKICAgICAgICAgICAg
IHNsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBjYXB0dXJlZEFyZ3VtZW50c1tpXS0+aW5kZXgoKTsK
ICAgICAgICAgfQotICAgICAgICBzeW1ib2xUYWJsZS0+c2V0U2xvd0FyZ3VtZW50cyhzbG93QXJn
dW1lbnRzLnJlbGVhc2UoKSk7CisgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldFNsb3dBcmd1bWVu
dHMoc2xvd0FyZ3VtZW50cy5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIFJlZ2lzdGVySUQqIGNh
bGxlZVJlZ2lzdGVyID0gcmVzb2x2ZUNhbGxlZShmdW5jdGlvbkJvZHkpOyAvLyBNYXkgcHVzaCB0
byB0aGUgc2NvcGUgY2hhaW4gYW5kL29yIGFkZCBhIGNhcHR1cmVkIHZhci4KQEAgLTQ3Miw3ICs0
MDIsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5
Tm9kZSogZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0ZXItPmluZGV4KCkpOwogICAgIH0KIAotICAgIHN5bWJv
bFRhYmxlLT5zZXRDYXB0dXJlRW5kKGNvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICBtX3N5bWJv
bFRhYmxlLT5zZXRDYXB0dXJlRW5kKGNvZGVCbG9jay0+bV9udW1WYXJzKTsKIAogICAgIG1fZmly
c3RMYXp5RnVuY3Rpb24gPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKQEAgLTUwMCw3ICs0MzAsNyBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSog
ZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgIH0KIAogICAgIGlmIChzaG91bGRDYXB0dXJl
QWxsVGhlVGhpbmdzKQotICAgICAgICBzeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZUVuZChjb2RlQmxv
Y2stPm1fbnVtVmFycyk7CisgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldENhcHR1cmVFbmQoY29k
ZUJsb2NrLT5tX251bVZhcnMpOwogCiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
ID0gKmZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOwogICAgIG1fcGFyYW1ldGVycy5ncm93KHBh
cmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlzIgpAQCAtNTMw
LDM1ICs0NjAsMzIgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0
aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgSlNTY29wZSogc2MKICAgICAgICAgZW1pdE9wY29k
ZShvcF9jcmVhdGVfdGhpcyk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX3RoaXNS
ZWdpc3Rlci5pbmRleCgpKTsKICAgICB9IGVsc2UgaWYgKCFjb2RlQmxvY2stPmlzU3RyaWN0TW9k
ZSgpICYmIChmdW5jdGlvbkJvZHktPnVzZXNUaGlzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgp
IHx8IG1fc2hvdWxkRW1pdERlYnVnSG9va3MpKSB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcHJv
ZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9jb252ZXJ0X3RoaXMpOworICAgICAgICBVbmxp
bmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NvbnZlcnRf
dGhpcyk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX3RoaXNSZWdpc3Rlci5pbmRl
eCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIH0KIH0K
IAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9k
ZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENv
ZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCi0gICAgOiBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKLSAgICAsIG1fc2hv
dWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnN1cHBvcnRzUHJvZmlsaW5nKHNjb3BlLT5nbG9iYWxPYmplY3QoKSkpCi0g
ICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oc2NvcGUtPmds
b2JhbE9iamVjdCgpKSkKLSAgICAsIG1fc2NvcGUoKnNjb3BlLT5nbG9iYWxEYXRhKCksIHNjb3Bl
KQotICAgICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKK0J5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV2YWxOb2RlKiBldmFs
Tm9kZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1
Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCisgICAgOiBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9uKQorICAgICwgbV9zaG91bGRFbWl0
UHJvZmlsZUhvb2tzKHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9uKQorICAgICwgbV9zeW1ib2xU
YWJsZShjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCiAjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1F
TlRTKQogICAgICwgbV9jdXJyZW50Q29tbWVudFN0cmluZygwKQogI2VuZGlmCiAgICAgLCBtX3Nj
b3BlTm9kZShldmFsTm9kZSkKLSAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1f
Y29kZUJsb2NrKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENh
bGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAgICAgLCBtX2VtcHR5VmFsdWVSZWdpc3Rl
cigwKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgo
MCkKLSAgICAsIG1fYmFzZVNjb3BlRGVwdGgoY29kZUJsb2NrLT5iYXNlU2NvcGVEZXB0aCgpKQog
ICAgICwgbV9jb2RlVHlwZShFdmFsQ29kZSkKICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDAp
CiAgICAgLCBtX2dsb2JhbENvbnN0YW50SW5kZXgoMCkKICAgICAsIG1faGFzQ3JlYXRlZEFjdGl2
YXRpb24odHJ1ZSkKICAgICAsIG1fZmlyc3RMYXp5RnVuY3Rpb24oMCkKICAgICAsIG1fbGFzdExh
enlGdW5jdGlvbigwKQotICAgICwgbV9nbG9iYWxEYXRhKHNjb3BlLT5nbG9iYWxEYXRhKCkpCisg
ICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9l
bmQpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTU2
NywxMyArNDk0LDkgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxO
b2RlKiBldmFsTm9kZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFMKICAgICAsIG1fdXNlc0V4Y2Vw
dGlvbnMoZmFsc2UpCiAgICAgLCBtX2V4cHJlc3Npb25Ub29EZWVwKGZhbHNlKQogewotICAgIG1f
Z2xvYmFsRGF0YS0+c3RhcnRlZENvbXBpbGluZyhtX2NvZGVCbG9jayk7Ci0KLSAgICBpZiAobV9z
aG91bGRFbWl0RGVidWdIb29rcyB8fCBtX2Jhc2VTY29wZURlcHRoKQotICAgICAgICBtX2NvZGVC
bG9jay0+c2V0TmVlZHNGdWxsU2NvcGVDaGFpbih0cnVlKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0
TmVlZHNGdWxsU2NvcGVDaGFpbih0cnVlKTsKIAotICAgIGNvZGVCbG9jay0+c2V0R2xvYmFsRGF0
YShtX2dsb2JhbERhdGEpOwotICAgIHN5bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChj
b2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOyAgICAK
KyAgICBtX3N5bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNF
dmFsKCkgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAgIG1fY29kZUJsb2NrLT5z
ZXROdW1QYXJhbWV0ZXJzKDEpOwogCiAgICAgcHJlcGVuZENvbW1lbnQoImVudGVyaW5nIEV2YWwg
YmxvY2siKTsKQEAgLTU4MSw3ICs1MDQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkUwogCiAg
ICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2sg
PSBldmFsTm9kZS0+ZnVuY3Rpb25TdGFjaygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZEZ1bmN0
aW9uRGVjbChGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlv
blN0YWNrW2ldKSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1
bmN0aW9uKGZ1bmN0aW9uU3RhY2tbaV0pKTsKIAogICAgIGNvbnN0IERlY2xhcmF0aW9uU3RhY2tz
OjpWYXJTdGFjayYgdmFyU3RhY2sgPSBldmFsTm9kZS0+dmFyU3RhY2soKTsKICAgICB1bnNpZ25l
ZCBudW1WYXJpYWJsZXMgPSB2YXJTdGFjay5zaXplKCk7CkBAIC01OTUsNyArNTE4LDYgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgSlNT
Y29wZSogc2NvcGUsIFNoYXJlZFMKIAogQnl0ZWNvZGVHZW5lcmF0b3I6On5CeXRlY29kZUdlbmVy
YXRvcigpCiB7Ci0gICAgbV9nbG9iYWxEYXRhLT5maW5pc2hlZENvbXBpbGluZyhtX2NvZGVCbG9j
ayk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5pdExhenlSZWdp
c3RlcihSZWdpc3RlcklEKiByZWcpCkBAIC02MTgsMTcgKzU0MCw2IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9u
Qm9keU5vZGUpCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChmdW5j
dGlvbkJvZHlOb2RlLT5pZGVudCgpKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCht
X2NhbGxlZVJlZ2lzdGVyLmluZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
UmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLQotICAgICAgICAvLyBQdXQgYSBtaXJyb3Igb2JqZWN0
IGluIGNvbXBpbGF0aW9uIHNjb3BlLCBzbyBjb21waWxlLXRpbWUgdmFyaWFibGUgcmVzb2x1dGlv
biBzZWVzIHRoZSBwcm9wZXJ0eSBuYW1lIHdlJ2xsIHNlZSBhdCBydW50aW1lLgotICAgICAgICBt
X3Njb3BlLnNldCgqZ2xvYmFsRGF0YSgpLAotICAgICAgICAgICAgSlNOYW1lU2NvcGU6OmNyZWF0
ZSgKLSAgICAgICAgICAgICAgICBtX3Njb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
LAotICAgICAgICAgICAgICAgIGZ1bmN0aW9uQm9keU5vZGUtPmlkZW50KCksCi0gICAgICAgICAg
ICAgICAganNVbmRlZmluZWQoKSwKLSAgICAgICAgICAgICAgICBSZWFkT25seSB8IERvbnREZWxl
dGUsCi0gICAgICAgICAgICAgICAgbV9zY29wZS5nZXQoKQotICAgICAgICAgICAgKQotICAgICAg
ICApOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTc3Miw3ICs2ODMsNyBAQCB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQogICAgIG1f
bGFzdE9wY29kZVBvc2l0aW9uID0gb3Bjb2RlUG9zaXRpb247CiAjZW5kaWYKICAgICBlbWl0Q29t
bWVudCgpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChnbG9iYWxEYXRhKCktPmludGVycHJl
dGVyLT5nZXRPcGNvZGUob3Bjb2RlSUQpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQob3Bj
b2RlSUQpOwogICAgIG1fbGFzdE9wY29kZUlEID0gb3Bjb2RlSUQ7CiB9CiAKQEAgLTc5NiwyMSAr
NzA3LDIxIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnByZXBlbmRDb21tZW50KGNvbnN0IGNo
YXIqIHN0cmluZykKIH0KICNlbmRpZgogCi1BcnJheVByb2ZpbGUqIEJ5dGVjb2RlR2VuZXJhdG9y
OjpuZXdBcnJheVByb2ZpbGUoKQorVW5saW5rZWRBcnJheVByb2ZpbGUgQnl0ZWNvZGVHZW5lcmF0
b3I6Om5ld0FycmF5UHJvZmlsZSgpCiB7CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQotICAg
IHJldHVybiBtX2NvZGVCbG9jay0+YWRkQXJyYXlQcm9maWxlKGluc3RydWN0aW9ucygpLnNpemUo
KSk7CisgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRBcnJheVByb2ZpbGUoKTsKICNlbHNlCiAg
ICAgcmV0dXJuIDA7CiAjZW5kaWYKIH0KIAotVmFsdWVQcm9maWxlKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQorVW5saW5rZWRWYWx1ZVBy
b2ZpbGUgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlZE9wY29kZShPcGNvZGVJRCBvcGNv
ZGVJRCkKIHsKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAgVmFsdWVQcm9maWxlKiBy
ZXN1bHQgPSBtX2NvZGVCbG9jay0+YWRkVmFsdWVQcm9maWxlKGluc3RydWN0aW9ucygpLnNpemUo
KSk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcmVzdWx0ID0gbV9jb2RlQmxvY2stPmFkZFZh
bHVlUHJvZmlsZSgpOwogI2Vsc2UKLSAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IDA7CisgICAg
VW5saW5rZWRWYWx1ZVByb2ZpbGUgcmVzdWx0ID0gMDsKICNlbmRpZgogICAgIGVtaXRPcGNvZGUo
b3Bjb2RlSUQpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04NDAsMTQgKzc1MSw2IEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnJldHJpZXZlTGFzdFVuYXJ5T3AoaW50JiBkc3RJbmRleCwgaW50
JiBzcmNJbmRleCkKICAgICBzcmNJbmRleCA9IGluc3RydWN0aW9ucygpLmF0KHNpemUgLSAxKS51
Lm9wZXJhbmQ7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJldHJpZXZlTGFzdFVuYXJ5
T3AoV3JpdGVCYXJyaWVyPFVua25vd24+KiYgZHN0UG9pbnRlciwgaW50JiBzcmNJbmRleCkKLXsK
LSAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpID49IDMpOwotICAgIHNpemVfdCBzaXpl
ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIGRzdFBvaW50ZXIgPSBpbnN0cnVjdGlvbnMo
KS5hdChzaXplIC0gMikudS5yZWdpc3RlclBvaW50ZXI7Ci0gICAgc3JjSW5kZXggPSBpbnN0cnVj
dGlvbnMoKS5hdChzaXplIC0gMSkudS5vcGVyYW5kOwotfQotCiB2b2lkIEFMV0FZU19JTkxJTkUg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnJld2luZEJpbmFyeU9wKCkKIHsKICAgICBBU1NFUlQoaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpID49IDQpOwpAQCAtMTMzNiw3ICsxMjM5LDcgQEAgUmVzb2x2ZVJlc3Vs
dCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkK
ICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZSh0aGlzUmVnaXN0
ZXIoKSwgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlGbGFnKTsKIAogICAgIC8vIENoZWNrIGlmIHRo
ZSBwcm9wZXJ0eSBzaG91bGQgYmUgYWxsb2NhdGVkIGluIGEgcmVnaXN0ZXIuCi0gICAgaWYgKG1f
Y29kZVR5cGUgIT0gR2xvYmFsQ29kZSAmJiBzaG91bGRPcHRpbWl6ZUxvY2FscygpKSB7CisgICAg
aWYgKG1fY29kZVR5cGUgIT0gR2xvYmFsQ29kZSAmJiBzaG91bGRPcHRpbWl6ZUxvY2FscygpICYm
IG1fc3ltYm9sVGFibGUpIHsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJv
bFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxs
KCkpIHsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzKQpAQCAtMTM1Miw3ICsxMjU1LDcgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRv
cjo6cmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIFJlc29sdmVSZXN1bHQgQnl0
ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDb25zdERlY2woY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHkpCiB7CiAgICAgLy8gUmVnaXN0ZXItYWxsb2NhdGVkIGNvbnN0IGRlY2xhcmF0aW9ucy4KLSAg
ICBpZiAobV9jb2RlVHlwZSAhPSBFdmFsQ29kZSAmJiBtX2NvZGVUeXBlICE9IEdsb2JhbENvZGUp
IHsKKyAgICBpZiAobV9jb2RlVHlwZSAhPSBFdmFsQ29kZSAmJiBtX2NvZGVUeXBlICE9IEdsb2Jh
bENvZGUgJiYgbV9zeW1ib2xUYWJsZSkgewogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKICAgICAgICAgaWYgKCFlbnRy
eS5pc051bGwoKSkgewogICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MgPSBlbnRyeS5pc1JlYWRP
bmx5KCkgPyBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUZsYWcgOiAwOwpAQCAtMTM5NCw3ICsxMjk3
LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYKICAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc1Jl
Z2lzdGVyKCkpCiAgICAgICAgIHJldHVybiBlbWl0R2V0TG9jYWxWYXIoZHN0LCByZXNvbHZlUmVz
dWx0LCBwcm9wZXJ0eSk7CiAKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmls
ZWRPcGNvZGUob3BfcmVzb2x2ZSk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQo
cHJvcGVydHkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZ2V0UmVzb2x2ZU9wZXJhdGlv
bnMocHJvcGVydHkpKTsKQEAgLTE0MDYsNyArMTMwOSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2UoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZl
UmVzCiB7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlUmVzdWx0LCAhcmVzb2x2ZVJlc3VsdC5p
c1JlZ2lzdGVyKCkpOwogICAgIC8vIFdlIGNhbid0IG9wdGltaXNlIGF0IGFsbCA6LSgKLSAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV9iYXNl
KTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2Rl
KG9wX3Jlc29sdmVfYmFzZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgo
KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsKQEAgLTE0MjAsNyArMTMyMyw3IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2VGb3JQdXQoUmVnaXN0
ZXJJRCogZHN0LCBjb25zdCBSZXNvCiB7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlUmVzdWx0
LCAhcmVzb2x2ZVJlc3VsdC5pc1JlZ2lzdGVyKCkpOwogICAgIC8vIFdlIGNhbid0IG9wdGltaXNl
IGF0IGFsbCA6LSgKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNv
ZGUob3BfcmVzb2x2ZV9iYXNlKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0g
ZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfYmFzZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0
YW50KHByb3BlcnR5KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJsb2NrLT5p
c1N0cmljdE1vZGUoKSk7CkBAIC0xNDM1LDcgKzEzMzgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVCYXNlRm9yUHV0KFJlZ2lzdGVySUQqIGRzdCwgY29uc3Qg
UmVzbwogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aEJhc2VG
b3JQdXQoUmVnaXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwgY29uc3QgUmVz
b2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3VsdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIE5v
bmxvY2FsUmVzb2x2ZUluZm8mIHZlcmlmaWVyKQogewogICAgIEFTU0VSVF9VTlVTRUQocmVzb2x2
ZVJlc3VsdCwgIXJlc29sdmVSZXN1bHQuaXNSZWdpc3RlcigpKTsKLSAgICBWYWx1ZVByb2ZpbGUq
IHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX2Jhc2UpOworICAg
IFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVz
b2x2ZV93aXRoX2Jhc2UpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlRHN0LT5pbmRl
eCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcERzdC0+aW5kZXgoKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CkBAIC0xNDU1LDcg
KzEzNTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVXaXRo
VGhpcyhSZWdpc3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcgogICAgICAgICByZXR1cm4gYmFzZURz
dDsKICAgICB9CiAKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNv
ZGUob3BfcmVzb2x2ZV93aXRoX3RoaXMpOworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2Zp
bGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX3RoaXMpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChiYXNlRHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQocHJvcERzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENv
bnN0YW50KHByb3BlcnR5KSk7CkBAIC0xNDgyLDIzICsxMzg1LDExIEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0TG9jYWxWYXIoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBS
ZXNvbHZlUmVzCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluaXRHbG9iYWxD
b25zdChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsK
ICAgICBBU1NFUlQobV9jb2RlVHlwZSA9PSBHbG9iYWxDb2RlKTsKLSAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgIFN5bWJv
bFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChpZGVu
dGlmaWVyLmltcGwoKSk7Ci0gICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICBpZiAoZW50cnkuY291bGRCZVdhdGNoZWQoKSkgewotICAgICAgICBlbWl0
T3Bjb2RlKG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKCZnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkpOwot
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZW50cnkuYWRkcmVzc09mSXNXYXRjaGVkKCkpOwotICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgfQotICAgIAotICAgIGVtaXRPcGNvZGUob3BfaW5pdF9nbG9i
YWxfY29uc3QpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgmZ2xvYmFsT2JqZWN0LT5yZWdp
c3RlckF0KGVudHJ5LmdldEluZGV4KCkpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2luaXRfZ2xvYmFs
X2NvbnN0X25vcCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KDApOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7
CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xNTExLDcgKzE0MDIsNyBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBjbwogewogICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CiAKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2Zp
bGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2J5X2lkKTsKKyAgICBVbmxpbmtlZFZhbHVl
UHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9ieV9pZCk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGJhc2UtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25z
dGFudChwcm9wZXJ0eSkpOwpAQCAtMTU5Nyw4ICsxNDg4LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXREZWxldGVCeUlkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRBcmd1bWVudEJ5
VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVy
dHkpCiB7Ci0gICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUo
KTsKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0
X2FyZ3VtZW50X2J5X3ZhbCk7CisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxl
ID0gbmV3QXJyYXlQcm9maWxlKCk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBBU1NFUlQoYmFzZS0+aW5kZXgoKSA9
PSBtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGJhc2UtPmluZGV4KCkpOwpAQCAtMTYyMyw4ICsxNTE0LDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGJhc2UsIFIKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKLSAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2J5X3ZhbCk7
CisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxl
KCk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29k
ZShvcF9nZXRfYnlfdmFsKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKQEAgLTE2MzUsNyArMTUyNiw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UHV0QnlWYWwoUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJl
Z2lzdGVySUQqIHZhbHVlKQogewotICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbmV3
QXJyYXlQcm9maWxlKCk7CisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0g
bmV3QXJyYXlQcm9maWxlKCk7CiAgICAgZW1pdE9wY29kZShvcF9wdXRfYnlfdmFsKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKQEAgLTE3MDUsNyArMTU5Niw3IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3QXJyYXkoUmVnaXN0ZXJJRCogZHN0LCBFbGVt
ZW50Tm9kZSogZWxlbWVuCiAgICAgICAgIGlmICghaGFkVmFyaWFibGVFeHByZXNzaW9uKSB7CiAg
ICAgICAgICAgICBBU1NFUlQobGVuZ3RoID09IGNoZWNrTGVuZ3RoKTsKICAgICAgICAgICAgIHVu
c2lnbmVkIGNvbnN0YW50QnVmZmVySW5kZXggPSBhZGRDb25zdGFudEJ1ZmZlcihsZW5ndGgpOwot
ICAgICAgICAgICAgSlNWYWx1ZSogY29uc3RhbnRCdWZmZXIgPSBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRCdWZmZXIoY29uc3RhbnRCdWZmZXJJbmRleCk7CisgICAgICAgICAgICBKU1ZhbHVlKiBjb25z
dGFudEJ1ZmZlciA9IG1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihjb25zdGFudEJ1ZmZlcklu
ZGV4KS5kYXRhKCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgICAg
ICBmb3IgKEVsZW1lbnROb2RlKiBuID0gZWxlbWVudHM7IGluZGV4IDwgbGVuZ3RoOyBuID0gbi0+
bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG4tPnZhbHVlKCktPmlzTnVtYmVyKCkpCkBA
IC0xNzQxLDE0ICsxNjMyLDE0IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TmV3QXJyYXkoUmVnaXN0ZXJJRCogZHN0LCBFbGVtZW50Tm9kZSogZWxlbWVuCiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBG
dW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbikKIHsKLSAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9u
SW50ZXJuYWwoZHN0LCBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSksIGZhbHNlKTsKKyAgICByZXR1
cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25E
ZWNsKG1ha2VGdW5jdGlvbihmdW5jdGlvbikpLCBmYWxzZSk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVu
Y3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24pCiB7CiAgICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFkZFJl
c3VsdCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwogICAgIGlmIChw
dHIuaXNOZXdFbnRyeSkKLSAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2Nr
LT5hZGRGdW5jdGlvbkRlY2woRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0
YSwgZnVuY3Rpb24pKTsKKyAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2Nr
LT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7CiAgICAgcmV0dXJuIGVt
aXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJhdG9yLT52YWx1ZSwgdHJ1ZSk7CiB9
CiAKQEAgLTE3NzMsNyArMTY2NCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0TmV3UmVnRXhwKFJlZ2lzdGVySUQqIGRzdCwgUmVnRXhwKiByZWdFeHApCiBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklE
KiByMCwgRnVuY0V4cHJOb2RlKiBuKQogewogICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9u
ID0gbi0+Ym9keSgpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0
aW9uRXhwcihGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlv
bikpOworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRXhwciht
YWtlRnVuY3Rpb24oZnVuY3Rpb24pKTsKICAgICAKICAgICBjcmVhdGVBY3RpdmF0aW9uSWZOZWNl
c3NhcnkoKTsKICAgICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jX2V4cCk7CkBAIC0xOTI0LDcgKzE4
MTUsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaQogICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBl
bWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkb25lLmdldCgpKTsKICAgICAKICAgICAvLyBFbWl0IGNhbGwuCi0gICAg
QXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKKyAgICBVbmxp
bmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKICAgICBl
bWl0T3Bjb2RlKG9wY29kZUlEKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5k
ZXgoKSk7IC8vIGZ1bmMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsgLy8gYXJnQ291bnQKQEAgLTE5MzYsNyArMTgy
Nyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvZGVJRCBv
cGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpCiAjZW5kaWYKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYXJyYXlQcm9maWxlKTsKICAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSkg
ewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3Bf
Y2FsbF9wdXRfcmVzdWx0KTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsgLy8gZHN0CiAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChwcm9maWxlKTsKICAgICB9CkBAIC0xOTY5LDcgKzE4NjAsNyBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZnVuYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd1bWVudHMtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmaXJzdEZyZWVSZWdpc3Rlci0+aW5k
ZXgoKSk7CiAgICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpIHsKLSAgICAgICAgVmFsdWVQ
cm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7
CisgICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNv
ZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRz
dC0+aW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAg
ICB9CkBAIC0yMDUyLDcgKzE5NDMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdENvbnN0cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsCiAjZW5kaWYK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVz
dWx0KCkpIHsKLSAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bj
b2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CisgICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHBy
b2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7IC8vIGRzdAogICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgfQpAQCAtMjQzMSw3ICsyMzIyLDcgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFRyeUFuZEVtaXRDYXRjaChUcnlEYXRh
KiB0cnlEYXRhLCBSZWdpc3RlcklEKgogICAgIG1fdHJ5Q29udGV4dFN0YWNrLnJlbW92ZUxhc3Qo
KTsKICAgICAKICAgICBlbWl0TGFiZWwodHJ5UmFuZ2UudHJ5RGF0YS0+dGFyZ2V0LmdldCgpKTsK
LSAgICB0cnlSYW5nZS50cnlEYXRhLT50YXJnZXRTY29wZURlcHRoID0gbV9keW5hbWljU2NvcGVE
ZXB0aCArIG1fYmFzZVNjb3BlRGVwdGg7CisgICAgdHJ5UmFuZ2UudHJ5RGF0YS0+dGFyZ2V0U2Nv
cGVEZXB0aCA9IG1fZHluYW1pY1Njb3BlRGVwdGg7CiAKICAgICBlbWl0T3Bjb2RlKG9wX2NhdGNo
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0UmVnaXN0ZXItPmluZGV4KCkpOwpA
QCAtMjQ5Miw3ICsyMzgzLDcgQEAgc3RhdGljIGludDMyX3Qga2V5Rm9ySW1tZWRpYXRlU3dpdGNo
KEV4cHJlc3Npb25Ob2RlKiBub2RlLCBpbnQzMl90IG1pbiwgaW50MzJfdAogICAgIHJldHVybiBr
ZXkgLSBtaW47CiB9CiAKLXN0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JJbW1lZGlhdGVT
d2l0Y2goU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUsIGludDMyX3Qgc3dpdGNoQWRkcmVzcywg
dWludDMyX3QgY2xhdXNlQ291bnQsIFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRXhwcmVzc2lvbk5v
ZGUqKiBub2RlcywgaW50MzJfdCBtaW4sIGludDMyX3QgbWF4KQorc3RhdGljIHZvaWQgcHJlcGFy
ZUp1bXBUYWJsZUZvckltbWVkaWF0ZVN3aXRjaChVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYganVt
cFRhYmxlLCBpbnQzMl90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNsYXVzZUNvdW50LCBSZWZQ
dHI8TGFiZWw+KiBsYWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMsIGludDMyX3QgbWluLCBp
bnQzMl90IG1heCkKIHsKICAgICBqdW1wVGFibGUubWluID0gbWluOwogICAgIGp1bXBUYWJsZS5i
cmFuY2hPZmZzZXRzLnJlc2l6ZShtYXggLSBtaW4gKyAxKTsKQEAgLTI1MTgsNyArMjQwOSw3IEBA
IHN0YXRpYyBpbnQzMl90IGtleUZvckNoYXJhY3RlclN3aXRjaChFeHByZXNzaW9uTm9kZSogbm9k
ZSwgaW50MzJfdCBtaW4sIGludDMyX3QKICAgICByZXR1cm4ga2V5IC0gbWluOwogfQogCi1zdGF0
aWMgdm9pZCBwcmVwYXJlSnVtcFRhYmxlRm9yQ2hhcmFjdGVyU3dpdGNoKFNpbXBsZUp1bXBUYWJs
ZSYganVtcFRhYmxlLCBpbnQzMl90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNsYXVzZUNvdW50
LCBSZWZQdHI8TGFiZWw+KiBsYWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMsIGludDMyX3Qg
bWluLCBpbnQzMl90IG1heCkKK3N0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JDaGFyYWN0
ZXJTd2l0Y2goVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50MzJfdCBzd2l0
Y2hBZGRyZXNzLCB1aW50MzJfdCBjbGF1c2VDb3VudCwgUmVmUHRyPExhYmVsPiogbGFiZWxzLCBF
eHByZXNzaW9uTm9kZSoqIG5vZGVzLCBpbnQzMl90IG1pbiwgaW50MzJfdCBtYXgpCiB7CiAgICAg
anVtcFRhYmxlLm1pbiA9IG1pbjsKICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNpemUo
bWF4IC0gbWluICsgMSk7CkBAIC0yNTMxLDcgKzI0MjIsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJl
SnVtcFRhYmxlRm9yQ2hhcmFjdGVyU3dpdGNoKFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlLCBp
bnQzMgogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZvclN0cmluZ1N3
aXRjaChTdHJpbmdKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50MzJfdCBzd2l0Y2hBZGRyZXNzLCB1
aW50MzJfdCBjbGF1c2VDb3VudCwgUmVmUHRyPExhYmVsPiogbGFiZWxzLCBFeHByZXNzaW9uTm9k
ZSoqIG5vZGVzKQorc3RhdGljIHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZvclN0cmluZ1N3aXRjaChV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlLCBpbnQzMl90IHN3aXRjaEFkZHJlc3Ms
IHVpbnQzMl90IGNsYXVzZUNvdW50LCBSZWZQdHI8TGFiZWw+KiBsYWJlbHMsIEV4cHJlc3Npb25O
b2RlKiogbm9kZXMpCiB7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNsYXVzZUNvdW50
OyArK2kpIHsKICAgICAgICAgLy8gV2UncmUgZW1pdHRpbmcgdGhpcyBhZnRlciB0aGUgY2xhdXNl
IGxhYmVscyBzaG91bGQgaGF2ZSBiZWVuIGZpeGVkLCBzbyAKQEAgLTI1NDAsOSArMjQzMSw3IEBA
IHN0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0Y2goU3RyaW5nSnVtcFRh
YmxlJiBqdW1wVGFibGUsIGludDMyX3QKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2Rlc1tp
XS0+aXNTdHJpbmcoKSk7CiAgICAgICAgIFN0cmluZ0ltcGwqIGNsYXVzZSA9IHN0YXRpY19jYXN0
PFN0cmluZ05vZGUqPihub2Rlc1tpXSktPnZhbHVlKCkuaW1wbCgpOwotICAgICAgICBPZmZzZXRM
b2NhdGlvbiBsb2NhdGlvbjsKLSAgICAgICAgbG9jYXRpb24uYnJhbmNoT2Zmc2V0ID0gbGFiZWxz
W2ldLT5iaW5kKHN3aXRjaEFkZHJlc3MsIHN3aXRjaEFkZHJlc3MgKyAzKTsKLSAgICAgICAganVt
cFRhYmxlLm9mZnNldFRhYmxlLmFkZChjbGF1c2UsIGxvY2F0aW9uKTsKKyAgICAgICAganVtcFRh
YmxlLm9mZnNldFRhYmxlLmFkZChjbGF1c2UsIGxhYmVsc1tpXS0+YmluZChzd2l0Y2hBZGRyZXNz
LCBzd2l0Y2hBZGRyZXNzICsgMykpOwogICAgIH0KIH0KIApAQCAtMjU1NCwyMCArMjQ0MywyMCBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbmRTd2l0Y2godWludDMyX3QgY2xhdXNlQ291bnQs
IFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRQogICAgICAgICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJ
bmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMV0gPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVT
d2l0Y2hKdW1wVGFibGVzKCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpW3N3aXRjaEluZm8uYnl0
ZWNvZGVPZmZzZXQgKyAyXSA9IGRlZmF1bHRMYWJlbC0+YmluZChzd2l0Y2hJbmZvLmJ5dGVjb2Rl
T2Zmc2V0LCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMyk7CiAKLSAgICAgICAgU2ltcGxl
SnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkSW1tZWRpYXRlU3dpdGNoSnVt
cFRhYmxlKCk7CisgICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUgPSBt
X2NvZGVCbG9jay0+YWRkSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAgICAgIHByZXBh
cmVKdW1wVGFibGVGb3JJbW1lZGlhdGVTd2l0Y2goanVtcFRhYmxlLCBzd2l0Y2hJbmZvLmJ5dGVj
b2RlT2Zmc2V0LCBjbGF1c2VDb3VudCwgbGFiZWxzLCBub2RlcywgbWluLCBtYXgpOwogICAgIH0g
ZWxzZSBpZiAoc3dpdGNoSW5mby5zd2l0Y2hUeXBlID09IFN3aXRjaEluZm86OlN3aXRjaENoYXJh
Y3RlcikgewogICAgICAgICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0
ICsgMV0gPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCk7
CiAgICAgICAgIGluc3RydWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAyXSA9
IGRlZmF1bHRMYWJlbC0+YmluZChzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBzd2l0Y2hJbmZv
LmJ5dGVjb2RlT2Zmc2V0ICsgMyk7CiAgICAgICAgIAotICAgICAgICBTaW1wbGVKdW1wVGFibGUm
IGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoKTsK
KyAgICAgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSA9IG1fY29kZUJsb2Nr
LT5hZGRDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoKTsKICAgICAgICAgcHJlcGFyZUp1bXBUYWJs
ZUZvckNoYXJhY3RlclN3aXRjaChqdW1wVGFibGUsIHN3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQs
IGNsYXVzZUNvdW50LCBsYWJlbHMsIG5vZGVzLCBtaW4sIG1heCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKHN3aXRjaEluZm8uc3dpdGNoVHlwZSA9PSBTd2l0Y2hJbmZvOjpTd2l0Y2hT
dHJpbmcpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0
ICsgMV0gPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7CiAg
ICAgICAgIGluc3RydWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAyXSA9IGRl
ZmF1bHRMYWJlbC0+YmluZChzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBzd2l0Y2hJbmZvLmJ5
dGVjb2RlT2Zmc2V0ICsgMyk7CiAKLSAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFibGUg
PSBtX2NvZGVCbG9jay0+YWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCk7CisgICAgICAgIFVubGlu
a2VkU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKCk7CiAgICAgICAgIHByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0Y2go
anVtcFRhYmxlLCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBjbGF1c2VDb3VudCwgbGFiZWxz
LCBub2Rlcyk7CiAgICAgfQogfQpAQCAtMjU5OSw5ICsyNDg4LDcgQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKQogewogICAgIGlmICghaXNT
dHJpY3RNb2RlKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBl
cnJvciA9IGVtaXRMb2FkKG5ld1RlbXBvcmFyeSgpLCBKU1ZhbHVlKGNyZWF0ZVR5cGVFcnJvcihz
Y29wZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpKSk7Ci0gICAgZW1pdFRocm93KGVycm9yLmdldCgpKTsKKyAgICBl
bWl0VGhyb3dSZWZlcmVuY2VFcnJvcihTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCAyNDY1MzBhYjI4
NjhmOGZiNmZhNDU1YmNiMjMwYzI0MTQxNmI3MjE0Li44NTdlYzhmODQyN2Y3OWNlYzcxNTcxOWEx
M2VmODZjMDExYTVmM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiU3ltYm9sVGFibGUuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIk5vZGVz
LmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CkBAIC0yMTEsMTggKzIxMiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wg
ZHVtcHNHZW5lcmF0ZWRDb2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZHVtcHNHZW5lcmF0ZWRD
b2RlKCk7CiAKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqLCBKU1Njb3Bl
KiwgU2hhcmVkU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5k
KTsKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIEpTU2NvcGUq
LCBTaGFyZWRTeW1ib2xUYWJsZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7Ci0gICAg
ICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwgSlNTY29wZSosIFNoYXJlZFN5bWJvbFRh
YmxlKiwgRXZhbENvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CisgICAgICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSYsIFByb2dyYW1Ob2RlKiwgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOworICAgICAgICBCeXRlY29kZUdl
bmVyYXRvcihKU0dsb2JhbERhdGEmLCBGdW5jdGlvbkJvZHlOb2RlKiwgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKKyAgICAgICAgQnl0ZWNv
ZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiwgRXZhbE5vZGUqLCBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7CiAKICAgICAgICAgfkJ5dGVjb2RlR2Vu
ZXJhdG9yKCk7CiAgICAgICAgIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBj
b25zdCB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRp
ZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV9nbG9iYWxEYXRhLT5wcm9w
ZXJ0eU5hbWVzOyB9CiAKLSAgICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgeyByZXR1cm4gbV9j
b2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvcjsgfQorICAgICAgICBib29sIGlzQ29uc3RydWN0b3Io
KSB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpOyB9CiAKLSAgICAgICAgSlNP
YmplY3QqIGdlbmVyYXRlKCk7CisgICAgICAgIFBhcnNlckVycm9yIGdlbmVyYXRlKCk7CiAKICAg
ICAgICAgYm9vbCBpc0FyZ3VtZW50TnVtYmVyKGNvbnN0IElkZW50aWZpZXImLCBpbnQpOwogCkBA
IC0zMzIsMTAgKzMzMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdEV4
cHJlc3Npb25JbmZvKHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fc2hvdWxkRW1pdFJp
Y2hTb3VyY2VJbmZvKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGl2
b3QgLT0gbV9jb2RlQmxvY2stPnNvdXJjZU9mZnNldCgpOworICAgICAgICAgICAgZGl2b3QgLT0g
bV9zY29wZU5vZGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgICAgICBpZiAoZGl2
b3QgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhEaXZvdCkgewogICAgICAgICAgICAgICAgIC8v
IE92ZXJmbG93IGhhcyBvY2N1cnJlZCwgd2UgY2FuIG9ubHkgZ2l2ZSBsaW5lIG51bWJlciBpbmZv
IGZvciBlcnJvcnMgZm9yIHRoaXMgcmVnaW9uCiAgICAgICAgICAgICAgICAgZGl2b3QgPSAwOwpA
QCAtNTEwLDggKzUwOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVt
aXRQcm9maWxlSG9va3MoKSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3M7IH0KICAg
ICAgICAgCiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2stPmlzU3RyaWN0TW9kZSgpOyB9Ci0gICAgICAgIAotICAgICAgICBKU1Njb3BlKiBzY29w
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGUuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBMYWJlbDsKQEAgLTUyOSwxMSArNTI1LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogI2VuZGlmCiAKICAgICAgICAgdm9pZCBlbWl0T3Bjb2RlKE9wY29kZUlEKTsKLSAgICAg
ICAgQXJyYXlQcm9maWxlKiBuZXdBcnJheVByb2ZpbGUoKTsKLSAgICAgICAgVmFsdWVQcm9maWxl
KiBlbWl0UHJvZmlsZWRPcGNvZGUoT3Bjb2RlSUQpOworICAgICAgICBVbmxpbmtlZEFycmF5UHJv
ZmlsZSBuZXdBcnJheVByb2ZpbGUoKTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgZW1p
dFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEKTsKICAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RCaW5h
cnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMySW5kZXgpOwogICAg
ICAgICB2b2lkIHJldHJpZXZlTGFzdFVuYXJ5T3AoaW50JiBkc3RJbmRleCwgaW50JiBzcmNJbmRl
eCk7Ci0gICAgICAgIHZvaWQgcmV0cmlldmVMYXN0VW5hcnlPcChXcml0ZUJhcnJpZXI8VW5rbm93
bj4qJiBkc3RQb2ludGVyLCBpbnQmIHNyY0luZGV4KTsKICAgICAgICAgQUxXQVlTX0lOTElORSB2
b2lkIHJld2luZEJpbmFyeU9wKCk7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdpbmRV
bmFyeU9wKCk7CiAKQEAgLTU3NiwxMCArNTcxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgYWRkZWQgdmFyLgotICAg
ICAgICBlbnVtIENvbnN0YW50TW9kZSB7IElzQ29uc3RhbnQsIElzVmFyaWFibGUgfTsKLSAgICAg
ICAgZW51bSBGdW5jdGlvbk1vZGUgeyBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplLCBOb3RGdW5jdGlv
bk9yTm90U3BlY2lhbGl6YWJsZSB9OwotICAgICAgICBpbnQgYWRkR2xvYmFsVmFyKGNvbnN0IElk
ZW50aWZpZXImLCBDb25zdGFudE1vZGUsIEZ1bmN0aW9uTW9kZSk7Ci0KICAgICAgICAgdm9pZCBh
ZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYsIGludCBwYXJhbWV0ZXJJbmRleCk7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIHJlc29sdmVDYWxsZWUoRnVuY3Rpb25Cb2R5Tm9kZSopOwogICAgICAg
ICB2b2lkIGFkZENhbGxlZShGdW5jdGlvbkJvZHlOb2RlKiwgUmVnaXN0ZXJJRCopOwpAQCAtNjA2
LDE3ICs1OTcsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdW5zaWduZWQgYWRkQ29u
c3RhbnRCdWZmZXIodW5zaWduZWQgbGVuZ3RoKTsKICAgICAgICAgCisgICAgICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBtYWtlRnVuY3Rpb24oRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpjcmVhdGUobV9nbG9iYWxEYXRhLCBtX3Njb3BlTm9kZS0+c291cmNlKCksIGJvZHkpOworICAg
ICAgICB9CisKICAgICAgICAgSlNTdHJpbmcqIGFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElkZW50
aWZpZXImKTsKIAogICAgICAgICB2b2lkIGFkZExpbmVJbmZvKHVuc2lnbmVkIGxpbmVObykKICAg
ICAgICAgewotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFkZExpbmVJbmZvKGluc3RydWN0aW9u
cygpLnNpemUoKSwgbGluZU5vKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRMaW5lSW5m
byhpbnN0cnVjdGlvbnMoKS5zaXplKCksIGxpbmVObyAtIG1fc2NvcGVOb2RlLT5maXJzdExpbmUo
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SW5pdExhenlSZWdpc3Rl
cihSZWdpc3RlcklEKik7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIFZlY3RvcjxJbnN0cnVjdGlv
bj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CisgICAgICAgIFZl
Y3RvcjxVbmxpbmtlZEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0
cnVjdGlvbnM7IH0KIAogICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSB7
IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQogI2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykK
QEAgLTY1NCwxMyArNjUwLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNyZWF0
ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5
UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKik7CiAgICAgICAgIAotICAgICAgICBWZWN0
b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOworICAgICAgICBWZWN0b3I8VW5saW5rZWRJ
bnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CiAKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rczsKLSAgICAg
ICAgYm9vbCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbzsKIAotICAgICAgICBTdHJvbmc8SlNT
Y29wZT4gbV9zY29wZTsKICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7
CiAKICNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCkBAIC02NjksNyArNjYzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogICAgICAgICBTY29wZU5vZGUqIG1fc2NvcGVOb2RlOwot
ICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgICAgICBTdHJvbmc8VW5saW5rZWRD
b2RlQmxvY2s+IG1fY29kZUJsb2NrOwogCiAgICAgICAgIC8vIFNvbWUgb2YgdGhlc2Ugb2JqZWN0
cyBrZWVwIHBvaW50ZXJzIHRvIG9uZSBhbm90aGVyLiBUaGV5IGFyZSBhcnJhbmdlZAogICAgICAg
ICAvLyB0byBlbnN1cmUgYSBzYW5lIGRlc3RydWN0aW9uIG9yZGVyIHRoYXQgYXZvaWRzIHJlZmVy
ZW5jZXMgdG8gZnJlZWQgbWVtb3J5LgpAQCAtNjg3LDcgKzY4MSw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9sYXN0VmFyOwogICAgICAgICBpbnQgbV9m
aW5hbGx5RGVwdGg7CiAgICAgICAgIGludCBtX2R5bmFtaWNTY29wZURlcHRoOwotICAgICAgICBp
bnQgbV9iYXNlU2NvcGVEZXB0aDsKICAgICAgICAgQ29kZVR5cGUgbV9jb2RlVHlwZTsKIAogICAg
ICAgICBWZWN0b3I8Q29udHJvbEZsb3dDb250ZXh0PiBtX3Njb3BlQ29udGV4dFN0YWNrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKaW5kZXggMzczMWIwNDcz
MDJkYTM5MTJlNTc4OGE2MGFkZDEyY2I2NGM4YjRlOS4uYjE0NzI5MTQ2OGEyYjA1MDk4NDIxYjhk
MmI3MGVlZjA5NDU2NmZkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCkBAIC04MCw2ICs4MCw3IEBAIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJh
dG9yKCkoSlNDZWxsKiBjZWxsKQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnVuY3Rpb24tPnNj
b3BlKCktPmdsb2JhbE9iamVjdCgpLT5KU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpOwogICAg
IGV4ZWN1dGFibGUtPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CisgICAgZXhlY3V0YWJsZS0+
Y2xlYXJVbmxpbmtlZENvZGVJZk5vdENvbXBpbGluZygpOwogICAgIGlmIChtX2RlYnVnZ2VyID09
IGZ1bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKICAgICAgICAg
bV9zb3VyY2VQcm92aWRlcnMuYWRkKGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4
ZWMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaApp
bmRleCA2YjkwNTZlNTRhMThjNmJmZDAwMTMwM2I4ZjRlNGVlNjVhZDA2NGM3Li5lMTgzN2IwNDFk
NzI5MDY1OWMxNTA5NmU0ZjVlYTU4NjU4YjRmY2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIC8vIE5vcGUsIHNvIHRyeSB0byBwYXJzZSBvbmUuCiAgICAgICAgICAgICBKU09i
amVjdCogZXhjZXB0aW9uOwogICAgICAgICAgICAgdmFsdWUub3duZWQgPSB0cnVlOwotICAgICAg
ICAgICAgdmFsdWUuY29kZUJsb2NrID0ga2V5LmV4ZWN1dGFibGUoKS0+cHJvZHVjZUNvZGVCbG9j
a0ZvcihzY29wZSwgT3B0aW1pemluZ0NvbXBpbGF0aW9uLCBrZXkua2luZCgpLCBleGNlcHRpb24p
LmxlYWtQdHIoKTsKKyAgICAgICAgICAgIHZhbHVlLmNvZGVCbG9jayA9IGtleS5leGVjdXRhYmxl
KCktPnByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsIGtleS5raW5kKCksIGV4Y2VwdGlvbikubGVh
a1B0cigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBp
cyBhbnkgcmVhc29uIHRvIHJlamVjdCB0aGlzIGZyb20gb3VyIGNhY2hlLiBJZiBzbywgdGhlbgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRl
eCA3YTVlN2ZjNmEwNDQyYTMzOTRhMjc2MTRiNDNmYWVlYzc2N2FlODk3Li44MTc1NDI3MTUzNDli
OWQzN2IxNDBjMWMyMGM0Y2E3MjI4MzA3ZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMjY1Nyw2ICsyNjU3LDEwIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBvcF9p
bml0X2dsb2JhbF9jb25zdF9ub3A6IHsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luaXRf
Z2xvYmFsX2NvbnN0X25vcCk7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIG9wX2luaXRfZ2xv
YmFsX2NvbnN0OiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKApAQCAtMzY0
MCw3ICszNjQ0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAg
IGRhdGFMb2coIlBhcnNpbmcgY29kZSBibG9jayAlcC4gY29kZVR5cGUgPSAlcywgY2FwdHVyZUNv
dW50ID0gJXUsIG5lZWRzRnVsbFNjb3BlQ2hhaW4gPSAlcywgbmVlZHNBY3RpdmF0aW9uID0gJXMs
IGlzU3RyaWN0TW9kZSA9ICVzXG4iLAogICAgICAgICAgICAgY29kZUJsb2NrLAogICAgICAgICAg
ICAgY29kZVR5cGVUb1N0cmluZyhjb2RlQmxvY2stPmNvZGVUeXBlKCkpLAotICAgICAgICAgICAg
Y29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKSwKKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKSA/IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVy
ZUNvdW50KCkgOiAwLAogICAgICAgICAgICAgY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWlu
KCk/InRydWUiOiJmYWxzZSIsCiAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLT5uZWVkc0FjdGl2YXRpb24oKT8idHJ1ZSI6ImZhbHNlIiwKICAgICAgICAgICAgIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpPyJ0cnVlIjoiZmFsc2UiKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCmluZGV4IGU4MGNj
MjhhZTkxNzgzMjNhZDkxNWE2MDYzNGRlMWNkMmQwZmU0ZDcuLmRiZmJmYWUwNDJmNTAxMDI0NDNk
MjU3M2RiMTA2ODM5ODMzMWExOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
YXBhYmlsaXRpZXMuaApAQCAtMTY3LDYgKzE2Nyw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rp
CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CiAg
ICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CiAgICAgY2FzZSBvcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9pbml0X2ds
b2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBjYXNl
IG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOgogICAgIGNhc2Ugb3Bfam1wOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggMTNlMDQzODhjZDZhODU2
ZDZlYTM3YmJjNGY4ZWYwZjY2ZWJkZWFiNC4uMGU0NWUyMzBjMzk5Y2NhODFjNjRjNjJhZTlkNjNh
ZTE4M2U2ZjM2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCkBAIC0xMTU3LDggKzExNTcsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlv
biA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKAotICAgICAgICBnbG9iYWxEYXRhLCBleGVjLCBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVj
dXRhYmxlKCkpKTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246
OmNyZWF0ZShnbG9iYWxEYXRhLCBleGVjLCBleGVjLT5jb2RlQmxvY2soKSk7CiAgICAgZXhlYy0+
c2V0U2NvcGUoYWN0aXZhdGlvbik7CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IGNkMzM5M2FhMjBjMTU2NjRiMmE0NGNmYzYyOTM5
YzRlMmIyY2I0YmEuLmM0NTVmYzJiMTg5YjZmZjY3YTg5Y2Q5ZTU2NDE3ZDEzNDZjYTdkODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNPTk9iamVjdC5oIgogI2luY2x1ZGUgIlRyYWNpbmcu
aCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxp
bmVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CkBA
IC00ODQsMTMgKzQ4NSwxMyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCi0gICAgCisKICAgICAgICAgaWYgKG1fZ2xv
YmFsRGF0YS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgpKSB7CiAgICAgICAgICAgICBH
Q1BIQVNFKFZpc2l0QWN0aXZlQ29kZUJsb2NrKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9nbG9iYWxEYXRhLT5jb2RlQmxvY2tzQmVpbmdDb21waWxlZC5zaXplKCk7IGkr
KykKICAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVk
W2ldLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgfQotICAgIAorCiAgICAgICAg
IHsKICAgICAgICAgICAgIEdDUEhBU0UoVmlzaXRNYWNoaW5lUm9vdHMpOwogICAgICAgICAgICAg
TUFSS19MT0dfUk9PVCh2aXNpdG9yLCAiQysrIFN0YWNrIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCmluZGV4IDEzYmQ4ZTQ5M2QwZDdiM2YzOGU5ODNi
MzU1OTQ2N2MyMzNkNWI4NWMuLjg2NzQ4MWZlMzMyOTYxM2VjN2EyN2RmMzMzMDdiZWFhNTUwODgz
ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCkBA
IC03NCwxMCArNzQsMTggQEAgaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjppbml0KEhlYXAq
IGhlYXAsIE1hcmtlZFNwYWNlKiBtYXJrZWRTcGFjZSwgc2l6ZV90IGMKIGlubGluZSB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBieXRlcykKIHsKICAgICBNYXJrZWRCbG9j
azo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7Ci0gICAgaWYgKFVOTElLRUxZKCFo
ZWFkKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOworICAgIGlmIChV
TkxJS0VMWSghaGVhZCkpIHsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdGVTbG93Q2Fz
ZShieXRlcyk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBtZW1zZXQocmVzdWx0LCAweENELCBi
eXRlcyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAg
bV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKKyNpZm5kZWYgTkRFQlVHCisgICAgbWVtc2V0
KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKKyNlbmRpZgogICAgIHJldHVybiBoZWFkOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKaW5kZXggN2EzMGRlYmRhNGZj
ZGY4OGNkNTNlYTdmZjc2MWNhN2YzOGNiNWFjMy4uMzkxOTcwNWQwMGVhMTI5YTZjYTJiODRjYzA0
ZmM1NmZhZGNlOTNhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmNwcApAQCAtMjk0LDYgKzI5NCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
aW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSogc2xvdCkKICAgICBpZiAoIWNlbGwpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIHZhbGlkYXRlKGNlbGwpOworCiAgICAgaWYgKG1fc2hvdWxkSGFzaENvbnN0
ICYmIGNlbGwtPmlzU3RyaW5nKCkpIHsKICAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGpzQ2Fz
dDxKU1N0cmluZyo+KGNlbGwpOwogICAgICAgICBpZiAoc3RyaW5nLT5zaG91bGRUcnlIYXNoQ29u
c3QoKSAmJiBzdHJpbmctPnRyeUhhc2hDb25zdExvY2soKSkgewpAQCAtMzU1LDYgKzM1NywxMCBA
QCB2b2lkIFNsb3RWaXNpdG9yOjp2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAgICAgICAgICAgICAg
ICAgY2VsbC0+c3RydWN0dXJlKCktPnN0cnVjdHVyZSgpLCBwYXJlbnRDbGFzc05hbWUsIGNlbGws
IGNlbGwtPnN0cnVjdHVyZSgpLCBvdXJDbGFzc05hbWUpOwogICAgICAgICBDUkFTSCgpOwogICAg
IH0KKworICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gd2FsayB0aGUgQ2xhc3NJbmZvIGNoYWluCisg
ICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gY2VsbC0+Y2xhc3NJbmZvKCk7CisgICAgZG8geyB9
IHdoaWxlICgoaW5mbyA9IGluZm8tPnBhcmVudENsYXNzKSk7CiB9CiAjZWxzZQogdm9pZCBTbG90
VmlzaXRvcjo6dmFsaWRhdGUoSlNDZWxsKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDNlNjQ3MWIwZmY3ZjUwOTczMmQ5ZWE4
NzU4YjAzYzhlZTI3ZDM2ZTIuLjM5N2FjODQ3NDg0MWNjZWIwNDEyOGNiMGE5OGQ2OGY4YWI4ZTVi
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcApAQCAtOTQ4LDEwICs5NDgsMTMgQEAgZmFpbGVkSlNPTlA6CiAgICAgLy8gb2JqZWN0
LgogCiAgICAgLy8gQ29tcGlsZSBzb3VyY2UgdG8gYnl0ZWNvZGUgaWYgbmVjZXNzYXJ5OgotICAg
IEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmNvbXBpbGUoY2FsbEZyYW1lLCBzY29wZSk7Ci0g
ICAgaWYgKGVycm9yKQorICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5pbml0YWxp
emVHbG9iYWxQcm9wZXJ0aWVzKGdsb2JhbERhdGEsIGNhbGxGcmFtZSwgc2NvcGUpKQogICAgICAg
ICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgZXJyb3IpKTsKLSAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZwcm9ncmFtLT5nZW5lcmF0ZWRCeXRlY29kZSgpOwor
CisgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmNvbXBpbGUoY2FsbEZyYW1lLCBz
Y29wZSkpCisgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1l
LCBlcnJvcikpOworCisgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gJnByb2dyYW0t
PmdlbmVyYXRlZEJ5dGVjb2RlKCk7CiAKICAgICAvLyBQdXNoIHRoZSBjYWxsIGZyYW1lIGZvciB0
aGlzIGludm9jYXRpb246CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09
IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CmluZGV4IDJkMjk5MWI1ZmM4M2FkNzUxZDk0ZmU2MDc3Mjk3YTVkY2E1YmNmMTYuLmNhZjRjOWIz
ZmE0NmM1OGQ3Njc5NGRiODYxOTU5OWU5NDFmNGE3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKQEAgLTMzNiw2ICszMzYsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9wdXRfYnlfaW5kZXgpCiAgICAgICAgIERFRklORV9P
UChvcF9wdXRfYnlfdmFsKQogICAgICAgICBERUZJTkVfT1Aob3BfcHV0X2dldHRlcl9zZXR0ZXIp
CisgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgorICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wKTsKICAgICAgICAgREVGSU5FX09QKG9w
X2luaXRfZ2xvYmFsX2NvbnN0KQogICAgICAgICBERUZJTkVfT1Aob3BfaW5pdF9nbG9iYWxfY29u
c3RfY2hlY2spCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJp
dmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCmluZGV4IDMxOGI0
ZTdhYWViOGFiOTUzMjZhYzI2ZjJjMmU2NDEwMGZmMmIyOGYuLjY0NWM2NWIyODFlOGM2MjM1N2Zh
ZjkwZWEzMGUyN2Y0NmY2OTZjYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklURHJpdmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIu
aApAQCAtNzUsNyArNzUsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIE93blB0cjxDb2RlQmxvY2tUeXBlPiYgY29kZQogICAgIHJldHVybiB0
cnVlOwogfQogCi1pbmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKEV4
ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRD
b2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVj
aywgV3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFibGUsIEpJVENvZGU6
OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQoraW5saW5lIGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywg
SklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5
Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICAKQEAgLTk5LDcgKzk5LDYgQEAgaW5saW5l
IGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4ZWMsIE93
blB0cjxGdW5jdGlvbkNvZGUKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9j
YXN0PEZ1bmN0aW9uQ29kZUJsb2NrPihjb2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsK
LSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSk7CiAgICAgICAg
ICAgICBqaXRDb2RlID0gb2xkSklUQ29kZTsKICAgICAgICAgICAgIGppdENvZGVXaXRoQXJpdHlD
aGVjayA9IG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjazsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggYmE4Yzc2Y2ZiY2I5
NDJiODk1ZmMxMTI5MmJiNWY5ZWEyMTIyZWIwMC4uNWJlZmQzNzIzMjI0OWQwMmNiNzk3ODgzZTVi
YmJjZjkyYzAwMWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAg
LTIzMDgsNyArMjMwOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHVz
aF9hY3RpdmF0aW9uKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsK
IAotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBz
dGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKSk7CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0
aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSk7CiAgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOwog
ICAgIHJldHVybiBhY3RpdmF0aW9uOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnREYXRhLmNwcAppbmRleCA4ZTJkYWNmNGQ0YTMzMDFiYTc1ODhlOGE1OGE5MTA3OGM0Zjk2N2Ez
Li5lZWMzNzZiMzc5YWU4NjNkZTY1MTZjYzg3ZGIzNmRhYmM0ZjM5MWQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQg
RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIEFT
U0VSVChWYWx1ZU51bGwgPT0gVGFnQml0VHlwZU90aGVyKTsKICNlbmRpZgogICAgIEFTU0VSVChT
dHJpbmdUeXBlID09IDUpOwotICAgIEFTU0VSVChPYmplY3RUeXBlID09IDEzKTsKKyAgICBBU1NF
UlQoT2JqZWN0VHlwZSA9PSAxNyk7CiAgICAgQVNTRVJUKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PT0gMSk7CiAgICAgQVNTRVJUKEltcGxlbWVudHNIYXNJbnN0YW5jZSA9PSAyKTsKICAgICBBU1NF
UlQoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSA9PSA4KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDc0YmVhZTk4YTI3NDU4MzY4
MDI3NzBlYjI3ZjEyNTUzNmE1MWM3MTguLjVhM2E2YTg2ZWMxZmI2NjUyMGJkNDBmMTg3ZmEwYTUy
ZmEwYmY3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcApAQCAtNDYwLDcgKzQ2MCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9jcmVhdGVfYWN0aXZhdGlvbikKICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwogICAgIGRh
dGFMb2coIkNyZWF0aW5nIGFuIGFjdGl2YXRpb24sIGV4ZWMgPSAlcCFcbiIsIGV4ZWMpOwogI2Vu
ZGlmCi0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZXhlYywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlYy0+
Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKSk7CisgICAgSlNBY3RpdmF0aW9uKiBhY3Rp
dmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYywgZXhlYy0+Y29k
ZUJsb2NrKCkpOwogICAgIGV4ZWMtPnNldFNjb3BlKGFjdGl2YXRpb24pOwogICAgIExMSU5UX1JF
VFVSTihKU1ZhbHVlKGFjdGl2YXRpb24pKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCBiMjEyZmQ0ZDFhMzEzMzJl
ZDZhNjhkZDBkMWRlMTQ4Y2FjNGY3NDI0Li4yZjg1YTY3YTk0NGJkNGIyMmE2MTQwYzI0Nzg0OWNk
ZDQ5MThiOTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC05Niw3ICs5Niw3IEBAIGNvbnN0IFNsb3dQdXRBcnJheVN0
b3JhZ2VTaGFwZSA9IDMwCiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0g
NQotY29uc3QgT2JqZWN0VHlwZSA9IDEzCitjb25zdCBPYmplY3RUeXBlID0gMTcKIAogIyBUeXBl
IGZsYWdzIGNvbnN0YW50cy4KIGNvbnN0IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAxCkBAIC0x
MzMxLDYgKzEzMzEsOCBAQCBfbGxpbnRfb3BfcHV0X2J5X2lkX3JlcGxhY2U6CiBfbGxpbnRfb3Bf
cHV0X2J5X2lkX3RyYW5zaXRpb246CiAgICAgbm90U3VwcG9ydGVkKCkKIAorX2xsaW50X29wX2lu
aXRfZ2xvYmFsX2NvbnN0X25vcDoKKyAgICBkaXNwYXRjaCg1KQogCiAjIEluZGljYXRlIHRoZSBl
bmQgb2YgTExJbnQuCiBfbGxpbnRfZW5kOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQppbmRleCBkMDA3MmQ3MTQ2
NjkxMzlhYjQ4OGQ1NWJhNTI0NGExMWM2NTJjNTY0Li41NzI4ZmM2ZTZlZGVlNjQ5ZDIyNjIzMDEx
NjQ0YTBlMGZhYzQ1OWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQpAQCAtOTg0LDcgKzk4NCw3IEBAIF9s
bGludF9vcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICB3cml0ZUJhcnJpZXIodDIsIHQzKQogICAg
IHN0b3JlaSB0MiwgVGFnT2Zmc2V0W3QwXQogICAgIHN0b3JlaSB0MywgUGF5bG9hZE9mZnNldFt0
MF0KLSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3BhdGNoKDUpCiAKIAogX2xsaW50X29wX2luaXRf
Z2xvYmFsX2NvbnN0X2NoZWNrOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCBmYmQ3MTFlYjRhYTA1NjFkOWIzY2Ri
ZGM1N2NmMTA3ZDkxZDZhYTRkLi45ODE2Mzk0NjY1M2RjNzlkOGM5MzY1ZjZmNTdlMjViM2Y1OGE5
YTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQpAQCAtODIyLDcgKzgyMiw3IEBAIF9sbGludF9vcF9pbml0X2dsb2Jh
bF9jb25zdDoKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikKICAgICB3cml0ZUJh
cnJpZXIodDIpCiAgICAgc3RvcmVwIHQyLCBbdDBdCi0gICAgZGlzcGF0Y2goMykKKyAgICBkaXNw
YXRjaCg1KQogCiAKIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDNiMDMxNmY4MTY1YTA4NTZhMzI5NzU5NWNl
NTIxMjVkYzBmYTYzMmYuLjExNjk4NjgxOTkyYTExNWViMzJjN2QxMjkyZWQ2ODc2NjFjMzM5ZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAtNzYsNiArNzYsNDggQEAg
Q09NUElMRV9BU1NFUlQoTGFzdFVudGFnZ2VkVG9rZW4gPCA2NCwgTGVzc1RoYW42NFVudGFnZ2Vk
VG9rZW5zKTsKIGVudW0gU291cmNlRWxlbWVudHNNb2RlIHsgQ2hlY2tGb3JTdHJpY3RNb2RlLCBE
b250Q2hlY2tGb3JTdHJpY3RNb2RlIH07CiBlbnVtIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHsgRnVu
Y3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25OZWVkc05hbWUgfTsKIAorc3RydWN0IFBhcnNl
ckVycm9yIHsKKyAgICBlbnVtIEVycm9yVHlwZSB7IEVycm9yTm9uZSwgU3RhY2tPdmVyZmxvdywg
U3ludGF4RXJyb3IsIEV2YWxFcnJvciwgT3V0T2ZNZW1vcnkgfSBtX3R5cGU7CisgICAgU3RyaW5n
IG1fbWVzc2FnZTsKKyAgICBpbnQgbV9saW5lOworICAgIFBhcnNlckVycm9yKCkKKyAgICAgICAg
OiBtX3R5cGUoRXJyb3JOb25lKQorICAgICAgICAsIG1fbGluZSgtMSkKKyAgICB7CisgICAgfQor
CisgICAgUGFyc2VyRXJyb3IoRXJyb3JUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUp
CisgICAgICAgICwgbV9saW5lKC0xKQorICAgIHsKKyAgICB9CisKKyAgICBQYXJzZXJFcnJvcihF
cnJvclR5cGUgdHlwZSwgU3RyaW5nIG1zZywgaW50IGxpbmUpCisgICAgICAgIDogbV90eXBlKHR5
cGUpCisgICAgICAgICwgbV9tZXNzYWdlKG1zZykKKyAgICAgICAgLCBtX2xpbmUobGluZSkKKyAg
ICB7CisgICAgfQorCisgICAgSlNPYmplY3QqIHRvRXJyb3JPYmplY3QoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBFcnJvck5vbmU6CisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgY2FzZSBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBh
ZGRFcnJvckluZm8oZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGNyZWF0ZVN5bnRheEVycm9y
KGdsb2JhbE9iamVjdCwgbV9tZXNzYWdlKSwgbV9saW5lLCBzb3VyY2UpOworICAgICAgICBjYXNl
IEV2YWxFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihnbG9iYWxP
YmplY3QsIG1fbWVzc2FnZSk7CisgICAgICAgIGNhc2UgU3RhY2tPdmVyZmxvdzoKKyAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgY2FzZSBPdXRPZk1lbW9yeToKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKGdsb2JhbE9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgQ1JBU0goKTsgLy8gQXBw
ZWFzZSBRdCBib3QKKyAgICB9CisKK307CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUg
Ym9vbCBpc0V2YWxOb2RlKCkgeyByZXR1cm4gZmFsc2U7IH0KIHRlbXBsYXRlIDw+IGlubGluZSBi
b29sIGlzRXZhbE5vZGU8RXZhbE5vZGU+KCkgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC0zNzAsNyAr
NDEyLDcgQEAgcHVibGljOgogICAgIH5QYXJzZXIoKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBQ
YXJzZWROb2RlPgotICAgIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2UoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIERlYnVnZ2VyKiwgRXhlY1N0YXRlKiwgSlNPYmplY3Qq
Kik7CisgICAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShQYXJzZXJFcnJvciYpOwogCiBw
cml2YXRlOgogICAgIHN0cnVjdCBBbGxvd0luT3ZlcnJpZGUgewpAQCAtODkwLDcgKzkzMiw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX2xhc3RUb2tlbkVuZDsKICAgICB9CiAKLSAgICBt
dXRhYmxlIGNvbnN0IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIEpTR2xvYmFsRGF0
YSogbV9nbG9iYWxEYXRhOwogICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOwogICAgIFBh
cnNlckFyZW5hKiBtX2FyZW5hOwogICAgIE93blB0cjxMZXhlclR5cGU+IG1fbGV4ZXI7CkBAIC05
MzUsMTIgKzk3NywxMSBAQCBwcml2YXRlOgogICAgIH07CiB9OwogCisKIHRlbXBsYXRlIDx0eXBl
bmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KLVBhc3NSZWZQdHI8
UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZGVidWdnZXJF
eGVjU3RhdGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQorUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UoUGFyc2VyRXJyb3ImIGVycm9yKQogewotICAgIEFTU0VS
VChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBBU1NFUlQoZXhjZXB0aW9uICYmICEqZXhjZXB0
aW9uKTsKICAgICBpbnQgZXJyTGluZTsKICAgICBTdHJpbmcgZXJyTXNnOwogCkBAIC05NzEsNyAr
MTAxMiw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqCiAgICAgICAgIEpTVG9rZW5Mb2NhdGlv
biBsb2NhdGlvbjsKICAgICAgICAgbG9jYXRpb24ubGluZSA9IG1fbGV4ZXItPmxhc3RMaW5lTnVt
YmVyKCk7CiAgICAgICAgIGxvY2F0aW9uLmNvbHVtbiA9IG1fbGV4ZXItPmN1cnJlbnRDb2x1bW5O
dW1iZXIoKTsKLSAgICAgICAgcmVzdWx0ID0gUGFyc2VkTm9kZTo6Y3JlYXRlKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksCisgICAgICAgIHJlc3VsdCA9IFBhcnNlZE5vZGU6OmNy
ZWF0ZShtX2dsb2JhbERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc291cmNlRWxl
bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhckRlY2xhcmF0
aW9ucyA/ICZtX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsCkBAIC05ODEsNyArMTAyMiw3IEBA
IFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9u
dW1Db25zdGFudHMpOwogICAgICAgICByZXN1bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5l
KCksIG1fbGFzdExpbmUsIG1fbGV4ZXItPmN1cnJlbnRDb2x1bW5OdW1iZXIoKSk7Ci0gICAgfSBl
bHNlIGlmIChsZXhpY2FsR2xvYmFsT2JqZWN0KSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgLy8g
V2UgY2FuIG5ldmVyIHNlZSBhIHN5bnRheCBlcnJvciB3aGVuIHJlcGFyc2luZyBhIGZ1bmN0aW9u
LCBzaW5jZSB3ZSBzaG91bGQgaGF2ZQogICAgICAgICAvLyByZXBvcnRlZCB0aGUgZXJyb3Igd2hl
biBwYXJzaW5nIHRoZSBjb250YWluaW5nIHByb2dyYW0gb3IgZXZhbCBjb2RlLiBTbyBpZiB3ZSdy
ZQogICAgICAgICAvLyBwYXJzaW5nIGEgZnVuY3Rpb24gYm9keSBub2RlLCB3ZSBhc3N1bWUgdGhh
dCB3aGF0IGFjdHVhbGx5IGhhcHBlbmVkIGhlcmUgaXMgdGhhdApAQCAtOTg5LDM1ICsxMDMwLDMx
IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqCiAgICAgICAgIC8vIGNvZGUgd2UgYXNzdW1lIHRo
YXQgaXQgd2FzIGEgc3ludGF4IGVycm9yIHNpbmNlIHJ1bm5pbmcgb3V0IG9mIHN0YWNrIGlzIG11
Y2ggbGVzcwogICAgICAgICAvLyBsaWtlbHksIGFuZCB3ZSBhcmUgY3VycmVudGx5IHVuYWJsZSB0
byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSB0d28gY2FzZXMuCiAgICAgICAgIGlmIChpc0Z1bmN0
aW9uQm9keU5vZGUoc3RhdGljX2Nhc3Q8UGFyc2VkTm9kZSo+KDApKSB8fCBtX2hhc1N0YWNrT3Zl
cmZsb3cpCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICAgICAgZXJyb3IgPSBQYXJzZXJFcnJvcjo6
U3RhY2tPdmVyZmxvdzsKICAgICAgICAgZWxzZSBpZiAoaXNFdmFsTm9kZTxQYXJzZWROb2RlPigp
KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN5bnRheEVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIGVyck1zZyk7CisgICAgICAgICAgICBlcnJvciA9IFBhcnNlckVycm9yKFBhcnNl
ckVycm9yOjpFdmFsRXJyb3IsIGVyck1zZywgZXJyTGluZSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICpleGNlcHRpb24gPSBhZGRFcnJvckluZm8obGV4aWNhbEdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpLCBjcmVhdGVTeW50YXhFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBlcnJNc2cp
LCBlcnJMaW5lLCAqbV9zb3VyY2UpOworICAgICAgICAgICAgZXJyb3IgPSBQYXJzZXJFcnJvcihQ
YXJzZXJFcnJvcjo6U3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSk7CiAgICAgfQogCi0gICAg
aWYgKGRlYnVnZ2VyICYmICFQYXJzZWROb2RlOjpzY29wZUlzRnVuY3Rpb24pCi0gICAgICAgIGRl
YnVnZ2VyLT5zb3VyY2VQYXJzZWQoZGVidWdnZXJFeGVjU3RhdGUsIG1fc291cmNlLT5wcm92aWRl
cigpLCBlcnJMaW5lLCBlcnJNc2cpOwotCiAgICAgbV9hcmVuYS0+cmVzZXQoKTsKIAogICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4K
LVBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIG5h
bWUsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgRGVidWdnZXIqIGRlYnVnZ2VyLCBFeGVjU3RhdGUqIGV4ZWNTdGF0ZSwgSlNPYmplY3QqKiBl
eGNlcHRpb24pCitQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJp
Y3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQogewog
ICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJQYXJzaW5nIik7CiAKICAgICBBU1NF
UlQoIXNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2UoKS5pc051bGwoKSk7Ci0KICAgICBpZiAoc291
cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlzOEJpdCgpKSB7CiAgICAgICAgIFBhcnNlcjwgTGV4
ZXI8TENoYXI+ID4gcGFyc2VyKGdsb2JhbERhdGEsIHNvdXJjZSwgcGFyYW1ldGVycywgbmFtZSwg
c3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7Ci0gICAgICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFy
c2VkTm9kZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgZGVidWdnZXIsIGV4ZWNTdGF0ZSwgZXhjZXB0
aW9uKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvcik7CiAg
ICAgfQogICAgIFBhcnNlcjwgTGV4ZXI8VUNoYXI+ID4gcGFyc2VyKGdsb2JhbERhdGEsIHNvdXJj
ZSwgcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7Ci0gICAgcmV0dXJu
IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBkZWJ1Z2dlciwg
ZXhlY1N0YXRlLCBleGNlcHRpb24pOworICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9k
ZT4oZXJyb3IpOwogfQogCi19IC8vIG5hbWVzcGFjZSAKK30gLy8gbmFtZXNwYWNlCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
MWZiN2ZkZjkwZGE1ZDVkYzUwYjk1Y2QzZjJjNjRkNDE2MmMyMGMzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgUGFyc2VyTW9kZXNfaAorI2RlZmluZSBQYXJz
ZXJNb2Rlc19oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIEpTUGFyc2VyU3RyaWN0bmVzcyB7
IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VTdHJpY3QgfTsKK2VudW0gSlNQYXJzZXJNb2RlIHsgSlNQ
YXJzZVByb2dyYW1Db2RlLCBKU1BhcnNlRnVuY3Rpb25Db2RlIH07CisKK2VudW0gUHJvZmlsZXJN
b2RlIHsgUHJvZmlsZXJPZmYsIFByb2ZpbGVyT24gfTsKK2VudW0gRGVidWdnZXJNb2RlIHsgRGVi
dWdnZXJPZmYsIERlYnVnZ2VyT24gfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCmluZGV4IDZlNmNlYzExNGQ0NDVlMzc4NjVmZWM4
YzM5MWRmNWI1MWRlYzUxN2EuLjE0MTkxYjk1ZDdkM2I1YmNjMDQxYjExOTc1ZWI1NTE1NmNkZGM3
ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5z
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaApAQCAt
MjYsNiArMjYsOCBAQAogI2lmbmRlZiBQYXJzZXJUb2tlbnNfaAogI2RlZmluZSBQYXJzZXJUb2tl
bnNfaAogCisjaW5jbHVkZSAiUGFyc2VyTW9kZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIElkZW50aWZpZXI7CkBAIC0xNjEsOSArMTYzLDYgQEAgc3RydWN0IEpTVG9rZW4gewogICAg
IEpTVG9rZW5Mb2NhdGlvbiBtX2xvY2F0aW9uOwogfTsKIAotZW51bSBKU1BhcnNlclN0cmljdG5l
c3MgeyBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlU3RyaWN0IH07Ci1lbnVtIEpTUGFyc2VyTW9kZSB7
IEpTUGFyc2VQcm9ncmFtQ29kZSwgSlNQYXJzZUZ1bmN0aW9uQ29kZSB9OwotICAgIAogfQogCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKaW5kZXggN2M4YjY5YmQx
MjQ1MWFjMWI2Njc2MGZmZGM2YjcxZmRiZmU1NWMyZi4uNzk2MWQ0YmM4MzJkYjEzZDNlYmY4Zjhj
ZDJiZTBhMzZhMzk5YzY1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmgKQEAgLTI2Nyw4ICsyNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbV9vdmVy
cm9kZUNhbGxlZSA9IGZhbHNlOwogICAgICAgICBtX292ZXJyb2RlQ2FsbGVyID0gZmFsc2U7CiAg
ICAgICAgIG1faXNTdHJpY3RNb2RlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGlubGlu
ZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmlzU3RyaWN0TW9kZSgpOwotCi0gICAgICAg
IEFTU0VSVCghanNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhl
Y3V0YWJsZS5nZXQoKSktPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSk7CisgICAgICAg
IEFTU0VSVCghanNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhl
Y3V0YWJsZS5nZXQoKSktPnN5bWJvbFRhYmxlKGlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29k
ZUZvckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0KS0+c2xvd0FyZ3VtZW50cygpKTsKIAogICAgICAg
ICAvLyBUaGUgYnl0ZWNvZGUgZ2VuZXJhdG9yIG9taXRzIG9wX3RlYXJfb2ZmX2FjdGl2YXRpb24g
aW4gY2FzZXMgb2Ygbm8KICAgICAgICAgLy8gZGVjbGFyZWQgcGFyYW1ldGVycywgc28gd2UgbmVl
ZCB0byB0ZWFyIG9mZiBpbW1lZGlhdGVseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db2RlQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjNzhmZDNkNjFiMGRmMTMyNDQwOGU3MzljMzY1
M2IwNDdmZjM2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db2RlQ2FjaGUuY3BwCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiQ29kZUNhY2hlLmgiCisKKyNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1
ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKKyNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNs
dWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK0NvZGVDYWNoZTo6Q29kZUNhY2hlKCkKKyAgICA6IG1fcmFuZG9t
R2VuZXJhdG9yKHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5kb21OdW1iZXIoKSAqIFVJTlQzMl9N
QVgpKQoreworfQorCitDb2RlQ2FjaGU6On5Db2RlQ2FjaGUoKQoreworfQorCitDb2RlQ2FjaGU6
OkNvZGVCbG9ja0tleSBDb2RlQ2FjaGU6Om1ha2VDb2RlQmxvY2tLZXkoY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBDb2RlQ2FjaGU6OkNvZGVUeXBlIHR5cGUsIEpTUGFyc2VyU3RyaWN0bmVzcyBz
dHJpY3RuZXNzKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzb3VyY2UudG9TdHJpbmco
KSwgKHR5cGUgPDwgMSkgfCBzdHJpY3RuZXNzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDYWNoZVR5cGVzIHsgfTsKKwordGVtcGxhdGUgPD4gc3RydWN0IENhY2hlVHlwZXM8
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAgdHlwZWRlZiBKU0M6OlByb2dyYW1Ob2Rl
IFJvb3ROb2RlOworICAgIHN0YXRpYyBjb25zdCBDb2RlQ2FjaGU6OkNvZGVUeXBlIGNvZGVUeXBl
ID0gQ29kZUNhY2hlOjpQcm9ncmFtVHlwZTsKK307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBDYWNo
ZVR5cGVzPFVubGlua2VkRXZhbENvZGVCbG9jaz4geworICAgIHR5cGVkZWYgSlNDOjpFdmFsTm9k
ZSBSb290Tm9kZTsKKyAgICBzdGF0aWMgY29uc3QgQ29kZUNhY2hlOjpDb2RlVHlwZSBjb2RlVHlw
ZSA9IENvZGVDYWNoZTo6RXZhbFR5cGU7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRD
b2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4KK1VubGlua2VkQ29kZUJsb2NrVHlw
ZSogQ29kZUNhY2hlOjpnZXRDb2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlVHlwZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNl
clN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmls
ZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQoreworICAgIENvZGVCbG9j
a0tleSBrZXkgPSBtYWtlQ29kZUJsb2NrS2V5KHNvdXJjZSwgQ2FjaGVUeXBlczxVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+Ojpjb2RlVHlwZSwgc3RyaWN0bmVzcyk7CisgICAgYm9vbCBzdG9yZUluQ2Fj
aGUgPSBmYWxzZTsKKyAgICBpZiAoZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT2ZmICYmIHByb2Zp
bGVyTW9kZSA9PSBQcm9maWxlck9mZikgeworICAgICAgICBDb2RlQmxvY2tJbmRpY2VzTWFwOjpp
dGVyYXRvciByZXN1bHQgPSBtX2NhY2hlZENvZGVCbG9ja0luZGljZXMuZmluZChrZXkpOworICAg
ICAgICBpZiAocmVzdWx0ICE9IG1fY2FjaGVkQ29kZUJsb2NrSW5kaWNlcy5lbmQoKSkgeworICAg
ICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGUgPSBqc0Nhc3Q8VW5s
aW5rZWRDb2RlQmxvY2tUeXBlKj4obV9jYWNoZWRDb2RlQmxvY2tzW3Jlc3VsdC0+dmFsdWVdLnNl
Y29uZC5nZXQoKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBzb3VyY2UuZmly
c3RMaW5lKCkgKyB1bmxpbmtlZENvZGUtPmZpcnN0TGluZSgpOworICAgICAgICAgICAgZXhlY3V0
YWJsZS0+cmVjb3JkUGFyc2UodW5saW5rZWRDb2RlLT5jb2RlRmVhdHVyZXMoKSwgdW5saW5rZWRD
b2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIHVubGlu
a2VkQ29kZS0+bGluZUNvdW50KCkpOworICAgICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZTsK
KyAgICAgICAgfQorICAgICAgICBzdG9yZUluQ2FjaGUgPSB0cnVlOworICAgIH0KKworICAgIHR5
cGVkZWYgdHlwZW5hbWUgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+OjpSb290Tm9k
ZSBSb290Tm9kZTsKKyAgICBSZWZQdHI8Um9vdE5vZGU+IHJvb3ROb2RlID0gcGFyc2U8Um9vdE5v
ZGU+KCZnbG9iYWxEYXRhLCBzb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgc3RyaWN0bmVzcywgSlNQ
YXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CisgICAgaWYgKCFyb290Tm9kZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1
cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCByb290Tm9kZS0+bGluZU5v
KCksIHJvb3ROb2RlLT5sYXN0TGluZSgpKTsKKworICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
dW5saW5rZWRDb2RlID0gVW5saW5rZWRDb2RlQmxvY2tUeXBlOjpjcmVhdGUoJmdsb2JhbERhdGEs
IGV4ZWN1dGFibGUtPmV4ZWN1dGFibGVJbmZvKCkpOworICAgIHVubGlua2VkQ29kZS0+cmVjb3Jk
UGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpLCByb290Tm9kZS0+bGluZU5vKCkgLSBzb3VyY2UuZmlyc3RMaW5lKCksIHJvb3ROb2RlLT5s
YXN0TGluZSgpIC0gcm9vdE5vZGUtPmxpbmVObygpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5l
cmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZ2xvYmFsRGF0
YSwgcm9vdE5vZGUuZ2V0KCksIHVubGlua2VkQ29kZSwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1v
ZGUpKSk7CisgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CisgICAgcm9vdE5vZGUt
PmRlc3Ryb3lEYXRhKCk7CisgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJy
b3JOb25lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChzdG9yZUluQ2FjaGUp
IHsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9yYW5kb21HZW5lcmF0b3IuZ2V0VWludDMyKCkg
JSBrTWF4Q29kZUJsb2NrRW50cmllczsKKyAgICAgICAgaWYgKG1fY2FjaGVkQ29kZUJsb2Nrc1tp
bmRleF0uc2Vjb25kKQorICAgICAgICAgICAgbV9jYWNoZWRDb2RlQmxvY2tJbmRpY2VzLnJlbW92
ZShtX2NhY2hlZENvZGVCbG9ja3NbaW5kZXhdLmZpcnN0KTsKKyAgICAgICAgbV9jYWNoZWRDb2Rl
QmxvY2tJbmRpY2VzLnNldChrZXksIGluZGV4KTsKKyAgICAgICAgbV9jYWNoZWRDb2RlQmxvY2tz
W2luZGV4XS5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHVubGlua2VkQ29kZSk7CisgICAgICAgIG1f
Y2FjaGVkQ29kZUJsb2Nrc1tpbmRleF0uZmlyc3QgPSBrZXk7CisgICAgfQorCisgICAgcmV0dXJu
IHVubGlua2VkQ29kZTsKK30KKworVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBDb2RlQ2FjaGU6
OmdldFByb2dyYW1Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9ncmFtRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0
cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJN
b2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQoreworICAgIHJldHVybiBnZXRD
b2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihnbG9iYWxEYXRhLCBleGVjdXRhYmxl
LCBzb3VyY2UsIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7
Cit9CisKK1VubGlua2VkRXZhbENvZGVCbG9jayogQ29kZUNhY2hlOjpnZXRFdmFsQ29kZUJsb2Nr
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIERl
YnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNl
ckVycm9yJiBlcnJvcikKK3sKKyAgICByZXR1cm4gZ2V0Q29kZUJsb2NrPFVubGlua2VkRXZhbENv
ZGVCbG9jaz4oZ2xvYmFsRGF0YSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RuZXNzLCBkZWJ1
Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworfQorCitVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrKiBDb2RlQ2FjaGU6OmdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2soSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIERlYnVn
Z2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVy
cm9yJiBlcnJvcikKK3sKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IHBhcnNl
PEZ1bmN0aW9uQm9keU5vZGU+KCZnbG9iYWxEYXRhLCBzb3VyY2UsIGV4ZWN1dGFibGUtPnBhcmFt
ZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4
dCgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VGdW5jdGlvbkNvZGUs
IGVycm9yKTsKKworICAgIGlmICghYm9keSkgeworICAgICAgICBBU1NFUlQoZXJyb3IubV90eXBl
ICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBpZiAoZXhlY3V0YWJsZS0+Zm9yY2VVc2VzQXJndW1lbnRzKCkpCisgICAgICAg
IGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsKKyAgICBib2R5LT5maW5pc2hQYXJzaW5nKGV4ZWN1
dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5mdW5j
dGlvbk5hbWVJc0luU2NvcGVUb2dnbGUoKSk7CisgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2Uo
Ym9keS0+ZmVhdHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+bGlu
ZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOworICAgIAorICAgIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSgmZ2xvYmFs
RGF0YSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhib2R5LT5uZWVkc0FjdGl2YXRpb24o
KSwgYm9keS0+dXNlc0V2YWwoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGtpbmQgPT0gQ29kZUZv
ckNvbnN0cnVjdCkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFk
b3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihnbG9iYWxEYXRhLCBib2R5LmdldCgpLCByZXN1
bHQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlKSkpOworICAgIGVycm9yID0gZ2VuZXJhdG9y
LT5nZW5lcmF0ZSgpOworICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CisgICAgaWYgKGVycm9yLm1f
dHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBDb2Rl
Q2FjaGU6OmdldEZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJN
b2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCit7Cisg
ICAgcmV0dXJuIGdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgZXhlY3V0YWJs
ZSwgc291cmNlLCBraW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworfQor
CitDb2RlQ2FjaGU6Okdsb2JhbEZ1bmN0aW9uS2V5IENvZGVDYWNoZTo6bWFrZUdsb2JhbEZ1bmN0
aW9uS2V5KGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIHJldHVybiBHbG9iYWxGdW5jdGlvbktleShzb3VyY2UudG9TdHJpbmcoKSwgbmFtZSk7Cit9
CisKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9uRXhl
Y3V0YWJsZUZyb21HbG9iYWxDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRl
bnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJy
b3IpCit7CisgICAgR2xvYmFsRnVuY3Rpb25LZXkga2V5ID0gbWFrZUdsb2JhbEZ1bmN0aW9uS2V5
KHNvdXJjZSwgbmFtZS5zdHJpbmcoKSk7CisgICAgR2xvYmFsRnVuY3Rpb25JbmRpY2VzTWFwOjpp
dGVyYXRvciByZXN1bHQgPSBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5maW5kKGtleSk7
CisgICAgaWYgKHJlc3VsdCAhPSBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25zW3Jlc3VsdC0+dmFsdWVdLnNl
Y29uZC5nZXQoKTsKKworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9IHBhcnNlPFBy
b2dyYW1Ob2RlPigmZ2xvYmFsRGF0YSwgc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VO
b3JtYWwsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOworICAgIGlmICghcHJvZ3JhbSkgewor
ICAgICAgICBBU1NFUlQoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGFz
c3VtZXMgYW4gaW5wdXQgc3RyaW5nIHRoYXQgd291bGQgcmVzdWx0IGluIGEgc2luZ2xlIGFub255
bW91cyBmdW5jdGlvbiBleHByZXNzaW9uLgorICAgIFN0YXRlbWVudE5vZGUqIGV4cHJTdGF0ZW1l
bnQgPSBwcm9ncmFtLT5zaW5nbGVTdGF0ZW1lbnQoKTsKKyAgICBBU1NFUlQoZXhwclN0YXRlbWVu
dCk7CisgICAgQVNTRVJUKGV4cHJTdGF0ZW1lbnQtPmlzRXhwclN0YXRlbWVudCgpKTsKKyAgICBF
eHByZXNzaW9uTm9kZSogZnVuY0V4cHIgPSBzdGF0aWNfY2FzdDxFeHByU3RhdGVtZW50Tm9kZSo+
KGV4cHJTdGF0ZW1lbnQpLT5leHByKCk7CisgICAgQVNTRVJUKGZ1bmNFeHByKTsKKyAgICBBU1NF
UlQoZnVuY0V4cHItPmlzRnVuY0V4cHJOb2RlKCkpOworICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJv
ZHkgPSBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihmdW5jRXhwciktPmJvZHkoKTsKKyAgICBB
U1NFUlQoYm9keSk7CisgICAgQVNTRVJUKGJvZHktPmlkZW50KCkuaXNOdWxsKCkpOworCisgICAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoJmdsb2JhbERhdGEsIHNvdXJjZSwgYm9keSk7Cisg
ICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQoZ2xvYmFsRGF0YSwgZnVuY3Rp
b25FeGVjdXRhYmxlLCBqc1N0cmluZygmZ2xvYmFsRGF0YSwgbmFtZS5zdHJpbmcoKSkpOworCisg
ICAgc2l6ZV90IGluZGV4ID0gbV9yYW5kb21HZW5lcmF0b3IuZ2V0VWludDMyKCkgJSBrTWF4R2xv
YmFsRnVuY3Rpb25FbnRyaWVzOworICAgIGlmIChtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uc1tpbmRl
eF0uc2Vjb25kKQorICAgICAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5yZW1vdmUo
bV9jYWNoZWRHbG9iYWxGdW5jdGlvbnNbaW5kZXhdLmZpcnN0KTsKKyAgICBtX2NhY2hlZEdsb2Jh
bEZ1bmN0aW9uSW5kaWNlcy5zZXQoa2V5LCBpbmRleCk7CisgICAgbV9jYWNoZWRHbG9iYWxGdW5j
dGlvbnNbaW5kZXhdLnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgZnVuY3Rpb25FeGVjdXRhYmxlKTsK
KyAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uc1tpbmRleF0uZmlyc3QgPSBrZXk7CisKKyAgICBy
ZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvZGVDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkNDYxNzE4OWVjNGU2ODk0NzYxNzEyMWUy
YTg2ZjA5M2M5ZmRjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb2RlQ2FjaGVfaAorI2RlZmluZSBD
b2RlQ2FjaGVfaAorCisjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1
ZGUgIlBhcnNlck1vZGVzLmgiCisjaW5jbHVkZSAiU3Ryb25nLmgiCisjaW5jbHVkZSAiV2Vha1Jh
bmRvbS5oIgorCisjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFdmFsRXhlY3V0YWJsZTsK
K2NsYXNzIElkZW50aWZpZXI7CitjbGFzcyBQcm9ncmFtRXhlY3V0YWJsZTsKK2NsYXNzIFVubGlu
a2VkQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOworY2xhc3MgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jazsKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwor
Y2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOworY2xhc3MgSlNHbG9iYWxEYXRhOworc3Ry
dWN0IFBhcnNlckVycm9yOworY2xhc3MgU291cmNlQ29kZTsKK2NsYXNzIFNvdXJjZVByb3ZpZGVy
OworCitjbGFzcyBDb2RlQ2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENv
ZGVDYWNoZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENvZGVDYWNoZSk7IH0KKwor
ICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogZ2V0UHJvZ3JhbUNvZGVCbG9jayhKU0dsb2Jh
bERhdGEmLCBQcm9ncmFtRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0
cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAg
IFVubGlua2VkRXZhbENvZGVCbG9jayogZ2V0RXZhbENvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBF
dmFsRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAgIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2sqIGdldEZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBnZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xv
YmFsQ29kZShKU0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29k
ZSYsIFBhcnNlckVycm9yJik7CisgICAgfkNvZGVDYWNoZSgpOworCisgICAgZW51bSBDb2RlVHlw
ZSB7IEV2YWxUeXBlLCBQcm9ncmFtVHlwZSwgRnVuY3Rpb25UeXBlIH07CisgICAgdHlwZWRlZiBz
dGQ6OnBhaXI8U3RyaW5nLCB1bnNpZ25lZD4gQ29kZUJsb2NrS2V5OworICAgIHR5cGVkZWYgSGFz
aE1hcDxDb2RlQmxvY2tLZXksIHVuc2lnbmVkPiBDb2RlQmxvY2tJbmRpY2VzTWFwOworICAgIHR5
cGVkZWYgc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBHbG9iYWxGdW5jdGlvbktleTsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8R2xvYmFsRnVuY3Rpb25LZXksIHVuc2lnbmVkPiBHbG9iYWxGdW5jdGlv
bkluZGljZXNNYXA7CisKK3ByaXZhdGU6CisgICAgQ29kZUNhY2hlKCk7CisKKyAgICBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0
YSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJv
ciYpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3Mg
RXhlY3V0YWJsZVR5cGU+IGlubGluZSBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdldENvZGVCbG9j
ayhKU0dsb2JhbERhdGEmLCBFeGVjdXRhYmxlVHlwZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1Bh
cnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYp
OworICAgIENvZGVCbG9ja0tleSBtYWtlQ29kZUJsb2NrS2V5KGNvbnN0IFNvdXJjZUNvZGUmLCBD
b2RlVHlwZSwgSlNQYXJzZXJTdHJpY3RuZXNzKTsKKyAgICBDb2RlQmxvY2tJbmRpY2VzTWFwIG1f
Y2FjaGVkQ29kZUJsb2NrSW5kaWNlczsKKyAgICBHbG9iYWxGdW5jdGlvbktleSBtYWtlR2xvYmFs
RnVuY3Rpb25LZXkoY29uc3QgU291cmNlQ29kZSYsIGNvbnN0IFN0cmluZyYpOworICAgIEdsb2Jh
bEZ1bmN0aW9uSW5kaWNlc01hcCBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlczsKKworICAg
IGVudW0geworICAgICAgICBrTWF4Q29kZUJsb2NrRW50cmllcyA9IDEwMjQsCisgICAgICAgIGtN
YXhHbG9iYWxGdW5jdGlvbkVudHJpZXMgPSAxMDI0CisgICAgfTsKKworICAgIEZpeGVkQXJyYXk8
c3RkOjpwYWlyPENvZGVCbG9ja0tleSwgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPiA+LCBrTWF4
Q29kZUJsb2NrRW50cmllcz4gbV9jYWNoZWRDb2RlQmxvY2tzOworICAgIEZpeGVkQXJyYXk8c3Rk
OjpwYWlyPEdsb2JhbEZ1bmN0aW9uS2V5LCBTdHJvbmc8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU+ID4sIGtNYXhHbG9iYWxGdW5jdGlvbkVudHJpZXM+IG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25z
OworICAgIFdlYWtSYW5kb20gbV9yYW5kb21HZW5lcmF0b3I7Cit9OworCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAppbmRleCAwYTQ1
M2VlYTA1NjY4NDBmZTk5ZmJjNTJkNTFkZjBiMjI5YzdmYmQzLi4wYzRjYWJkODRkOTEyYWI5MDNh
YzI3ZTc4ODljYzljNjZhNzA1NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKIAorI2luY2x1ZGUgIkJhdGNoZWRUcmFuc2l0aW9uT3B0
aW1pemVyLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKQEAgLTEzMywxNiArMTM0LDE0IEBAIHZv
aWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogCiBjb25zdCBDbGFz
c0luZm8gRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJGdW5jdGlvbkV4ZWN1dGFibGUi
LCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1
bmN0aW9uRXhlY3V0YWJsZSkgfTsKIAotRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1
dGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQot
ICAgIDogU2NyaXB0RXhlY3V0YWJsZShnbG9iYWxEYXRhLmZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVj
dHVyZS5nZXQoKSwgZ2xvYmFsRGF0YSwgbm9kZS0+c291cmNlKCksIG5vZGUtPmlzU3RyaWN0TW9k
ZSgpKQotICAgICwgbV9mb3JjZVVzZXNBcmd1bWVudHMobm9kZS0+dXNlc0FyZ3VtZW50cygpKQot
ICAgICwgbV9wYXJhbWV0ZXJzKG5vZGUtPnBhcmFtZXRlcnMoKSkKLSAgICAsIG1fbmFtZShub2Rl
LT5pZGVudCgpKQotICAgICwgbV9pbmZlcnJlZE5hbWUobm9kZS0+aW5mZXJyZWROYW1lKCkuaXNO
dWxsKCkgPyBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllciA6IG5vZGUt
PmluZmVycmVkTmFtZSgpKQotICAgICwgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUobm9k
ZS0+ZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlKCkpCitGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1
bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJs
ZSwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSkKKyAgICA6IFNjcmlwdEV4
ZWN1dGFibGUoZ2xvYmFsRGF0YS5mdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGds
b2JhbERhdGEsIHNvdXJjZSwgdW5saW5rZWRFeGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgp
KQorICAgICwgbV91bmxpbmtlZEV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgdGhpcywgdW5saW5rZWRF
eGVjdXRhYmxlKQogewotICAgIG1fZmlyc3RMaW5lID0gbm9kZS0+bGluZU5vKCk7Ci0gICAgbV9s
YXN0TGluZSA9IG5vZGUtPmxhc3RMaW5lKCk7CisgICAgQVNTRVJUKCFzb3VyY2UuaXNOdWxsKCkp
OworICAgIEFTU0VSVChzb3VyY2UubGVuZ3RoKCkpOworICAgIG1fZmlyc3RMaW5lID0gZmlyc3RM
aW5lOworICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKIH0KIAogdm9pZCBGdW5jdGlvbkV4ZWN1
dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtMTkxLDcgKzE5MCw2IEBAIEpTT2JqZWN0
KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29w
ZSogc2NvcGUsIEpJVENvCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogICAgIFVOVVNFRF9Q
QVJBTShieXRlY29kZUluZGV4KTsKICNlbmRpZgotICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAw
OwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAg
ICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CiAgICAgCkBAIC0yMDAsMjggKzE5OCwyMSBAQCBKU09iamVjdCogRXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3Bl
LCBKSVRDbwogICAgICAgICBuZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2lu
dGVyX2Nhc3Q8Q29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpKSk7CiAgICAgICAg
IG1fZXZhbENvZGVCbG9jayA9IG5ld0NvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgfSBlbHNlIHsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2Jh
bERhdGEpOworICAgICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
ICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdC0+ZXZhbEVuYWJsZWQoKSkKICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCBsZXhpY2FsR2xv
YmFsT2JqZWN0LT5ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwotICAgICAgICBSZWZQdHI8
RXZhbE5vZGU+IGV2YWxOb2RlID0gcGFyc2U8RXZhbE5vZGU+KGdsb2JhbERhdGEsIGxleGljYWxH
bG9iYWxPYmplY3QsIG1fc291cmNlLCAwLCBJZGVudGlmaWVyKCksIGlzU3RyaWN0TW9kZSgpID8g
SlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEV2YWxOb2RlOjppc0Z1bmN0aW9uTm9kZSA/
IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxP
YmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOwotICAgICAgICBpZiAoIWV2YWxO
b2RlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKKworICAgICAgICBKU09iamVj
dCogZXhjZXB0aW9uID0gMDsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtl
ZEV2YWxDb2RlID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+Y3JlYXRlRXZhbENvZGVCbG9jayhleGVj
LCB0aGlzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKCF1bmxpbmtlZEV2YWxDb2RlKQogICAg
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKLSAgICAgICAgfQotICAgICAgICByZWNvcmRQYXJz
ZShldmFsTm9kZS0+ZmVhdHVyZXMoKSwgZXZhbE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCks
IGV2YWxOb2RlLT5saW5lTm8oKSwgZXZhbE5vZGUtPmxhc3RMaW5lKCkpOwotICAgICAgICAKLSAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3Qo
KTsKLSAgICAgICAgCisKICAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxv
Y2sgPSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpOwogICAgICAgICBBU1NFUlQoKGppdFR5cGUg
PT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOwotICAg
ICAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBn
bG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNjb3BlLT5sb2NhbERlcHRoKCksIHBy
ZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwotICAgICAgICBPd25QdHI8Qnl0ZWNvZGVHZW5l
cmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUu
Z2V0KCksIHNjb3BlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZhbENvZGVC
bG9jay5nZXQoKSwgISFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBPcHRpbWl6aW5n
Q29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uKSkpOwotICAgICAgICBpZiAoKGV4Y2VwdGlv
biA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgICAgIG1fZXZhbENvZGVCbG9j
ayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLT5y
ZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEo
KTsKLSAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0YSgpOworICAgICAgICBtX3VubGlua2VkRXZhbENv
ZGVCbG9jay5zZXQoKmdsb2JhbERhdGEsIHRoaXMsIHVubGlua2VkRXZhbENvZGUpOworICAgICAg
ICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCB1bmxp
bmtlZEV2YWxDb2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBz
Y29wZS0+bG9jYWxEZXB0aCgpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKICAgICAg
ICAgbV9ldmFsQ29kZUJsb2NrLT5jb3B5UG9zdFBhcnNlRGF0YUZyb21BbHRlcm5hdGl2ZSgpOwog
ICAgIH0KIApAQCAtMjU3LDYgKzI0OCw3IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBTY3JpcHRFeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIGlmICh0aGlz
T2JqZWN0LT5tX2V2YWxDb2RlQmxvY2spCiAgICAgICAgIHRoaXNPYmplY3QtPm1fZXZhbENvZGVC
bG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrKTsKIH0KIAogdm9pZCBFdmFsRXhlY3V0YWJs
ZTo6dW5saW5rQ2FsbHMoKQpAQCAtMjcyLDE5ICsyNjQsMjAgQEAgdm9pZCBFdmFsRXhlY3V0YWJs
ZTo6dW5saW5rQ2FsbHMoKQogdm9pZCBFdmFsRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKIHsKICAg
ICBtX2V2YWxDb2RlQmxvY2suY2xlYXIoKTsKKyAgICBtX3VubGlua2VkRXZhbENvZGVCbG9jay5j
bGVhcigpOwogICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCiBKU09iamVjdCogUHJvZ3JhbUV4
ZWN1dGFibGU6OmNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU09iamVjdCog
ZXhjZXB0aW9uID0gMDsKKyAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFJl
ZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4oZ2xvYmFs
RGF0YSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgSlNQ
YXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9u
Q29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgbGV4aWNhbEdsb2JhbE9iamVjdC0+ZGVidWdnZXIo
KSwgZXhlYywgJmV4Y2VwdGlvbik7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9k
ZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9iYWxEYXRhLCBtX3NvdXJjZSwgMCwgSWRlbnRpZmll
cigpLCBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNl
RnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CiAgICAgaWYgKHByb2dy
YW1Ob2RlKQogICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQoZXhjZXB0aW9uKTsKLSAgICBy
ZXR1cm4gZXhjZXB0aW9uOworICAgIEFTU0VSVChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6
OkVycm9yTm9uZSk7CisgICAgcmV0dXJuIGVycm9yLnRvRXJyb3JPYmplY3QobGV4aWNhbEdsb2Jh
bE9iamVjdCwgbV9zb3VyY2UpOwogfQogCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNv
bXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKQEAgLTMxMywzNSArMzA2LDEzIEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhl
Y3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUs
IEpJCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogICAgIFVOVVNFRF9QQVJBTShieXRlY29k
ZUluZGV4KTsKICNlbmRpZgotICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwotICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
Ci0gICAgCiAgICAgaWYgKCEhbV9wcm9ncmFtQ29kZUJsb2NrKSB7CiAgICAgICAgIE93blB0cjxQ
cm9ncmFtQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVC
bG9jayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKm1fcHJvZ3JhbUNvZGVCbG9jaykpOwog
ICAgICAgICBuZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8
Q29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpKSk7CiAgICAgICAgIG1fcHJv
Z3JhbUNvZGVCbG9jayA9IG5ld0NvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2Rl
PihnbG9iYWxEYXRhLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgSWRlbnRpZmll
cigpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBQcm9n
cmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVBy
b2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhjZXB0
aW9uKTsKLSAgICAgICAgaWYgKCFwcm9ncmFtTm9kZSkgewotICAgICAgICAgICAgQVNTRVJUKGV4
Y2VwdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgICAgICB9Ci0gICAg
ICAgIHJlY29yZFBhcnNlKHByb2dyYW1Ob2RlLT5mZWF0dXJlcygpLCBwcm9ncmFtTm9kZS0+aGFz
Q2FwdHVyZWRWYXJpYWJsZXMoKSwgcHJvZ3JhbU5vZGUtPmxpbmVObygpLCBwcm9ncmFtTm9kZS0+
bGFzdExpbmUoKSk7Ci0KICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNj
b3BlLT5nbG9iYWxPYmplY3QoKTsKLSAgICAKLSAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gcHJl
dmlvdXNDb2RlQmxvY2sgPSBtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpOwotICAgICAgICBB
U1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXND
b2RlQmxvY2spOwotICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJv
Z3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnBy
b3ZpZGVyKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwotICAgICAgICBPd25QdHI8
Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0
b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlLCBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCks
IG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgISFtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0
aXZlKCkgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uKSkpOwotICAg
ICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAg
ICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVC
bG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAg
ICAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURhdGEoKTsKLSAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURhdGEoKTsK
KyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1Db2RlQmxv
Y2sodGhpcywgbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suZ2V0KCksIGdsb2JhbE9iamVjdCwg
c291cmNlKCkucHJvdmlkZXIoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwogICAg
ICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmNvcHlQb3N0UGFyc2VEYXRhRnJvbUFsdGVybmF0aXZl
KCk7CiAgICAgfQogCkBAIC0zNzgsNiArMzQ5LDY3IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6
OnVubGlua0NhbGxzKCkKICNlbmRpZgogfQogCitpbnQgUHJvZ3JhbUV4ZWN1dGFibGU6OmFkZEds
b2JhbFZhcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgRnVuY3Rpb25Nb2RlIGZ1bmN0aW9uTW9k
ZSkKK3sKKyAgICAvLyBUcnkgdG8gc2hhcmUgdGhlIHN5bWJvbFRhYmxlIGlmIHBvc3NpYmxlCisg
ICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xU
YWJsZSgpOworICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk1vZGUpOworICAgIGludCBpbmRleCA9
IHN5bWJvbFRhYmxlLT5zaXplKCk7CisgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRl
eCwgKGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50KSA/IFJlYWRPbmx5IDogMCk7CisgICAgaWYg
KGZ1bmN0aW9uTW9kZSA9PSBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplKQorICAgICAgICBuZXdFbnRy
eS5hdHRlbXB0VG9XYXRjaCgpOworICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0g
c3ltYm9sVGFibGUtPmFkZChpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKKyAgICBpZiAoIXJlc3Vs
dC5pc05ld0VudHJ5KSB7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm90aWZ5V3Jp
dGUoKTsKKyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCk7
CisgICAgfQorICAgIHJldHVybiBpbmRleDsKK30KKworSlNPYmplY3QqIFByb2dyYW1FeGVjdXRh
YmxlOjppbml0YWxpemVHbG9iYWxQcm9wZXJ0aWVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2NvcGUqIHNjb3BlKQoreworICAgIEFTU0VSVChzY29w
ZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoJmdsb2JhbE9iamVj
dC0+Z2xvYmFsRGF0YSgpID09ICZnbG9iYWxEYXRhKTsKKworICAgIEpTT2JqZWN0KiBleGNlcHRp
b24gPSAwOworICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlID0gZ2xv
YmFsT2JqZWN0LT5jcmVhdGVQcm9ncmFtQ29kZUJsb2NrKGNhbGxGcmFtZSwgdGhpcywgJmV4Y2Vw
dGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKwor
ICAgIG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxEYXRhLCB0aGlzLCB1bmxp
bmtlZENvZGUpOworCisgICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCk7CisKKyAgICBjb25zdCBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2s6OlZhcmlhYmxlRGVjbGF0aW9ucyYgdmFyaWFibGVEZWNsYXJhdGlvbnMgPSB1bmxpbmtl
ZENvZGUtPnZhcmlhYmxlRGVjbGFyYXRpb25zKCk7CisgICAgY29uc3QgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrOjpGdW5jdGlvbkRlY2xhdGlvbnMmIGZ1bmN0aW9uRGVjbGFyYXRpb25zID0gdW5s
aW5rZWRDb2RlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpOworCisgICAgc2l6ZV90IG5ld0dsb2Jh
bHMgPSB2YXJpYWJsZURlY2xhcmF0aW9ucy5zaXplKCkgKyBmdW5jdGlvbkRlY2xhcmF0aW9ucy5z
aXplKCk7CisgICAgaWYgKCFuZXdHbG9iYWxzKQorICAgICAgICByZXR1cm4gMDsKKyAgICBnbG9i
YWxPYmplY3QtPmFkZFJlZ2lzdGVycyhuZXdHbG9iYWxzKTsKKyAgICBDYWxsRnJhbWUqIGdsb2Jh
bEV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZnVuY3Rpb25EZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9v
bCBwcm9wZXJ0eURpZEV4aXN0ID0gZ2xvYmFsT2JqZWN0LT5yZW1vdmVEaXJlY3QoZ2xvYmFsRGF0
YSwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uZmlyc3QpOyAvLyBOZXdseSBkZWNsYXJlZCBmdW5j
dGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCisgICAgICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSA9IGZ1bmN0aW9uRGVj
bGFyYXRpb25zW2ldLnNlY29uZC5nZXQoKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTRnVu
Y3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjLCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+bGlu
ayhnbG9iYWxEYXRhLCBtX3NvdXJjZSwgbGluZU5vKCksIDApLCBzY29wZSk7CisgICAgICAgIGlu
dCBpbmRleCA9IGFkZEdsb2JhbFZhcihnbG9iYWxPYmplY3QsIGZ1bmN0aW9uRGVjbGFyYXRpb25z
W2ldLmZpcnN0LCBJc1ZhcmlhYmxlLAorICAgICAgICAgICAgIXByb3BlcnR5RGlkRXhpc3QgPyBJ
c0Z1bmN0aW9uVG9TcGVjaWFsaXplIDogTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUpOwor
ICAgICAgICBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoaW5kZXgpLnNldChnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHZhcmlhYmxlRGVjbGFyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChnbG9iYWxP
YmplY3QtPmhhc1Byb3BlcnR5KGdsb2JhbEV4ZWMsIHZhcmlhYmxlRGVjbGFyYXRpb25zW2ldLmZp
cnN0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhZGRHbG9iYWxWYXIoZ2xvYmFs
T2JqZWN0LCB2YXJpYWJsZURlY2xhcmF0aW9uc1tpXS5maXJzdCwKKyAgICAgICAgICAgICh2YXJp
YWJsZURlY2xhcmF0aW9uc1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFu
dCkgPyBJc0NvbnN0YW50IDogSXNWYXJpYWJsZSwKKyAgICAgICAgICAgIE5vdEZ1bmN0aW9uT3JO
b3RTcGVjaWFsaXphYmxlKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgUHJvZ3Jh
bUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9n
cmFtRXhlY3V0YWJsZSo+KGNlbGwpOwpAQCAtMzg1LDYgKzQxNyw3IEBAIHZvaWQgUHJvZ3JhbUV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFT
U0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENo
aWxkcmVuKCkpOwogICAgIFNjcmlwdEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9wcm9ncmFtQ29kZUJsb2Nr
KQogICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2RlQmxvY2stPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOwogfQpAQCAtMzkyLDYgKzQyNSw3IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHZvaWQg
UHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiB7CiAgICAgbV9wcm9ncmFtQ29kZUJsb2Nr
LmNsZWFyKCk7CisgICAgbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKICAgICBC
YXNlOjpjbGVhckNvZGUoKTsKIH0KIApAQCAtNDM4LDEyICs0NzIsMTIgQEAgSlNPYmplY3QqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUq
IGV4ZWMsIEpTU2MKICNpZiBFTkFCTEUoSklUKQogYm9vbCBGdW5jdGlvbkV4ZWN1dGFibGU6Ompp
dENvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gaml0Q29tcGls
ZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwsIG1faml0Q29k
ZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgbV9zeW1ib2xUYWJsZSwg
SklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKKyAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBtX2Nv
ZGVCbG9ja0ZvckNhbGwsIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJp
dHlDaGVjaywgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKIH0KIAogYm9vbCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JD
b25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rp
b25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVG
b3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBtX3N5bWJv
bFRhYmxlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4
ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0
Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCks
IFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogfQogI2VuZGlmCiAKQEAgLTQ1Miw0
OSArNDg2LDMwIEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvZGVC
bG9ja1dpdGhCeXRlY29kZUZvcihDb2RlU3BlY2lhbGl6YXRpCiAgICAgcmV0dXJuIGJhc2VsaW5l
Q29kZUJsb2NrRm9yKGtpbmQpOwogfQogCi1QYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBG
dW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoSlNTY29wZSogc2NvcGUsIENv
bXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3Bl
Y2lhbGl6YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbikKK1Bhc3NPd25QdHI8RnVuY3Rp
b25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihKU1Nj
b3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpT
T2JqZWN0KiYgZXhjZXB0aW9uKQogewogICAgIGlmICghIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXph
dGlvbktpbmQpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2Nr
KENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9u
S2luZCkpKTsKLSAgICAKLSAgICBleGNlcHRpb24gPSAwOworCiAgICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gc2NvcGUtPmdsb2JhbERhdGEoKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwotICAgIFJlZlB0cjxGdW5jdGlvbkJv
ZHlOb2RlPiBib2R5ID0gcGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oCi0gICAgICAgIGdsb2JhbERh
dGEsCi0gICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgbV9zb3VyY2UsCi0gICAgICAgIG1f
cGFyYW1ldGVycy5nZXQoKSwKLSAgICAgICAgbmFtZSgpLAotICAgICAgICBpc1N0cmljdE1vZGUo
KSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLAotICAgICAgICBGdW5jdGlvbkJvZHlO
b2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3Jh
bUNvZGUsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgICZleGNlcHRpb24KLSAgICAp
OwotCi0gICAgaWYgKCFib2R5KSB7Ci0gICAgICAgIEFTU0VSVChleGNlcHRpb24pOworICAgIFBh
cnNlckVycm9yIGVycm9yOworICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBnbG9iYWxP
YmplY3QtPmhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CisgICAgUHJv
ZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzUHJvZmlsZXIoKSA/IFBy
b2ZpbGVyT24gOiBQcm9maWxlck9mZjsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1
bmxpbmtlZENvZGVCbG9jayA9IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3IoKmds
b2JhbERhdGEsIG1fc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2VyTW9kZSwgcHJv
ZmlsZXJNb2RlLCBlcnJvcik7CisgICAgcmVjb3JkUGFyc2UobV91bmxpbmtlZEV4ZWN1dGFibGUt
PmZlYXR1cmVzKCksIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygp
LCBsaW5lTm8oKSwgbGFzdExpbmUoKSk7CisKKyAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKSB7
CisgICAgICAgIGV4Y2VwdGlvbiA9IGVycm9yLnRvRXJyb3JPYmplY3QoZ2xvYmFsT2JqZWN0LCBt
X3NvdXJjZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBpZiAobV9mb3Jj
ZVVzZXNBcmd1bWVudHMpCi0gICAgICAgIGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsKLSAgICBi
b2R5LT5maW5pc2hQYXJzaW5nKG1fcGFyYW1ldGVycywgbV9uYW1lLCBtX2Z1bmN0aW9uTmFtZUlz
SW5TY29wZVRvZ2dsZSk7Ci0gICAgcmVjb3JkUGFyc2UoYm9keS0+ZmVhdHVyZXMoKSwgYm9keS0+
aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkp
OwotCi0gICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQ7Ci0gICAgQVNTRVJUKChj
b21waWxhdGlvbktpbmQgPT0gRmlyc3RDb21waWxhdGlvbikgPT0gIWNvZGVCbG9ja0ZvcihzcGVj
aWFsaXphdGlvbktpbmQpKTsKLSAgICByZXN1bHQgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2Rl
QmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVy
KCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9y
Q29uc3RydWN0KSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRv
cHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlLCByZXN1bHQtPnN5
bWJvbFRhYmxlKCksIHJlc3VsdC5nZXQoKSwgY29tcGlsYXRpb25LaW5kKSkpOwotICAgIGV4Y2Vw
dGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKLSAgICBib2R5LT5kZXN0cm95RGF0YSgpOwot
ICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgT3duUHRy
PEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxv
Y2sodGhpcywgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlk
ZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSkpOwogICAgIHJlc3VsdC0+Y29weVBvc3RQYXJz
ZURhdGFGcm9tKGNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpLmdldCgpKTsKICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAorCiBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2Nv
cGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsK
ICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihzYW1wbGluZ0Rlc2NyaXB0aW9uKGpp
dFR5cGUpKTsKQEAgLTUwNyw3ICs1MjIsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogcwogI2Vu
ZGlmCiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0g
IW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25Q
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Io
c2NvcGUsICEhbV9jb2RlQmxvY2tGb3JDYWxsID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmly
c3RDb21waWxhdGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CisgICAgT3duUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJsb2NrRm9yKHNjb3BlLCBD
b2RlRm9yQ2FsbCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbjsKIApAQCAtNTE2LDEwICs1MzEsOSBAQCBKU09iamVjdCogRnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNT
Y29wZSogcwogICAgIAogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBtX2NvZGVCbG9ja0Zv
ckNhbGwtPm51bVBhcmFtZXRlcnMoKTsKICAgICBBU1NFUlQobV9udW1QYXJhbWV0ZXJzRm9yQ2Fs
bCk7Ci0gICAgbV9zeW1ib2xUYWJsZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Nv
ZGVCbG9ja0ZvckNhbGwtPnN5bWJvbFRhYmxlKCkpOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBp
ZiAoIXByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGws
IG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgbV9zeW1i
b2xUYWJsZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNhbGwpKQorICAgIGlmICgh
cHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9q
aXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBi
eXRlY29kZUluZGV4LCBDb2RlRm9yQ2FsbCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAK
QEAgLTU0NCw3ICs1NTgsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
Rm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1NjbwogICAgIAogICAgIEFT
U0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25QdHI8RnVu
Y3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUs
ICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJz
dENvbXBpbGF0aW9uLCBDb2RlRm9yQ29uc3RydWN0LCBleGNlcHRpb24pOworICAgIE93blB0cjxG
dW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29w
ZSwgQ29kZUZvckNvbnN0cnVjdCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykK
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIApAQCAtNTUzLDEwICs1NjcsOSBAQCBKU09iamVj
dCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0
YXRlKiBleGVjLCBKU1NjbwogICAgIAogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgQVNTRVJUKG1f
bnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCk7Ci0gICAgbV9zeW1ib2xUYWJsZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFibGUo
KSk7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0
aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3Qs
IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBqaXRU
eXBlLCBieXRlY29kZUluZGV4LCBDb2RlRm9yQ29uc3RydWN0KSkKKyAgICBpZiAoIXByZXBhcmVG
dW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCwgbV9qaXRD
b2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgaml0
VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNvbnN0cnVjdCkpCiAgICAgICAgIHJldHVybiAw
OwogI2VuZGlmCiAKQEAgLTU5MiwxMiArNjA1LDExIEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAg
Q09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhp
c09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigp
KTsKICAgICBTY3JpcHRFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25hbWVWYWx1ZSk7Ci0gICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogICAgIGlmICh0aGlz
T2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJs
b2NrRm9yQ2FsbC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3Qt
Pm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQogICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRFeGVjdXRhYmxlKTsKIH0KIAogdm9pZCBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCkKQEAgLTYwNyw2ICs2MTksMTMg
QEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCkKICAg
ICBjbGVhckNvZGUoKTsKIH0KIAordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyVW5saW5r
ZWRDb2RlSWZOb3RDb21waWxpbmcoKQoreworICAgIGlmIChpc0NvbXBpbGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNsZWFyQ29kZSgpOworfQorCiB2
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKIHsKICAgICBtX2NvZGVCbG9ja0Zv
ckNhbGwuY2xlYXIoKTsKQEAgLTYzMCwzOSArNjQ5LDE5IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRh
YmxlOjp1bmxpbmtDYWxscygpCiAKIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRh
YmxlOjpmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeGVjU3RhdGUqIGV4
ZWMsIERlYnVnZ2VyKiBkZWJ1Z2dlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU09iamVj
dCoqIGV4Y2VwdGlvbikKIHsKLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+
IHByb2dyYW0gPSBwYXJzZTxQcm9ncmFtTm9kZT4oJmV4ZWMtPmdsb2JhbERhdGEoKSwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIFBy
b2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNl
UHJvZ3JhbUNvZGUsIGRlYnVnZ2VyLCBleGVjLCBleGNlcHRpb24pOwotICAgIGlmICghcHJvZ3Jh
bSkgewotICAgICAgICBBU1NFUlQoKmV4Y2VwdGlvbik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIHVubGlua2VkRnVuY3Rpb24gPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZnJvbUdsb2JhbENvZGUobmFtZSwgZXhlYywgZGVidWdnZXIsIHNvdXJjZSwgZXhjZXB0aW9uKTsK
KyAgICBpZiAoIXVubGlua2VkRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIC8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBhbiBpbnB1dCBzdHJpbmcgdGhhdCB3b3VsZCBy
ZXN1bHQgaW4gYSBzaW5nbGUgYW5vbnltb3VzIGZ1bmN0aW9uIGV4cHJlc3Npb24uCi0gICAgU3Rh
dGVtZW50Tm9kZSogZXhwclN0YXRlbWVudCA9IHByb2dyYW0tPnNpbmdsZVN0YXRlbWVudCgpOwot
ICAgIEFTU0VSVChleHByU3RhdGVtZW50KTsKLSAgICBBU1NFUlQoZXhwclN0YXRlbWVudC0+aXNF
eHByU3RhdGVtZW50KCkpOwotICAgIEV4cHJlc3Npb25Ob2RlKiBmdW5jRXhwciA9IHN0YXRpY19j
YXN0PEV4cHJTdGF0ZW1lbnROb2RlKj4oZXhwclN0YXRlbWVudCktPmV4cHIoKTsKLSAgICBBU1NF
UlQoZnVuY0V4cHIpOwotICAgIEFTU0VSVChmdW5jRXhwci0+aXNGdW5jRXhwck5vZGUoKSk7Ci0g
ICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9IHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGZ1
bmNFeHByKS0+Ym9keSgpOwotICAgIEFTU0VSVChib2R5KTsKLSAgICBBU1NFUlQoYm9keS0+aWRl
bnQoKS5pc051bGwoKSk7Ci0KLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0
YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYm9k
eSk7Ci0gICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGpzU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCks
IG5hbWUuc3RyaW5nKCkpKTsKLSAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOworICAgIHVu
c2lnbmVkIGZpcnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlua2VkRnVuY3Rpb24t
PmZpcnN0TGluZU9mZnNldCgpOworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlLnN0
YXJ0T2Zmc2V0KCkgKyB1bmxpbmtlZEZ1bmN0aW9uLT5zdGFydE9mZnNldCgpOworICAgIHVuc2ln
bmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRnVuY3Rpb24tPnNvdXJjZUxlbmd0aCgpOworICAg
IFNvdXJjZUNvZGUgZnVuY3Rpb25Tb3VyY2Uoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0
LCBzdGFydE9mZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lKTsKKyAgICByZXR1cm4gRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvblNvdXJj
ZSwgdW5saW5rZWRGdW5jdGlvbiwgZmlyc3RMaW5lLCB1bmxpbmtlZEZ1bmN0aW9uLT5saW5lQ291
bnQoKSk7CiB9CiAKIFN0cmluZyBGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtU3RyaW5nKCkgY29u
c3QKIHsKLSAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqbV9wYXJhbWV0ZXJz
OwotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3IgKHNpemVfdCBwb3MgPSAwOyBw
b3MgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytwb3MpIHsKLSAgICAgICAgaWYgKCFidWlsZGVyLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQocGFyYW1ldGVyc1twb3NdLnN0cmluZygpKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFi
bGUtPnBhcmFtU3RyaW5nKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaAppbmRleCA3NmE1MzdkYTMyNGFhYzkyMDNjZDg0ZDA5MWNjOGM5MzJmMmZm
MDM2Li43NGI0YWRkNzVjMzJmMzg2ZDQ0Y2FlMjQ4OGIxOTI0ZGUyYzgwYzc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiTExJbnRDTG9vcC5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiU2Ft
cGxpbmdUb29sLmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM2NCw5ICszNjUsMTkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9mZWF0dXJlcyAmIFN0cmljdE1vZGVGZWF0dXJlOyB9CiAKICAgICAgICAgdm9pZCB1bmxp
bmtDYWxscygpOworCisgICAgICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZmVhdHVyZXM7IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCisgICAgICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1
cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExp
bmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJlczsKKyAgICAg
ICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAg
ICAgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOworICAgICAgICAgICAgbV9sYXN0TGlu
ZSA9IGxhc3RMaW5lOworICAgICAgICB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CkBAIC0z
NzksMTQgKzM5MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIH0KIAotICAg
ICAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0
dXJlZFZhcmlhYmxlcywgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0gICAgICAgICAgICBtX2hhc0NhcHR1
cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRWYXJpYWJsZXM7Ci0gICAgICAgICAgICBtX2ZpcnN0
TGluZSA9IGZpcnN0TGluZTsKLSAgICAgICAgICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKLSAg
ICAgICAgfQotCiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAgICAgICAgIENvZGVGZWF0
dXJlcyBtX2ZlYXR1cmVzOwogICAgICAgICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7CkBA
IC00NDgsNiArNDUxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjbGVhckNv
ZGUoKTsKIAorICAgICAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsg
cmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0
cmljdE1vZGUoKSwgZmFsc2UpOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2Ny
aXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKEV4
ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sKTsKQEAgLTQ1Niw2ICs0NjEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIE93blB0cjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxD
b2RlQmxvY2s7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IG1f
dW5saW5rZWRFdmFsQ29kZUJsb2NrOwogICAgIH07CiAKICAgICBjbGFzcyBQcm9ncmFtRXhlY3V0
YWJsZSA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAgLTQ3MCw2ICs0NzYsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAK
KworICAgICAgICBKU09iamVjdCogaW5pdGFsaXplR2xvYmFsUHJvcGVydGllcyhKU0dsb2JhbERh
dGEmLCBDYWxsRnJhbWUqLCBKU1Njb3BlKik7CisKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZShFeGVjU3RhdGUqIGV4ZWMs
IEpTU2NvcGUqIHNjb3BlKQpAQCAtNTE1LDEzICs1MjQsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAorICAgICAgICBFeGVjdXRhYmxlSW5mbyBleGVj
dXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlv
bigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UpOyB9CisKICAgICBwcml2YXRl
OgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CisKICAg
ICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYpOwog
CisgICAgICAgIGVudW0gQ29uc3RhbnRNb2RlIHsgSXNDb25zdGFudCwgSXNWYXJpYWJsZSB9Owor
ICAgICAgICBlbnVtIEZ1bmN0aW9uTW9kZSB7IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUsIE5vdEZ1
bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlIH07CisgICAgICAgIGludCBhZGRHbG9iYWxWYXIoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBGdW5jdGlvbk1v
ZGUpOworCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNT
Y29wZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01B
WCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBt
X3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICAgICAgT3duUHRyPFByb2dyYW1Db2RlQmxv
Y2s+IG1fcHJvZ3JhbUNvZGVCbG9jazsKICAgICB9OwogCkBAIC01MzEsOSArNTQ4LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIFNjcmlwdEV4ZWN1dGFi
bGUgQmFzZTsKIAotICAgICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQorICAgICAgICBz
dGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1
bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFsRGF0
YS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERhdGEsIG5vZGUpOworICAgICAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBGdW5jdGlvbkV4ZWN1
dGFibGUoZ2xvYmFsRGF0YSwgc291cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwg
bGFzdExpbmUpOwogICAgICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQpAQCAtNTU0
LDcgKzU3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgRnVuY3Rpb25D
b2RlQmxvY2sqIGNvZGVCbG9ja1dpdGhCeXRlY29kZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKICAgICAgICAgCi0gICAgICAgIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1
Y2VDb2RlQmxvY2tGb3IoSlNTY29wZSosIENvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24pOworICAgICAgICBQYXNzT3duUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiBwcm9kdWNlQ29kZUJsb2NrRm9yKEpTU2NvcGUqLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbik7CiAKICAgICAgICAgSlNPYmplY3QqIGNv
bXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCiAgICAgICAgIHsK
QEAgLTY3OSwxNCArNjk2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJuIG1faW5mZXJyZWROYW1lOyB9
Ci0gICAgICAgIEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25hbWVWYWx1
ZS5nZXQoKTsgfQotICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX3BhcmFtZXRlcnMtPnNpemUoKTsgfSAvLyBFeGNsdWRpbmcgJ3RoaXMnIQorICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5h
bWUoKTsgfQorICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSB7IHJldHVy
biBtX3VubGlua2VkRXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCk7IH0KKyAgICAgICAgSlNTdHJp
bmcqIG5hbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5uYW1l
VmFsdWUoKTsgfQorICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKTsgfSAvLyBFeGNsdWRpbmcg
J3RoaXMnIQogICAgICAgICBTdHJpbmcgcGFyYW1TdHJpbmcoKSBjb25zdDsKLSAgICAgICAgU2hh
cmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1ib2xUYWJs
ZS5nZXQoKTsgfQorICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJs
ZS0+c3ltYm9sVGFibGUoa2luZCk7IH0KIAogICAgICAgICB2b2lkIGNsZWFyQ29kZUlmTm90Q29t
cGlsaW5nKCk7CisgICAgICAgIHZvaWQgY2xlYXJVbmxpbmtlZENvZGVJZk5vdENvbXBpbGluZygp
OwogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG8pCiAgICAgICAgIHsKQEAgLTY5OSwxNSArNzE3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbV9u
YW1lVmFsdWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBuYW1l
KCkuc3RyaW5nKCkpKTsKLSAgICAgICAgfQotCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIEZ1bmN0aW9uQm9keU5vZGUqKTsKKyAgICAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFz
dExpbmUpOwogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNT
dGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
ID0gVUlOVF9NQVgpOwogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4ID0gVUlOVF9NQVgpOwpAQCAtNzMyLDE2ICs3NDMsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1
cmVGbGFnczsKLSAgICAgICAgYm9vbCBtX2ZvcmNlVXNlc0FyZ3VtZW50czsKLQotICAgICAgICBS
ZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gbV91bmxpbmtlZEV4ZWN1dGFibGU7CiAg
ICAgICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOwogICAg
ICAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0Owot
ICAgICAgICBJZGVudGlmaWVyIG1fbmFtZTsKLSAgICAgICAgSWRlbnRpZmllciBtX2luZmVycmVk
TmFtZTsKLSAgICAgICAgRnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlIG1fZnVuY3Rpb25OYW1l
SXNJblNjb3BlVG9nZ2xlOwotICAgICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fbmFtZVZh
bHVlOwotICAgICAgICBXcml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFi
bGU7CiAgICAgfTsKIAogICAgIGlubGluZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3Bl
KiBzY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGlvbkhhcm5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhh
cm5lc3MuaAppbmRleCAwNjU3ODhhZWUxYmUyNWYzMGRmNjViYzk5YTEzMTA1OGVlMTljNjU2Li5i
NzFiNjAyMTdmYTVlNGMzMTQ0MTRhOTkwZTYxMGM5ZjU5NDZjMThiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCkBAIC00OSw3ICs0OSw3
IEBAIGlubGluZSBib29sIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBPd25Q
dHI8Q29kZUJsb2NrVHlwZT4mIGNvZGVCbG9jCiAgICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJv
cHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwg
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNj
ZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIH0KIAotaW5saW5lIGJvb2wgcHJlcGFyZUZ1
bmN0aW9uRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIm
IGppdENvZGVXaXRoQXJpdHlDaGVjaywgV3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiYg
c3ltYm9sVGFibGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5saW5lIGJvb2wgcHJlcGFyZUZ1
bmN0aW9uRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIm
IGppdENvZGVXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5B
QkxFKExMSU5UKQogICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewpA
QCAtNjEsNyArNjEsNyBAQCBpbmxpbmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24o
RXhlY1N0YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvYwogI2Vsc2UKICAgICBVTlVT
RURfUEFSQU0oa2luZCk7CiAjZW5kaWYgLy8gRU5BQkxFKExMSU5UKQotICAgIHJldHVybiBqaXRD
b21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0
Q29kZVdpdGhBcml0eUNoZWNrLCBzeW1ib2xUYWJsZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwg
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNj
ZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0
aW9uSWZBcHByb3ByaWF0ZShleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJp
dHlDaGVjaywgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUo
aml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5oCmluZGV4IGZhMjI5MTgxM2Y5YmFhYmUwZDZmMGM2OWJlNjc3
ODRjZDQzNGQxMWQuLmZjNjMzNjQ2MzE2ODU4YmRmNjlkZmRmNDFiMmE3MjBiOGMwMTRlYmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCkBAIC00Niwx
NSArNDYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVm
IEpTVmFyaWFibGVPYmplY3QgQmFzZTsKIAotICAgICAgICBzdGF0aWMgSlNBY3RpdmF0aW9uKiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUpCisgICAgICAgIHN0YXRpYyBKU0Fj
dGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgeworICAgICAgICAgICAgU2hh
cmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwog
ICAgICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3ICgKICAgICAgICAgICAg
ICAgICBOb3ROdWxsLAogICAgICAgICAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRpb24+
KAogICAgICAgICAgICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAsCi0gICAgICAgICAgICAgICAg
ICAgIGFsbG9jYXRpb25TaXplKGZ1bmN0aW9uRXhlY3V0YWJsZS0+c3ltYm9sVGFibGUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpCiAgICAgICAgICAg
ICAgICAgKQotICAgICAgICAgICAgKSBKU0FjdGl2YXRpb24oZ2xvYmFsRGF0YSwgY2FsbEZyYW1l
LCBmdW5jdGlvbkV4ZWN1dGFibGUtPnN5bWJvbFRhYmxlKCkpOworICAgICAgICAgICAgKSBKU0Fj
dGl2YXRpb24oZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLCBzeW1ib2xUYWJsZSk7CiAgICAgICAgICAg
ICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIHJl
dHVybiBhY3RpdmF0aW9uOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAppbmRleCA1ZmI2ODJiZGIwODhkZDNlMjJhMDdmYjJhMGFj
YjI1ZWMxNDgyMjJkLi40ZTcyZjk0MGJiN2RmYmZiMWRjNzVkOGE5NWMwOThkOGU5ZTAyMjJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKIAogI2luY2x1ZGUgIkFy
Z0xpc3QuaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlm
aWVycy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkZ1bmN0
aW9uQ29uc3RydWN0b3IuaCIKQEAgLTU3LDYgKzU4LDcgQEAKICNpbmNsdWRlICJSZWdFeHBPYmpl
Y3QuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9u
Z0lubGluZXMuaCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L1dURlRocmVhZERhdGEuaD4KQEAgLTE5Niw2ICsxOTgsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YShHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAgICAgLCBtX2luaXRpYWxpemluZ09iamVjdENsYXNzKDApCiAjZW5kaWYKICAgICAsIG1faW5E
ZWZpbmVPd25Qcm9wZXJ0eShmYWxzZSkKKyAgICAsIG1fY29kZUNhY2hlKENvZGVDYWNoZTo6Y3Jl
YXRlKCkpCiB7CiAgICAgaW50ZXJwcmV0ZXIgPSBuZXcgSW50ZXJwcmV0ZXIoKnRoaXMpOwogCkBA
IC0yMjEsNiArMjI0LDExIEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFU
eXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBzaGFyZWRTeW1ib2xU
YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFNoYXJlZFN5bWJvbFRhYmxlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogICAgIHNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAg
d2l0aFNjb3BlU3RydWN0dXJlLnNldCgqdGhpcywgSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0
cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
U3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRFdmFsQ29kZUJsb2NrU3Ry
dWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVj
dHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50
SWRlbnRpZmllclRhYmxlKGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCmluZGV4IGU5N2MwYTAxNWQ0
ODU0NDU0NzA3NzczZjE3MTY2ZTIwMDZjMDQzZGUuLjBmZmFjY2I2YWQxMjVmNzY0ZjRiNWQ1YjEy
OTdlZWM1M2EyNmE5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5oCkBAIC02Myw2ICs2Myw3IEBAIHN0cnVjdCBPcGFxdWVKU0NsYXNzQ29udGV4dERh
dGE7CiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENvZGVCbG9jazsKKyAgICBjbGFzcyBD
b2RlQ2FjaGU7CiAgICAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiAgICAgY2xhc3MgSGFuZGxl
U3RhY2s7CiAgICAgY2xhc3MgSWRlbnRpZmllclRhYmxlOwpAQCAtODAsNiArODEsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIGNsYXNzIFJlZ0V4
cDsKICNlbmRpZgorICAgIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOworICAgIGNsYXNzIFVubGlu
a2VkRXZhbENvZGVCbG9jazsKKyAgICBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsK
KyAgICBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7CiAKICAgICBzdHJ1Y3QgSGFzaFRh
YmxlOwogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKQEAgLTIyMyw2ICsyMjgsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNoYXJlZFN5bWJvbFRhYmxlU3Ry
dWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVy
ZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVy
ZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2l0aFNjb3BlU3RydWN0dXJlOworICAgICAg
ICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsK
KyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0
dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1
Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2tTdHJ1Y3R1cmU7CiAKICAgICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGU7
CiAgICAgICAgIENvbW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0eU5hbWVzOwpAQCAtNDM2LDYgKzQ0
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgSlNMb2NrJiBhcGlM
b2NrKCkgeyByZXR1cm4gbV9hcGlMb2NrOyB9CisgICAgICAgIENvZGVDYWNoZSogY29kZUNhY2hl
KCkgeyByZXR1cm4gbV9jb2RlQ2FjaGUuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC00NTYsNiArNDY3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9pbml0aWFsaXppbmdP
YmplY3RDbGFzczsKICNlbmRpZgogICAgICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsK
KyAgICAgICAgT3duUHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAKICAgICAgICAgVHlwZWRB
cnJheURlc2NyaXB0b3IgbV9pbnQ4QXJyYXlEZXNjcmlwdG9yOwogICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBtX2ludDE2QXJyYXlEZXNjcmlwdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDAzMjUyZmFkMWNhNzEyODRj
NmEwY2MyMGRiZTYxN2FlYzc3ODdiY2IuLjg2NGFlNTEyZjU4YTY4Y2NjYWEzNWJkNDY1ZWFhY2Fh
ZTkyOGI5MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJCb29sZWFuQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJCb29sZWFuUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCkBAIC01
ODAsNCArNTgxLDU4IEBAIHZvaWQgc2xvd1ZhbGlkYXRlQ2VsbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoZ2xvYmFsT2JqZWN0LCAm
SlNHbG9iYWxPYmplY3Q6OnNfaW5mbyk7CiB9CiAKK1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jayog
SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVByb2dyYW1Db2RlQmxvY2soQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikK
K3sKKyAgICBQYXJzZXJFcnJvciBlcnJvcjsKKyAgICBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0
bmVzcyA9IGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFy
c2VOb3JtYWw7CisgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSA9IGhhc0RlYnVnZ2VyKCkg
PyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CisgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9k
ZSA9IGhhc1Byb2ZpbGVyKCkgPyBQcm9maWxlck9uIDogUHJvZmlsZXJPZmY7CisgICAgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGUgPSBnbG9iYWxEYXRhKCkuY29kZUNhY2hl
KCktPmdldFByb2dyYW1Db2RlQmxvY2soZ2xvYmFsRGF0YSgpLCBleGVjdXRhYmxlLCBleGVjdXRh
YmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVy
cm9yKTsKKworICAgIGlmIChoYXNEZWJ1Z2dlcigpKQorICAgICAgICBkZWJ1Z2dlcigpLT5zb3Vy
Y2VQYXJzZWQoY2FsbEZyYW1lLCBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBlcnJv
ci5tX2xpbmUsIGVycm9yLm1fbWVzc2FnZSk7CisKKyAgICBpZiAoZXJyb3IubV90eXBlICE9IFBh
cnNlckVycm9yOjpFcnJvck5vbmUpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGVycm9yLnRvRXJy
b3JPYmplY3QodGhpcywgZXhlY3V0YWJsZS0+c291cmNlKCkpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKK30KKworVW5saW5r
ZWRFdmFsQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlRXZhbENvZGVCbG9jayhDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTT2JqZWN0Kiog
ZXhjZXB0aW9uKQoreworICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIEpTUGFyc2VyU3RyaWN0
bmVzcyBzdHJpY3RuZXNzID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3Ry
aWN0IDogSlNQYXJzZU5vcm1hbDsKKyAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gaGFz
RGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKKyAgICBQcm9maWxlck1vZGUg
cHJvZmlsZXJNb2RlID0gaGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsK
KyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZSA9IGdsb2JhbERhdGEoKS5j
b2RlQ2FjaGUoKS0+Z2V0RXZhbENvZGVCbG9jayhnbG9iYWxEYXRhKCksIGV4ZWN1dGFibGUsIGV4
ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9k
ZSwgZXJyb3IpOworCisgICAgaWYgKGhhc0RlYnVnZ2VyKCkpCisgICAgICAgIGRlYnVnZ2VyKCkt
PnNvdXJjZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCks
IGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKKworICAgIGlmIChlcnJvci5tX3R5cGUg
IT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkgeworICAgICAgICAqZXhjZXB0aW9uID0gZXJyb3Iu
dG9FcnJvck9iamVjdCh0aGlzLCBleGVjdXRhYmxlLT5zb3VyY2UoKSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiB1bmxpbmtlZENvZGU7Cit9CisKK1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlRnVuY3Rpb25FeGVj
dXRhYmxlRnJvbUdsb2JhbENvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZp
ZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIGNvZGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQor
eworICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gZ2xvYmFsRGF0YSgpLmNvZGVDYWNoZSgpLT5nZXRGdW5jdGlvbkV4ZWN1
dGFibGVGcm9tR2xvYmFsQ29kZShnbG9iYWxEYXRhKCksIG5hbWUsIGNvZGUsIGVycm9yKTsKKyAg
ICBpZiAoaGFzRGVidWdnZXIoKSkKKyAgICAgICAgZGVidWdnZXIoKS0+c291cmNlUGFyc2VkKGNh
bGxGcmFtZSwgY29kZS5wcm92aWRlcigpLCBlcnJvci5tX2xpbmUsIGVycm9yLm1fbWVzc2FnZSk7
CisKKyAgICBpZiAoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpIHsKKyAg
ICAgICAgKmV4Y2VwdGlvbiA9IGVycm9yLnRvRXJyb3JPYmplY3QodGhpcywgY29kZSk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBleGVjdXRhYmxlOworfQor
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggNjVmZGE0OWQ4NDg4NDgyMDIyMzI2OGY1YTNiMWE1NTA1
NWZlN2QyMi4uMzIxMjM2M2FiNGU3MTNhZmI0YTE2NDI5OTNjMDM1NjQ0NDdmZmFkNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC00Myw2
ICs0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBEZWJ1Z2dlcjsKICAgICBjbGFz
cyBFcnJvckNvbnN0cnVjdG9yOwogICAgIGNsYXNzIEVycm9yUHJvdG90eXBlOworICAgIGNsYXNz
IEV2YWxDb2RlQmxvY2s7CisgICAgY2xhc3MgRXZhbEV4ZWN1dGFibGU7CisgICAgY2xhc3MgRnVu
Y3Rpb25Db2RlQmxvY2s7CisgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIGNsYXNz
IEZ1bmN0aW9uUHJvdG90eXBlOwogICAgIGNsYXNzIEdldHRlclNldHRlcjsKICAgICBjbGFzcyBH
bG9iYWxDb2RlQmxvY2s7CkBAIC01MCw5ICs1NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgY2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1
Y3RvcjsKICAgICBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrOworICAgIGNsYXNzIFByb2dyYW1FeGVj
dXRhYmxlOwogICAgIGNsYXNzIFJlZ0V4cENvbnN0cnVjdG9yOwogICAgIGNsYXNzIFJlZ0V4cFBy
b3RvdHlwZTsKLQorICAgIGNsYXNzIFNvdXJjZUNvZGU7CiAgICAgc3RydWN0IEFjdGl2YXRpb25T
dGFja05vZGU7CiAgICAgc3RydWN0IEhhc2hUYWJsZTsKIApAQCAtMTg1LDYgKzE5MCw5IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKKyAgICAgICAgYm9vbCBoYXNEZWJ1Z2dlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZGVidWdnZXI7IH0KKyAgICAgICAgYm9vbCBoYXNQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJu
IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUHJvZmlsaW5nKHRoaXMpOyB9CisK
ICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEpTR2xv
YmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKiA9IDApOwogCkBAIC0zNjYsNiArMzc0LDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIGRvdWJsZSB3ZWFrUmFuZG9tTnVtYmVyKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9t
LmdldCgpOyB9CiAgICAgICAgIHVuc2lnbmVkIHdlYWtSYW5kb21JbnRlZ2VyKCkgeyByZXR1cm4g
bV93ZWFrUmFuZG9tLmdldFVpbnQzMigpOyB9CisKKyAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKiBjcmVhdGVQcm9ncmFtQ29kZUJsb2NrKENhbGxGcmFtZSosIFByb2dyYW1FeGVjdXRh
YmxlKiwgSlNPYmplY3QqKiBleGNlcHRpb24pOworICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqIGNyZWF0ZUV2YWxDb2RlQmxvY2soQ2FsbEZyYW1lKiwgRXZhbEV4ZWN1dGFibGUqLCBKU09i
amVjdCoqIGV4Y2VwdGlvbik7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBj
cmVhdGVGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShDYWxsRnJhbWUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYsIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKKwog
ICAgIHByb3RlY3RlZDoKIAogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxk
cmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAppbmRleCAwM2Y0YTc3OTA5MDc3ZTZh
NmM1ZGFhMzhiNWIzMjllMDA2MWM2MjhiLi4xMGQ5OGQyYmQyNWE2ZDFlMjI3NDdiNzAwM2E4MTYw
ZDgzMWIzMTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaApAQCAtNDEs
NiArNDEsMTEgQEAgZW51bSBKU1R5cGUgewogICAgIFByb2dyYW1FeGVjdXRhYmxlVHlwZSwKICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLAogCisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGVUeXBlLAorICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1R5cGUsCisgICAgVW5saW5rZWRF
dmFsQ29kZUJsb2NrVHlwZSwKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrVHlwZSwKKwog
ICAgIC8vIFRoZSBPYmplY3RUeXBlIHZhbHVlIG11c3QgY29tZSBiZWZvcmUgYW55IEpTVHlwZSB0
aGF0IGlzIGEgc3ViY2xhc3Mgb2YgSlNPYmplY3QuCiAgICAgT2JqZWN0VHlwZSwKICAgICBGaW5h
bE9iamVjdFR5cGUsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172449</attachid>
            <date>2012-11-05 17:23:03 -0800</date>
            <delta_ts>2012-11-05 18:00:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101127-20121105172117.patch</filename>
            <type>text/plain</type>
            <size>230503</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ODUwOGZhYjE3NWQwYzc2ODVjNTYzZTcyN2NkMjBjYTIzOWIxYjI2Li5kMTdiZGQzOTNhNGQ1MzA4
ZTNmYjY3Nzg4ZjBiMDY2M2I3ZGFjZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MiBAQAorMjAxMi0xMS0wMiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZHVjZSBwYXJzZXIgb3ZlcmhlYWQgaW4gSlNDCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExMjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbiBleGNpdGluZyBqb3VybmV5IGludG8g
dGhlIHdvcmxkIG9mIGFyY2hpdGVjdHVyZSBpbiB3aGljaCBvdXIgaGVybworICAgICAgICBhZGRz
IHlldCBhbm90aGVyIGxheWVyIHRvIEpTQyBjb2RlZ2VuZXJhdGlvbi4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgYSBtYXJnaW5hbGx5IG1vcmUgY29tcGFjdCBmb3JtIG9mIGJ5dGVjb2RlIHRo
YXQgaXMKKyAgICAgICAgZnJlZSBmcm9tIGFueSBkYXRhIHNwZWNpZmljIHRvIGEgZ2l2ZW4gZXhl
Y3V0aW9uIGNvbnRleHQsIGFuZCB0aGF0CisgICAgICAgIGRvZXMgc3RvcmUgYW55IGRhdGEgc3Ry
dWN0dXJlcyBuZWNlc3NhcnkgZm9yIGV4ZWN1dGlvbi4gIFRvIGFjdHVhbGx5CisgICAgICAgIGV4
ZWN1dGUgdGhpcyBVbmxpbmtlZEJ5dGVjb2RlIHdlIHN0aWxsIG5lZWQgdG8gaW5zdGFudGlhdGUg
YSByZWFsCisgICAgICAgIENvZGVCbG9jaywgYnV0IHRoaXMgaXMgYSBtdWNoIGZhc3RlciBsaW5l
YXIgdGltZSBvcGVyYXRpb24gdGhhbiBhbnkKKyAgICAgICAgb2YgdGhlIGVhcmxpZXIgcGFyc2lu
ZyBvciBjb2RlIGdlbmVyYXRpb24gcGFzc2VzLgorCisgICAgICAgIEFzIHRoZSB1bmxpbmtlZCBj
b2RlIGlzIGNvbnRleHQgZnJlZSB3ZSBjYW4gdGhlbiBzaW1wbHkgdXNlIGEgY2FjaGUKKyAgICAg
ICAgZnJvbSBzb3VyY2UgdG8gdW5saW5rZWQgY29kZSBtYXBwaW5nIHRvIGNvbXBsZXRlbHkgYXZv
aWQgYWxsIG9mIHRoZQorICAgICAgICBvbGQgcGFyc2VyIG92ZXJoZWFkLiAgVGhlIGNhY2hlIGlz
IGN1cnJlbnRseSB2ZXJ5IHNpbXBsZSBhbmQgbWVtb3J5CisgICAgICAgIGhlYXZ5LCB1c2luZyB0
aGUgY29tcGxldGUgc291cmNlIHRleHQgYXMgYSBrZXkgKHJhdGhlciB0aGFuIFNvdXJjZUNvZGUK
KyAgICAgICAgb3IgZXF1aXZhbGVudCksIGFuZCBhIHJhbmRvbSBldmljdGlvbiBwb2xpY3kuCisK
KyAgICAgICAgVGhpcyBzZWVtcyB0byBwcm9kdWNlIGEgc3Vic3RhbnRpYWwgd2luIHdoZW4gbG9h
ZGluZyBpZGVudGljYWwgY29udGVudAorICAgICAgICBpbiBkaWZmZXJlbnQgY29udGV4dHMuCisK
KyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgICAgIE1vdmVkIGEgbnVtYmVyIG9mIGZpZWxkcywgYW5k
IGEgYnVuY2ggb2YgbG9naWMgdG8gVW5saW5rZWRDb2RlQmxvY2suaC9jcHAKKyAgICAgICAgKiBi
eXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgICAgIEFkZGVkIGEgZ2xvYmFsIGNvbnN0IGluaXQg
bm8gb3AgaW5zdHJ1Y3Rpb24gbmVlZGVkIHRvIGdldCBjb3JyZWN0CisgICAgICAgICAgICBiZWhh
dmlvdXIgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBzZW1hbnRpY3MuCisgICAgICAgICogYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgICAgIEEgZmFpcmx5IHNoYWxsb3csIEdD
IGFsbG9jYXRlZCB2ZXJzaW9uIG9mIHRoZSBvbGQgQ29kZUJsb2NrCisgICAgICAgICAgICBjbGFz
c2VzIHdpdGggYSAzMmJpdCBpbnN0cnVjdGlvbiBzaXplLCBhbmQganVzdCBtZXRhZGF0YQorICAg
ICAgICAgICAgc2l6ZSB0cmFja2luZy4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
OgorICAgICAgICAgICAgUmVwbGFjZSBkaXJlY3QgYWNjZXNzIHRvIG1fc3ltYm9sVGFibGUgd2l0
aCBhY2Nlc3MgdGhyb3VnaAorICAgICAgICAgICAgc3ltYm9sVGFibGUoKS4gIFByb2dyYW1Db2Rl
IG5vIGxvbmdlciBoYXMgYSBzeW1ib2wgdGFibGUgYXQKKyAgICAgICAgICAgIGFsbCBzbyBzb21l
IHByZXZpb3VzbHkgdW5jb25kaXRpb25hbCAoYW5kIHBvaW50bGVzcykgdXNlcworICAgICAgICAg
ICAgb2Ygc3ltYm9sVGFibGUgZ2V0IG51bGwgY2hlY2tzLgorICAgICAgICAgICAgQSBmZXcgb3Ro
ZXIgY2hhbmdlcyB0byBkZWFsIHdpdGggdHlwZSBjaGFuZ2VzIGR1ZSB0byB1cyBnZW5lcmF0aW5n
CisgICAgICAgICAgICB1bmxpbmtlZCBjb2RlIChlZy4gcG9pbnRlciBmcmVlLCBzbyBwcm9maWxl
IGluZGljZXMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIHBvaW50ZXJzKS4KKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMu
aDoKKyAgICAgICAgICAgIFN1cHBvcnQgZ2xvYmFsX2luaXRfbm9wICAgICAgICAKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgICAgICBOb3cgZ2V0IHRoZSBQ
cm9ncmFtRXhlY3V0YWJsZSB0byBpbml0aWFsaXNlIG5ldyBnbG9iYWwgcHJvcGVydGllcworICAg
ICAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIGV4ZWN1dGlvbi4gICAgICAgIAorICAgICAgICAqIGpp
dC9KSVQuY3BwOgorICAgICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKiBqaXQvSklU
U3R1YnMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgICAgIEFk
ZGluZyBpbml0X2dsb2JhbF9jb25zdF9ub3AgZXZlcnl3aGVyZSBlbHNlCisgICAgICAgICogcGFy
c2VyL1BhcnNlci5oOgorICAgICAgICAqIHBhcnNlci9QYXJzZXJNb2Rlcy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyVG9rZW5zLmg6CisgICAgICAgICAgICBQYXJzZXIgbm8gbG9u
Z2VyIG5lZWRzIGEgZ2xvYmFsIG9iamVjdCBvciBjYWxsZnJhbWUgdG8gZnVuY3Rpb24gICAgICAg
IAorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9Db2RlQ2FjaGUuaDogQWRkZWQuCisgICAgICAgICAgICBBIHNpbXBsZSwgcmFuZG9tIGV2
aWN0aW9uLCBTb3VyY2UtPlVubGlua2VkQ29kZSBjYWNoZSAgICAgICAgCisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAg
ICAgICAgICAgIEV4ZWN1dGFibGVzIG5vdyByZWZlcmVuY2UgdGhlaXIgdW5saW5rZWQgY291bnRl
cnBhcnRzLCBhbmQKKyAgICAgICAgICAgIHJlcXVlc3QgY29kZSBzcGVjaWZpY2FsbHkgZm9yIHRo
ZSB0YXJnZXQgZ2xvYmFsIG9iamVjdC4gICAgICAgIAorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAg
ICAgR2xvYmFsRGF0YSBub3cgb3ducyBhIENvZGVDYWNoZSBhbmQgYSBzZXQgb2YgbmV3IHN0cnVj
dHVyZXMKKyAgICAgICAgICAgIGZvciB0aGUgdW5saW5rZWQgY29kZSB0eXBlcy4gIAorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgICAgIFV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgZXhlY3V0
YWJsZXMgdG8gcGVyZm9ybSBjb21waWxhdGlvbgorIAorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBl
Lmg6CisgICAgICAgICAgQWRkIG5ldyBKU1R5cGVzIGZvciB1bmxpbmtlZCBjb2RlCisKIDIwMTIt
MTEtMDQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWR1Y2Ug
dGhlIHZlcmJvc2l0eSBvZiByZWZlcnJpbmcgdG8gUU5hTiBpbiBKYXZhU2NyaXB0Q29yZQpAQCAt
MTc3OSw3ICsxODY4LDcgQEAKICAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25leHRfcG5hbWUp
OgogICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKICAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhdGNoKToKLSAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93X3Jl
ZmVyZW5jZV9lcnJvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvd19zdGF0aWNf
ZXJyb3IpOgogICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CiAgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CiAgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9j
cmVhdGVfYWN0aXZhdGlvbik6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGkuYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jCmluZGV4IGI1MmEyYjQ0MDcyYWE2ODVlOTljNWQwODAzOTM1ZmMyYTAzOThlZDIuLmZjYWI5
YTU4YjY2MDE1NDRmNDc4MmZkM2E5OWI5ZGU3MDU5ZGFkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCkBAIC0xNDU4LDcgKzE0NTgsOSBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhciogYXJndltdKQogICAgIEpTU3RyaW5nUmVsZWFzZShmdW5jdGlvbkJvZHkp
OwogICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoSlNPYmplY3RJc0Z1bmN0aW9u
KGNvbnRleHQsIGZ1bmN0aW9uKSk7Ci0gICAgdiA9IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29u
dGV4dCwgZnVuY3Rpb24sIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworICAgIGV4Y2VwdGlvbiA9IDA7
CisgICAgdiA9IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIE5VTEws
IDAsIE5VTEwsICZleGNlcHRpb24pOworICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKICAgICBBU1NF
UlQodik7CiAgICAgQVNTRVJUKEpTVmFsdWVJc0VxdWFsKGNvbnRleHQsIHYsIGFycmF5Q29uc3Ry
dWN0b3IsIE5VTEwpKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRl
eCBjNzA2ZjY1ZTlkMzliMWI4NjFkZDQwYzk4OTZhMmZkMmQ3NzVmMWYxLi5kZTlkMTY2ZTlkNWY0
NjNkZDU1ODAxNmE3NDg0N2Q0MzcwYjYzMDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC02MSw2ICs2MSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
Ynl0ZWNvZGUvU3BlY2lhbFBvaW50ZXIuY3BwCiAgICAgYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5jcHAKICAgICBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAK
KyAgICBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKICAgICBieXRlY29kZS9XYXRjaHBv
aW50LmNwcAogCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTc2
LDYgKzE3Nyw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9Cb29s
ZWFuT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKICAgICBydW50
aW1lL0NhbGxEYXRhLmNwcAorICAgIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcAogICAgIHJ1bnRpbWUv
Q29tbW9uSWRlbnRpZmllcnMuY3BwCiAgICAgcnVudGltZS9Db21wbGV0aW9uLmNwcAogICAgIHJ1
bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggNmU3NGMzYjUzMWZjMGVlOTI1OGI0ODhiNWExNTY0YmVjZjNhOWVkMy4u
YTViMmZkNWQwMjFjOTAxMDk4MDlmMzkzYzJlODRlNzE0ZmQwZjBkZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE0Miw2ICsxNDIsOCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmggXApAQCAtNDQ4LDYgKzQ1MCw3IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9r
ZW5zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1Jlc3VsdFR5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2Rl
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaCBcCkBA
IC00ODgsNiArNDkxLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWxsRGF0YS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bGFzc0luZm8uaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNw
cCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKaW5k
ZXggMGY5NmE2MGVkZDEyNDk0N2Y5YzA3MGQ5OTk1ZjUxZWQ5M2ZjMmI3Mi4uMjc5OGM5MDVlMGM4
MjI5NzNlNTRkYWI4YzY5NjA0NzFmMjYzMDk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKQEAgLTYzOCw2ICs2MzgsMTQg
QEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
cnVudGltZVxDb2RlQ2FjaGUuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXENvZGVDYWNoZS5oIgorCQkJCT4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXENvbW1vbklkZW50
aWZpZXJzLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNzYyLDYgKzE3NzAsMTQgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNv
ZGVcVW5saW5rZWRDb2RlQmxvY2suY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxVbmxpbmtlZENvZGVCbG9jay5oIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29k
ZVxWYWx1ZVByb2ZpbGUuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yMjQ2LDYgKzIyNjIsMTAg
QEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
cGFyc2VyXFBhcnNlck1vZGVzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHBhcnNlclxQYXJzZXJBcmVuYS5jcHAiCiAJCQkJPgogCQkJPC9G
aWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyYTZhNWM0YzBmZTE5ZjcyZWNk
YzlmNTYyNjFhM2JiNjcxOTljZTA1Li41NzRiZmEwZDYwYTQ2NmM3NWJiOTNjYTRiNzJiY2RjNGVi
ZjZkMzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTg0LDEyICs1ODQsMTcg
QEAKIAkJQTc1NzA2REUxMThBMkJDRjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzU3MDZERDEx
OEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLzsgfTsKIAkJQTc2NkI0
NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI1MEVFNzRDRkMwMERDQkRC
NiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJm
YWNlSklULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzZGMjc5NDE1RjEzQzk2MDA1
MTdENjcgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTc5RTc4MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2Vk
Q29kZUJsb2NrLmNwcCAqLzsgfTsKIAkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdy
aXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovOyB9Owor
CQlBNzdGMTgyMTE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3N0YxODFGMTY0MDg4QjIwMDY0MEE0
NyAvKiBDb2RlQ2FjaGUuY3BwICovOyB9OworCQlBNzdGMTgyMjE2NDA4OEIyMDA2NDBBNDcgLyog
Q29kZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzdGMTgyMDE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTc3RjE4MjUxNjQxOTJDNzAwNjQw
QTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzdGMTgyNDE2NDE5MjU0MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2MTEx
RDE2NjIyMDA1Nzc2QUMgLyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxk
ZXIuaCAqLzsgfTsKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc3
MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IH07CiAJCUE3QUZDMTc5MTVG
N0VGRTMwMDQ4RjU3QiAvKiBSZXNvbHZlT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0FGQzE3NzE1RjdFRkUzMDA0OEY1N0IgLyogUmVz
b2x2ZU9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4
REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLzsgfTsKIAkJ
QTdCNEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0QUNBRTE0ODRDOUNFMDBCMzhB
MzYgLyogSlNFeHBvcnRNYWNyb3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlBN0I2MDE4MjE2MzlGRDJBMDAzNzJCQTMgLyogVW5saW5rZWRDb2Rl
QmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QzFFOEU0MTEyRTcyRUYw
MEEzN0Y5OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5OCAvKiBK
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLzsgfTsKIAkJQTdEQ0I5NzMxMkU1MTkzRjAwOTEx
OTQwIC8qIFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdEQ0I3NzkxMkUzRDkwNTAwOTExOTQwIC8qIFdyaXRlQmFycmllci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3RTJFQTZC
MEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0UyRUE2OTBGQjQ2MENGMDA2MDFGMDYgLyogTGl0
ZXJhbFBhcnNlci5oICovOyB9OwpAQCAtMTM4Niw2ICsxMzkxLDExIEBACiAJCUE3NjdGRjlGMTRG
NDUwMjkwMDc4OTA1OSAvKiBKU0NUeXBlZEFycmF5U3R1YnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDVHlwZWRBcnJheVN0dWJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVyZmFjZUpJVC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3Jp
dGVCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdyaXRlQmFy
cmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzdGMTgxRjE2NDA4OEIyMDA2
NDBBNDcgLyogQ29kZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvZGVDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3N0YxODIw
MTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29kZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3N0Yx
ODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJz
ZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzlFNzgxRTE1RUVDQkE4
MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVW5saW5rZWRDb2RlQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBNzlFNzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5saW5rZWRDb2RlQmxvY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc5RURCMDgxMTUzMUNENjAwMTlFOTEyIC8q
IEpTT2JqZWN0UmVmUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U09iamVjdFJlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBN0VF
NzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQVNUQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTeW50YXhDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMDcxLDYgKzIwODEsNyBAQAogCQkJCUU0OURDMTUxMTJFRjI3MjIwMDE4NEEx
RiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi8sCiAJCQkJRTQ5REMxNDkxMkVGMjYxQTAwMTg0
QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi8sCiAJCQkJQTdBN0VFNzcxMUI5OEI4
RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLywKKwkJCQlBNzdGMTgyNDE2NDE5MjU0MDA2
NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcGFyc2VyOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIzMDUsNiArMjMxNiw4IEBACiAJCQkJMTQyMEJF
N0ExMEFBNkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQlBN0RDQjc3OTEyRTNE
OTA1MDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJQzJENThDMzMxNTkxMkZFRTAw
MjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCisJCQkJQTc3RjE4MUYxNjQwODhC
MjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgKi8sCisJCQkJQTc3RjE4MjAxNjQwODhCMjAwNjQw
QTQ3IC8qIENvZGVDYWNoZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBydW50aW1lOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI1ODEsNiArMjU5NCw4IEBACiAJCQkJMEY0MjZBNDYx
NDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovLAogCQkJCTBGOTE5RDIyMTU4
NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmNwcCAqLywKIAkJCQkwRjkxOUQyMzE1ODUzQ0RF
MDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oICovLAorCQkJCUE3OUU3ODFFMTVFRUNCQTgwMDQ3Qzg1
NSAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgKi8sCisJCQkJQTc5RTc4MUYxNUVFQ0JBODAwNDdD
ODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGJ5dGVjb2Rl
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMwMDksNiArMzAyNCw5IEBACiAJCQkJ
MEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxs
b2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDFCMTYy
NjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdCNjAxODIx
NjM5RkQyQTAwMzcyQkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBNzdGMTgyMjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLywK
KwkJCQlBNzdGMTgyNTE2NDE5MkM3MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMzU4Nyw2ICszNjA1LDggQEAKIAkJCQlDMjREMzFFMjE2MUNENjk1MDAyQUE0REIg
LyogSGVhcFN0YXRpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMTcxNjI2MkJE
RDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjM5RDFB
MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzZG
Mjc5NDE1RjEzQzk2MDA1MTdENjcgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTc3RjE4MjExNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
aW5kZXggNzI5Zjg1Zjc4MDM0ODZlNWRiMWI2ODRkNzk3NWE4NmE0MDQ2YzRkNi4uMjg0MjA5ZmY2
ZWQyZTk4YjlhMjE1NTY4Y2JmMDQzZmU1MmE5NDU5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQ5MSwxMyArNDkxLDEzIEBAIHZvaWQgQ29k
ZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgKytpbnN0cnVjdGlvbkNvdW50
OwogCiAgICAgZGF0YUxvZygKLSAgICAgICAgIiVsdSBtX2luc3RydWN0aW9uczsgJWx1IGJ5dGVz
IGF0ICVwICglcyk7ICVkIHBhcmFtZXRlcihzKTsgJWQgY2FsbGVlIHJlZ2lzdGVyKHMpOyAlZCB2
YXJpYWJsZShzKSIsCisgICAgICAgICIlbHUgbV9pbnN0cnVjdGlvbnM7ICVsdSBieXRlcyBhdCAl
cCAoJXMpOyAlZCBwYXJhbWV0ZXIocyk7ICVkIGNhbGxlZSByZWdpc3RlcihzKTsgJWQgdmFyaWFi
bGUocyksIDB4JTA0eCBmZWF0dXJlcyIsCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KGluc3RydWN0aW9ucygpLnNpemUoKSksCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KGluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpLAogICAg
ICAgICB0aGlzLCBjb2RlVHlwZVRvU3RyaW5nKGNvZGVUeXBlKCkpLCBtX251bVBhcmFtZXRlcnMs
IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzLAotICAgICAgICBtX251bVZhcnMpOwotICAgIGlmIChtX3N5
bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkKLSAgICAgICAgZGF0YUxvZygiOyAlZCBjYXB0dXJl
ZCB2YXIocykiLCBtX3N5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSk7CisgICAgICAgIG1fbnVt
VmFycywgbV9vd25lckV4ZWN1dGFibGUtPmZlYXR1cmVzKCkpOworICAgIGlmIChzeW1ib2xUYWJs
ZSgpICYmIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpKQorICAgICAgICBkYXRhTG9nKCI7
ICVkIGNhcHR1cmVkIHZhcihzKSIsIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpKTsKICAg
ICBpZiAodXNlc0FyZ3VtZW50cygpKSB7CiAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAi
OyB1c2VzIGFyZ3VtZW50cywgaW4gciVkLCByJWQiLApAQCAtNTMxLDEzICs1MzEsMTMgQEAgdm9p
ZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB9IHdoaWxlIChpIDwg
bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwogICAgIH0KIAotICAgIGlmIChtX3JhcmVEYXRh
ICYmICFtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuaXNFbXB0eSgpKSB7CisgICAgaWYgKHNpemVfdCBj
b3VudCA9IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlJlZ0V4cHMoKSkgewogICAgICAgICBkYXRh
TG9nKCJcbm1fcmVnZXhwczpcbiIpOwogICAgICAgICBzaXplX3QgaSA9IDA7CiAgICAgICAgIGRv
IHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgcmUldSA9ICVzXG4iLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaSksIHJlZ2V4cFRvU291cmNlU3RyaW5nKG1fcmFyZURhdGEtPm1fcmVnZXhwc1tpXS5n
ZXQoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBkYXRhTG9nKCIgIHJlJXUgPSAlc1xu
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCByZWdleHBUb1NvdXJjZVN0cmluZyhtX3VubGlu
a2VkQ29kZS0+cmVnZXhwKGkpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgICsraTsKLSAg
ICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCkpOworICAgICAg
ICB9IHdoaWxlIChpIDwgY291bnQpOwogICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC02NzEs
NyArNjcxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBW
ZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIGludCBkc3Qg
PSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmd2ID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CiAgICAgICAgICAgICBpbnQgYXJnYyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgZGF0YUxvZygiWyU0ZF0gbmV3X2FycmF5X2J1ZmZlciAlcywgJWQsICVkIiwgbG9jYXRp
b24sIHJlZ2lzdGVyTmFtZShleGVjLCBkc3QpLmRhdGEoKSwgYXJndiwgYXJnYyk7CisgICAgICAg
ICAgICBkYXRhTG9nKCJbJTRkXSBuZXdfYXJyYXlfYnVmZmVyXHQgJXMsICVkLCAlZCIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgZHN0KS5kYXRhKCksIGFyZ3YsIGFyZ2MpOwogICAgICAg
ICAgICAgZHVtcEJ5dGVjb2RlQ29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTY3OSw3ICs2NzksNyBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0
ZXJhdG9yJgogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBpbnQgcmUwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBkYXRhTG9nKCJb
JTRkXSBuZXdfcmVnZXhwXHQgJXMsICIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjAp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBpZiAocjAgPj0wICYmIHIwIDwgKGludCludW1iZXJPZlJl
Z0V4cHMoKSkKKyAgICAgICAgICAgIGlmIChyMCA+PTAgJiYgcjAgPCAoaW50KW1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZlJlZ0V4cHMoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIlcyIsIHJl
Z2V4cE5hbWUocmUwLCByZWdleHAocmUwKSkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJiYWRfcmVnZXhwKCVkKSIsIHJlMCk7CkBAIC04ODksMTEg
Kzg4OSwyMiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZl
Y3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJgogICAgICAgICAgICAgaXQrKzsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxf
Y29uc3Rfbm9wOiB7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBpbml0X2dsb2JhbF9jb25z
dF9ub3BcdCIsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIGR1bXBCeXRlY29kZUNvbW1lbnRBbmRO
ZXdMaW5lKGxvY2F0aW9uKTsKKyAgICAgICAgICAgIGl0Kys7CisgICAgICAgICAgICBpdCsrOwor
ICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgICAgIGl0Kys7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0OiB7CiAgICAgICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9ICgrK2l0KS0+dS5y
ZWdpc3RlclBvaW50ZXI7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGluaXRfZ2xvYmFsX2NvbnN0XHQgZyVkKCVwKSwg
JXMiLCBsb2NhdGlvbiwgbV9nbG9iYWxPYmplY3QtPmZpbmRSZWdpc3RlckluZGV4KHJlZ2lzdGVy
UG9pbnRlciksIHJlZ2lzdGVyUG9pbnRlciwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkp
OwogICAgICAgICAgICAgZHVtcEJ5dGVjb2RlQ29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOwor
ICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgICAgIGl0Kys7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOiB7CkBA
IC0xNDMxLDkgKzE0NDIsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAg
IGR1bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yOiB7
CisgICAgICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOiB7CiAgICAgICAgICAgICBpbnQg
azAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIHRocm93
X3JlZmVyZW5jZV9lcnJvclx0ICVzIiwgbG9jYXRpb24sIGNvbnN0YW50TmFtZShleGVjLCBrMCwg
Z2V0Q29uc3RhbnQoazApKS5kYXRhKCkpOworICAgICAgICAgICAgaW50IGsxID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSB0aHJvd19zdGF0aWNfZXJyb3Jc
dCAlcywgJXMiLCBsb2NhdGlvbiwgY29uc3RhbnROYW1lKGV4ZWMsIGswLCBnZXRDb25zdGFudChr
MCkpLmRhdGEoKSwgazEgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICAgICAgICAgIGR1bXBCeXRl
Y29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0xNTMxLDkgKzE1NDMsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3Rp
Y3MoKQogICAgICAgICAgICAgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUihHRVRfU1RBVFMpCiAgICAg
ICAgICN1bmRlZiBHRVRfU1RBVFMKIAotICAgICAgICBpZiAoIWNvZGVCbG9jay0+bV9zeW1ib2xU
YWJsZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSAm
JiAhY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHN5
bWJvbFRhYmxlSXNOb3RFbXB0eSsrOwotICAgICAgICAgICAgc3ltYm9sVGFibGVUb3RhbFNpemUg
Kz0gKGNvZGVCbG9jay0+bV9zeW1ib2xUYWJsZS5jYXBhY2l0eSgpICogKHNpemVvZihTeW1ib2xU
YWJsZTo6S2V5VHlwZSkgKyBzaXplb2YoU3ltYm9sVGFibGU6Ok1hcHBlZFR5cGUpKSk7CisgICAg
ICAgICAgICBzeW1ib2xUYWJsZVRvdGFsU2l6ZSArPSAoY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jYXBhY2l0eSgpICogKHNpemVvZihTeW1ib2xUYWJsZTo6S2V5VHlwZSkgKyBzaXplb2YoU3lt
Ym9sVGFibGU6Ok1hcHBlZFR5cGUpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY29kZUJs
b2NrLT5tX3JhcmVEYXRhKSB7CkBAIC0xNjAxLDMzICsxNjEzLDI2IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKICAgICAsIG1fbnVt
Q2FsbGVlUmVnaXN0ZXJzKG90aGVyLm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQogICAgICwgbV9udW1W
YXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29u
c3RydWN0b3IpCisgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV9nbG9iYWxEYXRhLCBvdGhl
ci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCiAg
ICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV9nbG9iYWxEYXRhLCBvdGhlci5tX293bmVy
RXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBt
X2dsb2JhbERhdGEob3RoZXIubV9nbG9iYWxEYXRhKQogICAgICwgbV9pbnN0cnVjdGlvbnMob3Ro
ZXIubV9pbnN0cnVjdGlvbnMpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdp
c3RlcikKICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIob3RoZXIubV9hcmd1bWVudHNSZWdpc3Rl
cikKICAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKG90aGVyLm1fYWN0aXZhdGlvblJlZ2lzdGVy
KQotICAgICwgbV9uZWVkc0Z1bGxTY29wZUNoYWluKG90aGVyLm1fbmVlZHNGdWxsU2NvcGVDaGFp
bikKLSAgICAsIG1fdXNlc0V2YWwob3RoZXIubV91c2VzRXZhbCkKLSAgICAsIG1faXNOdW1lcmlj
Q29tcGFyZUZ1bmN0aW9uKG90aGVyLm1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKQogICAgICwg
bV9pc1N0cmljdE1vZGUob3RoZXIubV9pc1N0cmljdE1vZGUpCi0gICAgLCBtX2NvZGVUeXBlKG90
aGVyLm1fY29kZVR5cGUpCiAgICAgLCBtX3NvdXJjZShvdGhlci5tX3NvdXJjZSkKICAgICAsIG1f
c291cmNlT2Zmc2V0KG90aGVyLm1fc291cmNlT2Zmc2V0KQogI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKICAgICAsIG1fZXhlY3V0aW9uRW50cnlDb3VudCgwKQogI2VuZGlmCi0gICAgLCBtX2p1
bXBUYXJnZXRzKG90aGVyLm1fanVtcFRhcmdldHMpCi0gICAgLCBtX2xvb3BUYXJnZXRzKG90aGVy
Lm1fbG9vcFRhcmdldHMpCiAgICAgLCBtX2lkZW50aWZpZXJzKG90aGVyLm1faWRlbnRpZmllcnMp
CiAgICAgLCBtX2NvbnN0YW50UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdpc3RlcnMpCiAg
ICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9mdW5jdGlvbkRlY2xzKQogICAgICwgbV9mdW5j
dGlvbkV4cHJzKG90aGVyLm1fZnVuY3Rpb25FeHBycykKLSAgICAsIG1fc3ltYm9sVGFibGUoKm90
aGVyLm1fZ2xvYmFsRGF0YSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLnN5
bWJvbFRhYmxlKCkpCiAgICAgLCBtX29zckV4aXRDb3VudGVyKDApCiAgICAgLCBtX29wdGltaXph
dGlvbkRlbGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigw
KQotICAgICwgbV9saW5lSW5mbyhvdGhlci5tX2xpbmVJbmZvKQogICAgICwgbV9yZXNvbHZlT3Bl
cmF0aW9ucyhvdGhlci5tX3Jlc29sdmVPcGVyYXRpb25zKQogICAgICwgbV9wdXRUb0Jhc2VPcGVy
YXRpb25zKG90aGVyLm1fcHV0VG9CYXNlT3BlcmF0aW9ucykKICNpZiBFTkFCTEUoQllURUNPREVf
Q09NTUVOVFMpCkBAIC0xNjQ1LDM2ICsxNjUwLDMxIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENv
cHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKICAgICAgICAgY3JlYXRlUmFyZURh
dGFJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVycyA9IG90aGVyLm1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnM7Ci0gICAg
ICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcyA9IG90aGVyLm1fcmFyZURhdGEtPm1fcmVnZXhwczsK
ICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMgPSBvdGhlci5tX3JhcmVEYXRh
LT5tX2NvbnN0YW50QnVmZmVyczsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0
Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFi
bGVzOwogICAgICAgICBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMgPSBv
dGhlci5tX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXM7CiAgICAgICAgIG1f
cmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IG90aGVyLm1fcmFyZURhdGEtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9u
SW5mbyA9IG90aGVyLm1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm87CiAgICAgfQogfQogCi1D
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENv
ZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBi
b29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKK0Nv
ZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBiYXNlU2NvcGVEZXB0aCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRl
cj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2Rl
QmxvY2s+IGFsdGVybmF0aXZlKQogICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQogICAgICwgbV9oZWFw
KCZtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApCi0gICAgLCBtX251bUNhbGxlZVJl
Z2lzdGVycygwKQotICAgICwgbV9udW1WYXJzKDApCi0gICAgLCBtX2lzQ29uc3RydWN0b3IoaXND
b25zdHJ1Y3RvcikKLSAgICAsIG1fbnVtUGFyYW1ldGVycygwKQorICAgICwgbV9udW1DYWxsZWVS
ZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQorICAgICwg
bV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZhcnMpCisgICAgLCBtX2lzQ29uc3Ry
dWN0b3IodW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAsIG1fdW5saW5r
ZWRDb2RlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrKQogICAgICwgbV9vd25lckV4ZWN1dGFibGUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSwgb3duZXJFeGVjdXRhYmxlKQotICAgICwgbV9nbG9i
YWxEYXRhKDApCi0gICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKC0xKQotICAgICwgbV9uZWVkc0Z1
bGxTY29wZUNoYWluKG93bmVyRXhlY3V0YWJsZS0+bmVlZHNBY3RpdmF0aW9uKCkpCi0gICAgLCBt
X3VzZXNFdmFsKG93bmVyRXhlY3V0YWJsZS0+dXNlc0V2YWwoKSkKLSAgICAsIG1faXNOdW1lcmlj
Q29tcGFyZUZ1bmN0aW9uKGZhbHNlKQotICAgICwgbV9pc1N0cmljdE1vZGUob3duZXJFeGVjdXRh
YmxlLT5pc1N0cmljdE1vZGUoKSkKLSAgICAsIG1fY29kZVR5cGUoY29kZVR5cGUpCisgICAgLCBt
X2dsb2JhbERhdGEodW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbERhdGEoKSkKKyAgICAsIG1fdGhp
c1JlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSkKKyAgICAsIG1fYXJn
dW1lbnRzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpCisg
ICAgLCBtX2FjdGl2YXRpb25SZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+YWN0aXZhdGlvblJl
Z2lzdGVyKCkpCisgICAgLCBtX2lzU3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJp
Y3RNb2RlKCkpCiAgICAgLCBtX3NvdXJjZShzb3VyY2VQcm92aWRlcikKICAgICAsIG1fc291cmNl
T2Zmc2V0KHNvdXJjZU9mZnNldCkKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgLCBt
X2V4ZWN1dGlvbkVudHJ5Q291bnQoMCkKICNlbmRpZgotICAgICwgbV9zeW1ib2xUYWJsZShnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlLCBTaGFyZWRTeW1ib2xUYWJs
ZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKSkKICAgICAsIG1fYWx0ZXJuYXRp
dmUoYWx0ZXJuYXRpdmUpCiAgICAgLCBtX29zckV4aXRDb3VudGVyKDApCiAgICAgLCBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcigwKQpAQCAtMTY4Myw3ICsxNjgzLDEwIEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29k
ZVR5cGUsIEpTR2xvCiAgICAgLCBtX2J5dGVjb2RlQ29tbWVudEl0ZXJhdG9yKDApCiAjZW5kaWYK
IHsKKyAgICBtX2dsb2JhbERhdGEtPnN0YXJ0ZWRDb21waWxpbmcodGhpcyk7CisKICAgICBBU1NF
UlQobV9zb3VyY2UpOworICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSk7CiAKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgaml0QWZ0
ZXJXYXJtVXAoKTsKQEAgLTE2OTEsOSArMTY5NCwxOTkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNH
bG8KICNpZiBEVU1QX0NPREVfQkxPQ0tfU1RBVElTVElDUwogICAgIGxpdmVDb2RlQmxvY2tTZXQu
YWRkKHRoaXMpOwogI2VuZGlmCi0gICAgLy8gV2UgaGF2ZSBhIHN0dWIgcHV0VG9CYXNlIG9wZXJh
dGlvbiB0byBhbGxvdyByZXNvbHZlX2Jhc2UgdG8KLSAgICAvLyByZW1haW4gYnJhbmNobGVzcwot
ICAgIG1fcHV0VG9CYXNlT3BlcmF0aW9ucy5hcHBlbmQoUHV0VG9CYXNlT3BlcmF0aW9uKGlzU3Ry
aWN0TW9kZSgpKSk7CisgICAgc2V0SWRlbnRpZmllcnModW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXJzKCkpOworICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVycygpKTsKKworICAgIG1fZnVuY3Rpb25EZWNscy5ncm93KHVubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSk7CisgICAgZm9yIChzaXplX3QgY291
bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCksIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5s
aW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChpKTsKKyAg
ICAgICAgdW5zaWduZWQgbGluZUNvdW50ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5lQ291bnQo
KTsKKyAgICAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5saW5lTm8o
KSArIHVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCk7CisgICAgICAgIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsgdW5saW5rZWRFeGVjdXRhYmxlLT5zdGFy
dE9mZnNldCgpOworICAgICAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGggPSB1bmxpbmtlZEV4ZWN1
dGFibGUtPnNvdXJjZUxlbmd0aCgpOworICAgICAgICBTb3VyY2VDb2RlIGNvZGUobV9zb3VyY2Us
IHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lKTsKKyAg
ICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxl
OjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgY29kZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExp
bmUsIGZpcnN0TGluZSArIGxpbmVDb3VudCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNsc1tpXS5z
ZXQoKm1fZ2xvYmFsRGF0YSwgb3duZXJFeGVjdXRhYmxlLCBleGVjdXRhYmxlKTsKKyAgICB9CisK
KyAgICBtX2Z1bmN0aW9uRXhwcnMuZ3Jvdyh1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5j
dGlvbkV4cHJzKCkpOworICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2st
Pm51bWJlck9mRnVuY3Rpb25FeHBycygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAg
ICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlu
a2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSk7CisgICAgICAgIHVuc2lnbmVkIGxpbmVDb3Vu
dCA9IHVubGlua2VkRXhlY3V0YWJsZS0+bGluZUNvdW50KCk7CisgICAgICAgIHVuc2lnbmVkIGZp
cnN0TGluZSA9IG93bmVyRXhlY3V0YWJsZS0+bGluZU5vKCkgKyB1bmxpbmtlZEV4ZWN1dGFibGUt
PmZpcnN0TGluZU9mZnNldCgpOworICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJj
ZU9mZnNldCArIHVubGlua2VkRXhlY3V0YWJsZS0+c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgdW5z
aWduZWQgc291cmNlTGVuZ3RoID0gdW5saW5rZWRFeGVjdXRhYmxlLT5zb3VyY2VMZW5ndGgoKTsK
KyAgICAgICAgU291cmNlQ29kZSBjb2RlKG1fc291cmNlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZz
ZXQgKyBzb3VyY2VMZW5ndGgsIGZpcnN0TGluZSk7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEs
IGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291
bnQpOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX2dsb2JhbERhdGEsIG93bmVy
RXhlY3V0YWJsZSwgZXhlY3V0YWJsZSk7CisgICAgfQorCisgICAgaWYgKHVubGlua2VkQ29kZUJs
b2NrLT5oYXNSYXJlRGF0YSgpKSB7CisgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nhcnko
KTsKKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dEJ1ZmZlckNvdW50KCkpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZm
ZXJzLmdyb3coY291bnQpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRDb2RlQmxvY2s6OkNvbnN0
YW50QnVmZmVyJiBidWZmZXIgPSB1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIoaSk7
CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaV0gPSBidWZm
ZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9
IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKKyAgICAg
ICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuZ3Jvdyhjb3VudCk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gdW5saW5rZWRDb2RlQmxv
Y2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9l
eGNlcHRpb25IYW5kbGVyc1tpXS5zdGFydCA9IGhhbmRsZXIuc3RhcnQ7CisgICAgICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXS5lbmQgPSBoYW5kbGVyLmVuZDsK
KyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldLnRhcmdl
dCA9IGhhbmRsZXIudGFyZ2V0OworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0
aW9uSGFuZGxlcnNbaV0uc2NvcGVEZXB0aCA9IGhhbmRsZXIuc2NvcGVEZXB0aCArIGJhc2VTY29w
ZURlcHRoOworI2lmIEVOQUJMRShKSVQpICYmIEVOQUJMRShMTElOVCkKKyAgICAgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldLm5hdGl2ZUNvZGUgPSBDb2RlTG9j
YXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRk
cmVzcyhMTEludDo6Z2V0Q29kZVB0cihsbGludF9vcF9jYXRjaCkpKTsKKyNlbmRpZgorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmdyb3coY291bnQpOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRv
ciBwdHIgPSB1bmxpbmtlZENvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGkpLm9mZnNl
dFRhYmxlLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGU6
OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB1bmxpbmtlZENvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGkpLm9mZnNldFRhYmxlLmVuZCgpOworICAgICAgICAgICAgICAg
IGZvciAoOyBwdHIgIT0gZW5kOyArK3B0cikgeworICAgICAgICAgICAgICAgICAgICBPZmZzZXRM
b2NhdGlvbiBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldC5icmFuY2hPZmZzZXQg
PSBwdHItPnZhbHVlOworICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuYWRkKHB0ci0+a2V5LCBvZmZzZXQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hK
dW1wVGFibGVzKCkpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNo
SnVtcFRhYmxlcy5ncm93KGNvdW50KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiBzb3VyY2VUYWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFi
bGUoaSk7CisgICAgICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBkZXN0VGFibGUgPSBtX3Jh
cmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXNbaV07CisgICAgICAgICAgICAgICAg
ZGVzdFRhYmxlLmJyYW5jaE9mZnNldHMgPSBzb3VyY2VUYWJsZS5icmFuY2hPZmZzZXRzOworICAg
ICAgICAgICAgICAgIGRlc3RUYWJsZS5taW4gPSBzb3VyY2VUYWJsZS5taW47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mQ2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMuZ3Jvdyhjb3VudCk7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc291cmNlVGFibGUgPSB1bmxpbmtlZENv
ZGVCbG9jay0+Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKGkpOworICAgICAgICAgICAgICAgIFNp
bXBsZUp1bXBUYWJsZSYgZGVzdFRhYmxlID0gbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hK
dW1wVGFibGVzW2ldOworICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5icmFuY2hPZmZzZXRzID0g
c291cmNlVGFibGUuYnJhbmNoT2Zmc2V0czsKKyAgICAgICAgICAgICAgICBkZXN0VGFibGUubWlu
ID0gc291cmNlVGFibGUubWluOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQWxsb2NhdGUgbWV0YWRhdGEgYnVmZmVycyBmb3IgdGhlIGJ5dGVjb2RlCisgICAgaWYg
KHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mTExpbnRDYWxsTGlua0lu
Zm9zKCkpCisgICAgICAgIG1fbGxpbnRDYWxsTGlua0luZm9zLmdyb3coc2l6ZSk7CisgICAgaWYg
KHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mQXJyYXlQcm9maWxlcygp
KQorICAgICAgICBtX2FycmF5UHJvZmlsZXMuZ3JvdyhzaXplKTsKKyAgICBpZiAoc2l6ZV90IHNp
emUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkpCisgICAgICAg
IG1fdmFsdWVQcm9maWxlcy5ncm93KHNpemUpOworICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlu
a2VkQ29kZUJsb2NrLT5udW1iZXJPZlJlc29sdmVPcGVyYXRpb25zKCkpCisgICAgICAgIG1fcmVz
b2x2ZU9wZXJhdGlvbnMuZ3JvdyhzaXplKTsKKyAgICBzaXplX3QgcHV0VG9CYXNlQ291bnQgPSB1
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZQdXRUb0Jhc2VPcGVyYXRpb25zKCk7CisgICAgbV9w
dXRUb0Jhc2VPcGVyYXRpb25zLnJlc2VydmVDYXBhY2l0eShwdXRUb0Jhc2VDb3VudCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwdXRUb0Jhc2VDb3VudDsgKytpKQorICAgICAgICBtX3B1
dFRvQmFzZU9wZXJhdGlvbnMuYXBwZW5kKFB1dFRvQmFzZU9wZXJhdGlvbihpc1N0cmljdE1vZGUo
KSkpOworCisgICAgQVNTRVJUKG1fcHV0VG9CYXNlT3BlcmF0aW9ucy5jYXBhY2l0eSgpID09IHB1
dFRvQmFzZUNvdW50KTsKKworICAgIC8vIENvcHkgYW5kIHRyYW5zbGF0ZSB0aGUgVW5saW5rZWRJ
bnN0cnVjdGlvbnMKKyAgICBzaXplX3QgaW5zdHJ1Y3Rpb25Db3VudCA9IHVubGlua2VkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbiogcGMg
PSB1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuZGF0YSgpOworICAgIFZlY3RvcjxJ
bnN0cnVjdGlvbj4gaW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9uQ291bnQpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsg
KSB7CisgICAgICAgIHVuc2lnbmVkIG9wTGVuZ3RoID0gb3Bjb2RlTGVuZ3RoKHBjW2ldLnUub3Bj
b2RlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zW2ldID0gZ2xvYmFsRGF0YSgpLT5pbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlKHBjW2ldLnUub3Bjb2RlKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDE7
IGogPCBvcExlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBpZiAoc2l6ZW9mKGludDMyX3QpICE9
IHNpemVvZihpbnRwdHJfdCkpCisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51
LnBvaW50ZXIgPSAwOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51Lm9wZXJhbmQg
PSBwY1tpICsgal0udS5vcGVyYW5kOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAocGNbaV0u
dS5vcGNvZGUpIHsKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBjYXNlIG9w
X2dldF9hcmd1bWVudF9ieV92YWw6IHsKKyAgICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRl
eCA9IHBjW2kgKyBvcExlbmd0aCAtIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIG1fYXJyYXlQ
cm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7CisgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMl0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5
UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoCisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZToKKyAg
ICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV93aXRo
X2Jhc2U6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV93aXRoX3RoaXM6CisgICAgICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkOgorICAgICAgICBjYXNlIG9wX2NhbGxfcHV0X3Jlc3VsdDogeworICAgICAg
ICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gJm1fdmFsdWVQcm9maWxlc1twY1tpICsgb3BM
ZW5ndGggLSAxXS51Lm9wZXJhbmRdOworICAgICAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0
ZWNvZGVPZmZzZXQgPT0gLTEpOworICAgICAgICAgICAgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNl
dCA9IGk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSBwcm9m
aWxlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRf
YnlfdmFsOiB7CisgICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tpICsgb3BM
ZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQ
cm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyBvcExlbmd0aCAtIDFdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9ieV9p
ZF9vdXRfb2ZfbGluZToKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWlu
OgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfc2VsZjoKKyAgICAgICAgY2FzZSBv
cF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0
ZXJfY2hhaW46CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9zZWxmOgorICAgICAg
ICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX2N1c3RvbV9jaGFpbjoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAg
ICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgorICAgICAgICBjYXNlIG9wX2dldF9zdHJp
bmdfbGVuZ3RoOgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIG9wX2NhbGw6CisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAgICAgICBp
bnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tpICsgb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9m
aWxlKGkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gJm1f
YXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07CisgICAgICAgICAgICAvLyBmYWxsdGhy
b3VnaAorICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA0XSA9ICZtX2xsaW50Q2FsbExpbmtJbmZvc1twY1tpICsgNF0udS5v
cGVyYW5kXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9i
YWxfY29uc3Rfbm9wOiB7CisgICAgICAgICAgICBBU1NFUlQoY29kZVR5cGUoKSA9PSBHbG9iYWxD
b2RlKTsKKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBpZGVudGlmaWVyKHBjW2kgKyA0
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2Jh
bE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICBp
ZiAoZW50cnkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGlmIChlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyAwXSA9IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9pbml0
X2dsb2JhbF9jb25zdF9jaGVjayk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAx
XSA9ICZnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAzXSA9IGVudHJ5LmFkZHJlc3NPZklzV2F0Y2hlZCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDBdID0gZ2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2Rl
KG9wX2luaXRfZ2xvYmFsX2NvbnN0KTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMV0g
PSAmZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGkgKz0gb3BMZW5ndGg7CisgICAgfQorICAgIG1faW5zdHJ1
Y3Rpb25zID0gV1RGOjpSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+KGluc3RydWN0aW9ucyk7
CisKKyAgICBpZiAoQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQorICAg
ICAgICBkdW1wKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOworICAgIG1fZ2xvYmFsRGF0
YS0+ZmluaXNoZWRDb21waWxpbmcodGhpcyk7CiB9CiAKIENvZGVCbG9jazo6fkNvZGVCbG9jaygp
CkBAIC0xNzQ0LDE1ICsxOTM3LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMo
aW50IG5ld1ZhbHVlKQogI2VuZGlmCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjphZGRQYXJhbWV0ZXIo
KQotewotICAgIG1fbnVtUGFyYW1ldGVycysrOwotCi0jaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVS
KQotICAgIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLmFwcGVuZChWYWx1ZVByb2ZpbGUoKSk7Ci0j
ZW5kaWYKLX0KLQogdm9pZCBDb2RlQmxvY2s6OnZpc2l0U3RydWN0dXJlcyhTbG90VmlzaXRvciYg
dmlzaXRvciwgSW5zdHJ1Y3Rpb24qIHZQQykKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0
ZXIgPSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOwpAQCAtMTgzNSw2ICsyMDE5LDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIGlm
ICghIW1fYWx0ZXJuYXRpdmUpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOwogCisgICAgdmlzaXRvci5hcHBlbmQoJm1fdW5saW5rZWRDb2RlKTsKKwogICAg
IC8vIFRoZXJlIGFyZSB0aHJlZSB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0aW9uYWwgZmlu
YWxpemVyczogbGF6eSBieXRlY29kZSBmcmVlaW5nLAogICAgIC8vIGlubGluZSBjYWNoZSBjbGVh
cmluZywgYW5kIGpldHRpc29uaW5nLiBUaGUgcHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBk
byBhdAogICAgIC8vIGxlYXN0IG9uZSBvZiB0aG9zZSB0aGluZ3MgaXMgcHJvYmFibHkgcXVpdGUg
Y2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hhdApAQCAtMTk0OSw4ICsyMTM1
LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKICNpZiBFTkFC
TEUoTExJTlQpCiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRhLT5p
bnRlcnByZXRlcjsKICAgICBpZiAoISFudW1iZXJPZkluc3RydWN0aW9ucygpKSB7Ci0gICAgICAg
IGZvciAoc2l6ZV90IHNpemUgPSBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBjdXJJbnN0
cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnMoKVttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ld
XTsKKyAgICAgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnMgPSBtX3VubGlua2VkQ29kZS0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKTsKKyAg
ICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUo
KSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBjdXJJ
bnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnMoKVtwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tp
XV07CiAgICAgICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJJbnN0
cnVjdGlvblswXS51Lm9wY29kZSkpIHsKICAgICAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgog
ICAgICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CkBAIC0yMTMyLDE0ICsy
MzE5LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9iamVj
dCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKLSAgICB2aXNpdG9y
LmFwcGVuZCgmbV9zeW1ib2xUYWJsZSk7Ci0gICAgaWYgKG1fcmFyZURhdGEpIHsKKyAgICB2aXNp
dG9yLmFwcGVuZCgmbV91bmxpbmtlZENvZGUpOworICAgIGlmIChtX3JhcmVEYXRhKQogICAgICAg
ICBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGUudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0g
ICAgICAgIHNpemVfdCByZWdFeHBDb3VudCA9IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxSZWdFeHA+KiByZWdleHBzID0gbV9yYXJlRGF0YS0+bV9y
ZWdleHBzLmRhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdFeHBDb3Vu
dDsgaSsrKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQocmVnZXhwcyArIGkpOwotICAgIH0K
ICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhtX2NvbnN0YW50UmVnaXN0ZXJzLmRhdGEoKSwgbV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9m
dW5jdGlvbkV4cHJzLnNpemUoKTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9mdW5j
dGlvbkV4cHJzW2ldKTsKQEAgLTIyNjYsNjQgKzI0NDgsMTcgQEAgSGFuZGxlckluZm8qIENvZGVC
bG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQog
aW50IENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KQogewogICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygp
LnNpemUoKSk7Ci0KLSAgICBWZWN0b3I8TGluZUluZm8+JiBsaW5lSW5mbyA9IG1fbGluZUluZm87
Ci0KLSAgICBpbnQgbG93ID0gMDsKLSAgICBpbnQgaGlnaCA9IGxpbmVJbmZvLnNpemUoKTsKLSAg
ICB3aGlsZSAobG93IDwgaGlnaCkgewotICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBs
b3cpIC8gMjsKLSAgICAgICAgaWYgKGxpbmVJbmZvW21pZF0uaW5zdHJ1Y3Rpb25PZmZzZXQgPD0g
Ynl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBoaWdoID0gbWlkOwotICAgIH0KLQotICAgIGlmICghbG93KQotICAgICAg
ICByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpLmZpcnN0TGluZSgpOwotICAgIHJl
dHVybiBsaW5lSW5mb1tsb3cgLSAxXS5saW5lTnVtYmVyOworICAgIHJldHVybiBtX293bmVyRXhl
Y3V0YWJsZS0+bGluZU5vKCkgKyBtX3VubGlua2VkQ29kZS0+bGluZU51bWJlckZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmV4cHJlc3Npb25S
YW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90
LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCkKIHsKLSAgICBBU1NFUlQoYnl0ZWNv
ZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotCi0gICAgaWYgKCFtX3JhcmVEYXRh
KSB7Ci0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAg
ICAgICAgZGl2b3QgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPEV4
cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbyA9IG1fcmFyZURhdGEtPm1fZXhwcmVz
c2lvbkluZm87Ci0KLSAgICBpbnQgbG93ID0gMDsKLSAgICBpbnQgaGlnaCA9IGV4cHJlc3Npb25J
bmZvLnNpemUoKTsKLSAgICB3aGlsZSAobG93IDwgaGlnaCkgewotICAgICAgICBpbnQgbWlkID0g
bG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKLSAgICAgICAgaWYgKGV4cHJlc3Npb25JbmZvW21pZF0u
aW5zdHJ1Y3Rpb25PZmZzZXQgPD0gYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICBsb3cgPSBt
aWQgKyAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBoaWdoID0gbWlkOwotICAgIH0KLQot
ICAgIEFTU0VSVChsb3cpOwotICAgIGlmICghbG93KSB7Ci0gICAgICAgIHN0YXJ0T2Zmc2V0ID0g
MDsKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAgICAgICAgZGl2b3QgPSAwOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc3RhcnRPZmZzZXQgPSBleHByZXNzaW9uSW5mb1tsb3cgLSAx
XS5zdGFydE9mZnNldDsKLSAgICBlbmRPZmZzZXQgPSBleHByZXNzaW9uSW5mb1tsb3cgLSAxXS5l
bmRPZmZzZXQ7Ci0gICAgZGl2b3QgPSBleHByZXNzaW9uSW5mb1tsb3cgLSAxXS5kaXZvdFBvaW50
ICsgbV9zb3VyY2VPZmZzZXQ7Ci0gICAgcmV0dXJuOworICAgIG1fdW5saW5rZWRDb2RlLT5leHBy
ZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgIGRpdm90ICs9IG1fc291cmNlT2Zmc2V0OwogfQogCiB2
b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQogewotICAg
IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKICNpZiBFTkFCTEUo
TExJTlQpCiAgICAgbV9sbGludENhbGxMaW5rSW5mb3Muc2hyaW5rVG9GaXQoKTsKICNlbmRpZgpA
QCAtMjMzNSw3ICsyNDcwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01v
ZGUgc2hyaW5rTW9kZSkKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgaWYgKHNocmlu
a01vZGUgPT0gRWFybHlTaHJpbmspCiAgICAgICAgIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNo
cmlua1RvRml0KCk7Ci0gICAgbV92YWx1ZVByb2ZpbGVzLnNocmlua1RvRml0KCk7CiAgICAgbV9y
YXJlQ2FzZVByb2ZpbGVzLnNocmlua1RvRml0KCk7CiAgICAgbV9zcGVjaWFsRmFzdENhc2VQcm9m
aWxlcy5zaHJpbmtUb0ZpdCgpOwogI2VuZGlmCkBAIC0yMzQ3LDE1ICsyNDgxLDExIEBAIHZvaWQg
Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiAgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKICAgICB9IC8vIGVsc2UgZG9uJ3Qgc2hy
aW5rIHRoZXNlLCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBwb2ludGVkIHBvaW50ZXJz
IGludG8gdGhlc2UgdGFibGVzLgogCi0gICAgbV9yZXNvbHZlT3BlcmF0aW9ucy5zaHJpbmtUb0Zp
dCgpOwotICAgIG1fbGluZUluZm8uc2hyaW5rVG9GaXQoKTsKICAgICBpZiAobV9yYXJlRGF0YSkg
ewogICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0KCk7
Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaHJpbmtUb0ZpdCgpOwogICAgICAgICBt
X3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0
KCk7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtU
b0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvLnNocmlua1RvRml0
KCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgbV9yYXJlRGF0YS0+bV9jYWxsUmV0dXJuSW5k
ZXhWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKICNlbmRpZgpAQCAtMjM4Myw3ICsyNTEzLDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAg
QVNTRVJUKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKICAgICBBU1NFUlQobmVlZHNGdWxs
U2NvcGVDaGFpbigpKTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+dW5jaGVja2VkUihhY3RpdmF0
aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24g
PSBKU0FjdGl2YXRpb246OmNyZWF0ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1l
LCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkpOwor
ICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIHRoaXMpOwogICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihhY3RpdmF0aW9uUmVnaXN0ZXIoKSkgPSBKU1ZhbHVlKGFjdGl2YXRpb24pOwogICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiB9CkBAIC0yODc4LDggKzMwMDgsOCBA
QCBib29sIENvZGVCbG9jazo6dXNlc09wY29kZShPcGNvZGVJRCBvcGNvZGVJRCkKIAogU3RyaW5n
IENvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKGludCByZWdpc3Rlck51bWJlcikKIHsKLSAgICBT
eW1ib2xUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9zeW1ib2xUYWJsZS0+ZW5kKCk7Ci0gICAgZm9y
IChTeW1ib2xUYWJsZTo6aXRlcmF0b3IgcHRyID0gbV9zeW1ib2xUYWJsZS0+YmVnaW4oKTsgcHRy
ICE9IGVuZDsgKytwdHIpIHsKKyAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgZW5kID0gc3ltYm9s
VGFibGUoKS0+ZW5kKCk7CisgICAgZm9yIChTeW1ib2xUYWJsZTo6aXRlcmF0b3IgcHRyID0gc3lt
Ym9sVGFibGUoKS0+YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpIHsKICAgICAgICAgaWYgKHB0
ci0+dmFsdWUuZ2V0SW5kZXgoKSA9PSByZWdpc3Rlck51bWJlcikKICAgICAgICAgICAgIHJldHVy
biBTdHJpbmcocHRyLT5rZXkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAppbmRleCBiOGYwNDczOGIzOWI3OGVhMjBiZmE4Yjc0NmZmNDMwNGNkMDUz
YzQzLi41NTljZmM1YzdlZGM2NDViNWU2NTMzOGUxYTgzNDA2NGU1Mjc2OTNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0xMjEsNyArMTIxLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBDb2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKICAgICAgICAgCi0gICAgICAgIENvZGVC
bG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZl
KTsKKyAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rZWRDb2RlQmxvY2sqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIGJhc2VTY29wZURl
cHRoLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQ
YXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpOwogCiAgICAgICAgIFdyaXRlQmFycmll
cjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgICAgIEhlYXAqIG1faGVhcDsK
QEAgLTEzMSw3ICsxMzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGlu
dCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
ICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpOwotICAgICAgICB2b2lkIGFk
ZFBhcmFtZXRlcigpOwogICAgICAgICAKICAgICAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0
ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KQEAgLTQ0NSw4ICs0NDQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KHJldHVy
bkFkZHJlc3MpIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICAgICAgfQogCi0gICAgICAg
IHZvaWQgc2V0SXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1
bmN0aW9uKSB7IG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uID0gaXNOdW1lcmljQ29tcGFyZUZ1
bmN0aW9uOyB9Ci0gICAgICAgIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKCkgeyByZXR1
cm4gbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb247IH0KKyAgICAgICAgYm9vbCBpc051bWVyaWND
b21wYXJlRnVuY3Rpb24oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aXNOdW1lcmljQ29tcGFy
ZUZ1bmN0aW9uKCk7IH0KIAogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQogICAgICAgICBSZWZDb3Vu
dGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0
aW9uczsgfQpAQCAtNTM1LDEwICs1MzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBzZXRUaGlzUmVnaXN0ZXIoaW50IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRo
aXNSZWdpc3RlcjsgfQogICAgICAgICBpbnQgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4g
bV90aGlzUmVnaXN0ZXI7IH0KIAotICAgICAgICB2b2lkIHNldE5lZWRzRnVsbFNjb3BlQ2hhaW4o
Ym9vbCBuZWVkc0Z1bGxTY29wZUNoYWluKSB7IG1fbmVlZHNGdWxsU2NvcGVDaGFpbiA9IG5lZWRz
RnVsbFNjb3BlQ2hhaW47IH0KLSAgICAgICAgYm9vbCBuZWVkc0Z1bGxTY29wZUNoYWluKCkgY29u
c3QgeyByZXR1cm4gbV9uZWVkc0Z1bGxTY29wZUNoYWluOyB9Ci0gICAgICAgIHZvaWQgc2V0VXNl
c0V2YWwoYm9vbCB1c2VzRXZhbCkgeyBtX3VzZXNFdmFsID0gdXNlc0V2YWw7IH0KLSAgICAgICAg
Ym9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0V2YWw7IH0KKyAgICAgICAgYm9v
bCBuZWVkc0Z1bGxTY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4oKTsgfQorICAgICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPnVzZXNFdmFsKCk7IH0KICAgICAgICAgCiAgICAgICAgIHZv
aWQgc2V0QXJndW1lbnRzUmVnaXN0ZXIoaW50IGFyZ3VtZW50c1JlZ2lzdGVyKQogICAgICAgICB7
CkBAIC02MDAsMzcgKzU5NiwyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmICh1
c2VzQXJndW1lbnRzKCkgJiYgb3BlcmFuZCA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIo
YXJndW1lbnRzUmVnaXN0ZXIoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYW5kID49IG1fc3ltYm9sVGFibGUtPmNhcHR1cmVTdGFydCgp
IAotICAgICAgICAgICAgICAgICYmIG9wZXJhbmQgPCBtX3N5bWJvbFRhYmxlLT5jYXB0dXJlRW5k
KCk7CisgICAgICAgICAgICAvLyBXZSdyZSBpbiBnbG9iYWwgY29kZSBzbyB0aGVyZSBhcmUgbm8g
bG9jYWxzIHRvIGNhcHR1cmUKKyAgICAgICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kID49
IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpCisgICAgICAgICAgICAgICAgJiYgb3BlcmFu
ZCA8IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKTsKICAgICAgICAgfQogCi0gICAgICAgIENv
ZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQorICAgICAgICBD
b2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb2RlVHlw
ZSgpOyB9CiAKICAgICAgICAgU291cmNlUHJvdmlkZXIqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlLmdldCgpOyB9CiAgICAgICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlT2Zmc2V0OyB9CiAKLSAgICAgICAgc2l6ZV90IG51bWJlck9mSnVt
cFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLnNpemUoKTsgfQotICAgICAg
ICB2b2lkIGFkZEp1bXBUYXJnZXQodW5zaWduZWQganVtcFRhcmdldCkgeyBtX2p1bXBUYXJnZXRz
LmFwcGVuZChqdW1wVGFyZ2V0KTsgfQotICAgICAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0KGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tpbmRleF07IH0KLSAgICAgICAgdW5z
aWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLmxhc3Qo
KTsgfQorICAgICAgICBzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkp1bXBUYXJnZXRzKCk7IH0KKyAgICAgICAgdW5zaWdu
ZWQganVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5q
dW1wVGFyZ2V0KGluZGV4KTsgfQogCiAgICAgICAgIHZvaWQgY3JlYXRlQWN0aXZhdGlvbihDYWxs
RnJhbWUqKTsKIAogICAgICAgICB2b2lkIGNsZWFyRXZhbENhY2hlKCk7CiAgICAgICAgIAogICAg
ICAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKGludCByZWdpc3Rlck51bWJlcik7Ci0gICAgICAg
IAotICAgICAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24odW5zaWduZWQgcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgbV9wcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9ucy5hcHBlbmQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbik7Ci0g
ICAgICAgIH0KLSNpZiBFTkFCTEUoTExJTlQpCi0gICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBh
ZGRMTEludENhbGxMaW5rSW5mbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbGxpbnRDYWxs
TGlua0luZm9zLmFwcGVuZChMTEludENhbGxMaW5rSW5mbygpKTsKLSAgICAgICAgICAgIHJldHVy
biAmbV9sbGludENhbGxMaW5rSW5mb3MubGFzdCgpOwotICAgICAgICB9Ci0jZW5kaWYKKwogI2lm
IEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Mo
c2l6ZV90IHNpemUpIHsgbV9zdHJ1Y3R1cmVTdHViSW5mb3MuZ3JvdyhzaXplKTsgfQogICAgICAg
ICBzaXplX3QgbnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MoKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZVN0dWJJbmZvcy5zaXplKCk7IH0KQEAgLTY2MiwxNCArNjQ5LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0x
KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFZhbHVlUHJvZmlsZSogYWRkVmFsdWVQcm9maWxlKGludCBieXRlY29kZU9mZnNldCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0ICE9IC0xKTsKLSAgICAg
ICAgICAgIEFTU0VSVChtX3ZhbHVlUHJvZmlsZXMuaXNFbXB0eSgpIHx8IG1fdmFsdWVQcm9maWxl
cy5sYXN0KCkubV9ieXRlY29kZU9mZnNldCA8IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAg
IG1fdmFsdWVQcm9maWxlcy5hcHBlbmQoVmFsdWVQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICByZXR1cm4gJm1fdmFsdWVQcm9maWxlcy5sYXN0KCk7Ci0gICAgICAgIH0KKwog
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVl
UHJvZmlsZXMuc2l6ZSgpOyB9CiAgICAgICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlKGlu
dCBpbmRleCkKICAgICAgICAgewpAQCAtNzk1LDI1ICs3NzUsMjQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CiAKICAgICAgICAgc2l6ZV90
IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8g
bV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkgOiAwOyB9Ci0gICAgICAgIHZv
aWQgYWRkRXhjZXB0aW9uSGFuZGxlcihjb25zdCBIYW5kbGVySW5mbyYgaGFubGVyKSB7IGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFu
ZGxlcnMuYXBwZW5kKGhhbmxlcik7IH0KLSAgICAgICAgSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhh
bmRsZXIoaW50IGluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEt
Pm1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9Ci0KLSAgICAgICAgdm9pZCBhZGRFeHByZXNz
aW9uSW5mbyhjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvJiBleHByZXNzaW9uSW5mbykKKyAgICAg
ICAgdm9pZCBhbGxvY2F0ZUhhbmRsZXJzKGNvbnN0IFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZv
PiYgdW5saW5rZWRIYW5kbGVycykKICAgICAgICAgeworICAgICAgICAgICAgc2l6ZV90IGNvdW50
ID0gdW5saW5rZWRIYW5kbGVycy5zaXplKCk7CisgICAgICAgICAgICBpZiAoIWNvdW50KQorICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nh
cnkoKTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm8uYXBwZW5kKGV4
cHJlc3Npb25JbmZvKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYWRkTGluZUluZm8odW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCBsaW5lTm8pCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFZlY3RvcjxMaW5lSW5mbz4mIGxpbmVJbmZvID0gbV9saW5lSW5mbzsKLSAgICAgICAgICAgIGlm
ICghbGluZUluZm8uc2l6ZSgpIHx8IGxpbmVJbmZvLmxhc3QoKS5saW5lTnVtYmVyICE9IGxpbmVO
bykgewotICAgICAgICAgICAgICAgIExpbmVJbmZvIGluZm8gPSB7IGJ5dGVjb2RlT2Zmc2V0LCBs
aW5lTm8gfTsKLSAgICAgICAgICAgICAgICBsaW5lSW5mby5hcHBlbmQoaW5mbyk7CisgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZShjb3VudCk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldLnN0YXJ0ID0gdW5saW5rZWRI
YW5kbGVyc1tpXS5zdGFydDsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzW2ldLmVuZCA9IHVubGlua2VkSGFuZGxlcnNbaV0uZW5kOworICAgICAgICAgICAg
ICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0udGFyZ2V0ID0gdW5saW5rZWRI
YW5kbGVyc1tpXS50YXJnZXQ7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVyc1tpXS5zY29wZURlcHRoID0gdW5saW5rZWRIYW5kbGVyc1tpXS5zY29wZURlcHRo
OwogICAgICAgICAgICAgfQorCiAgICAgICAgIH0KKyAgICAgICAgSGFuZGxlckluZm8mIGV4Y2Vw
dGlvbkhhbmRsZXIoaW50IGluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9CiAKLSAgICAgICAgYm9vbCBoYXNF
eHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fcmFyZURhdGEgJiYgbV9yYXJlRGF0YS0+bV9leHBy
ZXNzaW9uSW5mby5zaXplKCk7IH0KKyAgICAgICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNFeHByZXNzaW9uSW5mbygpOyB9CiAKICNpZiBFTkFC
TEUoSklUKQogICAgICAgICBWZWN0b3I8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQ+
JiBjYWxsUmV0dXJuSW5kZXhWZWN0b3IoKQpAQCAtODg4LDYgKzg2Nyw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KG1fZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCksIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCB2KTsKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KKworCiAgICAgICAgIHVuc2lnbmVkIGFk
ZE9yRmluZENvbnN0YW50KEpTVmFsdWUpOwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJz
W2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CiAgICAgICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CkBAIC05MTEsMjAgKzg5
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzW2lu
ZGV4XS5nZXQoKTsgfQogCi0gICAgICAgIHVuc2lnbmVkIGFkZFJlZ0V4cChSZWdFeHAqIHIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOwotICAg
ICAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLmFwcGVuZChXcml0ZUJhcnJpZXI8UmVnRXhw
PigqbV9nbG9iYWxEYXRhLCBvd25lckV4ZWN1dGFibGUoKSwgcikpOwotICAgICAgICAgICAgcmV0
dXJuIHNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdFeHBzKCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhw
cy5zaXplKCk7Ci0gICAgICAgIH0KLSAgICAgICAgUmVnRXhwKiByZWdleHAoaW50IGluZGV4KSBj
b25zdCB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwc1tp
bmRleF0uZ2V0KCk7IH0KKyAgICAgICAgUmVnRXhwKiByZWdleHAoaW50IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+cmVnZXhwKGluZGV4KTsgfQogCiAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkgY29uc3QKICAgICAgICAgewpAQCAtOTM5LDEw
ICs5MDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fY29u
c3RhbnRCdWZmZXJzLmFwcGVuZChidWZmZXIpOwogICAgICAgICAgICAgcmV0dXJuIHNpemU7CiAg
ICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnRCdWZmZXIodW5zaWduZWQgbGVu
Z3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRkQ29uc3RhbnRCdWZmZXIoVmVj
dG9yPEpTVmFsdWU+KGxlbmd0aCkpOwotICAgICAgICB9CiAKICAgICAgICAgVmVjdG9yPEpTVmFs
dWU+JiBjb25zdGFudEJ1ZmZlckFzVmVjdG9yKHVuc2lnbmVkIGluZGV4KQogICAgICAgICB7CkBA
IC05NzksNyArOTQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJs
ZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVE
YXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsgfQogCiAKLSAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgeyBy
ZXR1cm4gbV9zeW1ib2xUYWJsZS5nZXQoKTsgfQorICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+c3ltYm9sVGFibGUo
KTsgfQogCiAgICAgICAgIEV2YWxDb2RlQ2FjaGUmIGV2YWxDb2RlQ2FjaGUoKSB7IGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZTsg
fQogCkBAIC0xMjIzLDYgKzExODcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVh
bCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7CiAKKyAgICAgICAgVW5saW5rZWRDb2Rl
QmxvY2sqIHVubGlua2VkQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUu
Z2V0KCk7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBERkdDb2RlQmxv
Y2tzOwogICAgICAgICAKQEAgLTEyMzQsNyArMTIwMCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlv
bnNBbmRDb3VudExpdmVuZXNzKE9wZXJhdGlvbkluUHJvZ3Jlc3MsIHVuc2lnbmVkJiBudW1iZXJP
ZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzKTsKICNlbmRpZgotICAgICAgICAKKworICAgICAgICB2b2lkIHNldElkZW50aWZp
ZXJzKGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRpZmllcnMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChtX2lkZW50aWZpZXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBt
X2lkZW50aWZpZXJzLmFwcGVuZFZlY3RvcihpZGVudGlmaWVycyk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4gPiYgY29uc3RhbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgY291
bnQgPSBjb25zdGFudHMuc2l6ZSgpOworICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5y
ZXNpemUoY291bnQpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgICAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KCptX2dsb2Jh
bERhdGEsIG93bmVyRXhlY3V0YWJsZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOworICAgICAgICB9
CisKICAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSosIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlv
bj46OmNvbnN0X2l0ZXJhdG9yJiBiZWdpbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRl
cmF0b3ImKTsKIAogICAgICAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShFeGVjU3RhdGUqLCBpbnQg
cikgY29uc3Q7CkBAIC0xMjg0LDI5ICsxMjY0LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVO
QUJMRShKSVQpCiAgICAgICAgIHZvaWQgcmVzZXRTdHViSW50ZXJuYWwoUmVwYXRjaEJ1ZmZlciYs
IFN0cnVjdHVyZVN0dWJJbmZvJik7CiAjZW5kaWYKLSAgICAgICAgCisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmxpbmtlZENvZGVCbG9jaz4gbV91bmxpbmtlZENvZGU7CiAgICAgICAgIGludCBtX251
bVBhcmFtZXRlcnM7Ci0KICAgICAgICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFibGU+IG1f
b3duZXJFeGVjdXRhYmxlOwogICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKIAog
ICAgICAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwotCiAg
ICAgICAgIGludCBtX3RoaXNSZWdpc3RlcjsKICAgICAgICAgaW50IG1fYXJndW1lbnRzUmVnaXN0
ZXI7CiAgICAgICAgIGludCBtX2FjdGl2YXRpb25SZWdpc3RlcjsKIAotICAgICAgICBib29sIG1f
bmVlZHNGdWxsU2NvcGVDaGFpbjsKLSAgICAgICAgYm9vbCBtX3VzZXNFdmFsOwotICAgICAgICBi
b29sIG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uOwogICAgICAgICBib29sIG1faXNTdHJpY3RN
b2RlOwogCi0gICAgICAgIENvZGVUeXBlIG1fY29kZVR5cGU7Ci0KICAgICAgICAgUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBtX3NvdXJjZTsKICAgICAgICAgdW5zaWduZWQgbV9zb3VyY2VPZmZzZXQ7
CiAKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
OwogI2lmIEVOQUJMRShMTElOVCkKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPExMSW50Q2FsbExp
bmtJbmZvLCA4PiBtX2xsaW50Q2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRM
aXN0PExMSW50Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMTEludENhbGxMaW5r
SW5mbz4gPiBtX2luY29taW5nTExJbnRDYWxsczsKQEAgLTEzNzgsMTggKzEzNTAsMTUgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fZXhlY3V0aW9uRW50cnlDb3VudDsKICNl
bmRpZgogCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9qdW1wVGFyZ2V0czsKLSAgICAgICAg
VmVjdG9yPHVuc2lnbmVkPiBtX2xvb3BUYXJnZXRzOwotCiAgICAgICAgIC8vIENvbnN0YW50IFBv
b2wKICAgICAgICAgVmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CiAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihSZWdpc3RlcikgPT0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPiksIFJlZ2lzdGVyX211c3RfYmVfc2FtZV9zaXplX2FzX1dyaXRlQmFycmllcl9Vbmtub3du
KTsKKyAgICAgICAgLy8gVE9ETzogVGhpcyBjb3VsZCBqdXN0IGJlIGEgcG9pbnRlciB0byBtX3Vu
bGlua2VkQ29kZUJsb2NrJ3MgZGF0YSwgYnV0IHRoZSBERkcgbXV0YXRlcworICAgICAgICAvLyBp
dCwgc28gd2UncmUgc3R1Y2sgd2l0aCBpdCBmb3Igbm93LgogICAgICAgICBWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+ID4gbV9jb25zdGFudFJlZ2lzdGVyczsKICAgICAgICAgVmVjdG9yPFdy
aXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+ID4gbV9mdW5jdGlvbkRlY2xzOwogICAgICAg
ICBWZWN0b3I8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gPiBtX2Z1bmN0aW9uRXhw
cnM7CiAKLSAgICAgICAgV3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRh
YmxlOwotCiAgICAgICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgICAg
IAogICAgICAgICBFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKQEAgLTE0
MDAsMTEgKzEzNjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdWludDE2X3QgbV9vcHRp
bWl6YXRpb25EZWxheUNvdW50ZXI7CiAgICAgICAgIHVpbnQxNl90IG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXI7CiAKLSAgICAgICAgVmVjdG9yPExpbmVJbmZvPiBtX2xpbmVJbmZvOwotI2lm
IEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKLSAgICAgICAgVmVjdG9yPENvbW1lbnQ+ICBtX2J5
dGVjb2RlQ29tbWVudHM7Ci0gICAgICAgIHNpemVfdCBtX2J5dGVjb2RlQ29tbWVudEl0ZXJhdG9y
OwotI2VuZGlmCiAgICAgICAgIFZlY3RvcjxSZXNvbHZlT3BlcmF0aW9ucz4gbV9yZXNvbHZlT3Bl
cmF0aW9uczsKICAgICAgICAgVmVjdG9yPFB1dFRvQmFzZU9wZXJhdGlvbiwgMT4gbV9wdXRUb0Jh
c2VPcGVyYXRpb25zOwogCkBAIC0xNDEzLDkgKzEzNzcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgcHVibGljOgogICAgICAgICAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlv
bkhhbmRsZXJzOwogCi0gICAgICAgICAgICAvLyBSYXJlIENvbnN0YW50cwotICAgICAgICAgICAg
VmVjdG9yPFdyaXRlQmFycmllcjxSZWdFeHA+ID4gbV9yZWdleHBzOwotCiAgICAgICAgICAgICAv
LyBCdWZmZXJzIHVzZWQgZm9yIGxhcmdlIGFycmF5IGxpdGVyYWxzCiAgICAgICAgICAgICBWZWN0
b3I8VmVjdG9yPEpTVmFsdWU+ID4gbV9jb25zdGFudEJ1ZmZlcnM7CiAgICAgICAgICAgICAKQEAg
LTE0MjYsOSArMTM4Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgICAgICBFdmFsQ29k
ZUNhY2hlIG1fZXZhbENvZGVDYWNoZTsKIAotICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiBpbmZv
IC0gcHJlc2VudCBpZiBkZWJ1Z2dpbmcuCi0gICAgICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblJh
bmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKLSAgICAgICAgICAgIC8vIExpbmUgaW5mbyAtIHBy
ZXNlbnQgaWYgcHJvZmlsaW5nIG9yIGRlYnVnZ2luZy4KICNpZiBFTkFCTEUoSklUKQogICAgICAg
ICAgICAgVmVjdG9yPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0PiBtX2NhbGxSZXR1
cm5JbmRleFZlY3RvcjsKICNlbmRpZgpAQCAtMTQ1Niw4ICsxNDE0LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgR2xvYmFsQ29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFBhc3NPd25QdHI8Q29kZUJs
b2NrPiBhbHRlcm5hdGl2ZSkKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJs
ZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwg
ZmFsc2UsIGFsdGVybmF0aXZlKQorICAgICAgICBHbG9iYWxDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxv
Y2ssIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGJhc2VTY29wZURlcHRo
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291
cmNlT2Zmc2V0LCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAg
ICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIGJhc2VTY29wZURlcHRoLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBhbHRl
cm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgfTsKQEAgLTE0NjksMTEgKzE0Mjcs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIFBy
b2dyYW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5
cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJu
YXRpdmUpCi0gICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNv
ZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKKyAg
ICAgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92
aWRlciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAgOiBH
bG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgZ2xvYmFs
T2JqZWN0LCAwLCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAg
ICAgICAgfQotICAgICAgICAKKwogI2lmIEVOQUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgogICAg
ICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2Nv
cGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKQEAgLTE0ODgsMjYgKzE0NDYsMTYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBFdmFsQ29kZUJsb2NrKENvcHlQYXJz
ZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCiAgICAgICAgICAgICA6IEdsb2JhbENv
ZGVCbG9jayhDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VTY29w
ZURlcHRoKG90aGVyLm1fYmFzZVNjb3BlRGVwdGgpCi0gICAgICAgICAgICAsIG1fdmFyaWFibGVz
KG90aGVyLm1fdmFyaWFibGVzKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
UHJvdmlkZXIsIGludCBiYXNlU2NvcGVEZXB0aCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVy
bmF0aXZlKQotICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBF
dmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCi0g
ICAgICAgICAgICAsIG1fYmFzZVNjb3BlRGVwdGgoYmFzZVNjb3BlRGVwdGgpCisgICAgICAgIEV2
YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFs
Q29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIGludCBiYXNlU2Nv
cGVEZXB0aCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAg
OiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgZ2xv
YmFsT2JqZWN0LCBiYXNlU2NvcGVEZXB0aCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZl
KQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgYmFzZVNjb3BlRGVwdGgoKSBj
b25zdCB7IHJldHVybiBtX2Jhc2VTY29wZURlcHRoOyB9Ci0KLSAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgdmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFyaWFibGVzW2luZGV4
XTsgfQotICAgICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiBtX3ZhcmlhYmxl
cy5zaXplKCk7IH0KLSAgICAgICAgdm9pZCBhZG9wdFZhcmlhYmxlcyhWZWN0b3I8SWRlbnRpZmll
cj4mIHZhcmlhYmxlcykKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdmFyaWFibGVz
LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBtX3ZhcmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7Ci0g
ICAgICAgIH0KKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgdmFyaWFibGUodW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIHVubGlua2VkRXZhbENvZGVCbG9jaygpLT52YXJpYWJsZShpbmRleCk7IH0K
KyAgICAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29k
ZUJsb2NrKCktPm51bVZhcmlhYmxlcygpOyB9CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgpAQCAtMTUxOSw4ICsxNDY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5k
aWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGludCBtX2Jhc2VTY29wZURlcHRoOwotICAgICAg
ICBWZWN0b3I8SWRlbnRpZmllcj4gbV92YXJpYWJsZXM7CisgICAgICAgIFVubGlua2VkRXZhbENv
ZGVCbG9jayogdW5saW5rZWRFdmFsQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4ganNDYXN0PFVu
bGlua2VkRXZhbENvZGVCbG9jayo+KHVubGlua2VkQ29kZUJsb2NrKCkpOyB9CiAgICAgfTsKIAog
ICAgIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CkBAIC0xNTMw
LDggKzE0NzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAg
ICAgICAgRnVuY3Rpb25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zm
c2V0LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2
ZSA9IG51bGxwdHIpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNv
ZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGlzQ29u
c3RydWN0b3IsIGFsdGVybmF0aXZlKQorICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlv
bkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQs
IFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSA9IG51bGxwdHIpCisgICAgICAgICAg
ICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIDAsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGFsdGVybmF0aXZlKQogICAg
ICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3Bjb2RlLmgKaW5kZXggM2NlNTZjODBlZWViMGJiMTYzODY1M2JlMjk0NTljYzQyYzI0NjNhYi4u
NDQ3MzY1MTVmYTFiNWQyMmRjZWJmZjFiMDZhNTlmMjMyZGI4MmEzNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMTE4LDcgKzExOCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBtYWNybyhvcF9wdXRfdG9fYmFzZSwgNSkgXAogICAgICAgICBtYWNybyhv
cF9wdXRfdG9fYmFzZV92YXJpYWJsZSwgNSkgXAogICAgICAgICBcCi0gICAgICAgIG1hY3JvKG9w
X2luaXRfZ2xvYmFsX2NvbnN0LCAzKSBcCisgICAgICAgIG1hY3JvKG9wX2luaXRfZ2xvYmFsX2Nv
bnN0X25vcCwgNSkgXAorICAgICAgICBtYWNybyhvcF9pbml0X2dsb2JhbF9jb25zdCwgNSkgXAog
ICAgICAgICBtYWNybyhvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjaywgNSkgXAogICAgICAgICBt
YWNybyhvcF9nZXRfYnlfaWQsIDkpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAogICAgICAg
ICBtYWNybyhvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmUsIDkpIC8qIGhhcyB2YWx1ZSBwcm9maWxp
bmcgKi8gXApAQCAtMjA1LDcgKzIwNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBcCiAg
ICAgICAgIG1hY3JvKG9wX2NhdGNoLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX3Rocm93LCAyKSBc
Ci0gICAgICAgIG1hY3JvKG9wX3Rocm93X3JlZmVyZW5jZV9lcnJvciwgMikgXAorICAgICAgICBt
YWNybyhvcF90aHJvd19zdGF0aWNfZXJyb3IsIDMpIFwKICAgICAgICAgXAogICAgICAgICBtYWNy
byhvcF9kZWJ1ZywgNSkgXAogICAgICAgICBtYWNybyhvcF9wcm9maWxlX3dpbGxfY2FsbCwgMikg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDUzNTQ1YjZlMzdjZmNkMWEwM2EzNTQ2MDE1MjUyYTUxOGVl
YzYwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3Iu
aCIKKyNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKKyNpbmNs
dWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJTb3Vy
Y2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgIlN5bWJvbFRh
YmxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlIiwg
MCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSkg
fTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5r
ZWRDb2RlQmxvY2siLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkQ29kZUJs
b2NrKSB9OworY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpzX2luZm8g
PSB7ICJVbmxpbmtlZEdsb2JhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoVW5saW5rZWRHbG9iYWxDb2RlQmxvY2spIH07Citjb25zdCBDbGFzc0lu
Zm8gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jaykgfTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkRXZhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8s
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRFdmFsQ29kZUJsb2NrKSB9OworY29u
c3QgQ2xhc3NJbmZvIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spIH07CisKK3Vuc2lnbmVkIFVubGlua2Vk
Q29kZUJsb2NrOjphZGRPckZpbmRDb25zdGFudChKU1ZhbHVlIHYpCit7CisgICAgdW5zaWduZWQg
bnVtYmVyT2ZDb25zdGFudHMgPSBudW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ29uc3RhbnRzOyArK2kpIHsKKyAgICAgICAg
aWYgKGdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgaSkgPT0gdikKKyAg
ICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gYWRkQ29uc3RhbnQodik7Cit9
CisKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpCisgICAgOiBCYXNlKCpn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgLCBtX251bUNhcHR1cmVkVmFyaWFibGVzKG5vZGUt
PmNhcHR1cmVkVmFyaWFibGVDb3VudCgpKQorICAgICwgbV9mb3JjZVVzZXNBcmd1bWVudHMobm9k
ZS0+dXNlc0FyZ3VtZW50cygpKQorICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChub2RlLT5pc1N0
cmljdE1vZGUoKSkKKyAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMobm9kZS0+aGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSkKKyAgICAsIG1fbmFtZShub2RlLT5pZGVudCgpKQorICAgICwgbV9pbmZl
cnJlZE5hbWUobm9kZS0+aW5mZXJyZWROYW1lKCkpCisgICAgLCBtX3BhcmFtZXRlcnMobm9kZS0+
cGFyYW1ldGVycygpKQorICAgICwgbV9maXJzdExpbmVPZmZzZXQobm9kZS0+Zmlyc3RMaW5lKCkg
LSBzb3VyY2UuZmlyc3RMaW5lKCkpCisgICAgLCBtX2xpbmVDb3VudChub2RlLT5sYXN0TGluZSgp
IC0gbm9kZS0+Zmlyc3RMaW5lKCkpCisgICAgLCBtX3N0YXJ0T2Zmc2V0KG5vZGUtPnNvdXJjZSgp
LnN0YXJ0T2Zmc2V0KCkgLSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSkKKyAgICAsIG1fc291cmNlTGVu
Z3RoKG5vZGUtPnNvdXJjZSgpLmxlbmd0aCgpKQorICAgICwgbV9mZWF0dXJlcyhub2RlLT5mZWF0
dXJlcygpKQorICAgICwgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUobm9kZS0+ZnVuY3Rp
b25OYW1lSXNJblNjb3BlVG9nZ2xlKCkpCit7Cit9CisKK3ZvaWQgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQ09NUElMRV9BU1NFUlQoU3Ry
dWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxk
cmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJl
KCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fbmFtZVZhbHVlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9z
eW1ib2xUYWJsZUZvckNhbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N5
bWJvbFRhYmxlRm9yQ29uc3RydWN0KTsKK30KKworRnVuY3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGluayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgc2l6ZV90IGxpbmVPZmZzZXQsIHNpemVfdCBzb3VyY2VPZmZz
ZXQpCit7CisgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gbGluZU9mZnNldCArIG1fZmlyc3RMaW5l
T2Zmc2V0OworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsgbV9zdGFy
dE9mZnNldDsKKyAgICBTb3VyY2VDb2RlIGNvZGUoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zm
c2V0LCBzdGFydE9mZnNldCArIG1fc291cmNlTGVuZ3RoLCBmaXJzdExpbmUpOworICAgIHJldHVy
biBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhLCBjb2RlLCB0aGlzLCBmaXJz
dExpbmUsIGZpcnN0TGluZSArIG1fbGluZUNvdW50KTsKK30KKworVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZShjb25z
dCBJZGVudGlmaWVyJiBuYW1lLCBFeGVjU3RhdGUqIGV4ZWMsIERlYnVnZ2VyKiwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikKK3sKKyAgICBQYXJzZXJFcnJv
ciBlcnJvcjsKKyAgICBDb2RlQ2FjaGUqIGNvZGVDYWNoZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5j
b2RlQ2FjaGUoKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IGNvZGVDYWNoZS0+Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBuYW1lLCBzb3VyY2UsIGVycm9yKTsKKyAgICBpZiAoZXJyb3IubV90eXBlICE9
IFBhcnNlckVycm9yOjpFcnJvck5vbmUpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGVycm9yLnRv
RXJyb3JPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzb3VyY2UpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gZXhlY3V0YWJsZTsKK30KKworVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNvZGVCbG9j
a0ZvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJv
cikKK3sKKyAgICBzd2l0Y2ggKHNwZWNpYWxpemF0aW9uS2luZCkgeworICAgIGNhc2UgQ29kZUZv
ckNhbGw6CisgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwpCisgICAgICAgICAgICByZXR1
cm4gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENv
ZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkKKyAg
ICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0g
Z2xvYmFsRGF0YS5jb2RlQ2FjaGUoKS0+Z2V0RnVuY3Rpb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwg
dGhpcywgc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJN
b2RlLCBlcnJvcik7CisgICAgCisgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6
RXJyb3JOb25lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHN3aXRjaCAoc3BlY2lhbGl6YXRp
b25LaW5kKSB7CisgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JD
YWxsLnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1bHQpOworICAgICAgICBtX3N5bWJvbFRhYmxl
Rm9yQ2FsbC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0LT5zeW1ib2xUYWJsZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0KTsKKyAgICAgICAg
bV9zeW1ib2xUYWJsZUZvckNvbnN0cnVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0LT5z
eW1ib2xUYWJsZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1N0cmluZyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJpbmcoKSBj
b25zdAoreworICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICptX3BhcmFtZXRl
cnM7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoc2l6ZV90IHBvcyA9IDA7
IHBvcyA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK3BvcykgeworICAgICAgICBpZiAoIWJ1aWxkZXIu
aXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZChwYXJhbWV0ZXJzW3Bvc10uc3RyaW5nKCkpOworICAgIH0KKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAg
IDogQmFzZSgqZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgICwgbV9udW1WYXJzKDApCisgICAg
LCBtX251bUNhbGxlZVJlZ2lzdGVycygwKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKDApCisgICAg
LCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIoLTEp
CisgICAgLCBtX25lZWRzRnVsbFNjb3BlQ2hhaW4oaW5mby5tX25lZWRzQWN0aXZhdGlvbikKKyAg
ICAsIG1fdXNlc0V2YWwoaW5mby5tX3VzZXNFdmFsKQorICAgICwgbV9pc051bWVyaWNDb21wYXJl
RnVuY3Rpb24oZmFsc2UpCisgICAgLCBtX2lzU3RyaWN0TW9kZShpbmZvLm1faXNTdHJpY3RNb2Rl
KQorICAgICwgbV9pc0NvbnN0cnVjdG9yKGluZm8ubV9pc0NvbnN0cnVjdG9yKQorICAgICwgbV9o
YXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKKyAgICAsIG1fZmlyc3RMaW5lKDApCisgICAgLCBt
X2xpbmVDb3VudCgwKQorICAgICwgbV9mZWF0dXJlcygwKQorICAgICwgbV9jb2RlVHlwZShjb2Rl
VHlwZSkKKyAgICAsIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50KDApCisgICAgLCBtX3B1dFRvQmFz
ZU9wZXJhdGlvbkNvdW50KDEpCisgICAgLCBtX2FycmF5UHJvZmlsZUNvdW50KDApCisgICAgLCBt
X3ZhbHVlUHJvZmlsZUNvdW50KDApCisgICAgLCBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQoMCkK
KyNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCisgICAgLCBtX2J5dGVjb2RlQ29tbWVudEl0
ZXJhdG9yKDApCisjZW5kaWYKK3sKKworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVW5s
aW5rZWRDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihj
ZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8p
OworICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNT
RVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
KyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CisgICAgZm9y
IChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1f
ZnVuY3Rpb25EZWNscy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMu
ZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQorICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOwor
ICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2Jq
ZWN0LT5tX2Z1bmN0aW9uRXhwcnMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlv
bkV4cHJzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKKyAgICAgICAgdmlzaXRvci5hcHBlbmQo
cHRyKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVn
aXN0ZXJzLmRhdGEoKSwgdGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOyBpICE9
IGVuZDsgaSsrKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmFy
ZURhdGEtPm1fcmVnZXhwc1tpXSk7CisgICAgfQorfQorCitpbnQgVW5saW5rZWRDb2RlQmxvY2s6
OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sK
KyAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAg
IFZlY3RvcjxMaW5lSW5mbz4mIGxpbmVJbmZvID0gbV9saW5lSW5mbzsKKyAgICAKKyAgICBpbnQg
bG93ID0gMDsKKyAgICBpbnQgaGlnaCA9IGxpbmVJbmZvLnNpemUoKTsKKyAgICB3aGlsZSAobG93
IDwgaGlnaCkgeworICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKKyAg
ICAgICAgaWYgKGxpbmVJbmZvW21pZF0uaW5zdHJ1Y3Rpb25PZmZzZXQgPD0gYnl0ZWNvZGVPZmZz
ZXQpCisgICAgICAgICAgICBsb3cgPSBtaWQgKyAxOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBoaWdoID0gbWlkOworICAgIH0KKyAgICAKKyAgICBpZiAoIWxvdykKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGxpbmVJbmZvW2xvdyAtIDFdLmxpbmVOdW1iZXI7Cit9CisKK3ZvaWQg
VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVu
ZE9mZnNldCkKK3sKKyAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5z
aXplKCkpOworCisgICAgaWYgKCFtX2V4cHJlc3Npb25JbmZvLnNpemUoKSkgeworICAgICAgICBz
dGFydE9mZnNldCA9IDA7CisgICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAgICAgIGRpdm90ID0g
MDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJ
bmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOworCisgICAgaW50IGxvdyA9
IDA7CisgICAgaW50IGhpZ2ggPSBleHByZXNzaW9uSW5mby5zaXplKCk7CisgICAgd2hpbGUgKGxv
dyA8IGhpZ2gpIHsKKyAgICAgICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDI7Cisg
ICAgICAgIGlmIChleHByZXNzaW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5dGVj
b2RlT2Zmc2V0KQorICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgaGlnaCA9IG1pZDsKKyAgICB9CisKKyAgICBBU1NFUlQobG93KTsKKyAgICBpZiAo
IWxvdykgeworICAgICAgICBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIGVuZE9mZnNldCA9IDA7
CisgICAgICAgIGRpdm90ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXJ0
T2Zmc2V0ID0gZXhwcmVzc2lvbkluZm9bbG93IC0gMV0uc3RhcnRPZmZzZXQ7CisgICAgZW5kT2Zm
c2V0ID0gZXhwcmVzc2lvbkluZm9bbG93IC0gMV0uZW5kT2Zmc2V0OworICAgIGRpdm90ID0gZXhw
cmVzc2lvbkluZm9bbG93IC0gMV0uZGl2b3RQb2ludDsKK30KKwordm9pZCBVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChTdHJ1
Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW5XaXRob3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgZm9yIChzaXplX3QgaSA9IDAsIGVu
ZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNsYXJhdGlvbnMuc2l6ZSgpOyBpICE9IGVuZDsg
aSsrKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xh
cmF0aW9uc1tpXS5zZWNvbmQpOworfQorCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdkNmRkZTg4NDMw
Y2Q2NjdmZTA3M2MwZmYyYWJmYjhlYWM4ZDAxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0wLDAgKzEsNjk2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBVbmxpbmtlZENvZGVCbG9ja19oCisjZGVmaW5lIFVubGlua2VkQ29kZUJsb2NrX2gKKworI2lu
Y2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLmgiCisjaW5jbHVkZSAiQ29kZVR5cGUuaCIKKyNpbmNsdWRlICJFeHByZXNzaW9uUmFu
Z2VJbmZvLmgiCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgor
I2luY2x1ZGUgIkxpbmVJbmZvLmgiCisjaW5jbHVkZSAiTm9kZXMuaCIKKyNpbmNsdWRlICJSZWdF
eHAuaCIKKyNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgorCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIERlYnVnZ2VyOworY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZTsKK2NsYXNzIEZ1bmN0
aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEZ1bmN0aW9uUGFyYW1ldGVyczsKK3N0cnVjdCBQYXJzZXJF
cnJvcjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CitjbGFzcyBTb3VyY2VDb2RlOworY2xhc3Mg
U291cmNlUHJvdmlkZXI7CitjbGFzcyBTaGFyZWRTeW1ib2xUYWJsZTsKK2NsYXNzIFVubGlua2Vk
Q29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKKwordHlwZWRlZiB1
bnNpZ25lZCBVbmxpbmtlZFZhbHVlUHJvZmlsZTsKK3R5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRB
cnJheVByb2ZpbGU7Cit0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkTExJbnRDYWxsTGlua0luZm87
CisKK3N0cnVjdCBFeGVjdXRhYmxlSW5mbyB7CisgICAgRXhlY3V0YWJsZUluZm8oYm9vbCBuZWVk
c0FjdGl2YXRpb24sIGJvb2wgdXNlc0V2YWwsIGJvb2wgaXNTdHJpY3RNb2RlLCBib29sIGlzQ29u
c3RydWN0b3IpCisgICAgICAgIDogbV9uZWVkc0FjdGl2YXRpb24obmVlZHNBY3RpdmF0aW9uKQor
ICAgICAgICAsIG1fdXNlc0V2YWwodXNlc0V2YWwpCisgICAgICAgICwgbV9pc1N0cmljdE1vZGUo
aXNTdHJpY3RNb2RlKQorICAgICAgICAsIG1faXNDb25zdHJ1Y3Rvcihpc0NvbnN0cnVjdG9yKQor
ICAgIHsKKyAgICB9CisgICAgYm9vbCBtX25lZWRzQWN0aXZhdGlvbjsKKyAgICBib29sIG1fdXNl
c0V2YWw7CisgICAgYm9vbCBtX2lzU3RyaWN0TW9kZTsKKyAgICBib29sIG1faXNDb25zdHJ1Y3Rv
cjsKK307CisKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlIDogcHVibGljIEpTQ2Vs
bCB7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKKyAgICB0eXBlZGVmIEpT
Q2VsbCBCYXNlOworICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRl
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5j
dGlvbkJvZHlOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU+KGdsb2JhbERhdGEtPmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZShnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0
cnVjdHVyZS5nZXQoKSwgc291cmNlLCBub2RlKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENy
ZWF0aW9uKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKwor
ICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAg
ICBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2luZmVy
cmVkTmFtZTsgfQorICAgIEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWVWYWx1ZS5nZXQoKTsgfQorICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZShDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgeworICAgICAgICByZXR1cm4gKGtpbmQgPT0g
Q29kZUZvckNhbGwpID8gbV9zeW1ib2xUYWJsZUZvckNhbGwuZ2V0KCkgOiBtX3N5bWJvbFRhYmxl
Rm9yQ29uc3RydWN0LmdldCgpOworICAgIH0KKyAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMtPnNpemUoKTsgfQorICAgIGJvb2wgaXNJblN0cmlj
dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzSW5TdHJpY3RDb250ZXh0OyB9CisgICAgRnVu
Y3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlIGZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlOyB9CisKKyAgICB1bnNp
Z25lZCBmaXJzdExpbmVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGluZU9mZnNldDsg
fQorICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9
CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0
OyB9CisgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoKCkgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7
IH0KKworICAgIFN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OworCisgICAgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayogY29kZUJsb2NrRm9yKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFNvdXJjZUNv
ZGUmLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwg
UGFyc2VyRXJyb3ImKTsKKworICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRpZmllciYsIEV4ZWNTdGF0ZSosIERlYnVnZ2VyKiwg
Y29uc3QgU291cmNlQ29kZSYsIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKKworICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogbGluayhKU0dsb2JhbERhdGEmLCBjb25zdCBTb3VyY2VDb2RlJiwgc2l6ZV90
IGxpbmVPZmZzZXQsIHNpemVfdCBzb3VyY2VPZmZzZXQpOworCisgICAgdm9pZCBjbGVhckNvZGUo
KQorICAgIHsKKyAgICAgICAgbV9zeW1ib2xUYWJsZUZvckNhbGwuY2xlYXIoKTsKKyAgICAgICAg
bV9zeW1ib2xUYWJsZUZvckNvbnN0cnVjdC5jbGVhcigpOworICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNhbGwuY2xlYXIoKTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIoKTsK
KyAgICB9CisKKyAgICBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSB7IHJldHVybiBt
X3BhcmFtZXRlcnMuZ2V0KCk7IH0KKworICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVz
IGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQg
bGFzdExpbmUpCisgICAgeworICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7CisgICAgICAg
IG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAgICAgICAg
bV9saW5lQ291bnQgPSBsYXN0TGluZSAtIGZpcnN0TGluZTsKKyAgICB9CisKKyAgICBib29sIGZv
cmNlVXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fZm9yY2VVc2VzQXJndW1lbnRzOyB9
CisKKyAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVz
OyB9CisgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFz
Q2FwdHVyZWRWYXJpYWJsZXM7IH0KKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJl
ID0gdHJ1ZTsKKworcHJpdmF0ZToKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShKU0ds
b2JhbERhdGEqLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25Cb2R5Tm9k
ZSopOworICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVC
bG9ja0ZvckNhbGw7CisgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OworCisgICAgdW5zaWduZWQgbV9udW1DYXB0dXJlZFZh
cmlhYmxlcyA6IDI5OworICAgIGJvb2wgbV9mb3JjZVVzZXNBcmd1bWVudHMgOiAxOworICAgIGJv
b2wgbV9pc0luU3RyaWN0Q29udGV4dCA6IDE7CisgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFyaWFi
bGVzIDogMTsKKworICAgIElkZW50aWZpZXIgbV9uYW1lOworICAgIElkZW50aWZpZXIgbV9pbmZl
cnJlZE5hbWU7CisgICAgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiBtX25hbWVWYWx1ZTsKKyAgICBX
cml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGVGb3JDYWxsOworICAg
IFdyaXRlQmFycmllcjxTaGFyZWRTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZUZvckNvbnN0cnVj
dDsKKyAgICBSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CisgICAgdW5z
aWduZWQgbV9maXJzdExpbmVPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CisgICAg
dW5zaWduZWQgbV9zdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsKKwor
ICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworCisgICAgRnVuY3Rpb25OYW1lSXNJblNjb3Bl
VG9nZ2xlIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlOworCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgeworICAg
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgbV9uYW1lVmFs
dWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBuYW1lKCkuc3Ry
aW5nKCkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOworfTsKKworc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxl
IHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBpbnQzMl90PiBTdHJp
bmdPZmZzZXRUYWJsZTsKKyAgICBTdHJpbmdPZmZzZXRUYWJsZSBvZmZzZXRUYWJsZTsKKworICAg
IGlubGluZSBpbnQzMl90IG9mZnNldEZvclZhbHVlKFN0cmluZ0ltcGwqIHZhbHVlLCBpbnQzMl90
IGRlZmF1bHRPZmZzZXQpCisgICAgeworICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gb2Zmc2V0VGFibGUuZW5kKCk7CisgICAgICAgIFN0cmluZ09mZnNldFRh
YmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKKyAgICAg
ICAgaWYgKGxvYyA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9mZnNldDsKKyAg
ICAgICAgcmV0dXJuIGxvYy0+dmFsdWU7CisgICAgfQorCit9OworCitzdHJ1Y3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUgeworICAgIFZlY3RvcjxpbnQzMl90PiBicmFuY2hPZmZzZXRzOworICAg
IGludDMyX3QgbWluOworCisgICAgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90IHZhbHVl
LCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpOworICAgIHZvaWQgYWRkKGludDMyX3Qga2V5LCBpbnQz
Ml90IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghYnJhbmNoT2Zmc2V0c1trZXldKQorICAg
ICAgICAgICAgYnJhbmNoT2Zmc2V0c1trZXldID0gb2Zmc2V0OworICAgIH0KK307CisKK3N0cnVj
dCBVbmxpbmtlZEhhbmRsZXJJbmZvIHsKKyAgICB1aW50MzJfdCBzdGFydDsKKyAgICB1aW50MzJf
dCBlbmQ7CisgICAgdWludDMyX3QgdGFyZ2V0OworICAgIHVpbnQzMl90IHNjb3BlRGVwdGg7Cit9
OworCitzdHJ1Y3QgVW5saW5rZWRJbnN0cnVjdGlvbiB7CisgICAgVW5saW5rZWRJbnN0cnVjdGlv
bigpIHsgdS5vcGVyYW5kID0gMDsgfQorICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oT3Bjb2RlSUQg
b3Bjb2RlKSB7IHUub3Bjb2RlID0gb3Bjb2RlOyB9CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbihp
bnQgb3BlcmFuZCkgeyB1Lm9wZXJhbmQgPSBvcGVyYW5kOyB9CisgICAgdW5pb24geworICAgICAg
ICBPcGNvZGVJRCBvcGNvZGU7CisgICAgICAgIGludDMyX3Qgb3BlcmFuZDsKKyAgICB9IHU7Cit9
OworCitjbGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1
cmUgPSB0cnVlOworCisgICAgZW51bSB7IENhbGxGdW5jdGlvbiwgQXBwbHlGdW5jdGlvbiB9Owor
CisgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnN0cnVjdG9y
OyB9CisgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2lzU3RyaWN0TW9k
ZTsgfQorICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFdmFsOyB9CisK
KyAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX25lZWRzRnVs
bFNjb3BlQ2hhaW47IH0KKyAgICB2b2lkIHNldE5lZWRzRnVsbFNjb3BlQ2hhaW4oYm9vbCBuZWVk
c0Z1bGxTY29wZUNoYWluKSB7IG1fbmVlZHNGdWxsU2NvcGVDaGFpbiA9IG5lZWRzRnVsbFNjb3Bl
Q2hhaW47IH0KKworICAgIHZvaWQgYWRkRXhwcmVzc2lvbkluZm8oY29uc3QgRXhwcmVzc2lvblJh
bmdlSW5mbyYgZXhwcmVzc2lvbkluZm8pCisgICAgeworICAgICAgICBtX2V4cHJlc3Npb25JbmZv
LmFwcGVuZChleHByZXNzaW9uSW5mbyk7CisgICAgfQorCisgICAgdm9pZCBhZGRMaW5lSW5mbyh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50IGxpbmVObykKKyAgICB7CisgICAgICAgIFZlY3Rv
cjxMaW5lSW5mbz4mIGxpbmVJbmZvID0gbV9saW5lSW5mbzsKKyAgICAgICAgaWYgKCFsaW5lSW5m
by5zaXplKCkgfHwgbGluZUluZm8ubGFzdCgpLmxpbmVOdW1iZXIgIT0gbGluZU5vKSB7CisgICAg
ICAgICAgICBMaW5lSW5mbyBpbmZvID0geyBieXRlY29kZU9mZnNldCwgbGluZU5vIH07CisgICAg
ICAgICAgICBsaW5lSW5mby5hcHBlbmQoaW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBi
b29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXplKCk7
IH0KKworICAgIC8vIFNwZWNpYWwgcmVnaXN0ZXJzCisgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIo
aW50IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQorICAg
IHZvaWQgc2V0QWN0aXZhdGlvblJlZ2lzdGVyKGludCBhY3RpdmF0aW9uUmVnaXN0ZXIpIHsgbV9h
Y3RpdmF0aW9uUmVnaXN0ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7IH0KKworICAgIHZvaWQgc2V0
QXJndW1lbnRzUmVnaXN0ZXIoaW50IGFyZ3VtZW50c1JlZ2lzdGVyKSB7IG1fYXJndW1lbnRzUmVn
aXN0ZXIgPSBhcmd1bWVudHNSZWdpc3RlcjsgfQorICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0ZXIgIT0gLTE7IH0KKyAgICBpbnQgYXJndW1l
bnRzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyOyB9CisKKyAg
ICAvLyBQYXJhbWV0ZXIgaW5mb3JtYXRpb24KKyAgICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50
IG5ld1ZhbHVlKSB7IG1fbnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOyB9CisgICAgdm9pZCBhZGRQ
YXJhbWV0ZXIoKSB7IG1fbnVtUGFyYW1ldGVycysrOyB9CisgICAgdW5zaWduZWQgbnVtUGFyYW1l
dGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorCisgICAgdW5zaWduZWQg
YWRkUmVnRXhwKFJlZ0V4cCogcikKKyAgICB7CisgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNl
c3NhcnkoKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5z
aXplKCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5hcHBlbmQoV3JpdGVCYXJyaWVy
PFJlZ0V4cD4oKm1fZ2xvYmFsRGF0YSwgdGhpcywgcikpOworICAgICAgICByZXR1cm4gc2l6ZTsK
KyAgICB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdFeHBzKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsKKyAgICB9CisgICAgUmVnRXhwKiByZWdl
eHAoaW50IGluZGV4KSBjb25zdCB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURh
dGEtPm1fcmVnZXhwc1tpbmRleF0uZ2V0KCk7IH0KKworICAgIC8vIENvbnN0YW50IFBvb2xzCisK
KyAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRp
ZmllcnMuc2l6ZSgpOyB9CisgICAgdm9pZCBhZGRJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXIm
IGkpIHsgcmV0dXJuIG1faWRlbnRpZmllcnMuYXBwZW5kKGkpOyB9CisgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnNb
aW5kZXhdOyB9CisgICAgY29uc3QgVmVjdG9yPElkZW50aWZpZXI+JiBpZGVudGlmaWVycygpIGNv
bnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnM7IH0KKworICAgIHNpemVfdCBudW1iZXJPZkNvbnN0
YW50UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7
IH0KKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYpCisgICAgeworICAgICAgICB1
bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKKyAgICAgICAgbV9j
b25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOworICAgICAg
ICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQoKm1fZ2xvYmFsRGF0YSwgdGhpcywgdik7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHVuc2lnbmVkIGFkZE9yRmluZENv
bnN0YW50KEpTVmFsdWUpOworICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4g
PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Cisg
ICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4XTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OyB9CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorCisgICAgLy8gSnVtcHMKKyAgICBz
aXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMu
c2l6ZSgpOyB9CisgICAgdm9pZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1bXBUYXJnZXQpIHsg
bV9qdW1wVGFyZ2V0cy5hcHBlbmQoanVtcFRhcmdldCk7IH0KKyAgICB1bnNpZ25lZCBqdW1wVGFy
Z2V0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tpbmRleF07IH0KKyAg
ICB1bnNpZ25lZCBsYXN0SnVtcFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMu
bGFzdCgpOyB9CisKKyAgICB2b2lkIHNldElzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbihib29sIGlz
TnVtZXJpY0NvbXBhcmVGdW5jdGlvbikgeyBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbiA9IGlz
TnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQorICAgIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb247IH0KKworICAg
IHZvaWQgc2hyaW5rVG9GaXQoKQorICAgIHsKKyAgICAgICAgbV9qdW1wVGFyZ2V0cy5zaHJpbmtU
b0ZpdCgpOworICAgICAgICBtX2lkZW50aWZpZXJzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xz
LnNocmlua1RvRml0KCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICBtX2xpbmVJbmZvLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fcHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9leHByZXNzaW9uSW5mby5z
aHJpbmtUb0ZpdCgpOworCisjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQorICAgICAgICBt
X2J5dGVjb2RlQ29tbWVudHMuc2hyaW5rVG9GaXQoKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9y
YXJlRGF0YSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5z
aHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNocmlua1Rv
Rml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaHJpbmtU
b0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFi
bGVzLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3
aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Vu
bGlua2VkSW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQorICAgIFJlZkNvdW50ZWRBcnJheTxVbmxpbmtl
ZEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV91bmxpbmtlZEluc3RydWN0
aW9uczsgfQorICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxVbmxpbmtlZEluc3RydWN0aW9uPiYg
aW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEluc3RydWN0aW9uczsgfQor
CisgICAgaW50IG1fbnVtVmFyczsKKyAgICBpbnQgbV9udW1DYXB0dXJlZFZhcnM7CisgICAgaW50
IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworCisgICAgLy8gSnVtcCBUYWJsZXMKKworICAgIHNpemVf
dCBudW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3Jh
cmVEYXRhID8gbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6
IDA7IH0KKyAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgYWRkSW1tZWRpYXRlU3dpdGNoSnVt
cFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1faW1t
ZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTaW1wbGVKdW1wVGFibGUoKSk7
IHJldHVybiBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9
CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5t
X2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KKworICAgIHNpemVfdCBu
dW1iZXJPZkNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVE
YXRhID8gbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7
IH0KKyAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgYWRkQ2hhcmFjdGVyU3dpdGNoSnVtcFRh
YmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fY2hhcmFj
dGVyU3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTaW1wbGVKdW1wVGFibGUoKSk7IHJl
dHVybiBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9Cisg
ICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZShpbnQg
dGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2No
YXJhY3RlclN3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KKworICAgIHNpemVfdCBudW1i
ZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8g
bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KKyAgICBV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCkgeyBjcmVh
dGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlcy5hcHBlbmQoVW5saW5rZWRTdHJpbmdKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRh
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9CisgICAgVW5saW5rZWRTdHJpbmdK
dW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBBU1NFUlQo
bV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07IH0KKworICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRGVjbChVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1
bmN0aW9uRGVjbHMuc2l6ZSgpOworICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuYXBwZW5kKFdyaXRl
QmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7CisgICAgICAgIG1fZnVuY3Rp
b25EZWNscy5sYXN0KCkuc2V0KCptX2dsb2JhbERhdGEsIHRoaXMsIG4pOworICAgICAgICByZXR1
cm4gc2l6ZTsKKyAgICB9CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0K
KyAgICBzaXplX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRl
Y2xzLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRXhwcihVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0
aW9uRXhwcnMuc2l6ZSgpOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFy
cmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7CisgICAgICAgIG1fZnVuY3Rpb25F
eHBycy5sYXN0KCkuc2V0KCptX2dsb2JhbERhdGEsIHRoaXMsIG4pOworICAgICAgICByZXR1cm4g
c2l6ZTsKKyAgICB9CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhw
cihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHByc1tpbmRleF0uZ2V0KCk7IH0KKyAg
ICBzaXplX3QgbnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJz
LnNpemUoKTsgfQorCisgICAgLy8gRXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKKyAgICBzaXpl
X3QgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEg
PyBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0KKyAgICB2b2lk
IGFkZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFubGVyKSB7
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXhjZXB0
aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmxlcik7IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBl
eGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQorCisgICAgU2hhcmVkU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1ib2xUYWJsZS5nZXQo
KTsgfQorCisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9n
bG9iYWxEYXRhOyB9CisKKyAgICB1bnNpZ25lZCBhZGRSZXNvbHZlKCkgeyByZXR1cm4gbV9yZXNv
bHZlT3BlcmF0aW9uQ291bnQrKzsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mUmVzb2x2ZU9wZXJh
dGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVPcGVyYXRpb25Db3VudDsgfQorICAgIHVu
c2lnbmVkIGFkZFB1dFRvQmFzZSgpIHsgcmV0dXJuIG1fcHV0VG9CYXNlT3BlcmF0aW9uQ291bnQr
KzsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mUHV0VG9CYXNlT3BlcmF0aW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fcHV0VG9CYXNlT3BlcmF0aW9uQ291bnQ7IH0KKworICAgIFVubGlua2VkQXJyYXlQ
cm9maWxlIGFkZEFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlQ291bnQrKzsg
fQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9maWxlcygpIHsgcmV0dXJuIG1fYXJyYXlQ
cm9maWxlQ291bnQ7IH0KKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBhZGRWYWx1ZVByb2ZpbGUo
KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZUNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJP
ZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZUNvdW50OyB9CisKKyAgICBV
bmxpbmtlZExMSW50Q2FsbExpbmtJbmZvIGFkZExMSW50Q2FsbExpbmtJbmZvKCkgeyByZXR1cm4g
bV9sbGludENhbGxMaW5rSW5mb0NvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkxMaW50
Q2FsbExpbmtJbmZvcygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsgfQorCisg
ICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CisKKyAg
ICBpbnQgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KKyAg
ICBpbnQgYWN0aXZhdGlvblJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmF0aW9uUmVn
aXN0ZXI7IH0KKworCisgICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKHVuc2ln
bmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBtX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zLmFwcGVuZChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKTsKKyAg
ICB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CisgICAg
Y29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOyB9CisKKyAgICB0eXBlZGVm
IFZlY3RvcjxKU1ZhbHVlPiBDb25zdGFudEJ1ZmZlcjsKKworICAgIHNpemVfdCBjb25zdGFudEJ1
ZmZlckNvdW50KCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2Nv
bnN0YW50QnVmZmVycy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudEJ1ZmZlcih1
bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5
KCk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVy
cy5zaXplKCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLmFwcGVuZChW
ZWN0b3I8SlNWYWx1ZT4obGVuZ3RoKSk7CisgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKwor
ICAgIGNvbnN0IENvbnN0YW50QnVmZmVyJiBjb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBpbmRleCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJu
IG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKKyAgICB9CisKKyAgICBDb25z
dGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50QnVmZmVyc1tpbmRleF07CisgICAgfQorCisgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFyZURhdGE7IH0KKworICAgIGludCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworCisgICAgdm9pZCBleHByZXNzaW9uUmFu
Z2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwg
aW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpOworCisgICAgdm9pZCByZWNvcmRQYXJz
ZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIHVuc2ln
bmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGluZUNvdW50KQorICAgIHsKKyAgICAgICAgbV9mZWF0
dXJlcyA9IGZlYXR1cmVzOworICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2Fw
dHVyZWRWYXJpYWJsZXM7CisgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOworICAgICAg
ICBtX2xpbmVDb3VudCA9IGxpbmVDb3VudDsKKyAgICB9CisKKyAgICBDb2RlRmVhdHVyZXMgY29k
ZUZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAgIGJvb2wgaGFzQ2Fw
dHVyZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOyB9
CisgICAgdW5zaWduZWQgZmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmU7IH0K
KyAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQor
Citwcm90ZWN0ZWQ6CisgICAgVW5saW5rZWRDb2RlQmxvY2soSlNHbG9iYWxEYXRhKiwgU3RydWN0
dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJik7CisgICAgflVubGlua2VkQ29k
ZUJsb2NrKCk7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBHbG9iYWxDb2RlKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBtX3N5bWJvbFRhYmxlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBTaGFyZWRTeW1i
b2xUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEpKTsKKyAgICB9CisKK3ByaXZhdGU6CisKKyAgICB2
b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Jh
cmVEYXRhKQorICAgICAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSYXJlRGF0YSk7
CisgICAgfQorCisgICAgUmVmQ291bnRlZEFycmF5PFVubGlua2VkSW5zdHJ1Y3Rpb24+IG1fdW5s
aW5rZWRJbnN0cnVjdGlvbnM7CisKKyAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOworICAgIEpTR2xv
YmFsRGF0YSogbV9nbG9iYWxEYXRhOworCisgICAgaW50IG1fdGhpc1JlZ2lzdGVyOworICAgIGlu
dCBtX2FyZ3VtZW50c1JlZ2lzdGVyOworICAgIGludCBtX2FjdGl2YXRpb25SZWdpc3RlcjsKKwor
ICAgIGJvb2wgbV9uZWVkc0Z1bGxTY29wZUNoYWluIDogMTsKKyAgICBib29sIG1fdXNlc0V2YWwg
OiAxOworICAgIGJvb2wgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24gOiAxOworICAgIGJvb2wg
bV9pc1N0cmljdE1vZGUgOiAxOworICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsKKyAgICBi
b29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOworICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5l
OworICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OworCisgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVy
ZXM7CisgICAgQ29kZVR5cGUgbV9jb2RlVHlwZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9q
dW1wVGFyZ2V0czsKKworICAgIC8vIENvbnN0YW50IFBvb2xzCisgICAgVmVjdG9yPElkZW50aWZp
ZXI+IG1faWRlbnRpZmllcnM7CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPiA+IG1f
Y29uc3RhbnRSZWdpc3RlcnM7CisgICAgdHlwZWRlZiBWZWN0b3I8V3JpdGVCYXJyaWVyPFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlPiA+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKKyAgICBG
dW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOworICAgIEZ1bmN0aW9uRXhw
cmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRXhwcnM7CisKKyAgICBXcml0ZUJhcnJpZXI8U2hhcmVk
U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CisKKyAgICBWZWN0b3I8TGluZUluZm8+IG1fbGlu
ZUluZm87CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bnM7CisKKyNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCisgICAgVmVjdG9yPENvbW1lbnQ+
ICBtX2J5dGVjb2RlQ29tbWVudHM7CisgICAgc2l6ZV90IG1fYnl0ZWNvZGVDb21tZW50SXRlcmF0
b3I7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50OworICAg
IHVuc2lnbmVkIG1fcHV0VG9CYXNlT3BlcmF0aW9uQ291bnQ7CisgICAgdW5zaWduZWQgbV9hcnJh
eVByb2ZpbGVDb3VudDsKKyAgICB1bnNpZ25lZCBtX3ZhbHVlUHJvZmlsZUNvdW50OworICAgIHVu
c2lnbmVkIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsKKworcHVibGljOgorICAgIHN0cnVjdCBS
YXJlRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoK
KyAgICAgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7
CisKKyAgICAgICAgLy8gUmFyZSBDb25zdGFudHMKKyAgICAgICAgVmVjdG9yPFdyaXRlQmFycmll
cjxSZWdFeHA+ID4gbV9yZWdleHBzOworCisgICAgICAgIC8vIEJ1ZmZlcnMgdXNlZCBmb3IgbGFy
Z2UgYXJyYXkgbGl0ZXJhbHMKKyAgICAgICAgVmVjdG9yPENvbnN0YW50QnVmZmVyPiBtX2NvbnN0
YW50QnVmZmVyczsKKworICAgICAgICAvLyBKdW1wIFRhYmxlcworICAgICAgICBWZWN0b3I8VW5s
aW5rZWRTaW1wbGVKdW1wVGFibGU+IG1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlczsKKyAgICAg
ICAgVmVjdG9yPFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPiBtX2NoYXJhY3RlclN3aXRjaEp1bXBU
YWJsZXM7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIC8vIEV4cHJlc3Npb24gaW5mbyAtIHByZXNlbnQg
aWYgZGVidWdnaW5nLgorICAgIH07CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFJhcmVEYXRhPiBt
X3JhcmVEYXRhOworICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25J
bmZvOworCitwcm90ZWN0ZWQ6CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cisg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFzcyBV
bmxpbmtlZEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOworCitwcm90ZWN0ZWQ6Cisg
ICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZv
JiBpbmZvKQorICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBjb2RlVHlwZSwg
aW5mbykKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
CisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFzcyBVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgeworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOworICAgIHN0YXRpYyBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEV4
ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jaz4oZ2xvYmFsRGF0YS0+aGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLT51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUu
Z2V0KCksIGluZm8pOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKmdsb2JhbERh
dGEpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCitwdWJsaWM6CisgICAgdHlw
ZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOworCisgICAgdm9pZCBhZGRGdW5jdGlv
bkRlY2xhcmF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYg
bmFtZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKKyAg
ICB7CisgICAgICAgIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KG5hbWUsIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFsRGF0
YSwgdGhpcywgZnVuY3Rpb25FeGVjdXRhYmxlKSkpOworICAgIH0KKworICAgIHZvaWQgYWRkVmFy
aWFibGVEZWNsYXJhdGlvbihjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBib29sIGlzQ29uc3RhbnQp
CisgICAgeworICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
bmFtZSwgaXNDb25zdGFudCkpOworICAgIH0KKworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6cGFp
cjxJZGVudGlmaWVyLCBib29sPiA+IFZhcmlhYmxlRGVjbGF0aW9uczsKKyAgICB0eXBlZGVmIFZl
Y3RvcjxzdGQ6OnBhaXI8SWRlbnRpZmllciwgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlPiA+ID4gRnVuY3Rpb25EZWNsYXRpb25zOworCisgICAgY29uc3QgVmFyaWFibGVE
ZWNsYXRpb25zJiB2YXJpYWJsZURlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyRGVj
bGFyYXRpb25zOyB9CisgICAgY29uc3QgRnVuY3Rpb25EZWNsYXRpb25zJiBmdW5jdGlvbkRlY2xh
cmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KKworICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHJp
dmF0ZToKKyAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisg
ICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIEdsb2JhbENvZGUsIGluZm8pCisg
ICAgeworICAgIH0KKworICAgIFZhcmlhYmxlRGVjbGF0aW9ucyBtX3ZhckRlY2xhcmF0aW9uczsK
KyAgICBGdW5jdGlvbkRlY2xhdGlvbnMgbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsKKworcHVibGlj
OgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisg
ICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK2Ns
YXNzIFVubGlua2VkRXZhbENvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9j
ayB7Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CisKKyAgICBzdGF0aWMg
VW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBj
b25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIFVubGlua2VkRXZhbENv
ZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2
YWxDb2RlQmxvY2s+KGdsb2JhbERhdGEtPmhlYXApKSBVbmxpbmtlZEV2YWxDb2RlQmxvY2soZ2xv
YmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgp
LCBpbmZvKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCpnbG9iYWxEYXRhKTsK
KyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworcHVibGljOgorICAgIHR5cGVkZWYg
VW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKKworICAgIGNvbnN0IElkZW50aWZpZXImIHZh
cmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleF07IH0KKyAg
ICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7IH0K
KyAgICB2b2lkIGFkb3B0VmFyaWFibGVzKFZlY3RvcjxJZGVudGlmaWVyPiYgdmFyaWFibGVzKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmFyaWFibGVzLmlzRW1wdHkoKSk7CisgICAgICAgIG1f
dmFyaWFibGVzLnN3YXAodmFyaWFibGVzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgICAgICA6IEJhc2UoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlLCBFdmFsQ29kZSwgaW5mbykKKyAgICB7CisgICAgfQorCisgICAgVmVj
dG9yPElkZW50aWZpZXI+IG1fdmFyaWFibGVzOworCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBl
SW5mbyhVbmxpbmtlZEV2YWxDb2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7Citwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBDb2RlQ2FjaGU7CisKKyAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZVR5cGUgY29kZVR5cGUsIGNv
bnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrPihnbG9iYWxEYXRhLT5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayhnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT51bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
U3RydWN0dXJlLmdldCgpLCBjb2RlVHlwZSwgaW5mbyk7CisgICAgICAgIGluc3RhbmNlLT5maW5p
c2hDcmVhdGlvbigqZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9
CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkQ29kZUJsb2NrIEJhc2U7CisKK3ByaXZh
dGU6CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mIGluZm8pCisgICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGNv
ZGVUeXBlLCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBU
eXBlSW5mbyhVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK30KKworI2VuZGlmIC8vIFVu
bGlua2VkQ29kZUJsb2NrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggZmIwODRlM2Y5N2JlNTdkNjk4
YzExNTBhODg5MzUxMTA2YTUxMjI4Yy4uNzBkZTA2NGE3NTE4YTQ2ZjNlZTAzYzgxNzYyNGM5N2U4
ODBlYmQyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBib29sIEJ5dGVj
b2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKQogICAgIHJldHVybiBzX2R1bXBzR2Vu
ZXJhdGVkQ29kZTsKIH0KIAotSlNPYmplY3QqIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgp
CitQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQogewogICAgIFNhbXBs
aW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJCeXRlY29kZSBHZW5lcmF0aW9uIik7CiAgICAgCkBA
IC0xNjksMzYgKzE2OSwyMSBAQCBKU09iamVjdCogQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
KCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90cnlSYW5nZXMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgVHJ5UmFuZ2UmIHJhbmdlID0gbV90cnlSYW5nZXNbaV07CiAgICAgICAgIEFT
U0VSVChyYW5nZS50cnlEYXRhLT50YXJnZXRTY29wZURlcHRoICE9IFVJTlRfTUFYKTsKLSAgICAg
ICAgSGFuZGxlckluZm8gaW5mbyA9IHsKKyAgICAgICAgVW5saW5rZWRIYW5kbGVySW5mbyBpbmZv
ID0gewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLnN0YXJ0LT5iaW5k
KDAsIDApKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLmVuZC0+YmluZCgwLCAwKSksCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmFuZ2UudHJ5RGF0YS0+dGFyZ2V0LT5i
aW5kKDAsIDApKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLnRyeURhdGEtPnRhcmdldFNj
b3BlRGVwdGgpCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgICAgICwKLSNpZiBFTkFCTEUoTExJ
TlQpCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhMTEludDo6Z2V0Q29kZVB0cihsbGludF9vcF9j
YXRjaCkpKQotI2Vsc2UKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKCkKLSNlbmRpZgot
I2VuZGlmCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmFuZ2UudHJ5RGF0YS0+
dGFyZ2V0LT5iaW5kKDAsIDApKSwKKyAgICAgICAgICAgIHJhbmdlLnRyeURhdGEtPnRhcmdldFNj
b3BlRGVwdGgKICAgICAgICAgfTsKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZEV4Y2VwdGlvbkhh
bmRsZXIoaW5mbyk7CiAgICAgfQogICAgIAotICAgIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KSA9IFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4obV9pbnN0cnVjdGlvbnMpOwotCi0gICAg
aWYgKHNfZHVtcHNHZW5lcmF0ZWRDb2RlKQotICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChtX3Nj
b3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkgPSBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRJbnN0cnVjdGlvbj4obV9pbnN0
cnVjdGlvbnMpOwogCi0jaWZkZWYgTkRFQlVHCi0gICAgaWYgKChtX2NvZGVUeXBlID09IEZ1bmN0
aW9uQ29kZSAmJiAhbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSAmJiAhbV9jb2Rl
QmxvY2stPnVzZXNBcmd1bWVudHMoKSkgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSkKLSAgICAg
ICAgc3ltYm9sVGFibGUoKS5jbGVhcigpOwotI2VuZGlmCi0KLSAgICBtX2NvZGVCbG9jay0+c2hy
aW5rVG9GaXQoQ29kZUJsb2NrOjpFYXJseVNocmluayk7CisgICAgbV9jb2RlQmxvY2stPnNocmlu
a1RvRml0KCk7CiAKICAgICBpZiAobV9leHByZXNzaW9uVG9vRGVlcCkKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IobV9zY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwotICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gUGFyc2VyRXJyb3I6Ok91dE9mTWVtb3J5OworICAgIHJl
dHVybiBQYXJzZXJFcnJvcjo6RXJyb3JOb25lOwogfQogCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0
ZXJJRComIHIwKQpAQCAtMjE2LDUxICsyMDEsMzIgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6
YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJlZ2lzdGUK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRHbG9iYWxW
YXIoCi0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1v
ZGUsIEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZ1bmN0
aW9uTW9kZSk7Ci0gICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUoKS5zaXplKCk7Ci0gICAgU3lt
Ym9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgKGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50
KSA/IFJlYWRPbmx5IDogMCk7Ci0gICAgaWYgKGZ1bmN0aW9uTW9kZSA9PSBJc0Z1bmN0aW9uVG9T
cGVjaWFsaXplKQotICAgICAgICBuZXdFbnRyeS5hdHRlbXB0VG9XYXRjaCgpOwotICAgIFN5bWJv
bFRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgp
LCBuZXdFbnRyeSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLm5vdGlmeVdyaXRlKCk7Ci0gICAgICAgIGluZGV4ID0gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5nZXRJbmRleCgpOwotICAgIH0KLSAgICByZXR1cm4gaW5kZXg7Ci19
Ci0KIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnByZXNlcnZlTGFzdFZhcigpCiB7CiAgICAgaWYg
KChtX2ZpcnN0Q29uc3RhbnRJbmRleCA9IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkgIT0gMCkK
ICAgICAgICAgbV9sYXN0VmFyID0gJm1fY2FsbGVlUmVnaXN0ZXJzLmxhc3QoKTsKIH0KIAotQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9k
ZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgUHJvZ3Jh
bUNvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5kKQot
ICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCkpCi0gICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGUtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1Byb2ZpbGluZyhzY29wZS0+
Z2xvYmFsT2JqZWN0KCkpKQotICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGUt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1JpY2hT
b3VyY2VJbmZvKHNjb3BlLT5nbG9iYWxPYmplY3QoKSkpCi0gICAgLCBtX3Njb3BlKCpzY29wZS0+
Z2xvYmFsRGF0YSgpLCBzY29wZSkKLSAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCitC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayog
Y29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmls
ZXJNb2RlKQorICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhkZWJ1Z2dlck1vZGUgPT0gRGVi
dWdnZXJPbikKKyAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhwcm9maWxlck1vZGUgPT0g
UHJvZmlsZXJPbikKICNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCiAgICAgLCBtX2N1cnJl
bnRDb21tZW50U3RyaW5nKDApCiAjZW5kaWYKKyAgICAsIG1fc3ltYm9sVGFibGUoMCkKICAgICAs
IG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQotICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQor
ICAgICwgbV9jb2RlQmxvY2soZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQogICAgICwgbV90aGlzUmVn
aXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKICAgICAsIG1fZW1wdHlWYWx1
ZVJlZ2lzdGVyKDApCiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWljU2Nv
cGVEZXB0aCgwKQotICAgICwgbV9iYXNlU2NvcGVEZXB0aCgwKQogICAgICwgbV9jb2RlVHlwZShH
bG9iYWxDb2RlKQogICAgICwgbV9uZXh0Q29uc3RhbnRPZmZzZXQoMCkKICAgICAsIG1fZ2xvYmFs
Q29uc3RhbnRJbmRleCgwKQogICAgICwgbV9oYXNDcmVhdGVkQWN0aXZhdGlvbih0cnVlKQogICAg
ICwgbV9maXJzdExhenlGdW5jdGlvbigwKQogICAgICwgbV9sYXN0TGF6eUZ1bmN0aW9uKDApCi0g
ICAgLCBtX2dsb2JhbERhdGEoc2NvcGUtPmdsb2JhbERhdGEoKSkKKyAgICAsIG1fZ2xvYmFsRGF0
YSgmZ2xvYmFsRGF0YSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5kZWYgTkRF
QlVHCiAgICAgLCBtX2xhc3RPcGNvZGVQb3NpdGlvbigwKQpAQCAtMjY5LDgxICsyMzUsNDggQEAg
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFt
Tm9kZSwgSlNTY29wZSogc2NvcGUsIFMKICAgICAsIG1fdXNlc0V4Y2VwdGlvbnMoZmFsc2UpCiAg
ICAgLCBtX2V4cHJlc3Npb25Ub29EZWVwKGZhbHNlKQogewotICAgIG1fZ2xvYmFsRGF0YS0+c3Rh
cnRlZENvbXBpbGluZyhtX2NvZGVCbG9jayk7Ci0gICAgCiAgICAgaWYgKG1fc2hvdWxkRW1pdERl
YnVnSG9va3MpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXROZWVkc0Z1bGxTY29wZUNoYWluKHRy
dWUpOwogCi0gICAgY29kZUJsb2NrLT5zZXRHbG9iYWxEYXRhKG1fZ2xvYmFsRGF0YSk7Ci0gICAg
c3ltYm9sVGFibGUtPnNldFVzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2YWwoKSAm
JiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7ICAgIAogICAgIG1fY29kZUJsb2NrLT5zZXRO
dW1QYXJhbWV0ZXJzKDEpOyAvLyBBbGxvY2F0ZSBzcGFjZSBmb3IgInRoaXMiCiAKICAgICBwcmVw
ZW5kQ29tbWVudCgiZW50ZXJpbmcgUHJvZ3JhbSBibG9jayIpOwogICAgIGVtaXRPcGNvZGUob3Bf
ZW50ZXIpOwogCi0gICAgLy8gRklYTUU6IE1vdmUgY29kZSB0aGF0IG1vZGlmaWVzIHRoZSBnbG9i
YWwgb2JqZWN0IHRvIEludGVycHJldGVyOjpleGVjdXRlLgotICAgIAotICAgIGlmIChjb21waWxh
dGlvbktpbmQgPT0gT3B0aW1pemluZ0NvbXBpbGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIAot
ICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyIG9wdGltaXplcigqbV9nbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QpOwotCiAgICAgY29uc3QgVmFyU3RhY2smIHZhclN0YWNrID0gcHJvZ3JhbU5v
ZGUtPnZhclN0YWNrKCk7CiAgICAgY29uc3QgRnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjayA9
IHByb2dyYW1Ob2RlLT5mdW5jdGlvblN0YWNrKCk7CiAKLSAgICBzaXplX3QgbmV3R2xvYmFscyA9
IHZhclN0YWNrLnNpemUoKSArIGZ1bmN0aW9uU3RhY2suc2l6ZSgpOwotICAgIGlmICghbmV3R2xv
YmFscykKLSAgICAgICAgcmV0dXJuOwotICAgIGdsb2JhbE9iamVjdC0+YWRkUmVnaXN0ZXJzKG5l
d0dsb2JhbHMpOwotCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rp
b25TdGFja1tpXTsKLSAgICAgICAgYm9vbCBwcm9wZXJ0eURpZEV4aXN0ID0gCi0gICAgICAgICAg
ICBnbG9iYWxPYmplY3QtPnJlbW92ZURpcmVjdCgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbi0+aWRl
bnQoKSk7IC8vIE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3RpbmcgcHJv
cGVydGllcy4KLQotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSwg
c2NvcGUpOwotICAgICAgICBpbnQgaW5kZXggPSBhZGRHbG9iYWxWYXIoCi0gICAgICAgICAgICBm
dW5jdGlvbi0+aWRlbnQoKSwgSXNWYXJpYWJsZSwKLSAgICAgICAgICAgICFwcm9wZXJ0eURpZEV4
aXN0ID8gSXNGdW5jdGlvblRvU3BlY2lhbGl6ZSA6IE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXph
YmxlKTsKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGluZGV4KS5zZXQoKm1fZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiB1bmxpbmtlZEZ1bmN0aW9uID0gbWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKTsKKyAg
ICAgICAgY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2xhcmF0aW9uKCptX2dsb2JhbERhdGEsIGZ1
bmN0aW9uLT5pZGVudCgpLCB1bmxpbmtlZEZ1bmN0aW9uKTsKICAgICB9CiAKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChnbG9i
YWxPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsICp2YXJTdGFja1tpXS5maXJzdCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgYWRkR2xvYmFsVmFyKAotICAgICAgICAgICAgKnZhclN0
YWNrW2ldLmZpcnN0LAotICAgICAgICAgICAgKHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0
aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQgOiBJc1ZhcmlhYmxlLAotICAgICAg
ICAgICAgTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUpOwotICAgIH0KKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKQorICAgICAgICBjb2RlQmxvY2st
PmFkZFZhcmlhYmxlRGVjbGFyYXRpb24oKnZhclN0YWNrW2ldLmZpcnN0LCAhISh2YXJTdGFja1tp
XS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkpOworCiB9CiAKLUJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlv
bkJvZHksIEpTU2NvcGUqIHNjb3BlLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCi0gICAgOiBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKLSAgICAsIG1fc2hv
dWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnN1cHBvcnRzUHJvZmlsaW5nKHNjb3BlLT5nbG9iYWxPYmplY3QoKSkpCi0g
ICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oc2NvcGUtPmds
b2JhbE9iamVjdCgpKSkKLSAgICAsIG1fc2NvcGUoKnNjb3BlLT5nbG9iYWxEYXRhKCksIHNjb3Bl
KQotICAgICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKK0J5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEZ1bmN0aW9uQm9keU5v
ZGUqIGZ1bmN0aW9uQm9keSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQorICAg
IDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPbikKKyAg
ICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhwcm9maWxlck1vZGUgPT0gUHJvZmlsZXJPbikK
KyAgICAsIG1fc3ltYm9sVGFibGUoY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQogI2lmIEVOQUJM
RShCWVRFQ09ERV9DT01NRU5UUykKICAgICAsIG1fY3VycmVudENvbW1lbnRTdHJpbmcoMCkKICNl
bmRpZgogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5KQotICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQorICAgICwgbV9jb2RlQmxvY2soZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQogICAg
ICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIoMCkKICAgICAsIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyKDAp
CiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWljU2NvcGVEZXB0aCgwKQot
ICAgICwgbV9iYXNlU2NvcGVEZXB0aCgwKQogICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUp
CiAgICAgLCBtX25leHRDb25zdGFudE9mZnNldCgwKQogICAgICwgbV9nbG9iYWxDb25zdGFudElu
ZGV4KDApCiAgICAgLCBtX2hhc0NyZWF0ZWRBY3RpdmF0aW9uKGZhbHNlKQogICAgICwgbV9maXJz
dExhenlGdW5jdGlvbigwKQogICAgICwgbV9sYXN0TGF6eUZ1bmN0aW9uKDApCi0gICAgLCBtX2ds
b2JhbERhdGEoc2NvcGUtPmdsb2JhbERhdGEoKSkKKyAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xvYmFs
RGF0YSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5kZWYgTkRFQlVHCiAgICAg
LCBtX2xhc3RPcGNvZGVQb3NpdGlvbigwKQpAQCAtMzUyLDE0ICsyODUsMTEgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9k
eSwgSlNTY29wZSogc2MKICAgICAsIG1fdXNlc0V4Y2VwdGlvbnMoZmFsc2UpCiAgICAgLCBtX2V4
cHJlc3Npb25Ub29EZWVwKGZhbHNlKQogewotICAgIG1fZ2xvYmFsRGF0YS0+c3RhcnRlZENvbXBp
bGluZyhtX2NvZGVCbG9jayk7Ci0KICAgICBpZiAobV9zaG91bGRFbWl0RGVidWdIb29rcykKICAg
ICAgICAgbV9jb2RlQmxvY2stPnNldE5lZWRzRnVsbFNjb3BlQ2hhaW4odHJ1ZSk7CiAKLSAgICBj
b2RlQmxvY2stPnNldEdsb2JhbERhdGEobV9nbG9iYWxEYXRhKTsKLSAgICBzeW1ib2xUYWJsZS0+
c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpKTsKLSAgICBzeW1ib2xUYWJsZS0+c2V0UGFyYW1ldGVyQ291bnRJbmNs
dWRpbmdUaGlzKGZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpLT5zaXplKCkgKyAxKTsKKyAgICBt
X3N5bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkg
JiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOworICAgIG1fc3ltYm9sVGFibGUtPnNldFBh
cmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyhmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKS0+c2l6
ZSgpICsgMSk7CiAKICAgICBwcmVwZW5kQ29tbWVudCgiZW50ZXJpbmcgRnVuY3Rpb24gYmxvY2si
KTsKICAgICBlbWl0T3Bjb2RlKG9wX2VudGVyKTsKQEAgLTM3MCw3ICszMDAsNyBAQCBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25C
b2R5LCBKU1Njb3BlKiBzYwogICAgICAgICBtX2NvZGVCbG9jay0+c2V0QWN0aXZhdGlvblJlZ2lz
dGVyKG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICB9CiAKLSAgICBzeW1ib2xU
YWJsZS0+c2V0Q2FwdHVyZVN0YXJ0KG1fY29kZUJsb2NrLT5tX251bVZhcnMpOworICAgIG1fc3lt
Ym9sVGFibGUtPnNldENhcHR1cmVTdGFydChtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKIAogICAg
IGlmIChmdW5jdGlvbkJvZHktPnVzZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFs
KCkgfHwgbV9zaG91bGRFbWl0RGVidWdIb29rcykgeyAvLyBNYXkgcmVpZnkgYXJndW1lbnRzIG9i
amVjdC4KICAgICAgICAgUmVnaXN0ZXJJRCogdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyID0g
YWRkVmFyKCk7IC8vIEFub255bW91cywgc28gaXQgY2FuJ3QgYmUgbW9kaWZpZWQgYnkgdXNlciBj
b2RlLgpAQCAtNDIwLDcgKzM1MCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIEpTU2NvcGUqIHNjCiAgICAgfQog
CiAgICAgaWYgKGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgJiYgIWNvZGVCbG9jay0+aXNTdHJp
Y3RNb2RlKCkpIHsKLSAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50ID0gc3ltYm9sVGFibGUt
PnBhcmFtZXRlckNvdW50KCk7CisgICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCA9IG1fc3lt
Ym9sVGFibGUtPnBhcmFtZXRlckNvdW50KCk7CiAgICAgICAgIE93bkFycmF5UHRyPFNsb3dBcmd1
bWVudD4gc2xvd0FyZ3VtZW50cyA9IGFkb3B0QXJyYXlQdHIobmV3IFNsb3dBcmd1bWVudFtwYXJh
bWV0ZXJDb3VudF0pOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlckNv
dW50OyArK2kpIHsKICAgICAgICAgICAgIGlmICghY2FwdHVyZWRBcmd1bWVudHNbaV0pIHsKQEAg
LTQzMSw3ICszNjEsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVu
Y3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgICAgICAgICAgc2xv
d0FyZ3VtZW50c1tpXS5zdGF0dXMgPSBTbG93QXJndW1lbnQ6OkNhcHR1cmVkOwogICAgICAgICAg
ICAgc2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IGNhcHR1cmVkQXJndW1lbnRzW2ldLT5pbmRleCgp
OwogICAgICAgICB9Ci0gICAgICAgIHN5bWJvbFRhYmxlLT5zZXRTbG93QXJndW1lbnRzKHNsb3dB
cmd1bWVudHMucmVsZWFzZSgpKTsKKyAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0U2xvd0FyZ3Vt
ZW50cyhzbG93QXJndW1lbnRzLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgUmVnaXN0ZXJJRCog
Y2FsbGVlUmVnaXN0ZXIgPSByZXNvbHZlQ2FsbGVlKGZ1bmN0aW9uQm9keSk7IC8vIE1heSBwdXNo
IHRvIHRoZSBzY29wZSBjaGFpbiBhbmQvb3IgYWRkIGEgY2FwdHVyZWQgdmFyLgpAQCAtNDcyLDcg
KzQwMiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJv
ZHlOb2RlKiBmdW5jdGlvbkJvZHksIEpTU2NvcGUqIHNjCiAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtX2FjdGl2YXRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgfQogCi0gICAgc3lt
Ym9sVGFibGUtPnNldENhcHR1cmVFbmQoY29kZUJsb2NrLT5tX251bVZhcnMpOworICAgIG1fc3lt
Ym9sVGFibGUtPnNldENhcHR1cmVFbmQoY29kZUJsb2NrLT5tX251bVZhcnMpOwogCiAgICAgbV9m
aXJzdExhenlGdW5jdGlvbiA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkgewpAQCAtNTAwLDcgKzQzMCw3
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2Rl
KiBmdW5jdGlvbkJvZHksIEpTU2NvcGUqIHNjCiAgICAgfQogCiAgICAgaWYgKHNob3VsZENhcHR1
cmVBbGxUaGVUaGluZ3MpCi0gICAgICAgIHN5bWJvbFRhYmxlLT5zZXRDYXB0dXJlRW5kKGNvZGVC
bG9jay0+bV9udW1WYXJzKTsKKyAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZUVuZChj
b2RlQmxvY2stPm1fbnVtVmFycyk7CiAKICAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMgPSAqZnVuY3Rpb25Cb2R5LT5wYXJhbWV0ZXJzKCk7CiAgICAgbV9wYXJhbWV0ZXJzLmdyb3co
cGFyYW1ldGVycy5zaXplKCkgKyAxKTsgLy8gcmVzZXJ2ZSBzcGFjZSBmb3IgInRoaXMiCkBAIC01
MzAsMzUgKzQ2MCwzMiBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVu
Y3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgICAgICBlbWl0T3Bj
b2RlKG9wX2NyZWF0ZV90aGlzKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fdGhp
c1JlZ2lzdGVyLmluZGV4KCkpOwogICAgIH0gZWxzZSBpZiAoIWNvZGVCbG9jay0+aXNTdHJpY3RN
b2RlKCkgJiYgKGZ1bmN0aW9uQm9keS0+dXNlc1RoaXMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFs
KCkgfHwgbV9zaG91bGRFbWl0RGVidWdIb29rcykpIHsKLSAgICAgICAgVmFsdWVQcm9maWxlKiBw
cm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NvbnZlcnRfdGhpcyk7CisgICAgICAgIFVu
bGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY29udmVy
dF90aGlzKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fdGhpc1JlZ2lzdGVyLmlu
ZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgfQog
fQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxO
b2RlLCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFs
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCkKLSAgICA6IG1fc2hvdWxkRW1p
dERlYnVnSG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQotICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNQcm9maWxpbmcoc2NvcGUtPmdsb2JhbE9iamVjdCgpKSkK
LSAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNSaWNoU291cmNlSW5mbyhzY29wZS0+
Z2xvYmFsT2JqZWN0KCkpKQotICAgICwgbV9zY29wZSgqc2NvcGUtPmdsb2JhbERhdGEoKSwgc2Nv
cGUpCi0gICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQorQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXZhbE5vZGUqIGV2
YWxOb2RlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKKyAgICA6IG1fc2hvdWxkRW1p
dERlYnVnSG9va3MoZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT24pCisgICAgLCBtX3Nob3VsZEVt
aXRQcm9maWxlSG9va3MocHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24pCisgICAgLCBtX3N5bWJv
bFRhYmxlKGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKICNpZiBFTkFCTEUoQllURUNPREVfQ09N
TUVOVFMpCiAgICAgLCBtX2N1cnJlbnRDb21tZW50U3RyaW5nKDApCiAjZW5kaWYKICAgICAsIG1f
c2NvcGVOb2RlKGV2YWxOb2RlKQotICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwg
bV9jb2RlQmxvY2soZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQogICAgICwgbV90aGlzUmVnaXN0ZXIo
Q2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKICAgICAsIG1fZW1wdHlWYWx1ZVJlZ2lz
dGVyKDApCiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWljU2NvcGVEZXB0
aCgwKQotICAgICwgbV9iYXNlU2NvcGVEZXB0aChjb2RlQmxvY2stPmJhc2VTY29wZURlcHRoKCkp
CiAgICAgLCBtX2NvZGVUeXBlKEV2YWxDb2RlKQogICAgICwgbV9uZXh0Q29uc3RhbnRPZmZzZXQo
MCkKICAgICAsIG1fZ2xvYmFsQ29uc3RhbnRJbmRleCgwKQogICAgICwgbV9oYXNDcmVhdGVkQWN0
aXZhdGlvbih0cnVlKQogICAgICwgbV9maXJzdExhenlGdW5jdGlvbigwKQogICAgICwgbV9sYXN0
TGF6eUZ1bmN0aW9uKDApCi0gICAgLCBtX2dsb2JhbERhdGEoc2NvcGUtPmdsb2JhbERhdGEoKSkK
KyAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9w
X2VuZCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2xhc3RPcGNvZGVQb3NpdGlvbigwKQpAQCAt
NTY3LDEzICs0OTQsOSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZh
bE5vZGUqIGV2YWxOb2RlLCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkUwogICAgICwgbV91c2VzRXhj
ZXB0aW9ucyhmYWxzZSkKICAgICAsIG1fZXhwcmVzc2lvblRvb0RlZXAoZmFsc2UpCiB7Ci0gICAg
bV9nbG9iYWxEYXRhLT5zdGFydGVkQ29tcGlsaW5nKG1fY29kZUJsb2NrKTsKLQotICAgIGlmICht
X3Nob3VsZEVtaXREZWJ1Z0hvb2tzIHx8IG1fYmFzZVNjb3BlRGVwdGgpCi0gICAgICAgIG1fY29k
ZUJsb2NrLT5zZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOworICAgIG1fY29kZUJsb2NrLT5z
ZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOwogCi0gICAgY29kZUJsb2NrLT5zZXRHbG9iYWxE
YXRhKG1fZ2xvYmFsRGF0YSk7Ci0gICAgc3ltYm9sVGFibGUtPnNldFVzZXNOb25TdHJpY3RFdmFs
KGNvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7ICAg
IAorICAgIG1fc3ltYm9sVGFibGUtPnNldFVzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNl
c0V2YWwoKSAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgbV9jb2RlQmxvY2st
PnNldE51bVBhcmFtZXRlcnMoMSk7CiAKICAgICBwcmVwZW5kQ29tbWVudCgiZW50ZXJpbmcgRXZh
bCBibG9jayIpOwpAQCAtNTgxLDcgKzUwNCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihFdmFsTm9kZSogZXZhbE5vZGUsIEpTU2NvcGUqIHNjb3BlLCBTaGFyZWRTCiAK
ICAgICBjb25zdCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFj
ayA9IGV2YWxOb2RlLT5mdW5jdGlvblN0YWNrKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKQotICAgICAgICBtX2NvZGVCbG9jay0+YWRkRnVu
Y3Rpb25EZWNsKEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0
aW9uU3RhY2tbaV0pKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtl
RnVuY3Rpb24oZnVuY3Rpb25TdGFja1tpXSkpOwogCiAgICAgY29uc3QgRGVjbGFyYXRpb25TdGFj
a3M6OlZhclN0YWNrJiB2YXJTdGFjayA9IGV2YWxOb2RlLT52YXJTdGFjaygpOwogICAgIHVuc2ln
bmVkIG51bVZhcmlhYmxlcyA9IHZhclN0YWNrLnNpemUoKTsKQEAgLTU5NSw3ICs1MTgsNiBAQCBC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBK
U1Njb3BlKiBzY29wZSwgU2hhcmVkUwogCiBCeXRlY29kZUdlbmVyYXRvcjo6fkJ5dGVjb2RlR2Vu
ZXJhdG9yKCkKIHsKLSAgICBtX2dsb2JhbERhdGEtPmZpbmlzaGVkQ29tcGlsaW5nKG1fY29kZUJs
b2NrKTsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbml0TGF6eVJl
Z2lzdGVyKFJlZ2lzdGVySUQqIHJlZykKQEAgLTYxOCwxNyArNTQwLDYgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDYWxsZWUoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rp
b25Cb2R5Tm9kZSkKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGZ1
bmN0aW9uQm9keU5vZGUtPmlkZW50KCkpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KG1fY2FsbGVlUmVnaXN0ZXIuaW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChSZWFkT25seSB8IERvbnREZWxldGUpOwotCi0gICAgICAgIC8vIFB1dCBhIG1pcnJvciBvYmpl
Y3QgaW4gY29tcGlsYXRpb24gc2NvcGUsIHNvIGNvbXBpbGUtdGltZSB2YXJpYWJsZSByZXNvbHV0
aW9uIHNlZXMgdGhlIHByb3BlcnR5IG5hbWUgd2UnbGwgc2VlIGF0IHJ1bnRpbWUuCi0gICAgICAg
IG1fc2NvcGUuc2V0KCpnbG9iYWxEYXRhKCksCi0gICAgICAgICAgICBKU05hbWVTY29wZTo6Y3Jl
YXRlKAotICAgICAgICAgICAgICAgIG1fc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCksCi0gICAgICAgICAgICAgICAgZnVuY3Rpb25Cb2R5Tm9kZS0+aWRlbnQoKSwKLSAgICAgICAg
ICAgICAgICBqc1VuZGVmaW5lZCgpLAotICAgICAgICAgICAgICAgIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSwKLSAgICAgICAgICAgICAgICBtX3Njb3BlLmdldCgpCi0gICAgICAgICAgICApCi0gICAg
ICAgICk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtNzcyLDcgKzY4Myw3IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCiAgICAg
bV9sYXN0T3Bjb2RlUG9zaXRpb24gPSBvcGNvZGVQb3NpdGlvbjsKICNlbmRpZgogICAgIGVtaXRD
b21tZW50KCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGdsb2JhbERhdGEoKS0+aW50ZXJw
cmV0ZXItPmdldE9wY29kZShvcGNvZGVJRCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChv
cGNvZGVJRCk7CiAgICAgbV9sYXN0T3Bjb2RlSUQgPSBvcGNvZGVJRDsKIH0KIApAQCAtNzk2LDIx
ICs3MDcsMjEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlcGVuZENvbW1lbnQoY29uc3Qg
Y2hhciogc3RyaW5nKQogfQogI2VuZGlmCiAKLUFycmF5UHJvZmlsZSogQnl0ZWNvZGVHZW5lcmF0
b3I6Om5ld0FycmF5UHJvZmlsZSgpCitVbmxpbmtlZEFycmF5UHJvZmlsZSBCeXRlY29kZUdlbmVy
YXRvcjo6bmV3QXJyYXlQcm9maWxlKCkKIHsKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0g
ICAgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRBcnJheVByb2ZpbGUoaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKKyAgICByZXR1cm4gbV9jb2RlQmxvY2stPmFkZEFycmF5UHJvZmlsZSgpOwogI2Vsc2UK
ICAgICByZXR1cm4gMDsKICNlbmRpZgogfQogCi1WYWx1ZVByb2ZpbGUqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UHJvZmlsZWRPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCitVbmxpbmtlZFZhbHVl
UHJvZmlsZSBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEIG9w
Y29kZUlEKQogewogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBWYWx1ZVByb2ZpbGUq
IHJlc3VsdCA9IG1fY29kZUJsb2NrLT5hZGRWYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSByZXN1bHQgPSBtX2NvZGVCbG9jay0+YWRk
VmFsdWVQcm9maWxlKCk7CiAjZWxzZQotICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gMDsKKyAg
ICBVbmxpbmtlZFZhbHVlUHJvZmlsZSByZXN1bHQgPSAwOwogI2VuZGlmCiAgICAgZW1pdE9wY29k
ZShvcGNvZGVJRCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg0MCwxNCArNzUxLDYgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6cmV0cmlldmVMYXN0VW5hcnlPcChpbnQmIGRzdEluZGV4LCBp
bnQmIHNyY0luZGV4KQogICAgIHNyY0luZGV4ID0gaW5zdHJ1Y3Rpb25zKCkuYXQoc2l6ZSAtIDEp
LnUub3BlcmFuZDsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cmV0cmlldmVMYXN0VW5h
cnlPcChXcml0ZUJhcnJpZXI8VW5rbm93bj4qJiBkc3RQb2ludGVyLCBpbnQmIHNyY0luZGV4KQot
ewotICAgIEFTU0VSVChpbnN0cnVjdGlvbnMoKS5zaXplKCkgPj0gMyk7Ci0gICAgc2l6ZV90IHNp
emUgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgZHN0UG9pbnRlciA9IGluc3RydWN0aW9u
cygpLmF0KHNpemUgLSAyKS51LnJlZ2lzdGVyUG9pbnRlcjsKLSAgICBzcmNJbmRleCA9IGluc3Ry
dWN0aW9ucygpLmF0KHNpemUgLSAxKS51Lm9wZXJhbmQ7Ci19Ci0KIHZvaWQgQUxXQVlTX0lOTElO
RSBCeXRlY29kZUdlbmVyYXRvcjo6cmV3aW5kQmluYXJ5T3AoKQogewogICAgIEFTU0VSVChpbnN0
cnVjdGlvbnMoKS5zaXplKCkgPj0gNCk7CkBAIC0xMzM2LDcgKzEyMzksNyBAQCBSZXNvbHZlUmVz
dWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
KQogICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJSZXNvbHZlKHRoaXNSZWdp
c3RlcigpLCBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUZsYWcpOwogCiAgICAgLy8gQ2hlY2sgaWYg
dGhlIHByb3BlcnR5IHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gYSByZWdpc3Rlci4KLSAgICBpZiAo
bV9jb2RlVHlwZSAhPSBHbG9iYWxDb2RlICYmIHNob3VsZE9wdGltaXplTG9jYWxzKCkpIHsKKyAg
ICBpZiAobV9jb2RlVHlwZSAhPSBHbG9iYWxDb2RlICYmIHNob3VsZE9wdGltaXplTG9jYWxzKCkg
JiYgbV9zeW1ib2xUYWJsZSkgewogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3lt
Ym9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKICAgICAgICAgaWYgKCFlbnRyeS5pc051
bGwoKSkgewogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1
bWVudHMpCkBAIC0xMzUyLDcgKzEyNTUsNyBAQCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJh
dG9yOjpyZXNvbHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQogUmVzb2x2ZVJlc3VsdCBC
eXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNvbnN0RGVjbChjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eSkKIHsKICAgICAvLyBSZWdpc3Rlci1hbGxvY2F0ZWQgY29uc3QgZGVjbGFyYXRpb25zLgot
ICAgIGlmIChtX2NvZGVUeXBlICE9IEV2YWxDb2RlICYmIG1fY29kZVR5cGUgIT0gR2xvYmFsQ29k
ZSkgeworICAgIGlmIChtX2NvZGVUeXBlICE9IEV2YWxDb2RlICYmIG1fY29kZVR5cGUgIT0gR2xv
YmFsQ29kZSAmJiBtX3N5bWJvbFRhYmxlKSB7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwogICAgICAgICBpZiAoIWVu
dHJ5LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBmbGFncyA9IGVudHJ5LmlzUmVh
ZE9ubHkoKSA/IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZyA6IDA7CkBAIC0xMzk0LDcgKzEy
OTcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmUoUmVnaXN0
ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0JgogICAgIGlmIChyZXNvbHZlUmVzdWx0Lmlz
UmVnaXN0ZXIoKSkKICAgICAgICAgcmV0dXJuIGVtaXRHZXRMb2NhbFZhcihkc3QsIHJlc29sdmVS
ZXN1bHQsIHByb3BlcnR5KTsKIAotICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9m
aWxlZE9wY29kZShvcF9yZXNvbHZlKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxl
ID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmUpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFu
dChwcm9wZXJ0eSkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChnZXRSZXNvbHZlT3BlcmF0
aW9ucyhwcm9wZXJ0eSkpOwpAQCAtMTQwNiw3ICsxMzA5LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29s
dmVSZXMKIHsKICAgICBBU1NFUlRfVU5VU0VEKHJlc29sdmVSZXN1bHQsICFyZXNvbHZlUmVzdWx0
LmlzUmVnaXN0ZXIoKSk7CiAgICAgLy8gV2UgY2FuJ3Qgb3B0aW1pc2UgYXQgYWxsIDotKAotICAg
IFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZlX2Jh
c2UpOworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNv
ZGUob3BfcmVzb2x2ZV9iYXNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRl
eCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOwpAQCAtMTQyMCw3ICsxMzIzLDcgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZUZvclB1dChSZWdp
c3RlcklEKiBkc3QsIGNvbnN0IFJlc28KIHsKICAgICBBU1NFUlRfVU5VU0VEKHJlc29sdmVSZXN1
bHQsICFyZXNvbHZlUmVzdWx0LmlzUmVnaXN0ZXIoKSk7CiAgICAgLy8gV2UgY2FuJ3Qgb3B0aW1p
c2UgYXQgYWxsIDotKAotICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9w
Y29kZShvcF9yZXNvbHZlX2Jhc2UpOworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUg
PSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV9iYXNlKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29u
c3RhbnQocHJvcGVydHkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpKTsKQEAgLTE0MzUsNyArMTMzOCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2VGb3JQdXQoUmVnaXN0ZXJJRCogZHN0LCBjb25z
dCBSZXNvCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVXaXRoQmFz
ZUZvclB1dChSZWdpc3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcklEKiBwcm9wRHN0LCBjb25zdCBS
ZXNvbHZlUmVzdWx0JiByZXNvbHZlUmVzdWx0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwg
Tm9ubG9jYWxSZXNvbHZlSW5mbyYgdmVyaWZpZXIpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNv
bHZlUmVzdWx0LCAhcmVzb2x2ZVJlc3VsdC5pc1JlZ2lzdGVyKCkpOwotICAgIFZhbHVlUHJvZmls
ZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZlX3dpdGhfYmFzZSk7Cisg
ICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9y
ZXNvbHZlX3dpdGhfYmFzZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2VEc3QtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wRHN0LT5pbmRleCgpKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKQEAgLTE0NTUs
NyArMTM1OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdp
dGhUaGlzKFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVyCiAgICAgICAgIHJldHVybiBiYXNl
RHN0OwogICAgIH0KIAotICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9w
Y29kZShvcF9yZXNvbHZlX3dpdGhfdGhpcyk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJv
ZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZlX3dpdGhfdGhpcyk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2VEc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChwcm9wRHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRk
Q29uc3RhbnQocHJvcGVydHkpKTsKQEAgLTE0ODIsMjMgKzEzODUsMTEgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRMb2NhbFZhcihSZWdpc3RlcklEKiBkc3QsIGNvbnN0
IFJlc29sdmVSZXMKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5pdEdsb2Jh
bENvbnN0KGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVySUQqIHZhbHVlKQog
ewogICAgIEFTU0VSVChtX2NvZGVUeXBlID09IEdsb2JhbENvZGUpOwotICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgU3lt
Ym9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGlk
ZW50aWZpZXIuaW1wbCgpKTsKLSAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIAotICAgIGlmIChlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7Ci0gICAgICAgIGVt
aXRPcGNvZGUob3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2spOwotICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoJmdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKSk7
Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChlbnRyeS5hZGRyZXNzT2ZJc1dhdGNoZWQoKSk7Ci0gICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgZW1pdE9wY29kZShvcF9pbml0X2ds
b2JhbF9jb25zdCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKCZnbG9iYWxPYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkpOworICAgIGVtaXRPcGNvZGUob3BfaW5pdF9nbG9i
YWxfY29uc3Rfbm9wKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIp
KTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTE1MTEsNyArMTQwMiw3IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlJZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGJhc2UsIGNvCiB7CiAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAotICAgIFZhbHVlUHJvZmlsZSogcHJv
ZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYnlfaWQpOworICAgIFVubGlua2VkVmFs
dWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2J5X2lkKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENv
bnN0YW50KHByb3BlcnR5KSk7CkBAIC0xNTk3LDggKzE0ODgsOCBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdERlbGV0ZUJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBiYXNlLAogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEFyZ3VtZW50
QnlWYWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9w
ZXJ0eSkKIHsKLSAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmls
ZSgpOwotICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9n
ZXRfYXJndW1lbnRfYnlfdmFsKTsKKyAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2Zp
bGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxl
ID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9hcmd1bWVudF9ieV92YWwpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIEFTU0VSVChiYXNlLT5pbmRleCgp
ID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CkBAIC0xNjIzLDggKzE1MTQsOCBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogYmFzZSwgUgogICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAgfQogICAgIH0K
LSAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwotICAg
IFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYnlfdmFs
KTsKKyAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2Zp
bGUoKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bj
b2RlKG9wX2dldF9ieV92YWwpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4
KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOwpAQCAtMTYzNSw3ICsxNTI2LDcg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChSZWdpc3RlcklE
KiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFIKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRQdXRCeVZhbChSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwg
UmVnaXN0ZXJJRCogdmFsdWUpCiB7Ci0gICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBu
ZXdBcnJheVByb2ZpbGUoKTsKKyAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUg
PSBuZXdBcnJheVByb2ZpbGUoKTsKICAgICBlbWl0T3Bjb2RlKG9wX3B1dF9ieV92YWwpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOwpAQCAtMTcwNSw3ICsxNTk2LDcgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdBcnJheShSZWdpc3RlcklEKiBkc3QsIEVs
ZW1lbnROb2RlKiBlbGVtZW4KICAgICAgICAgaWYgKCFoYWRWYXJpYWJsZUV4cHJlc3Npb24pIHsK
ICAgICAgICAgICAgIEFTU0VSVChsZW5ndGggPT0gY2hlY2tMZW5ndGgpOwogICAgICAgICAgICAg
dW5zaWduZWQgY29uc3RhbnRCdWZmZXJJbmRleCA9IGFkZENvbnN0YW50QnVmZmVyKGxlbmd0aCk7
Ci0gICAgICAgICAgICBKU1ZhbHVlKiBjb25zdGFudEJ1ZmZlciA9IG1fY29kZUJsb2NrLT5jb25z
dGFudEJ1ZmZlcihjb25zdGFudEJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAgIEpTVmFsdWUqIGNv
bnN0YW50QnVmZmVyID0gbV9jb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKGNvbnN0YW50QnVmZmVy
SW5kZXgpLmRhdGEoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAg
ICAgIGZvciAoRWxlbWVudE5vZGUqIG4gPSBlbGVtZW50czsgaW5kZXggPCBsZW5ndGg7IG4gPSBu
LT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAobi0+dmFsdWUoKS0+aXNOdW1iZXIoKSkK
QEAgLTE3NDEsMTQgKzE2MzIsMTQgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXROZXdBcnJheShSZWdpc3RlcklEKiBkc3QsIEVsZW1lbnROb2RlKiBlbGVtZW4KIAogUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3Qs
IEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQogewotICAgIHJldHVybiBlbWl0TmV3RnVuY3Rp
b25JbnRlcm5hbChkc3QsIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2woRnVuY3Rpb25FeGVj
dXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKSwgZmFsc2UpOworICAgIHJl
dHVybiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlv
bkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSksIGZhbHNlKTsKIH0KIAogUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMYXp5TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBG
dW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbikKIHsKICAgICBGdW5jdGlvbk9mZnNldE1hcDo6QWRk
UmVzdWx0IHB0ciA9IG1fZnVuY3Rpb25PZmZzZXRzLmFkZChmdW5jdGlvbiwgMCk7CiAgICAgaWYg
KHB0ci5pc05ld0VudHJ5KQotICAgICAgICBwdHIuaXRlcmF0b3ItPnZhbHVlID0gbV9jb2RlQmxv
Y2stPmFkZEZ1bmN0aW9uRGVjbChGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxE
YXRhLCBmdW5jdGlvbikpOworICAgICAgICBwdHIuaXRlcmF0b3ItPnZhbHVlID0gbV9jb2RlQmxv
Y2stPmFkZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24oZnVuY3Rpb24pKTsKICAgICByZXR1cm4g
ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBwdHIuaXRlcmF0b3ItPnZhbHVlLCB0cnVlKTsK
IH0KIApAQCAtMTc3Myw3ICsxNjY0LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXROZXdSZWdFeHAoUmVnaXN0ZXJJRCogZHN0LCBSZWdFeHAqIHJlZ0V4cCkKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKFJlZ2lzdGVy
SUQqIHIwLCBGdW5jRXhwck5vZGUqIG4pCiB7CiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rp
b24gPSBuLT5ib2R5KCk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVu
Y3Rpb25FeHByKEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0
aW9uKSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25FeHBy
KG1ha2VGdW5jdGlvbihmdW5jdGlvbikpOwogICAgIAogICAgIGNyZWF0ZUFjdGl2YXRpb25JZk5l
Y2Vzc2FyeSgpOwogICAgIGVtaXRPcGNvZGUob3BfbmV3X2Z1bmNfZXhwKTsKQEAgLTE5MjQsNyAr
MTgxNSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvZGVJ
RCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpCiAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9
IGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRvbmUuZ2V0KCkpOwogICAgIAogICAgIC8vIEVtaXQgY2FsbC4KLSAg
ICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOworICAgIFVu
bGlua2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwogICAg
IGVtaXRPcGNvZGUob3Bjb2RlSUQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5p
bmRleCgpKTsgLy8gZnVuYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjYWxsQXJndW1lbnRz
LmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOyAvLyBhcmdDb3VudApAQCAtMTkzNiw3ICsx
ODI3LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE9wY29kZUlE
IG9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2kKICNlbmRpZgogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChhcnJheVByb2ZpbGUpOwogICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgp
KSB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShv
cF9jYWxsX3B1dF9yZXN1bHQpOworICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxl
ID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CiAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOyAvLyBkc3QKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIH0KQEAgLTE5NjksNyArMTg2MCw3IEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBmdW5jCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3VtZW50cy0+
aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZpcnN0RnJlZVJlZ2lzdGVyLT5p
bmRleCgpKTsKICAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSkgewotICAgICAgICBWYWx1
ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0
KTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9w
Y29kZShvcF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZHN0LT5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwog
ICAgIH0KQEAgLTIwNTIsNyArMTk0Myw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywKICNlbmRp
ZgogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpZiAoZHN0ICE9IGlnbm9yZWRS
ZXN1bHQoKSkgewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRP
cGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUg
cHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsgLy8gZHN0CiAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAgICB9CkBAIC0yNDMxLDcgKzIzMjIsNyBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kRW1pdENhdGNoKFRyeURh
dGEqIHRyeURhdGEsIFJlZ2lzdGVySUQqCiAgICAgbV90cnlDb250ZXh0U3RhY2sucmVtb3ZlTGFz
dCgpOwogICAgIAogICAgIGVtaXRMYWJlbCh0cnlSYW5nZS50cnlEYXRhLT50YXJnZXQuZ2V0KCkp
OwotICAgIHRyeVJhbmdlLnRyeURhdGEtPnRhcmdldFNjb3BlRGVwdGggPSBtX2R5bmFtaWNTY29w
ZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0aDsKKyAgICB0cnlSYW5nZS50cnlEYXRhLT50YXJnZXRT
Y29wZURlcHRoID0gbV9keW5hbWljU2NvcGVEZXB0aDsKIAogICAgIGVtaXRPcGNvZGUob3BfY2F0
Y2gpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXRSZWdpc3Rlci0+aW5kZXgoKSk7
CkBAIC0yNDQwLDggKzIzMzEsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9w
VHJ5QW5kRW1pdENhdGNoKFRyeURhdGEqIHRyeURhdGEsIFJlZ2lzdGVySUQqCiAKIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKIHsKLSAgICBlbWl0T3Bjb2RlKG9wX3Rocm93X3JlZmVyZW5jZV9lcnJvcik7CisgICAg
ZW1pdE9wY29kZShvcF90aHJvd19zdGF0aWNfZXJyb3IpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChhZGRDb25zdGFudFZhbHVlKGpzU3RyaW5nKGdsb2JhbERhdGEoKSwgbWVzc2FnZSkpLT5p
bmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodHJ1ZSk7CiB9CiAKIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoTmFtZVNjb3BlKGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5LCBSZWdpc3RlcklEKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAgLTI0OTIsNyAr
MjM4NCw3IEBAIHN0YXRpYyBpbnQzMl90IGtleUZvckltbWVkaWF0ZVN3aXRjaChFeHByZXNzaW9u
Tm9kZSogbm9kZSwgaW50MzJfdCBtaW4sIGludDMyX3QKICAgICByZXR1cm4ga2V5IC0gbWluOwog
fQogCi1zdGF0aWMgdm9pZCBwcmVwYXJlSnVtcFRhYmxlRm9ySW1tZWRpYXRlU3dpdGNoKFNpbXBs
ZUp1bXBUYWJsZSYganVtcFRhYmxlLCBpbnQzMl90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNs
YXVzZUNvdW50LCBSZWZQdHI8TGFiZWw+KiBsYWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMs
IGludDMyX3QgbWluLCBpbnQzMl90IG1heCkKK3N0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVG
b3JJbW1lZGlhdGVTd2l0Y2goVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50
MzJfdCBzd2l0Y2hBZGRyZXNzLCB1aW50MzJfdCBjbGF1c2VDb3VudCwgUmVmUHRyPExhYmVsPiog
bGFiZWxzLCBFeHByZXNzaW9uTm9kZSoqIG5vZGVzLCBpbnQzMl90IG1pbiwgaW50MzJfdCBtYXgp
CiB7CiAgICAganVtcFRhYmxlLm1pbiA9IG1pbjsKICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0
cy5yZXNpemUobWF4IC0gbWluICsgMSk7CkBAIC0yNTE4LDcgKzI0MTAsNyBAQCBzdGF0aWMgaW50
MzJfdCBrZXlGb3JDaGFyYWN0ZXJTd2l0Y2goRXhwcmVzc2lvbk5vZGUqIG5vZGUsIGludDMyX3Qg
bWluLCBpbnQzMl90CiAgICAgcmV0dXJuIGtleSAtIG1pbjsKIH0KIAotc3RhdGljIHZvaWQgcHJl
cGFyZUp1bXBUYWJsZUZvckNoYXJhY3RlclN3aXRjaChTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJs
ZSwgaW50MzJfdCBzd2l0Y2hBZGRyZXNzLCB1aW50MzJfdCBjbGF1c2VDb3VudCwgUmVmUHRyPExh
YmVsPiogbGFiZWxzLCBFeHByZXNzaW9uTm9kZSoqIG5vZGVzLCBpbnQzMl90IG1pbiwgaW50MzJf
dCBtYXgpCitzdGF0aWMgdm9pZCBwcmVwYXJlSnVtcFRhYmxlRm9yQ2hhcmFjdGVyU3dpdGNoKFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUsIGludDMyX3Qgc3dpdGNoQWRkcmVzcywg
dWludDMyX3QgY2xhdXNlQ291bnQsIFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRXhwcmVzc2lvbk5v
ZGUqKiBub2RlcywgaW50MzJfdCBtaW4sIGludDMyX3QgbWF4KQogewogICAgIGp1bXBUYWJsZS5t
aW4gPSBtaW47CiAgICAganVtcFRhYmxlLmJyYW5jaE9mZnNldHMucmVzaXplKG1heCAtIG1pbiAr
IDEpOwpAQCAtMjUzMSw3ICsyNDIzLDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZv
ckNoYXJhY3RlclN3aXRjaChTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50MzIKICAgICB9
CiB9CiAKLXN0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0Y2goU3RyaW5n
SnVtcFRhYmxlJiBqdW1wVGFibGUsIGludDMyX3Qgc3dpdGNoQWRkcmVzcywgdWludDMyX3QgY2xh
dXNlQ291bnQsIFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRXhwcmVzc2lvbk5vZGUqKiBub2RlcykK
K3N0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0Y2goVW5saW5rZWRTdHJp
bmdKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50MzJfdCBzd2l0Y2hBZGRyZXNzLCB1aW50MzJfdCBj
bGF1c2VDb3VudCwgUmVmUHRyPExhYmVsPiogbGFiZWxzLCBFeHByZXNzaW9uTm9kZSoqIG5vZGVz
KQogewogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjbGF1c2VDb3VudDsgKytpKSB7CiAg
ICAgICAgIC8vIFdlJ3JlIGVtaXR0aW5nIHRoaXMgYWZ0ZXIgdGhlIGNsYXVzZSBsYWJlbHMgc2hv
dWxkIGhhdmUgYmVlbiBmaXhlZCwgc28gCkBAIC0yNTQwLDkgKzI0MzIsNyBAQCBzdGF0aWMgdm9p
ZCBwcmVwYXJlSnVtcFRhYmxlRm9yU3RyaW5nU3dpdGNoKFN0cmluZ0p1bXBUYWJsZSYganVtcFRh
YmxlLCBpbnQzMl90CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobm9kZXNbaV0tPmlzU3RyaW5n
KCkpOwogICAgICAgICBTdHJpbmdJbXBsKiBjbGF1c2UgPSBzdGF0aWNfY2FzdDxTdHJpbmdOb2Rl
Kj4obm9kZXNbaV0pLT52YWx1ZSgpLmltcGwoKTsKLSAgICAgICAgT2Zmc2V0TG9jYXRpb24gbG9j
YXRpb247Ci0gICAgICAgIGxvY2F0aW9uLmJyYW5jaE9mZnNldCA9IGxhYmVsc1tpXS0+YmluZChz
d2l0Y2hBZGRyZXNzLCBzd2l0Y2hBZGRyZXNzICsgMyk7Ci0gICAgICAgIGp1bXBUYWJsZS5vZmZz
ZXRUYWJsZS5hZGQoY2xhdXNlLCBsb2NhdGlvbik7CisgICAgICAgIGp1bXBUYWJsZS5vZmZzZXRU
YWJsZS5hZGQoY2xhdXNlLCBsYWJlbHNbaV0tPmJpbmQoc3dpdGNoQWRkcmVzcywgc3dpdGNoQWRk
cmVzcyArIDMpKTsKICAgICB9CiB9CiAKQEAgLTI1NTQsMjAgKzI0NDQsMjAgQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW5kU3dpdGNoKHVpbnQzMl90IGNsYXVzZUNvdW50LCBSZWZQdHI8TGFi
ZWw+KiBsYWJlbHMsIEUKICAgICAgICAgaW5zdHJ1Y3Rpb25zKClbc3dpdGNoSW5mby5ieXRlY29k
ZU9mZnNldCArIDFdID0gbV9jb2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRh
YmxlcygpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0
ICsgMl0gPSBkZWZhdWx0TGFiZWwtPmJpbmQoc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgc3dp
dGNoSW5mby5ieXRlY29kZU9mZnNldCArIDMpOwogCi0gICAgICAgIFNpbXBsZUp1bXBUYWJsZSYg
anVtcFRhYmxlID0gbV9jb2RlQmxvY2stPmFkZEltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSgpOwor
ICAgICAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2st
PmFkZEltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSgpOwogICAgICAgICBwcmVwYXJlSnVtcFRhYmxl
Rm9ySW1tZWRpYXRlU3dpdGNoKGp1bXBUYWJsZSwgc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwg
Y2xhdXNlQ291bnQsIGxhYmVscywgbm9kZXMsIG1pbiwgbWF4KTsKICAgICB9IGVsc2UgaWYgKHN3
aXRjaEluZm8uc3dpdGNoVHlwZSA9PSBTd2l0Y2hJbmZvOjpTd2l0Y2hDaGFyYWN0ZXIpIHsKICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKClbc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCArIDFdID0gbV9j
b2RlQmxvY2stPm51bWJlck9mQ2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcygpOwogICAgICAgICBp
bnN0cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMl0gPSBkZWZhdWx0TGFi
ZWwtPmJpbmQoc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgc3dpdGNoSW5mby5ieXRlY29kZU9m
ZnNldCArIDMpOwogICAgICAgICAKLSAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUg
PSBtX2NvZGVCbG9jay0+YWRkQ2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKCk7CisgICAgICAgIFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkQ2hhcmFj
dGVyU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAgICAgIHByZXBhcmVKdW1wVGFibGVGb3JDaGFyYWN0
ZXJTd2l0Y2goanVtcFRhYmxlLCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBjbGF1c2VDb3Vu
dCwgbGFiZWxzLCBub2RlcywgbWluLCBtYXgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VS
VChzd2l0Y2hJbmZvLnN3aXRjaFR5cGUgPT0gU3dpdGNoSW5mbzo6U3dpdGNoU3RyaW5nKTsKICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKClbc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCArIDFdID0gbV9j
b2RlQmxvY2stPm51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOwogICAgICAgICBpbnN0
cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMl0gPSBkZWZhdWx0TGFiZWwt
PmJpbmQoc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgc3dpdGNoSW5mby5ieXRlY29kZU9mZnNl
dCArIDMpOwogCi0gICAgICAgIFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxv
Y2stPmFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSgpOworICAgICAgICBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPmFkZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSgpOwogICAgICAgICBwcmVwYXJlSnVtcFRhYmxlRm9yU3RyaW5nU3dpdGNoKGp1bXBUYWJsZSwg
c3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgY2xhdXNlQ291bnQsIGxhYmVscywgbm9kZXMpOwog
ICAgIH0KIH0KQEAgLTI1OTksOSArMjQ4OSw5IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCkKIHsKICAgICBpZiAoIWlzU3RyaWN0TW9kZSgp
KQogICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXJyb3IgPSBlbWl0
TG9hZChuZXdUZW1wb3JhcnkoKSwgSlNWYWx1ZShjcmVhdGVUeXBlRXJyb3Ioc2NvcGUoKS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKSkpOwotICAgIGVtaXRUaHJvdyhlcnJvci5nZXQoKSk7CisgICAgZW1pdE9wY29kZShv
cF90aHJvd19zdGF0aWNfZXJyb3IpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25z
dGFudFZhbHVlKGpzU3RyaW5nKGdsb2JhbERhdGEoKSwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKSktPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmYWxz
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDI0NjUzMGFiMjg2
OGY4ZmI2ZmE0NTViY2IyMzBjMjQxNDE2YjcyMTQuLjg1N2VjOGY4NDI3Zjc5Y2VjNzE1NzE5YTEz
ZWY4NmMwMTFhNWYzYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRl
ICJTeW1ib2xUYWJsZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiTm9kZXMu
aCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTIxMSwxOCArMjEyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXREdW1wc0dlbmVyYXRlZENvZGUoYm9vbCBk
dW1wc0dlbmVyYXRlZENvZGUpOwogICAgICAgICBzdGF0aWMgYm9vbCBkdW1wc0dlbmVyYXRlZENv
ZGUoKTsKIAotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIEpTU2NvcGUq
LCBTaGFyZWRTeW1ib2xUYWJsZSosIFByb2dyYW1Db2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQp
OwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiwgSlNTY29wZSos
IFNoYXJlZFN5bWJvbFRhYmxlKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKLSAgICAg
ICAgQnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBKU1Njb3BlKiwgU2hhcmVkU3ltYm9sVGFi
bGUqLCBFdmFsQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKKyAgICAgICAgQnl0ZWNvZGVH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiwgUHJvZ3JhbU5vZGUqLCBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7CisgICAgICAgIEJ5dGVjb2RlR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSYsIEZ1bmN0aW9uQm9keU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOworICAgICAgICBCeXRlY29k
ZUdlbmVyYXRvcihKU0dsb2JhbERhdGEmLCBFdmFsTm9kZSosIFVubGlua2VkRXZhbENvZGVCbG9j
ayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKIAogICAgICAgICB+Qnl0ZWNvZGVHZW5l
cmF0b3IoKTsKICAgICAgICAgCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlm
aWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX2dsb2JhbERhdGEtPnByb3Bl
cnR5TmFtZXM7IH0KIAotICAgICAgICBib29sIGlzQ29uc3RydWN0b3IoKSB7IHJldHVybiBtX2Nv
ZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yOyB9CisgICAgICAgIGJvb2wgaXNDb25zdHJ1Y3Rvcigp
IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCk7IH0KIAotICAgICAgICBKU09i
amVjdCogZ2VuZXJhdGUoKTsKKyAgICAgICAgUGFyc2VyRXJyb3IgZ2VuZXJhdGUoKTsKIAogICAg
ICAgICBib29sIGlzQXJndW1lbnROdW1iZXIoY29uc3QgSWRlbnRpZmllciYsIGludCk7CiAKQEAg
LTMzMiwxMCArMzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0RXhw
cmVzc2lvbkluZm8odW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9zaG91bGRFbWl0Umlj
aFNvdXJjZUluZm8pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBkaXZv
dCAtPSBtX2NvZGVCbG9jay0+c291cmNlT2Zmc2V0KCk7CisgICAgICAgICAgICBkaXZvdCAtPSBt
X3Njb3BlTm9kZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKICAgICAgICAgICAgIGlmIChkaXZv
dCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heERpdm90KSB7CiAgICAgICAgICAgICAgICAgLy8g
T3ZlcmZsb3cgaGFzIG9jY3VycmVkLCB3ZSBjYW4gb25seSBnaXZlIGxpbmUgbnVtYmVyIGluZm8g
Zm9yIGVycm9ycyBmb3IgdGhpcyByZWdpb24KICAgICAgICAgICAgICAgICBkaXZvdCA9IDA7CkBA
IC01MTAsOCArNTA4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1p
dFByb2ZpbGVIb29rcygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rczsgfQogICAg
ICAgICAKICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVC
bG9jay0+aXNTdHJpY3RNb2RlKCk7IH0KLSAgICAgICAgCi0gICAgICAgIEpTU2NvcGUqIHNjb3Bl
KCkgY29uc3QgeyByZXR1cm4gbV9zY29wZS5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgZnJpZW5kIGNsYXNzIExhYmVsOwpAQCAtNTI5LDExICs1MjUsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAjZW5kaWYKIAogICAgICAgICB2b2lkIGVtaXRPcGNvZGUoT3Bjb2RlSUQpOwotICAgICAg
ICBBcnJheVByb2ZpbGUqIG5ld0FycmF5UHJvZmlsZSgpOwotICAgICAgICBWYWx1ZVByb2ZpbGUq
IGVtaXRQcm9maWxlZE9wY29kZShPcGNvZGVJRCk7CisgICAgICAgIFVubGlua2VkQXJyYXlQcm9m
aWxlIG5ld0FycmF5UHJvZmlsZSgpOworICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBlbWl0
UHJvZmlsZWRPcGNvZGUoT3Bjb2RlSUQpOwogICAgICAgICB2b2lkIHJldHJpZXZlTGFzdEJpbmFy
eU9wKGludCYgZHN0SW5kZXgsIGludCYgc3JjMUluZGV4LCBpbnQmIHNyYzJJbmRleCk7CiAgICAg
ICAgIHZvaWQgcmV0cmlldmVMYXN0VW5hcnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyY0luZGV4
KTsKLSAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RVbmFyeU9wKFdyaXRlQmFycmllcjxVbmtub3du
PiomIGRzdFBvaW50ZXIsIGludCYgc3JjSW5kZXgpOwogICAgICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgcmV3aW5kQmluYXJ5T3AoKTsKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJld2luZFVu
YXJ5T3AoKTsKIApAQCAtNTc2LDEwICs1NzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBhZGRlZCB2YXIuCi0gICAg
ICAgIGVudW0gQ29uc3RhbnRNb2RlIHsgSXNDb25zdGFudCwgSXNWYXJpYWJsZSB9OwotICAgICAg
ICBlbnVtIEZ1bmN0aW9uTW9kZSB7IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUsIE5vdEZ1bmN0aW9u
T3JOb3RTcGVjaWFsaXphYmxlIH07Ci0gICAgICAgIGludCBhZGRHbG9iYWxWYXIoY29uc3QgSWRl
bnRpZmllciYsIENvbnN0YW50TW9kZSwgRnVuY3Rpb25Nb2RlKTsKLQogICAgICAgICB2b2lkIGFk
ZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiwgaW50IHBhcmFtZXRlckluZGV4KTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogcmVzb2x2ZUNhbGxlZShGdW5jdGlvbkJvZHlOb2RlKik7CiAgICAgICAg
IHZvaWQgYWRkQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqLCBSZWdpc3RlcklEKik7CkBAIC02MDYs
MTcgKzU5NywyMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB1bnNpZ25lZCBhZGRDb25z
dGFudEJ1ZmZlcih1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICAKKyAgICAgICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIG1ha2VGdW5jdGlvbihGdW5jdGlvbkJvZHlOb2RlKiBib2R5KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OmNyZWF0ZShtX2dsb2JhbERhdGEsIG1fc2NvcGVOb2RlLT5zb3VyY2UoKSwgYm9keSk7CisgICAg
ICAgIH0KKwogICAgICAgICBKU1N0cmluZyogYWRkU3RyaW5nQ29uc3RhbnQoY29uc3QgSWRlbnRp
ZmllciYpOwogCiAgICAgICAgIHZvaWQgYWRkTGluZUluZm8odW5zaWduZWQgbGluZU5vKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkTGluZUluZm8oaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpLCBsaW5lTm8pOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFkZExpbmVJbmZv
KGluc3RydWN0aW9ucygpLnNpemUoKSwgbGluZU5vIC0gbV9zY29wZU5vZGUtPmZpcnN0TGluZSgp
KTsKICAgICAgICAgfQogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJbml0TGF6eVJlZ2lzdGVy
KFJlZ2lzdGVySUQqKTsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgVmVjdG9yPEluc3RydWN0aW9u
PiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KKyAgICAgICAgVmVj
dG9yPFVubGlua2VkSW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3Ry
dWN0aW9uczsgfQogCiAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIHsg
cmV0dXJuICptX3N5bWJvbFRhYmxlOyB9CiAjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQpA
QCAtNjU0LDEzICs2NTAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY3JlYXRl
QWN0aXZhdGlvbklmTmVjZXNzYXJ5KCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGNyZWF0ZUxhenlS
ZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqKTsKICAgICAgICAgCi0gICAgICAgIFZlY3Rv
cjxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZElu
c3RydWN0aW9uPiBtX2luc3RydWN0aW9uczsKIAogICAgICAgICBib29sIG1fc2hvdWxkRW1pdERl
YnVnSG9va3M7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzOwotICAgICAg
ICBib29sIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvOwogCi0gICAgICAgIFN0cm9uZzxKU1Nj
b3BlPiBtX3Njb3BlOwogICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsK
IAogI2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKQEAgLTY2OSw3ICs2NjMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICNlbmRpZgogCiAgICAgICAgIFNjb3BlTm9kZSogbV9zY29wZU5vZGU7Ci0g
ICAgICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgICAgIFN0cm9uZzxVbmxpbmtlZENv
ZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAKICAgICAgICAgLy8gU29tZSBvZiB0aGVzZSBvYmplY3Rz
IGtlZXAgcG9pbnRlcnMgdG8gb25lIGFub3RoZXIuIFRoZXkgYXJlIGFycmFuZ2VkCiAgICAgICAg
IC8vIHRvIGVuc3VyZSBhIHNhbmUgZGVzdHJ1Y3Rpb24gb3JkZXIgdGhhdCBhdm9pZHMgcmVmZXJl
bmNlcyB0byBmcmVlZCBtZW1vcnkuCkBAIC02ODcsNyArNjgxLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2xhc3RWYXI7CiAgICAgICAgIGludCBtX2Zp
bmFsbHlEZXB0aDsKICAgICAgICAgaW50IG1fZHluYW1pY1Njb3BlRGVwdGg7Ci0gICAgICAgIGlu
dCBtX2Jhc2VTY29wZURlcHRoOwogICAgICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwogCiAgICAg
ICAgIFZlY3RvcjxDb250cm9sRmxvd0NvbnRleHQ+IG1fc2NvcGVDb250ZXh0U3RhY2s7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAppbmRleCAzNzMxYjA0NzMw
MmRhMzkxMmU1Nzg4YTYwYWRkMTJjYjY0YzhiNGU5Li5iMTQ3MjkxNDY4YTJiMDUwOTg0MjFiOGQy
YjcwZWVmMDk0NTY2ZmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlci5jcHAKQEAgLTgwLDYgKzgwLDcgQEAgaW5saW5lIHZvaWQgUmVjb21waWxlcjo6b3BlcmF0
b3IoKShKU0NlbGwqIGNlbGwpCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmdW5jdGlvbi0+c2Nv
cGUoKS0+Z2xvYmFsT2JqZWN0KCktPkpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAgICAg
ZXhlY3V0YWJsZS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKKyAgICBleGVjdXRhYmxlLT5j
bGVhclVubGlua2VkQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgaWYgKG1fZGVidWdnZXIgPT0g
ZnVuY3Rpb24tPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQogICAgICAgICBt
X3NvdXJjZVByb3ZpZGVycy5hZGQoZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhl
Yyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
Q2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCmlu
ZGV4IDZiOTA1NmU1NGExOGM2YmZkMDAxMzAzYjhmNGU0ZWU2NWFkMDY0YzcuLmUxODM3YjA0MWQ3
MjkwNjU5YzE1MDk2ZTRmNWVhNTg2NThiNGZjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCkBAIC0xNTgsNyArMTU4LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgLy8gTm9wZSwgc28gdHJ5IHRvIHBhcnNlIG9uZS4KICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBleGNlcHRpb247CiAgICAgICAgICAgICB2YWx1ZS5vd25lZCA9IHRydWU7Ci0gICAgICAg
ICAgICB2YWx1ZS5jb2RlQmxvY2sgPSBrZXkuZXhlY3V0YWJsZSgpLT5wcm9kdWNlQ29kZUJsb2Nr
Rm9yKHNjb3BlLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24sIGtleS5raW5kKCksIGV4Y2VwdGlvbiku
bGVha1B0cigpOworICAgICAgICAgICAgdmFsdWUuY29kZUJsb2NrID0ga2V5LmV4ZWN1dGFibGUo
KS0+cHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwga2V5LmtpbmQoKSwgZXhjZXB0aW9uKS5sZWFr
UHRyKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlz
IGFueSByZWFzb24gdG8gcmVqZWN0IHRoaXMgZnJvbSBvdXIgY2FjaGUuIElmIHNvLCB0aGVuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4
IDdhNWU3ZmM2YTA0NDJhMzM5NGEyNzYxNGI0M2ZhZWVjNzY3YWU4OTcuLjM4YWM2ZmY3NThkMDUz
MDkwZWE1OGY3MjQ5MmM0YWU1MWZhZDM0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0yNjU3LDYgKzI2NTcsMTAgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIG9wX2lu
aXRfZ2xvYmFsX2NvbnN0X25vcDogeworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9n
bG9iYWxfY29uc3Rfbm9wKTsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9i
YWxfY29uc3Q6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoCkBAIC0yODk0
LDEwICsyODk4LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQg
bGltaXQpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFRocm93LCBnZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfdGhyb3cpOwog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yOgorICAg
ICAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKICAgICAgICAgICAgIGZsdXNoQXJndW1l
bnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXMoKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3dS
ZWZlcmVuY2VFcnJvcik7Ci0gICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvd19yZWZlcmVu
Y2VfZXJyb3IpOworICAgICAgICAgICAgTEFTVF9PUENPREUob3BfdGhyb3dfc3RhdGljX2Vycm9y
KTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NhbGw6CiAgICAgICAgICAgICBoYW5k
bGVDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENvZGVGb3JDYWxs
KTsKQEAgLTM2NDAsNyArMzY0NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJs
b2NrKCkKICAgICBkYXRhTG9nKCJQYXJzaW5nIGNvZGUgYmxvY2sgJXAuIGNvZGVUeXBlID0gJXMs
IGNhcHR1cmVDb3VudCA9ICV1LCBuZWVkc0Z1bGxTY29wZUNoYWluID0gJXMsIG5lZWRzQWN0aXZh
dGlvbiA9ICVzLCBpc1N0cmljdE1vZGUgPSAlc1xuIiwKICAgICAgICAgICAgIGNvZGVCbG9jaywK
ICAgICAgICAgICAgIGNvZGVUeXBlVG9TdHJpbmcoY29kZUJsb2NrLT5jb2RlVHlwZSgpKSwKLSAg
ICAgICAgICAgIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCksCisgICAg
ICAgICAgICBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkgPyBjb2RlQmxvY2stPnN5bWJvbFRhYmxl
KCktPmNhcHR1cmVDb3VudCgpIDogMCwKICAgICAgICAgICAgIGNvZGVCbG9jay0+bmVlZHNGdWxs
U2NvcGVDaGFpbigpPyJ0cnVlIjoiZmFsc2UiLAogICAgICAgICAgICAgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk/InRydWUiOiJmYWxzZSIsCiAgICAgICAg
ICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKT8idHJ1ZSI6
ImZhbHNlIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFi
aWxpdGllcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaApp
bmRleCBlODBjYzI4YWU5MTc4MzIzYWQ5MTVhNjA2MzRkZTFjZDJkMGZlNGQ3Li5hMDRhNTQ1NzYy
NGRlMTY4Zjc4YjJlMTQxYTRkYzhhZjMzMGY3OTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKQEAgLTE2Nyw2ICsxNjcsNyBAQCBpbmxpbmUgQ2FwYWJp
bGl0eUxldmVsIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayos
IEluc3RydWN0aQogICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9v
Zl9saW5lOgogICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgorICAgIGNhc2Ug
b3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6
CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazoKICAgICBjYXNlIG9wX2ptcDoK
QEAgLTIwMCw3ICsyMDEsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVPcGNv
ZGUoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayosIEluc3RydWN0aQogICAgIGNhc2Ugb3Bf
c3RyY2F0OgogICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgogICAgIGNhc2Ugb3BfdGhyb3c6Ci0g
ICAgY2FzZSBvcF90aHJvd19yZWZlcmVuY2VfZXJyb3I6CisgICAgY2FzZSBvcF90aHJvd19zdGF0
aWNfZXJyb3I6CiAgICAgY2FzZSBvcF9jYWxsOgogICAgIGNhc2Ugb3BfY29uc3RydWN0OgogICAg
IGNhc2Ugb3BfbmV3X3JlZ2V4cDogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAppbmRleCAxM2UwNDM4OGNkNmE4NTZkNmVhMzdiYmM0ZjhlZjBmNjZlYmRlYWI0
Li4wZTQ1ZTIzMGMzOTljY2E4MWM2NGM2MmFlOWQ2M2FlMTgzZTZmMzYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTExNTcsOCArMTE1Nyw3IEBA
IEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhl
Yyk7Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUo
Ci0gICAgICAgIGdsb2JhbERhdGEsIGV4ZWMsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpTQWN0aXZh
dGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGdsb2JhbERhdGEsIGV4ZWMs
IGV4ZWMtPmNvZGVCbG9jaygpKTsKICAgICBleGVjLT5zZXRTY29wZShhY3RpdmF0aW9uKTsKICAg
ICByZXR1cm4gYWN0aXZhdGlvbjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5k
ZXggY2QzMzkzYWEyMGMxNTY2NGIyYTQ0Y2ZjNjI5MzljNGUyYjJjYjRiYS4uYzQ1NWZjMmIxODli
NmZmNjdhODljZDllNTY0MTdkMTM0NmNhN2Q4NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJK
U09OT2JqZWN0LmgiCiAjaW5jbHVkZSAiVHJhY2luZy5oIgorI2luY2x1ZGUgIlVubGlua2VkQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KQEAgLTQ4NCwxMyArNDg1LDEzIEBAIHZvaWQg
SGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAj
ZW5kaWYKLSAgICAKKwogICAgICAgICBpZiAobV9nbG9iYWxEYXRhLT5jb2RlQmxvY2tzQmVpbmdD
b21waWxlZC5zaXplKCkpIHsKICAgICAgICAgICAgIEdDUEhBU0UoVmlzaXRBY3RpdmVDb2RlQmxv
Y2spOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dsb2JhbERhdGEtPmNv
ZGVCbG9ja3NCZWluZ0NvbXBpbGVkLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgICAgIG1fZ2xv
YmFsRGF0YS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWRbaV0tPnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogICAgICAgICB9Ci0gICAgCisKICAgICAgICAgewogICAgICAgICAgICAgR0NQSEFTRShW
aXNpdE1hY2hpbmVSb290cyk7CiAgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJD
KysgU3RhY2siKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmgKaW5kZXggMTNiZDhlNDkzZDBkN2IzZjM4ZTk4M2IzNTU5NDY3YzIzM2Q1Yjg1Yy4uODY3NDgx
ZmUzMzI5NjEzZWM3YTI3ZGYzMzMwN2JlYWE1NTA4ODNkNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKQEAgLTc0LDEwICs3NCwxOCBAQCBpbmxpbmUg
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogaGVhcCwgTWFya2VkU3BhY2UqIG1hcmtl
ZFNwYWNlLCBzaXplX3QgYwogaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUo
c2l6ZV90IGJ5dGVzKQogewogICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJl
ZUxpc3QuaGVhZDsKLSAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gYWxs
b2NhdGVTbG93Q2FzZShieXRlcyk7CisgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgeworICAgICAg
ICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKKyNpZm5kZWYgTkRFQlVH
CisgICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKKyNlbmRpZgorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KICAgICAKICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5u
ZXh0OworI2lmbmRlZiBOREVCVUcKKyAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOworI2Vu
ZGlmCiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmNwcAppbmRleCA3YTMwZGViZGE0ZmNkZjg4Y2Q1M2VhN2ZmNzYxY2E3ZjM4Y2I1
YWMzLi4zOTE5NzA1ZDAwZWExMjlhNmNhMmI4NGNjMDRmYzU2ZmFkY2U5M2FhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCkBAIC0yOTQsNiArMjk0LDggQEAg
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZChKU1ZhbHVlKiBz
bG90KQogICAgIGlmICghY2VsbCkKICAgICAgICAgcmV0dXJuOwogCisgICAgdmFsaWRhdGUoY2Vs
bCk7CisKICAgICBpZiAobV9zaG91bGRIYXNoQ29uc3QgJiYgY2VsbC0+aXNTdHJpbmcoKSkgewog
ICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4oY2VsbCk7CiAgICAg
ICAgIGlmIChzdHJpbmctPnNob3VsZFRyeUhhc2hDb25zdCgpICYmIHN0cmluZy0+dHJ5SGFzaENv
bnN0TG9jaygpKSB7CkBAIC0zNTUsNiArMzU3LDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OnZhbGlk
YXRlKEpTQ2VsbCogY2VsbCkKICAgICAgICAgICAgICAgICBjZWxsLT5zdHJ1Y3R1cmUoKS0+c3Ry
dWN0dXJlKCksIHBhcmVudENsYXNzTmFtZSwgY2VsbCwgY2VsbC0+c3RydWN0dXJlKCksIG91ckNs
YXNzTmFtZSk7CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHdl
IGNhbiB3YWxrIHRoZSBDbGFzc0luZm8gY2hhaW4KKyAgICBjb25zdCBDbGFzc0luZm8qIGluZm8g
PSBjZWxsLT5jbGFzc0luZm8oKTsKKyAgICBkbyB7IH0gd2hpbGUgKChpbmZvID0gaW5mby0+cGFy
ZW50Q2xhc3MpKTsKIH0KICNlbHNlCiB2b2lkIFNsb3RWaXNpdG9yOjp2YWxpZGF0ZShKU0NlbGwq
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKaW5kZXggM2U2NDcxYjBmZjdmNTA5NzMyZDllYTg3NThiMDNjOGVlMjdkMzZlMi4uMzk3YWM4
NDc0ODQxY2NlYjA0MTI4Y2IwYTk4ZDY4ZjhhYjhlNWIyNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC05NDgsMTAgKzk0OCwx
MyBAQCBmYWlsZWRKU09OUDoKICAgICAvLyBvYmplY3QuCiAKICAgICAvLyBDb21waWxlIHNvdXJj
ZSB0byBieXRlY29kZSBpZiBuZWNlc3Nhcnk6Ci0gICAgSlNPYmplY3QqIGVycm9yID0gcHJvZ3Jh
bS0+Y29tcGlsZShjYWxsRnJhbWUsIHNjb3BlKTsKLSAgICBpZiAoZXJyb3IpCisgICAgaWYgKEpT
T2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmluaXRhbGl6ZUdsb2JhbFByb3BlcnRpZXMoZ2xvYmFs
RGF0YSwgY2FsbEZyYW1lLCBzY29wZSkpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRo
cm93RXJyb3IoY2FsbEZyYW1lLCBlcnJvcikpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
JnByb2dyYW0tPmdlbmVyYXRlZEJ5dGVjb2RlKCk7CisKKyAgICBpZiAoSlNPYmplY3QqIGVycm9y
ID0gcHJvZ3JhbS0+Y29tcGlsZShjYWxsRnJhbWUsIHNjb3BlKSkKKyAgICAgICAgcmV0dXJuIGNo
ZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGVycm9yKSk7CisKKyAgICBQcm9ncmFt
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmcHJvZ3JhbS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsKIAog
ICAgIC8vIFB1c2ggdGhlIGNhbGwgZnJhbWUgZm9yIHRoaXMgaW52b2NhdGlvbjoKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZvciAn
dGhpcycuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggMmQyOTkxYjVmYzgzYWQ3NTFk
OTRmZTYwNzcyOTdhNWRjYTViY2YxNi4uZGFkMGI4NGMyMjVkNDdkNGIxZGUzODIyNTc4MzIwYjdh
Y2ViOTJmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMzM2LDYgKzMzNiw4IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9w
X3B1dF9ieV9pbmRleCkKICAgICAgICAgREVGSU5FX09QKG9wX3B1dF9ieV92YWwpCiAgICAgICAg
IERFRklORV9PUChvcF9wdXRfZ2V0dGVyX3NldHRlcikKKyAgICAgICAgY2FzZSBvcF9pbml0X2ds
b2JhbF9jb25zdF9ub3A6CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbml0X2dsb2JhbF9j
b25zdF9ub3ApOwogICAgICAgICBERUZJTkVfT1Aob3BfaW5pdF9nbG9iYWxfY29uc3QpCiAgICAg
ICAgIERFRklORV9PUChvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjaykKIApAQCAtMzcyLDcgKzM3
NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5F
X09QKG9wX3RlYXJfb2ZmX2FjdGl2YXRpb24pCiAgICAgICAgIERFRklORV9PUChvcF90ZWFyX29m
Zl9hcmd1bWVudHMpCiAgICAgICAgIERFRklORV9PUChvcF90aHJvdykKLSAgICAgICAgREVGSU5F
X09QKG9wX3Rocm93X3JlZmVyZW5jZV9lcnJvcikKKyAgICAgICAgREVGSU5FX09QKG9wX3Rocm93
X3N0YXRpY19lcnJvcikKICAgICAgICAgREVGSU5FX09QKG9wX3RvX2pzbnVtYmVyKQogICAgICAg
ICBERUZJTkVfT1Aob3BfdG9fcHJpbWl0aXZlKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRl
eCA0NGM3NGE2Y2M4MjE3OTRkZjI3ZjRmNDcyZDgwMjIwOGM1MjhjZWM4Li45MTJmYTAwZWQxMjM1
ZWY4ZTI0ZTQyMmRhYjk2YmU0ZmZkZDZmMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAg
LTc2NCw3ICs3NjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3Rl
YXJfb2ZmX2FjdGl2YXRpb24oSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Rl
YXJfb2ZmX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdGhy
b3coSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX3Rocm93X3JlZmVyZW5jZV9l
cnJvcihJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfdGhyb3dfc3RhdGljX2Vy
cm9yKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19qc251bWJlcihJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJpbWl0aXZlKEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bmV4cGVjdGVkX2xvYWQoSW5zdHJ1Y3Rpb24qKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCmluZGV4IDMxOGI0ZTdhYWViOGFiOTUz
MjZhYzI2ZjJjMmU2NDEwMGZmMmIyOGYuLjY0NWM2NWIyODFlOGM2MjM1N2ZhZjkwZWEzMGUyN2Y0
NmY2OTZjYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaApAQCAtNzUsNyAr
NzUsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIE93blB0cjxDb2RlQmxvY2tUeXBlPiYgY29kZQogICAgIHJldHVybiB0cnVlOwogfQogCi1p
bmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhl
YywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2Rl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgV3JpdGVCYXJy
aWVyPFNoYXJlZFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFibGUsIEpJVENvZGU6OkpJVFR5cGUgaml0
VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQoraW5saW5lIGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0
Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIEpJVENv
ZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKICAgICAKQEAgLTk5LDcgKzk5LDYgQEAgaW5saW5lIGJvb2wgaml0Q29t
cGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxGdW5jdGlv
bkNvZGUKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KSB7CiAgICAgICAgICAgICBjb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9u
Q29kZUJsb2NrPihjb2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAg
IHN5bWJvbFRhYmxlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSk7CiAgICAgICAgICAgICBqaXRDb2Rl
ID0gb2xkSklUQ29kZTsKICAgICAgICAgICAgIGppdENvZGVXaXRoQXJpdHlDaGVjayA9IG9sZEpJ
VENvZGVXaXRoQXJpdHlDaGVjazsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDA3YzhhY2UyYTM1Mzk1ZWRhZjhh
NTc2NTNlZTFkMWUxMDFjYmVhMDAuLjI0OWRjYmFjOTE1OWIxOGUyZTI3ZjBlZjBhNmExMjRiNTg3
ZTM1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTA2
OSwxMyArMTA2OSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAganVtcChyZWdUMCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX3Rocm93X3JlZmVyZW5jZV9lcnJvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3dfc3RhdGljX2Vycm9yKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX3Rocm93X3JlZmVyZW5jZV9lcnJvcik7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwo
dGhpcywgY3RpX29wX3Rocm93X3N0YXRpY19lcnJvcik7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkuaXNOdW1iZXIoKSkK
ICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCkpKSk7CiAgICAgZWxzZQogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW02NChKU1Zh
bHVlOjplbmNvZGUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpKSkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgc3R1YkNhbGwuY2FsbCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5k
ZXggNDQxMjNiZTE5ODE3OWUxYjc2Yjc1MTI4MjRkM2E4YzkzZjBlZTk0Ny4uOWM1ZDI2MGFiNmVj
OGRkOTk5YTk5OThlNDM5M2IyMDJmNjA2YzhhZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTQwMSwxMiArMTQwMSwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAganVtcChyZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Rocm93X3JlZmVyZW5j
ZV9lcnJvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3BfdGhyb3dfc3RhdGljX2Vycm9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgdW5zaWduZWQgbWVzc2FnZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGhyb3dfcmVmZXJlbmNl
X2Vycm9yKTsKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGhyb3dfc3Rh
dGljX2Vycm9yKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQobWVzc2FnZSkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgc3R1YkNhbGwuY2FsbCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCmluZGV4IGJhOGM3NmNmYmNi
OTQyYjg5NWZjMTEyOTJiYjVmOWVhMjEyMmViMDAuLmMyNDMwYjA4OWUzMDAxN2FiN2RmMjVlNGIw
MjE3OTVmY2NmNGJlNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCkBA
IC0yMzA4LDcgKzIzMDgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1
c2hfYWN0aXZhdGlvbikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
CiAKLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZShz
dGFja0ZyYW1lLmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBzdGFja0ZyYW1lLmNhbGxGcmFtZSwg
c3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZh
dGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJs
b2NrKCkpOwogICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZShhY3RpdmF0aW9uKTsK
ICAgICByZXR1cm4gYWN0aXZhdGlvbjsKIH0KQEAgLTM1MDAsMTMgKzM1MDAsMTYgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2dldHRlcl9zZXR0ZXIpCiAgICAgYmFzZU9iai0+
cHV0RGlyZWN0QWNjZXNzb3IoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmll
cigpLCBhY2Nlc3NvciwgQWNjZXNzb3IpOwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcF90aHJvd19yZWZlcmVuY2VfZXJyb3IpCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBv
cF90aHJvd19zdGF0aWNfZXJyb3IpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFt
ZTsKICAgICBTdHJpbmcgbWVzc2FnZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkudG9T
dHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKTsKLSAgICBzdGFja0ZyYW1lLmdsb2Jh
bERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGNhbGxGcmFtZSwgbWVzc2Fn
ZSk7CisgICAgaWYgKHN0YWNrRnJhbWUuYXJnc1sxXS5hc0ludDMyKQorICAgICAgICBzdGFja0Zy
YW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGNhbGxGcmFt
ZSwgbWVzc2FnZSk7CisgICAgZWxzZQorICAgICAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4
Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpOwogICAgIFZNX1RI
Uk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCmluZGV4IDZlMzE0MWUyMjNmYTI1OWM4NjQ4MTA1MzA0NTY0NTY4ODcxMjMyNTkuLmQ3YjIy
ZmFlMzAwYmY0YjY4NGRkZjI3MjY3MGI5ZmFhZjI3YjA4NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmgKQEAgLTQ1NCw3ICs0NTQsNyBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lk
IEpJVF9TVFVCIGN0aV9vcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjayhTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9h
Y3RpdmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQg
SklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cyhTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKLSAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJvd19yZWZlcmVuY2Vf
ZXJyb3IoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CisgICAgdm9pZCBKSVRf
U1RVQiBjdGlfb3BfdGhyb3dfc3RhdGljX2Vycm9yKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
dGltaXplKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4IDhlMmRhY2Y0ZDRhMzMw
MWJhNzU4OGU4YTU4YTkxMDc4YzRmOTY3YTMuLmVlYzM3NmIzNzlhZTg2M2RlNjUxNmNjODdkYjM2
ZGFiYzRmMzkxZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3Bw
CkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCiAgICAgQVNTRVJUKFZhbHVlTnVsbCA9PSBUYWdCaXRUeXBlT3Ro
ZXIpOwogI2VuZGlmCiAgICAgQVNTRVJUKFN0cmluZ1R5cGUgPT0gNSk7Ci0gICAgQVNTRVJUKE9i
amVjdFR5cGUgPT0gMTMpOworICAgIEFTU0VSVChPYmplY3RUeXBlID09IDE3KTsKICAgICBBU1NF
UlQoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9PSAxKTsKICAgICBBU1NFUlQoSW1wbGVtZW50c0hh
c0luc3RhbmNlID09IDIpOwogICAgIEFTU0VSVChJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
ID09IDgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAKaW5kZXggNzRiZWFlOThhMjc0NTgzNjgwMjc3MGViMjdmMTI1NTM2YTUxYzcxOC4uYjhlYmI4
ZmRmNDE1ZjExMGE2YzU3ODQyMDhkNmEwNGY0MTI1NDQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC00NjAsNyArNDYwLDcgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9hY3RpdmF0aW9uKQogI2lmIExMSU5U
X1NMT1dfUEFUSF9UUkFDSU5HCiAgICAgZGF0YUxvZygiQ3JlYXRpbmcgYW4gYWN0aXZhdGlvbiwg
ZXhlYyA9ICVwIVxuIiwgZXhlYyk7CiAjZW5kaWYKLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRp
b24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZShnbG9iYWxEYXRhLCBleGVjLCBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCkp
KTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZShn
bG9iYWxEYXRhLCBleGVjLCBleGVjLT5jb2RlQmxvY2soKSk7CiAgICAgZXhlYy0+c2V0U2NvcGUo
YWN0aXZhdGlvbik7CiAgICAgTExJTlRfUkVUVVJOKEpTVmFsdWUoYWN0aXZhdGlvbikpOwogfQpA
QCAtMTYyMiwxMCArMTYyMiwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGhy
b3cpCiAgICAgTExJTlRfVEhST1coTExJTlRfT1BfQygxKS5qc1ZhbHVlKCkpOwogfQogCi1MTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKQorTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rocm93X3N0YXRpY19lcnJvcikKIHsKICAgICBMTElO
VF9CRUdJTigpOwotICAgIExMSU5UX1RIUk9XKGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsIExM
SU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOworICAg
IGlmIChwY1syXS51Lm9wZXJhbmQpCisgICAgICAgIExMSU5UX1RIUk9XKGNyZWF0ZVJlZmVyZW5j
ZUVycm9yKGV4ZWMsIExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSkpOworICAgIGVsc2UKKyAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVidWcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCmluZGV4IGY3ODQ3Njg0MTAw
YzY1Yzc5ZTNmMmQ3OThkYTg5ODlhNjZiNjdmMDIuLjk5ZmJhY2NmYTI4MjMxYmQwYzk1ZTIxNmQ4
N2JiNzQ0YjZlMTRhODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5oCkBAIC0yMDQsNyArMjA0LDcgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9wb3Bfc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9wdXNoX25hbWVfc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF90aHJvdyk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Rocm93
X3JlZmVyZW5jZV9lcnJvcik7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3Rocm93X3N0YXRpY19lcnJvcik7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX2RlYnVnKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHJvZmls
ZV93aWxsX2NhbGwpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcm9m
aWxlX2RpZF9jYWxsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQppbmRleCBiMjEyZmQ0ZDFhMzEzMzJlZDZhNjhkZDBkMWRlMTQ4
Y2FjNGY3NDI0Li5mMDJiMDRkZmM2YmMwYmFhODZlYzkyMjIzYjIxODA5OTc4MmNiN2Q4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCkBAIC05Niw3ICs5Niw3IEBAIGNvbnN0IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDMw
CiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQotY29uc3QgT2JqZWN0
VHlwZSA9IDEzCitjb25zdCBPYmplY3RUeXBlID0gMTcKIAogIyBUeXBlIGZsYWdzIGNvbnN0YW50
cy4KIGNvbnN0IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAxCkBAIC0xMjM5LDEwICsxMjM5LDEw
IEBAIF9sbGludF9vcF90aHJvdzoKICAgICBkaXNwYXRjaCgyKQogCiAKLV9sbGludF9vcF90aHJv
d19yZWZlcmVuY2VfZXJyb3I6CitfbGxpbnRfb3BfdGhyb3dfc3RhdGljX2Vycm9yOgogICAgIHRy
YWNlRXhlY3V0aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF90aHJvd19y
ZWZlcmVuY2VfZXJyb3IpCi0gICAgZGlzcGF0Y2goMikKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50
X3Nsb3dfcGF0aF90aHJvd19zdGF0aWNfZXJyb3IpCisgICAgZGlzcGF0Y2goMykKIAogCiBfbGxp
bnRfb3BfcHJvZmlsZV93aWxsX2NhbGw6CkBAIC0xMzMxLDYgKzEzMzEsOCBAQCBfbGxpbnRfb3Bf
cHV0X2J5X2lkX3JlcGxhY2U6CiBfbGxpbnRfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb246CiAgICAg
bm90U3VwcG9ydGVkKCkKIAorX2xsaW50X29wX2luaXRfZ2xvYmFsX2NvbnN0X25vcDoKKyAgICBk
aXNwYXRjaCg1KQogCiAjIEluZGljYXRlIHRoZSBlbmQgb2YgTExJbnQuCiBfbGxpbnRfZW5kOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQppbmRleCA4OTFiNjNkNjRiOWEyZDU0ZmYxNmE1YmM3YzlkOGFjMjU4ZDE2
ZWU4Li5mZmIxNDYyNDdmYjU3MGEzOGJhZjQ2MTViYThjYWMzYjViZWY0NzNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQpAQCAtOTg0LDcgKzk4NCw3IEBAIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdDoK
ICAgICB3cml0ZUJhcnJpZXIodDIsIHQzKQogICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W3QwXQog
ICAgIHN0b3JlaSB0MywgUGF5bG9hZE9mZnNldFt0MF0KLSAgICBkaXNwYXRjaCgzKQorICAgIGRp
c3BhdGNoKDUpCiAKIAogX2xsaW50X29wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQppbmRleCBmYmQ3MTFlYjRhYTA1NjFkOWIzY2RiZGM1N2NmMTA3ZDkxZDZhYTRkLi45ODE2Mzk0
NjY1M2RjNzlkOGM5MzY1ZjZmNTdlMjViM2Y1OGE5YTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtODIyLDcg
KzgyMiw3IEBAIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHQxLCB0MikKICAgICB3cml0ZUJhcnJpZXIodDIpCiAgICAgc3RvcmVwIHQyLCBb
dDBdCi0gICAgZGlzcGF0Y2goMykKKyAgICBkaXNwYXRjaCg1KQogCiAKIF9sbGludF9vcF9pbml0
X2dsb2JhbF9jb25zdF9jaGVjazoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmlu
ZGV4IDNiMDMxNmY4MTY1YTA4NTZhMzI5NzU5NWNlNTIxMjVkYzBmYTYzMmYuLjExNjk4NjgxOTky
YTExNWViMzJjN2QxMjkyZWQ2ODc2NjFjMzM5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuaApAQCAtNzYsNiArNzYsNDggQEAgQ09NUElMRV9BU1NFUlQoTGFzdFVudGFnZ2Vk
VG9rZW4gPCA2NCwgTGVzc1RoYW42NFVudGFnZ2VkVG9rZW5zKTsKIGVudW0gU291cmNlRWxlbWVu
dHNNb2RlIHsgQ2hlY2tGb3JTdHJpY3RNb2RlLCBEb250Q2hlY2tGb3JTdHJpY3RNb2RlIH07CiBl
bnVtIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHsgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rp
b25OZWVkc05hbWUgfTsKIAorc3RydWN0IFBhcnNlckVycm9yIHsKKyAgICBlbnVtIEVycm9yVHlw
ZSB7IEVycm9yTm9uZSwgU3RhY2tPdmVyZmxvdywgU3ludGF4RXJyb3IsIEV2YWxFcnJvciwgT3V0
T2ZNZW1vcnkgfSBtX3R5cGU7CisgICAgU3RyaW5nIG1fbWVzc2FnZTsKKyAgICBpbnQgbV9saW5l
OworICAgIFBhcnNlckVycm9yKCkKKyAgICAgICAgOiBtX3R5cGUoRXJyb3JOb25lKQorICAgICAg
ICAsIG1fbGluZSgtMSkKKyAgICB7CisgICAgfQorCisgICAgUGFyc2VyRXJyb3IoRXJyb3JUeXBl
IHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9saW5lKC0xKQorICAg
IHsKKyAgICB9CisKKyAgICBQYXJzZXJFcnJvcihFcnJvclR5cGUgdHlwZSwgU3RyaW5nIG1zZywg
aW50IGxpbmUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9tZXNzYWdlKG1z
ZykKKyAgICAgICAgLCBtX2xpbmUobGluZSkKKyAgICB7CisgICAgfQorCisgICAgSlNPYmplY3Qq
IHRvRXJyb3JPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAg
Y2FzZSBFcnJvck5vbmU6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBTeW50
YXhFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBhZGRFcnJvckluZm8oZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgbV9tZXNzYWdlKSwg
bV9saW5lLCBzb3VyY2UpOworICAgICAgICBjYXNlIEV2YWxFcnJvcjoKKyAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVTeW50YXhFcnJvcihnbG9iYWxPYmplY3QsIG1fbWVzc2FnZSk7CisgICAgICAg
IGNhc2UgU3RhY2tPdmVyZmxvdzoKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgY2FzZSBPdXRPZk1lbW9yeToKKyAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIH0KKyAgICAgICAgQ1JBU0goKTsgLy8gQXBwZWFzZSBRdCBib3QKKyAgICB9CisKK307CisK
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBpc0V2YWxOb2RlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KIHRlbXBsYXRlIDw+IGlubGluZSBib29sIGlzRXZhbE5vZGU8RXZhbE5vZGU+KCkg
eyByZXR1cm4gdHJ1ZTsgfQogCkBAIC0zNzAsNyArNDEyLDcgQEAgcHVibGljOgogICAgIH5QYXJz
ZXIoKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgotICAgIFBhc3NSZWZQdHI8
UGFyc2VkTm9kZT4gcGFyc2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIERl
YnVnZ2VyKiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqKik7CisgICAgUGFzc1JlZlB0cjxQYXJzZWRO
b2RlPiBwYXJzZShQYXJzZXJFcnJvciYpOwogCiBwcml2YXRlOgogICAgIHN0cnVjdCBBbGxvd0lu
T3ZlcnJpZGUgewpAQCAtODkwLDcgKzkzMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBt
X2xhc3RUb2tlbkVuZDsKICAgICB9CiAKLSAgICBtdXRhYmxlIGNvbnN0IEpTR2xvYmFsRGF0YSog
bV9nbG9iYWxEYXRhOworICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIGNvbnN0
IFNvdXJjZUNvZGUqIG1fc291cmNlOwogICAgIFBhcnNlckFyZW5hKiBtX2FyZW5hOwogICAgIE93
blB0cjxMZXhlclR5cGU+IG1fbGV4ZXI7CkBAIC05MzUsMTIgKzk3NywxMSBAQCBwcml2YXRlOgog
ICAgIH07CiB9OwogCisKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8
Y2xhc3MgUGFyc2VkTm9kZT4KLVBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciog
ZGVidWdnZXIsIEV4ZWNTdGF0ZSogZGVidWdnZXJFeGVjU3RhdGUsIEpTT2JqZWN0KiogZXhjZXB0
aW9uKQorUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UoUGFy
c2VyRXJyb3ImIGVycm9yKQogewotICAgIEFTU0VSVChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICBBU1NFUlQoZXhjZXB0aW9uICYmICEqZXhjZXB0aW9uKTsKICAgICBpbnQgZXJyTGluZTsKICAg
ICBTdHJpbmcgZXJyTXNnOwogCkBAIC05NzEsNyArMTAxMiw3IEBAIFBhc3NSZWZQdHI8UGFyc2Vk
Tm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqCiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbjsKICAgICAgICAgbG9jYXRp
b24ubGluZSA9IG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCk7CiAgICAgICAgIGxvY2F0aW9uLmNv
bHVtbiA9IG1fbGV4ZXItPmN1cnJlbnRDb2x1bW5OdW1iZXIoKTsKLSAgICAgICAgcmVzdWx0ID0g
UGFyc2VkTm9kZTo6Y3JlYXRlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksCisg
ICAgICAgIHJlc3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0ZShtX2dsb2JhbERhdGEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc291cmNlRWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucyA/ICZtX3ZhckRlY2xhcmF0aW9ucy0+
ZGF0YSA6IDAsCkBAIC05ODEsNyArMTAyMiw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFy
c2VyPExleGVyVHlwZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZlYXR1cmVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1Db25zdGFudHMpOwogICAgICAgICByZXN1
bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCksIG1fbGFzdExpbmUsIG1fbGV4ZXItPmN1
cnJlbnRDb2x1bW5OdW1iZXIoKSk7Ci0gICAgfSBlbHNlIGlmIChsZXhpY2FsR2xvYmFsT2JqZWN0
KSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2UgY2FuIG5ldmVyIHNlZSBhIHN5bnRheCBl
cnJvciB3aGVuIHJlcGFyc2luZyBhIGZ1bmN0aW9uLCBzaW5jZSB3ZSBzaG91bGQgaGF2ZQogICAg
ICAgICAvLyByZXBvcnRlZCB0aGUgZXJyb3Igd2hlbiBwYXJzaW5nIHRoZSBjb250YWluaW5nIHBy
b2dyYW0gb3IgZXZhbCBjb2RlLiBTbyBpZiB3ZSdyZQogICAgICAgICAvLyBwYXJzaW5nIGEgZnVu
Y3Rpb24gYm9keSBub2RlLCB3ZSBhc3N1bWUgdGhhdCB3aGF0IGFjdHVhbGx5IGhhcHBlbmVkIGhl
cmUgaXMgdGhhdApAQCAtOTg5LDM1ICsxMDMwLDMxIEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4g
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
CiAgICAgICAgIC8vIGNvZGUgd2UgYXNzdW1lIHRoYXQgaXQgd2FzIGEgc3ludGF4IGVycm9yIHNp
bmNlIHJ1bm5pbmcgb3V0IG9mIHN0YWNrIGlzIG11Y2ggbGVzcwogICAgICAgICAvLyBsaWtlbHks
IGFuZCB3ZSBhcmUgY3VycmVudGx5IHVuYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSB0
d28gY2FzZXMuCiAgICAgICAgIGlmIChpc0Z1bmN0aW9uQm9keU5vZGUoc3RhdGljX2Nhc3Q8UGFy
c2VkTm9kZSo+KDApKSB8fCBtX2hhc1N0YWNrT3ZlcmZsb3cpCi0gICAgICAgICAgICAqZXhjZXB0
aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
ICAgICAgICAgZXJyb3IgPSBQYXJzZXJFcnJvcjo6U3RhY2tPdmVyZmxvdzsKICAgICAgICAgZWxz
ZSBpZiAoaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IGNyZWF0ZVN5bnRheEVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIGVyck1zZyk7CisgICAgICAg
ICAgICBlcnJvciA9IFBhcnNlckVycm9yKFBhcnNlckVycm9yOjpFdmFsRXJyb3IsIGVyck1zZywg
ZXJyTGluZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBhZGRFcnJv
ckluZm8obGV4aWNhbEdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBjcmVhdGVTeW50YXhFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBlcnJNc2cpLCBlcnJMaW5lLCAqbV9zb3VyY2UpOworICAg
ICAgICAgICAgZXJyb3IgPSBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3IsIGVy
ck1zZywgZXJyTGluZSk7CiAgICAgfQogCi0gICAgaWYgKGRlYnVnZ2VyICYmICFQYXJzZWROb2Rl
OjpzY29wZUlzRnVuY3Rpb24pCi0gICAgICAgIGRlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoZGVidWdn
ZXJFeGVjU3RhdGUsIG1fc291cmNlLT5wcm92aWRlcigpLCBlcnJMaW5lLCBlcnJNc2cpOwotCiAg
ICAgbV9hcmVuYS0+cmVzZXQoKTsKIAogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQog
CiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KLVBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFy
c2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJp
Y3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgRGVidWdnZXIqIGRlYnVnZ2VyLCBFeGVj
U3RhdGUqIGV4ZWNTdGF0ZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCitQYXNzUmVmUHRyPFBhcnNl
ZE5vZGU+IHBhcnNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2Vy
TW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKCJQYXJzaW5nIik7CiAKICAgICBBU1NFUlQoIXNvdXJjZS5wcm92aWRlcigpLT5zb3Vy
Y2UoKS5pc051bGwoKSk7Ci0KICAgICBpZiAoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlz
OEJpdCgpKSB7CiAgICAgICAgIFBhcnNlcjwgTGV4ZXI8TENoYXI+ID4gcGFyc2VyKGdsb2JhbERh
dGEsIHNvdXJjZSwgcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7Ci0g
ICAgICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4obGV4aWNhbEdsb2JhbE9iamVj
dCwgZGVidWdnZXIsIGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIHBhcnNl
ci5wYXJzZTxQYXJzZWROb2RlPihlcnJvcik7CiAgICAgfQogICAgIFBhcnNlcjwgTGV4ZXI8VUNo
YXI+ID4gcGFyc2VyKGdsb2JhbERhdGEsIHNvdXJjZSwgcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0
bmVzcywgcGFyc2VyTW9kZSk7Ci0gICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBkZWJ1Z2dlciwgZXhlY1N0YXRlLCBleGNlcHRpb24pOworICAg
IHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IpOwogfQogCi19IC8vIG5hbWVz
cGFjZSAKK30gLy8gbmFtZXNwYWNlCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyTW9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MWZiN2ZkZjkwZGE1ZDVkYzUwYjk1Y2QzZjJj
NjRkNDE2MmMyMGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJNb2Rlcy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5k
ZWYgUGFyc2VyTW9kZXNfaAorI2RlZmluZSBQYXJzZXJNb2Rlc19oCisKK25hbWVzcGFjZSBKU0Mg
eworCitlbnVtIEpTUGFyc2VyU3RyaWN0bmVzcyB7IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VTdHJp
Y3QgfTsKK2VudW0gSlNQYXJzZXJNb2RlIHsgSlNQYXJzZVByb2dyYW1Db2RlLCBKU1BhcnNlRnVu
Y3Rpb25Db2RlIH07CisKK2VudW0gUHJvZmlsZXJNb2RlIHsgUHJvZmlsZXJPZmYsIFByb2ZpbGVy
T24gfTsKK2VudW0gRGVidWdnZXJNb2RlIHsgRGVidWdnZXJPZmYsIERlYnVnZ2VyT24gfTsKKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyVG9rZW5zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5o
CmluZGV4IDZlNmNlYzExNGQ0NDVlMzc4NjVmZWM4YzM5MWRmNWI1MWRlYzUxN2EuLjE0MTkxYjk1
ZDdkM2I1YmNjMDQxYjExOTc1ZWI1NTE1NmNkZGM3ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaApAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBQYXJz
ZXJUb2tlbnNfaAogI2RlZmluZSBQYXJzZXJUb2tlbnNfaAogCisjaW5jbHVkZSAiUGFyc2VyTW9k
ZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIElkZW50aWZpZXI7CkBAIC0xNjEsOSAr
MTYzLDYgQEAgc3RydWN0IEpTVG9rZW4gewogICAgIEpTVG9rZW5Mb2NhdGlvbiBtX2xvY2F0aW9u
OwogfTsKIAotZW51bSBKU1BhcnNlclN0cmljdG5lc3MgeyBKU1BhcnNlTm9ybWFsLCBKU1BhcnNl
U3RyaWN0IH07Ci1lbnVtIEpTUGFyc2VyTW9kZSB7IEpTUGFyc2VQcm9ncmFtQ29kZSwgSlNQYXJz
ZUZ1bmN0aW9uQ29kZSB9OwotICAgIAogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJndW1lbnRzLmgKaW5kZXggN2M4YjY5YmQxMjQ1MWFjMWI2Njc2MGZmZGM2YjcxZmRiZmU1
NWMyZi4uNzk2MWQ0YmM4MzJkYjEzZDNlYmY4ZjhjZDJiZTBhMzZhMzk5YzY1NSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKQEAgLTI2Nyw4ICsyNjcsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgbV9vdmVycm9kZUNhbGxlZSA9IGZhbHNlOwogICAgICAg
ICBtX292ZXJyb2RlQ2FsbGVyID0gZmFsc2U7CiAgICAgICAgIG1faXNTdHJpY3RNb2RlID0ganND
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQo
KSktPmlzU3RyaWN0TW9kZSgpOwotCi0gICAgICAgIEFTU0VSVCghanNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPnN5bWJvbFRhYmxl
KCktPnNsb3dBcmd1bWVudHMoKSk7CisgICAgICAgIEFTU0VSVCghanNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPnN5bWJvbFRhYmxl
KGlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0
KS0+c2xvd0FyZ3VtZW50cygpKTsKIAogICAgICAgICAvLyBUaGUgYnl0ZWNvZGUgZ2VuZXJhdG9y
IG9taXRzIG9wX3RlYXJfb2ZmX2FjdGl2YXRpb24gaW4gY2FzZXMgb2Ygbm8KICAgICAgICAgLy8g
ZGVjbGFyZWQgcGFyYW1ldGVycywgc28gd2UgbmVlZCB0byB0ZWFyIG9mZiBpbW1lZGlhdGVseS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRkZTc2MGU0OWRjMDhlY2E4ZmNkZTFiNDRmYTA3NjE1OGI5YzM3NWQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCkBAIC0wLDAg
KzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCisKKyNpbmNsdWRl
ICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQu
aCIKKyNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5j
bHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0NvZGVDYWNo
ZTo6Q29kZUNhY2hlKCkKKyAgICA6IG1fcmFuZG9tR2VuZXJhdG9yKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihyYW5kb21OdW1iZXIoKSAqIFVJTlQzMl9NQVgpKQoreworfQorCitDb2RlQ2FjaGU6On5D
b2RlQ2FjaGUoKQoreworfQorCitDb2RlQ2FjaGU6OkNvZGVCbG9ja0tleSBDb2RlQ2FjaGU6Om1h
a2VDb2RlQmxvY2tLZXkoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlQ2FjaGU6OkNvZGVU
eXBlIHR5cGUsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzKQoreworICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihzb3VyY2UudG9TdHJpbmcoKSwgKHR5cGUgPDwgMSkgfCBzdHJpY3RuZXNz
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBDYWNoZVR5cGVzIHsgfTsKKwor
dGVtcGxhdGUgPD4gc3RydWN0IENhY2hlVHlwZXM8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7
CisgICAgdHlwZWRlZiBKU0M6OlByb2dyYW1Ob2RlIFJvb3ROb2RlOworICAgIHN0YXRpYyBjb25z
dCBDb2RlQ2FjaGU6OkNvZGVUeXBlIGNvZGVUeXBlID0gQ29kZUNhY2hlOjpQcm9ncmFtVHlwZTsK
K307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBDYWNoZVR5cGVzPFVubGlua2VkRXZhbENvZGVCbG9j
az4geworICAgIHR5cGVkZWYgSlNDOjpFdmFsTm9kZSBSb290Tm9kZTsKKyAgICBzdGF0aWMgY29u
c3QgQ29kZUNhY2hlOjpDb2RlVHlwZSBjb2RlVHlwZSA9IENvZGVDYWNoZTo6RXZhbFR5cGU7Cit9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRh
YmxlVHlwZT4KK1VubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2RlQmxvY2so
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YWJsZSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVi
dWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2Vy
RXJyb3ImIGVycm9yKQoreworICAgIENvZGVCbG9ja0tleSBrZXkgPSBtYWtlQ29kZUJsb2NrS2V5
KHNvdXJjZSwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojpjb2RlVHlwZSwgc3Ry
aWN0bmVzcyk7CisgICAgYm9vbCBzdG9yZUluQ2FjaGUgPSBmYWxzZTsKKyAgICBpZiAoZGVidWdn
ZXJNb2RlID09IERlYnVnZ2VyT2ZmICYmIHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9mZikgewor
ICAgICAgICBDb2RlQmxvY2tJbmRpY2VzTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX2NhY2hlZENv
ZGVCbG9ja0luZGljZXMuZmluZChrZXkpOworICAgICAgICBpZiAocmVzdWx0ICE9IG1fY2FjaGVk
Q29kZUJsb2NrSW5kaWNlcy5lbmQoKSkgeworICAgICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tU
eXBlKiB1bmxpbmtlZENvZGUgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4obV9jYWNo
ZWRDb2RlQmxvY2tzW3Jlc3VsdC0+dmFsdWVdLnNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICB1
bnNpZ25lZCBmaXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZENvZGUtPmZp
cnN0TGluZSgpOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2UodW5saW5rZWRD
b2RlLT5jb2RlRmVhdHVyZXMoKSwgdW5saW5rZWRDb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygp
LCBmaXJzdExpbmUsIGZpcnN0TGluZSArIHVubGlua2VkQ29kZS0+bGluZUNvdW50KCkpOworICAg
ICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZUlu
Q2FjaGUgPSB0cnVlOworICAgIH0KKworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ2FjaGVUeXBlczxV
bmxpbmtlZENvZGVCbG9ja1R5cGU+OjpSb290Tm9kZSBSb290Tm9kZTsKKyAgICBSZWZQdHI8Um9v
dE5vZGU+IHJvb3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+KCZnbG9iYWxEYXRhLCBzb3VyY2UsIDAs
IElkZW50aWZpZXIoKSwgc3RyaWN0bmVzcywgSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7Cisg
ICAgaWYgKCFyb290Tm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZXhlY3V0YWJsZS0+cmVj
b3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlh
YmxlcygpLCByb290Tm9kZS0+bGluZU5vKCksIHJvb3ROb2RlLT5sYXN0TGluZSgpKTsKKworICAg
IFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlID0gVW5saW5rZWRDb2RlQmxvY2tU
eXBlOjpjcmVhdGUoJmdsb2JhbERhdGEsIGV4ZWN1dGFibGUtPmV4ZWN1dGFibGVJbmZvKCkpOwor
ICAgIHVubGlua2VkQ29kZS0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3RO
b2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCByb290Tm9kZS0+bGluZU5vKCkgLSBzb3VyY2Uu
Zmlyc3RMaW5lKCksIHJvb3ROb2RlLT5sYXN0TGluZSgpIC0gcm9vdE5vZGUtPmxpbmVObygpKTsK
KyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0
ZWNvZGVHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgcm9vdE5vZGUuZ2V0KCksIHVubGlua2VkQ29kZSwg
ZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CisgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdl
bmVyYXRlKCk7CisgICAgcm9vdE5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgaWYgKGVycm9yLm1f
dHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChzdG9yZUluQ2FjaGUpIHsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9yYW5kb21HZW5l
cmF0b3IuZ2V0VWludDMyKCkgJSBrTWF4Q29kZUJsb2NrRW50cmllczsKKyAgICAgICAgaWYgKG1f
Y2FjaGVkQ29kZUJsb2Nrc1tpbmRleF0uc2Vjb25kKQorICAgICAgICAgICAgbV9jYWNoZWRDb2Rl
QmxvY2tJbmRpY2VzLnJlbW92ZShtX2NhY2hlZENvZGVCbG9ja3NbaW5kZXhdLmZpcnN0KTsKKyAg
ICAgICAgbV9jYWNoZWRDb2RlQmxvY2tJbmRpY2VzLnNldChrZXksIGluZGV4KTsKKyAgICAgICAg
bV9jYWNoZWRDb2RlQmxvY2tzW2luZGV4XS5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHVubGlua2Vk
Q29kZSk7CisgICAgICAgIG1fY2FjaGVkQ29kZUJsb2Nrc1tpbmRleF0uZmlyc3QgPSBrZXk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKK30KKworVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKiBDb2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVn
Z2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQor
eworICAgIHJldHVybiBnZXRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihnbG9i
YWxEYXRhLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJv
ZmlsZXJNb2RlLCBlcnJvcik7Cit9CisKK1VubGlua2VkRXZhbENvZGVCbG9jayogQ29kZUNhY2hl
OjpnZXRFdmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXZhbEV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJpY3Ru
ZXNzIHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBw
cm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICByZXR1cm4gZ2V0Q29kZUJs
b2NrPFVubGlua2VkRXZhbENvZGVCbG9jaz4oZ2xvYmFsRGF0YSwgZXhlY3V0YWJsZSwgc291cmNl
LCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworfQorCitV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdlbmVyYXRlRnVuY3Rpb25Db2Rl
QmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9m
aWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5
Tm9kZT4gYm9keSA9IHBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KCZnbG9iYWxEYXRhLCBzb3VyY2Us
IGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxl
LT5pc0luU3RyaWN0Q29udGV4dCgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEpT
UGFyc2VGdW5jdGlvbkNvZGUsIGVycm9yKTsKKworICAgIGlmICghYm9keSkgeworICAgICAgICBB
U1NFUlQoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoZXhlY3V0YWJsZS0+Zm9yY2VVc2VzQXJndW1lbnRz
KCkpCisgICAgICAgIGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsKKyAgICBib2R5LT5maW5pc2hQ
YXJzaW5nKGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVj
dXRhYmxlLT5mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUoKSk7CisgICAgZXhlY3V0YWJsZS0+
cmVjb3JkUGFyc2UoYm9keS0+ZmVhdHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMo
KSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOworICAgIAorICAgIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNy
ZWF0ZSgmZ2xvYmFsRGF0YSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhib2R5LT5uZWVk
c0FjdGl2YXRpb24oKSwgYm9keS0+dXNlc0V2YWwoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGtp
bmQgPT0gQ29kZUZvckNvbnN0cnVjdCkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4g
Z2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihnbG9iYWxEYXRhLCBib2R5
LmdldCgpLCByZXN1bHQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlKSkpOworICAgIGVycm9y
ID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpOworICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CisgICAg
aWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBEZWJ1Z2dlck1vZGUgZGVi
dWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3Ip
Cit7CisgICAgcmV0dXJuIGdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgZXhl
Y3V0YWJsZSwgc291cmNlLCBraW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3Ip
OworfQorCitDb2RlQ2FjaGU6Okdsb2JhbEZ1bmN0aW9uS2V5IENvZGVDYWNoZTo6bWFrZUdsb2Jh
bEZ1bmN0aW9uS2V5KGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIHJldHVybiBHbG9iYWxGdW5jdGlvbktleShzb3VyY2UudG9TdHJpbmcoKSwgbmFt
ZSk7Cit9CisKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldEZ1bmN0
aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29u
c3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJv
ciYgZXJyb3IpCit7CisgICAgR2xvYmFsRnVuY3Rpb25LZXkga2V5ID0gbWFrZUdsb2JhbEZ1bmN0
aW9uS2V5KHNvdXJjZSwgbmFtZS5zdHJpbmcoKSk7CisgICAgR2xvYmFsRnVuY3Rpb25JbmRpY2Vz
TWFwOjppdGVyYXRvciByZXN1bHQgPSBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5maW5k
KGtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5l
bmQoKSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25zW3Jlc3VsdC0+dmFs
dWVdLnNlY29uZC5nZXQoKTsKKworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9IHBh
cnNlPFByb2dyYW1Ob2RlPigmZ2xvYmFsRGF0YSwgc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpT
UGFyc2VOb3JtYWwsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOworICAgIGlmICghcHJvZ3Jh
bSkgeworICAgICAgICBBU1NFUlQoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5v
bmUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGFz
c3VtZXMgYW4gaW5wdXQgc3RyaW5nIHRoYXQgd291bGQgcmVzdWx0IGluIGEgc2luZ2xlIGFub255
bW91cyBmdW5jdGlvbiBleHByZXNzaW9uLgorICAgIFN0YXRlbWVudE5vZGUqIGV4cHJTdGF0ZW1l
bnQgPSBwcm9ncmFtLT5zaW5nbGVTdGF0ZW1lbnQoKTsKKyAgICBBU1NFUlQoZXhwclN0YXRlbWVu
dCk7CisgICAgQVNTRVJUKGV4cHJTdGF0ZW1lbnQtPmlzRXhwclN0YXRlbWVudCgpKTsKKyAgICBF
eHByZXNzaW9uTm9kZSogZnVuY0V4cHIgPSBzdGF0aWNfY2FzdDxFeHByU3RhdGVtZW50Tm9kZSo+
KGV4cHJTdGF0ZW1lbnQpLT5leHByKCk7CisgICAgQVNTRVJUKGZ1bmNFeHByKTsKKyAgICBBU1NF
UlQoZnVuY0V4cHItPmlzRnVuY0V4cHJOb2RlKCkpOworICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJv
ZHkgPSBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihmdW5jRXhwciktPmJvZHkoKTsKKyAgICBB
U1NFUlQoYm9keSk7CisgICAgQVNTRVJUKGJvZHktPmlkZW50KCkuaXNOdWxsKCkpOworCisgICAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoJmdsb2JhbERhdGEsIHNvdXJjZSwgYm9keSk7Cisg
ICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQoZ2xvYmFsRGF0YSwgZnVuY3Rp
b25FeGVjdXRhYmxlLCBqc1N0cmluZygmZ2xvYmFsRGF0YSwgbmFtZS5zdHJpbmcoKSkpOworCisg
ICAgc2l6ZV90IGluZGV4ID0gbV9yYW5kb21HZW5lcmF0b3IuZ2V0VWludDMyKCkgJSBrTWF4R2xv
YmFsRnVuY3Rpb25FbnRyaWVzOworICAgIGlmIChtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uc1tpbmRl
eF0uc2Vjb25kKQorICAgICAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5yZW1vdmUo
bV9jYWNoZWRHbG9iYWxGdW5jdGlvbnNbaW5kZXhdLmZpcnN0KTsKKyAgICBtX2NhY2hlZEdsb2Jh
bEZ1bmN0aW9uSW5kaWNlcy5zZXQoa2V5LCBpbmRleCk7CisgICAgbV9jYWNoZWRHbG9iYWxGdW5j
dGlvbnNbaW5kZXhdLnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgZnVuY3Rpb25FeGVjdXRhYmxlKTsK
KyAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uc1tpbmRleF0uZmlyc3QgPSBrZXk7CisKKyAgICBy
ZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvZGVDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkNDYxNzE4OWVjNGU2ODk0NzYxNzEyMWUy
YTg2ZjA5M2M5ZmRjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb2RlQ2FjaGVfaAorI2RlZmluZSBD
b2RlQ2FjaGVfaAorCisjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1
ZGUgIlBhcnNlck1vZGVzLmgiCisjaW5jbHVkZSAiU3Ryb25nLmgiCisjaW5jbHVkZSAiV2Vha1Jh
bmRvbS5oIgorCisjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFdmFsRXhlY3V0YWJsZTsK
K2NsYXNzIElkZW50aWZpZXI7CitjbGFzcyBQcm9ncmFtRXhlY3V0YWJsZTsKK2NsYXNzIFVubGlu
a2VkQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOworY2xhc3MgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jazsKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwor
Y2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOworY2xhc3MgSlNHbG9iYWxEYXRhOworc3Ry
dWN0IFBhcnNlckVycm9yOworY2xhc3MgU291cmNlQ29kZTsKK2NsYXNzIFNvdXJjZVByb3ZpZGVy
OworCitjbGFzcyBDb2RlQ2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENv
ZGVDYWNoZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENvZGVDYWNoZSk7IH0KKwor
ICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogZ2V0UHJvZ3JhbUNvZGVCbG9jayhKU0dsb2Jh
bERhdGEmLCBQcm9ncmFtRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0
cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAg
IFVubGlua2VkRXZhbENvZGVCbG9jayogZ2V0RXZhbENvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBF
dmFsRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAgIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2sqIGdldEZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBnZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xv
YmFsQ29kZShKU0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29k
ZSYsIFBhcnNlckVycm9yJik7CisgICAgfkNvZGVDYWNoZSgpOworCisgICAgZW51bSBDb2RlVHlw
ZSB7IEV2YWxUeXBlLCBQcm9ncmFtVHlwZSwgRnVuY3Rpb25UeXBlIH07CisgICAgdHlwZWRlZiBz
dGQ6OnBhaXI8U3RyaW5nLCB1bnNpZ25lZD4gQ29kZUJsb2NrS2V5OworICAgIHR5cGVkZWYgSGFz
aE1hcDxDb2RlQmxvY2tLZXksIHVuc2lnbmVkPiBDb2RlQmxvY2tJbmRpY2VzTWFwOworICAgIHR5
cGVkZWYgc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBHbG9iYWxGdW5jdGlvbktleTsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8R2xvYmFsRnVuY3Rpb25LZXksIHVuc2lnbmVkPiBHbG9iYWxGdW5jdGlv
bkluZGljZXNNYXA7CisKK3ByaXZhdGU6CisgICAgQ29kZUNhY2hlKCk7CisKKyAgICBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0
YSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJv
ciYpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3Mg
RXhlY3V0YWJsZVR5cGU+IGlubGluZSBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdldENvZGVCbG9j
ayhKU0dsb2JhbERhdGEmLCBFeGVjdXRhYmxlVHlwZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1Bh
cnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYp
OworICAgIENvZGVCbG9ja0tleSBtYWtlQ29kZUJsb2NrS2V5KGNvbnN0IFNvdXJjZUNvZGUmLCBD
b2RlVHlwZSwgSlNQYXJzZXJTdHJpY3RuZXNzKTsKKyAgICBDb2RlQmxvY2tJbmRpY2VzTWFwIG1f
Y2FjaGVkQ29kZUJsb2NrSW5kaWNlczsKKyAgICBHbG9iYWxGdW5jdGlvbktleSBtYWtlR2xvYmFs
RnVuY3Rpb25LZXkoY29uc3QgU291cmNlQ29kZSYsIGNvbnN0IFN0cmluZyYpOworICAgIEdsb2Jh
bEZ1bmN0aW9uSW5kaWNlc01hcCBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlczsKKworICAg
IGVudW0geworICAgICAgICBrTWF4Q29kZUJsb2NrRW50cmllcyA9IDEwMjQsCisgICAgICAgIGtN
YXhHbG9iYWxGdW5jdGlvbkVudHJpZXMgPSAxMDI0CisgICAgfTsKKworICAgIEZpeGVkQXJyYXk8
c3RkOjpwYWlyPENvZGVCbG9ja0tleSwgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPiA+LCBrTWF4
Q29kZUJsb2NrRW50cmllcz4gbV9jYWNoZWRDb2RlQmxvY2tzOworICAgIEZpeGVkQXJyYXk8c3Rk
OjpwYWlyPEdsb2JhbEZ1bmN0aW9uS2V5LCBTdHJvbmc8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU+ID4sIGtNYXhHbG9iYWxGdW5jdGlvbkVudHJpZXM+IG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25z
OworICAgIFdlYWtSYW5kb20gbV9yYW5kb21HZW5lcmF0b3I7Cit9OworCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAppbmRleCAwYTQ1
M2VlYTA1NjY4NDBmZTk5ZmJjNTJkNTFkZjBiMjI5YzdmYmQzLi4wYzRjYWJkODRkOTEyYWI5MDNh
YzI3ZTc4ODljYzljNjZhNzA1NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKIAorI2luY2x1ZGUgIkJhdGNoZWRUcmFuc2l0aW9uT3B0
aW1pemVyLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKQEAgLTEzMywxNiArMTM0LDE0IEBAIHZv
aWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogCiBjb25zdCBDbGFz
c0luZm8gRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJGdW5jdGlvbkV4ZWN1dGFibGUi
LCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1
bmN0aW9uRXhlY3V0YWJsZSkgfTsKIAotRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1
dGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQot
ICAgIDogU2NyaXB0RXhlY3V0YWJsZShnbG9iYWxEYXRhLmZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVj
dHVyZS5nZXQoKSwgZ2xvYmFsRGF0YSwgbm9kZS0+c291cmNlKCksIG5vZGUtPmlzU3RyaWN0TW9k
ZSgpKQotICAgICwgbV9mb3JjZVVzZXNBcmd1bWVudHMobm9kZS0+dXNlc0FyZ3VtZW50cygpKQot
ICAgICwgbV9wYXJhbWV0ZXJzKG5vZGUtPnBhcmFtZXRlcnMoKSkKLSAgICAsIG1fbmFtZShub2Rl
LT5pZGVudCgpKQotICAgICwgbV9pbmZlcnJlZE5hbWUobm9kZS0+aW5mZXJyZWROYW1lKCkuaXNO
dWxsKCkgPyBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllciA6IG5vZGUt
PmluZmVycmVkTmFtZSgpKQotICAgICwgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUobm9k
ZS0+ZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlKCkpCitGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1
bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJs
ZSwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSkKKyAgICA6IFNjcmlwdEV4
ZWN1dGFibGUoZ2xvYmFsRGF0YS5mdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGds
b2JhbERhdGEsIHNvdXJjZSwgdW5saW5rZWRFeGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgp
KQorICAgICwgbV91bmxpbmtlZEV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgdGhpcywgdW5saW5rZWRF
eGVjdXRhYmxlKQogewotICAgIG1fZmlyc3RMaW5lID0gbm9kZS0+bGluZU5vKCk7Ci0gICAgbV9s
YXN0TGluZSA9IG5vZGUtPmxhc3RMaW5lKCk7CisgICAgQVNTRVJUKCFzb3VyY2UuaXNOdWxsKCkp
OworICAgIEFTU0VSVChzb3VyY2UubGVuZ3RoKCkpOworICAgIG1fZmlyc3RMaW5lID0gZmlyc3RM
aW5lOworICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKIH0KIAogdm9pZCBGdW5jdGlvbkV4ZWN1
dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtMTkxLDcgKzE5MCw2IEBAIEpTT2JqZWN0
KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29w
ZSogc2NvcGUsIEpJVENvCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogICAgIFVOVVNFRF9Q
QVJBTShieXRlY29kZUluZGV4KTsKICNlbmRpZgotICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAw
OwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAg
ICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CiAgICAgCkBAIC0yMDAsMjggKzE5OCwyMSBAQCBKU09iamVjdCogRXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3Bl
LCBKSVRDbwogICAgICAgICBuZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2lu
dGVyX2Nhc3Q8Q29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpKSk7CiAgICAgICAg
IG1fZXZhbENvZGVCbG9jayA9IG5ld0NvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgfSBlbHNlIHsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2Jh
bERhdGEpOworICAgICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
ICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdC0+ZXZhbEVuYWJsZWQoKSkKICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCBsZXhpY2FsR2xv
YmFsT2JqZWN0LT5ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwotICAgICAgICBSZWZQdHI8
RXZhbE5vZGU+IGV2YWxOb2RlID0gcGFyc2U8RXZhbE5vZGU+KGdsb2JhbERhdGEsIGxleGljYWxH
bG9iYWxPYmplY3QsIG1fc291cmNlLCAwLCBJZGVudGlmaWVyKCksIGlzU3RyaWN0TW9kZSgpID8g
SlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEV2YWxOb2RlOjppc0Z1bmN0aW9uTm9kZSA/
IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxP
YmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOwotICAgICAgICBpZiAoIWV2YWxO
b2RlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKKworICAgICAgICBKU09iamVj
dCogZXhjZXB0aW9uID0gMDsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtl
ZEV2YWxDb2RlID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+Y3JlYXRlRXZhbENvZGVCbG9jayhleGVj
LCB0aGlzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKCF1bmxpbmtlZEV2YWxDb2RlKQogICAg
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKLSAgICAgICAgfQotICAgICAgICByZWNvcmRQYXJz
ZShldmFsTm9kZS0+ZmVhdHVyZXMoKSwgZXZhbE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCks
IGV2YWxOb2RlLT5saW5lTm8oKSwgZXZhbE5vZGUtPmxhc3RMaW5lKCkpOwotICAgICAgICAKLSAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3Qo
KTsKLSAgICAgICAgCisKICAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxv
Y2sgPSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpOwogICAgICAgICBBU1NFUlQoKGppdFR5cGUg
PT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOwotICAg
ICAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBn
bG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNjb3BlLT5sb2NhbERlcHRoKCksIHBy
ZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwotICAgICAgICBPd25QdHI8Qnl0ZWNvZGVHZW5l
cmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUu
Z2V0KCksIHNjb3BlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZhbENvZGVC
bG9jay5nZXQoKSwgISFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBPcHRpbWl6aW5n
Q29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uKSkpOwotICAgICAgICBpZiAoKGV4Y2VwdGlv
biA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgICAgIG1fZXZhbENvZGVCbG9j
ayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLT5y
ZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEo
KTsKLSAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0YSgpOworICAgICAgICBtX3VubGlua2VkRXZhbENv
ZGVCbG9jay5zZXQoKmdsb2JhbERhdGEsIHRoaXMsIHVubGlua2VkRXZhbENvZGUpOworICAgICAg
ICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCB1bmxp
bmtlZEV2YWxDb2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBz
Y29wZS0+bG9jYWxEZXB0aCgpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKICAgICAg
ICAgbV9ldmFsQ29kZUJsb2NrLT5jb3B5UG9zdFBhcnNlRGF0YUZyb21BbHRlcm5hdGl2ZSgpOwog
ICAgIH0KIApAQCAtMjU3LDYgKzI0OCw3IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBTY3JpcHRFeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIGlmICh0aGlz
T2JqZWN0LT5tX2V2YWxDb2RlQmxvY2spCiAgICAgICAgIHRoaXNPYmplY3QtPm1fZXZhbENvZGVC
bG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrKTsKIH0KIAogdm9pZCBFdmFsRXhlY3V0YWJs
ZTo6dW5saW5rQ2FsbHMoKQpAQCAtMjcyLDE5ICsyNjQsMjAgQEAgdm9pZCBFdmFsRXhlY3V0YWJs
ZTo6dW5saW5rQ2FsbHMoKQogdm9pZCBFdmFsRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKIHsKICAg
ICBtX2V2YWxDb2RlQmxvY2suY2xlYXIoKTsKKyAgICBtX3VubGlua2VkRXZhbENvZGVCbG9jay5j
bGVhcigpOwogICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCiBKU09iamVjdCogUHJvZ3JhbUV4
ZWN1dGFibGU6OmNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU09iamVjdCog
ZXhjZXB0aW9uID0gMDsKKyAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFJl
ZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4oZ2xvYmFs
RGF0YSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgSlNQ
YXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9u
Q29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgbGV4aWNhbEdsb2JhbE9iamVjdC0+ZGVidWdnZXIo
KSwgZXhlYywgJmV4Y2VwdGlvbik7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9k
ZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9iYWxEYXRhLCBtX3NvdXJjZSwgMCwgSWRlbnRpZmll
cigpLCBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNl
RnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CiAgICAgaWYgKHByb2dy
YW1Ob2RlKQogICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQoZXhjZXB0aW9uKTsKLSAgICBy
ZXR1cm4gZXhjZXB0aW9uOworICAgIEFTU0VSVChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6
OkVycm9yTm9uZSk7CisgICAgcmV0dXJuIGVycm9yLnRvRXJyb3JPYmplY3QobGV4aWNhbEdsb2Jh
bE9iamVjdCwgbV9zb3VyY2UpOwogfQogCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNv
bXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKQEAgLTMxMywzNSArMzA2LDEzIEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhl
Y3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUs
IEpJCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogICAgIFVOVVNFRF9QQVJBTShieXRlY29k
ZUluZGV4KTsKICNlbmRpZgotICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwotICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
Ci0gICAgCiAgICAgaWYgKCEhbV9wcm9ncmFtQ29kZUJsb2NrKSB7CiAgICAgICAgIE93blB0cjxQ
cm9ncmFtQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVC
bG9jayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKm1fcHJvZ3JhbUNvZGVCbG9jaykpOwog
ICAgICAgICBuZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8
Q29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpKSk7CiAgICAgICAgIG1fcHJv
Z3JhbUNvZGVCbG9jayA9IG5ld0NvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2Rl
PihnbG9iYWxEYXRhLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgSWRlbnRpZmll
cigpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBQcm9n
cmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVBy
b2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhjZXB0
aW9uKTsKLSAgICAgICAgaWYgKCFwcm9ncmFtTm9kZSkgewotICAgICAgICAgICAgQVNTRVJUKGV4
Y2VwdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgICAgICB9Ci0gICAg
ICAgIHJlY29yZFBhcnNlKHByb2dyYW1Ob2RlLT5mZWF0dXJlcygpLCBwcm9ncmFtTm9kZS0+aGFz
Q2FwdHVyZWRWYXJpYWJsZXMoKSwgcHJvZ3JhbU5vZGUtPmxpbmVObygpLCBwcm9ncmFtTm9kZS0+
bGFzdExpbmUoKSk7Ci0KICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNj
b3BlLT5nbG9iYWxPYmplY3QoKTsKLSAgICAKLSAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gcHJl
dmlvdXNDb2RlQmxvY2sgPSBtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpOwotICAgICAgICBB
U1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXND
b2RlQmxvY2spOwotICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJv
Z3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnBy
b3ZpZGVyKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwotICAgICAgICBPd25QdHI8
Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0
b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlLCBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCks
IG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgISFtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0
aXZlKCkgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uKSkpOwotICAg
ICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAg
ICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVC
bG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAg
ICAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURhdGEoKTsKLSAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURhdGEoKTsK
KyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1Db2RlQmxv
Y2sodGhpcywgbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suZ2V0KCksIGdsb2JhbE9iamVjdCwg
c291cmNlKCkucHJvdmlkZXIoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwogICAg
ICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmNvcHlQb3N0UGFyc2VEYXRhRnJvbUFsdGVybmF0aXZl
KCk7CiAgICAgfQogCkBAIC0zNzgsNiArMzQ5LDY3IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6
OnVubGlua0NhbGxzKCkKICNlbmRpZgogfQogCitpbnQgUHJvZ3JhbUV4ZWN1dGFibGU6OmFkZEds
b2JhbFZhcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgRnVuY3Rpb25Nb2RlIGZ1bmN0aW9uTW9k
ZSkKK3sKKyAgICAvLyBUcnkgdG8gc2hhcmUgdGhlIHN5bWJvbFRhYmxlIGlmIHBvc3NpYmxlCisg
ICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xU
YWJsZSgpOworICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk1vZGUpOworICAgIGludCBpbmRleCA9
IHN5bWJvbFRhYmxlLT5zaXplKCk7CisgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRl
eCwgKGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50KSA/IFJlYWRPbmx5IDogMCk7CisgICAgaWYg
KGZ1bmN0aW9uTW9kZSA9PSBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplKQorICAgICAgICBuZXdFbnRy
eS5hdHRlbXB0VG9XYXRjaCgpOworICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0g
c3ltYm9sVGFibGUtPmFkZChpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKKyAgICBpZiAoIXJlc3Vs
dC5pc05ld0VudHJ5KSB7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm90aWZ5V3Jp
dGUoKTsKKyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCk7
CisgICAgfQorICAgIHJldHVybiBpbmRleDsKK30KKworSlNPYmplY3QqIFByb2dyYW1FeGVjdXRh
YmxlOjppbml0YWxpemVHbG9iYWxQcm9wZXJ0aWVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2NvcGUqIHNjb3BlKQoreworICAgIEFTU0VSVChzY29w
ZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoJmdsb2JhbE9iamVj
dC0+Z2xvYmFsRGF0YSgpID09ICZnbG9iYWxEYXRhKTsKKworICAgIEpTT2JqZWN0KiBleGNlcHRp
b24gPSAwOworICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlID0gZ2xv
YmFsT2JqZWN0LT5jcmVhdGVQcm9ncmFtQ29kZUJsb2NrKGNhbGxGcmFtZSwgdGhpcywgJmV4Y2Vw
dGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKwor
ICAgIG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxEYXRhLCB0aGlzLCB1bmxp
bmtlZENvZGUpOworCisgICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCk7CisKKyAgICBjb25zdCBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2s6OlZhcmlhYmxlRGVjbGF0aW9ucyYgdmFyaWFibGVEZWNsYXJhdGlvbnMgPSB1bmxpbmtl
ZENvZGUtPnZhcmlhYmxlRGVjbGFyYXRpb25zKCk7CisgICAgY29uc3QgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrOjpGdW5jdGlvbkRlY2xhdGlvbnMmIGZ1bmN0aW9uRGVjbGFyYXRpb25zID0gdW5s
aW5rZWRDb2RlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpOworCisgICAgc2l6ZV90IG5ld0dsb2Jh
bHMgPSB2YXJpYWJsZURlY2xhcmF0aW9ucy5zaXplKCkgKyBmdW5jdGlvbkRlY2xhcmF0aW9ucy5z
aXplKCk7CisgICAgaWYgKCFuZXdHbG9iYWxzKQorICAgICAgICByZXR1cm4gMDsKKyAgICBnbG9i
YWxPYmplY3QtPmFkZFJlZ2lzdGVycyhuZXdHbG9iYWxzKTsKKyAgICBDYWxsRnJhbWUqIGdsb2Jh
bEV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZnVuY3Rpb25EZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9v
bCBwcm9wZXJ0eURpZEV4aXN0ID0gZ2xvYmFsT2JqZWN0LT5yZW1vdmVEaXJlY3QoZ2xvYmFsRGF0
YSwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uZmlyc3QpOyAvLyBOZXdseSBkZWNsYXJlZCBmdW5j
dGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCisgICAgICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSA9IGZ1bmN0aW9uRGVj
bGFyYXRpb25zW2ldLnNlY29uZC5nZXQoKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTRnVu
Y3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjLCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+bGlu
ayhnbG9iYWxEYXRhLCBtX3NvdXJjZSwgbGluZU5vKCksIDApLCBzY29wZSk7CisgICAgICAgIGlu
dCBpbmRleCA9IGFkZEdsb2JhbFZhcihnbG9iYWxPYmplY3QsIGZ1bmN0aW9uRGVjbGFyYXRpb25z
W2ldLmZpcnN0LCBJc1ZhcmlhYmxlLAorICAgICAgICAgICAgIXByb3BlcnR5RGlkRXhpc3QgPyBJ
c0Z1bmN0aW9uVG9TcGVjaWFsaXplIDogTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUpOwor
ICAgICAgICBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoaW5kZXgpLnNldChnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHZhcmlhYmxlRGVjbGFyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChnbG9iYWxP
YmplY3QtPmhhc1Byb3BlcnR5KGdsb2JhbEV4ZWMsIHZhcmlhYmxlRGVjbGFyYXRpb25zW2ldLmZp
cnN0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhZGRHbG9iYWxWYXIoZ2xvYmFs
T2JqZWN0LCB2YXJpYWJsZURlY2xhcmF0aW9uc1tpXS5maXJzdCwKKyAgICAgICAgICAgICh2YXJp
YWJsZURlY2xhcmF0aW9uc1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFu
dCkgPyBJc0NvbnN0YW50IDogSXNWYXJpYWJsZSwKKyAgICAgICAgICAgIE5vdEZ1bmN0aW9uT3JO
b3RTcGVjaWFsaXphYmxlKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgUHJvZ3Jh
bUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9n
cmFtRXhlY3V0YWJsZSo+KGNlbGwpOwpAQCAtMzg1LDYgKzQxNyw3IEBAIHZvaWQgUHJvZ3JhbUV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFT
U0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENo
aWxkcmVuKCkpOwogICAgIFNjcmlwdEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9wcm9ncmFtQ29kZUJsb2Nr
KQogICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2RlQmxvY2stPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOwogfQpAQCAtMzkyLDYgKzQyNSw3IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHZvaWQg
UHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiB7CiAgICAgbV9wcm9ncmFtQ29kZUJsb2Nr
LmNsZWFyKCk7CisgICAgbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKICAgICBC
YXNlOjpjbGVhckNvZGUoKTsKIH0KIApAQCAtNDM4LDEyICs0NzIsMTIgQEAgSlNPYmplY3QqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUq
IGV4ZWMsIEpTU2MKICNpZiBFTkFCTEUoSklUKQogYm9vbCBGdW5jdGlvbkV4ZWN1dGFibGU6Ompp
dENvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gaml0Q29tcGls
ZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwsIG1faml0Q29k
ZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgbV9zeW1ib2xUYWJsZSwg
SklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKKyAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBtX2Nv
ZGVCbG9ja0ZvckNhbGwsIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJp
dHlDaGVjaywgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKIH0KIAogYm9vbCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JD
b25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rp
b25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVG
b3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBtX3N5bWJv
bFRhYmxlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4
ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0
Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCks
IFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogfQogI2VuZGlmCiAKQEAgLTQ1Miw0
OSArNDg2LDMwIEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvZGVC
bG9ja1dpdGhCeXRlY29kZUZvcihDb2RlU3BlY2lhbGl6YXRpCiAgICAgcmV0dXJuIGJhc2VsaW5l
Q29kZUJsb2NrRm9yKGtpbmQpOwogfQogCi1QYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBG
dW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoSlNTY29wZSogc2NvcGUsIENv
bXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3Bl
Y2lhbGl6YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbikKK1Bhc3NPd25QdHI8RnVuY3Rp
b25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihKU1Nj
b3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpT
T2JqZWN0KiYgZXhjZXB0aW9uKQogewogICAgIGlmICghIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXph
dGlvbktpbmQpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2Nr
KENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9u
S2luZCkpKTsKLSAgICAKLSAgICBleGNlcHRpb24gPSAwOworCiAgICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gc2NvcGUtPmdsb2JhbERhdGEoKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwotICAgIFJlZlB0cjxGdW5jdGlvbkJv
ZHlOb2RlPiBib2R5ID0gcGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oCi0gICAgICAgIGdsb2JhbERh
dGEsCi0gICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgbV9zb3VyY2UsCi0gICAgICAgIG1f
cGFyYW1ldGVycy5nZXQoKSwKLSAgICAgICAgbmFtZSgpLAotICAgICAgICBpc1N0cmljdE1vZGUo
KSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLAotICAgICAgICBGdW5jdGlvbkJvZHlO
b2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3Jh
bUNvZGUsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgICZleGNlcHRpb24KLSAgICAp
OwotCi0gICAgaWYgKCFib2R5KSB7Ci0gICAgICAgIEFTU0VSVChleGNlcHRpb24pOworICAgIFBh
cnNlckVycm9yIGVycm9yOworICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBnbG9iYWxP
YmplY3QtPmhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CisgICAgUHJv
ZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzUHJvZmlsZXIoKSA/IFBy
b2ZpbGVyT24gOiBQcm9maWxlck9mZjsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1
bmxpbmtlZENvZGVCbG9jayA9IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3IoKmds
b2JhbERhdGEsIG1fc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2VyTW9kZSwgcHJv
ZmlsZXJNb2RlLCBlcnJvcik7CisgICAgcmVjb3JkUGFyc2UobV91bmxpbmtlZEV4ZWN1dGFibGUt
PmZlYXR1cmVzKCksIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygp
LCBsaW5lTm8oKSwgbGFzdExpbmUoKSk7CisKKyAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKSB7
CisgICAgICAgIGV4Y2VwdGlvbiA9IGVycm9yLnRvRXJyb3JPYmplY3QoZ2xvYmFsT2JqZWN0LCBt
X3NvdXJjZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBpZiAobV9mb3Jj
ZVVzZXNBcmd1bWVudHMpCi0gICAgICAgIGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsKLSAgICBi
b2R5LT5maW5pc2hQYXJzaW5nKG1fcGFyYW1ldGVycywgbV9uYW1lLCBtX2Z1bmN0aW9uTmFtZUlz
SW5TY29wZVRvZ2dsZSk7Ci0gICAgcmVjb3JkUGFyc2UoYm9keS0+ZmVhdHVyZXMoKSwgYm9keS0+
aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkp
OwotCi0gICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQ7Ci0gICAgQVNTRVJUKChj
b21waWxhdGlvbktpbmQgPT0gRmlyc3RDb21waWxhdGlvbikgPT0gIWNvZGVCbG9ja0ZvcihzcGVj
aWFsaXphdGlvbktpbmQpKTsKLSAgICByZXN1bHQgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2Rl
QmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVy
KCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9y
Q29uc3RydWN0KSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRv
cHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlLCByZXN1bHQtPnN5
bWJvbFRhYmxlKCksIHJlc3VsdC5nZXQoKSwgY29tcGlsYXRpb25LaW5kKSkpOwotICAgIGV4Y2Vw
dGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKLSAgICBib2R5LT5kZXN0cm95RGF0YSgpOwot
ICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgT3duUHRy
PEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxv
Y2sodGhpcywgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlk
ZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSkpOwogICAgIHJlc3VsdC0+Y29weVBvc3RQYXJz
ZURhdGFGcm9tKGNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpLmdldCgpKTsKICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAorCiBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2Nv
cGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsK
ICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihzYW1wbGluZ0Rlc2NyaXB0aW9uKGpp
dFR5cGUpKTsKQEAgLTUwNyw3ICs1MjIsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogcwogI2Vu
ZGlmCiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0g
IW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25Q
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Io
c2NvcGUsICEhbV9jb2RlQmxvY2tGb3JDYWxsID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmly
c3RDb21waWxhdGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CisgICAgT3duUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJsb2NrRm9yKHNjb3BlLCBD
b2RlRm9yQ2FsbCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbjsKIApAQCAtNTE2LDEwICs1MzEsOSBAQCBKU09iamVjdCogRnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNT
Y29wZSogcwogICAgIAogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBtX2NvZGVCbG9ja0Zv
ckNhbGwtPm51bVBhcmFtZXRlcnMoKTsKICAgICBBU1NFUlQobV9udW1QYXJhbWV0ZXJzRm9yQ2Fs
bCk7Ci0gICAgbV9zeW1ib2xUYWJsZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Nv
ZGVCbG9ja0ZvckNhbGwtPnN5bWJvbFRhYmxlKCkpOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBp
ZiAoIXByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGws
IG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgbV9zeW1i
b2xUYWJsZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNhbGwpKQorICAgIGlmICgh
cHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9q
aXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBi
eXRlY29kZUluZGV4LCBDb2RlRm9yQ2FsbCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAK
QEAgLTU0NCw3ICs1NTgsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
Rm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1NjbwogICAgIAogICAgIEFT
U0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25QdHI8RnVu
Y3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUs
ICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJz
dENvbXBpbGF0aW9uLCBDb2RlRm9yQ29uc3RydWN0LCBleGNlcHRpb24pOworICAgIE93blB0cjxG
dW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29w
ZSwgQ29kZUZvckNvbnN0cnVjdCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykK
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIApAQCAtNTUzLDEwICs1NjcsOSBAQCBKU09iamVj
dCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0
YXRlKiBleGVjLCBKU1NjbwogICAgIAogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgQVNTRVJUKG1f
bnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCk7Ci0gICAgbV9zeW1ib2xUYWJsZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFibGUo
KSk7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0
aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3Qs
IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBqaXRU
eXBlLCBieXRlY29kZUluZGV4LCBDb2RlRm9yQ29uc3RydWN0KSkKKyAgICBpZiAoIXByZXBhcmVG
dW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCwgbV9qaXRD
b2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgaml0
VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNvbnN0cnVjdCkpCiAgICAgICAgIHJldHVybiAw
OwogI2VuZGlmCiAKQEAgLTU5MiwxMiArNjA1LDExIEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAg
Q09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhp
c09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigp
KTsKICAgICBTY3JpcHRFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25hbWVWYWx1ZSk7Ci0gICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogICAgIGlmICh0aGlz
T2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJs
b2NrRm9yQ2FsbC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3Qt
Pm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQogICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRFeGVjdXRhYmxlKTsKIH0KIAogdm9pZCBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCkKQEAgLTYwNyw2ICs2MTksMTMg
QEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCkKICAg
ICBjbGVhckNvZGUoKTsKIH0KIAordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyVW5saW5r
ZWRDb2RlSWZOb3RDb21waWxpbmcoKQoreworICAgIGlmIChpc0NvbXBpbGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNsZWFyQ29kZSgpOworfQorCiB2
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKIHsKICAgICBtX2NvZGVCbG9ja0Zv
ckNhbGwuY2xlYXIoKTsKQEAgLTYzMCwzOSArNjQ5LDE5IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRh
YmxlOjp1bmxpbmtDYWxscygpCiAKIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRh
YmxlOjpmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeGVjU3RhdGUqIGV4
ZWMsIERlYnVnZ2VyKiBkZWJ1Z2dlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU09iamVj
dCoqIGV4Y2VwdGlvbikKIHsKLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+
IHByb2dyYW0gPSBwYXJzZTxQcm9ncmFtTm9kZT4oJmV4ZWMtPmdsb2JhbERhdGEoKSwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIFBy
b2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNl
UHJvZ3JhbUNvZGUsIGRlYnVnZ2VyLCBleGVjLCBleGNlcHRpb24pOwotICAgIGlmICghcHJvZ3Jh
bSkgewotICAgICAgICBBU1NFUlQoKmV4Y2VwdGlvbik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIHVubGlua2VkRnVuY3Rpb24gPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZnJvbUdsb2JhbENvZGUobmFtZSwgZXhlYywgZGVidWdnZXIsIHNvdXJjZSwgZXhjZXB0aW9uKTsK
KyAgICBpZiAoIXVubGlua2VkRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIC8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBhbiBpbnB1dCBzdHJpbmcgdGhhdCB3b3VsZCBy
ZXN1bHQgaW4gYSBzaW5nbGUgYW5vbnltb3VzIGZ1bmN0aW9uIGV4cHJlc3Npb24uCi0gICAgU3Rh
dGVtZW50Tm9kZSogZXhwclN0YXRlbWVudCA9IHByb2dyYW0tPnNpbmdsZVN0YXRlbWVudCgpOwot
ICAgIEFTU0VSVChleHByU3RhdGVtZW50KTsKLSAgICBBU1NFUlQoZXhwclN0YXRlbWVudC0+aXNF
eHByU3RhdGVtZW50KCkpOwotICAgIEV4cHJlc3Npb25Ob2RlKiBmdW5jRXhwciA9IHN0YXRpY19j
YXN0PEV4cHJTdGF0ZW1lbnROb2RlKj4oZXhwclN0YXRlbWVudCktPmV4cHIoKTsKLSAgICBBU1NF
UlQoZnVuY0V4cHIpOwotICAgIEFTU0VSVChmdW5jRXhwci0+aXNGdW5jRXhwck5vZGUoKSk7Ci0g
ICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9IHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGZ1
bmNFeHByKS0+Ym9keSgpOwotICAgIEFTU0VSVChib2R5KTsKLSAgICBBU1NFUlQoYm9keS0+aWRl
bnQoKS5pc051bGwoKSk7Ci0KLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0
YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYm9k
eSk7Ci0gICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGpzU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCks
IG5hbWUuc3RyaW5nKCkpKTsKLSAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOworICAgIHVu
c2lnbmVkIGZpcnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlua2VkRnVuY3Rpb24t
PmZpcnN0TGluZU9mZnNldCgpOworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlLnN0
YXJ0T2Zmc2V0KCkgKyB1bmxpbmtlZEZ1bmN0aW9uLT5zdGFydE9mZnNldCgpOworICAgIHVuc2ln
bmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRnVuY3Rpb24tPnNvdXJjZUxlbmd0aCgpOworICAg
IFNvdXJjZUNvZGUgZnVuY3Rpb25Tb3VyY2Uoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0
LCBzdGFydE9mZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lKTsKKyAgICByZXR1cm4gRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvblNvdXJj
ZSwgdW5saW5rZWRGdW5jdGlvbiwgZmlyc3RMaW5lLCB1bmxpbmtlZEZ1bmN0aW9uLT5saW5lQ291
bnQoKSk7CiB9CiAKIFN0cmluZyBGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtU3RyaW5nKCkgY29u
c3QKIHsKLSAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqbV9wYXJhbWV0ZXJz
OwotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3IgKHNpemVfdCBwb3MgPSAwOyBw
b3MgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytwb3MpIHsKLSAgICAgICAgaWYgKCFidWlsZGVyLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQocGFyYW1ldGVyc1twb3NdLnN0cmluZygpKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFi
bGUtPnBhcmFtU3RyaW5nKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaAppbmRleCA3NmE1MzdkYTMyNGFhYzkyMDNjZDg0ZDA5MWNjOGM5MzJmMmZm
MDM2Li43NGI0YWRkNzVjMzJmMzg2ZDQ0Y2FlMjQ4OGIxOTI0ZGUyYzgwYzc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiTExJbnRDTG9vcC5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiU2Ft
cGxpbmdUb29sLmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM2NCw5ICszNjUsMTkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9mZWF0dXJlcyAmIFN0cmljdE1vZGVGZWF0dXJlOyB9CiAKICAgICAgICAgdm9pZCB1bmxp
bmtDYWxscygpOworCisgICAgICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZmVhdHVyZXM7IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCisgICAgICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1
cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExp
bmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJlczsKKyAgICAg
ICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAg
ICAgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOworICAgICAgICAgICAgbV9sYXN0TGlu
ZSA9IGxhc3RMaW5lOworICAgICAgICB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CkBAIC0z
NzksMTQgKzM5MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIH0KIAotICAg
ICAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0
dXJlZFZhcmlhYmxlcywgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0gICAgICAgICAgICBtX2hhc0NhcHR1
cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRWYXJpYWJsZXM7Ci0gICAgICAgICAgICBtX2ZpcnN0
TGluZSA9IGZpcnN0TGluZTsKLSAgICAgICAgICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKLSAg
ICAgICAgfQotCiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAgICAgICAgIENvZGVGZWF0
dXJlcyBtX2ZlYXR1cmVzOwogICAgICAgICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7CkBA
IC00NDgsNiArNDUxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjbGVhckNv
ZGUoKTsKIAorICAgICAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsg
cmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0
cmljdE1vZGUoKSwgZmFsc2UpOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2Ny
aXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKEV4
ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sKTsKQEAgLTQ1Niw2ICs0NjEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIE93blB0cjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxD
b2RlQmxvY2s7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IG1f
dW5saW5rZWRFdmFsQ29kZUJsb2NrOwogICAgIH07CiAKICAgICBjbGFzcyBQcm9ncmFtRXhlY3V0
YWJsZSA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAgLTQ3MCw2ICs0NzYsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAK
KworICAgICAgICBKU09iamVjdCogaW5pdGFsaXplR2xvYmFsUHJvcGVydGllcyhKU0dsb2JhbERh
dGEmLCBDYWxsRnJhbWUqLCBKU1Njb3BlKik7CisKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZShFeGVjU3RhdGUqIGV4ZWMs
IEpTU2NvcGUqIHNjb3BlKQpAQCAtNTE1LDEzICs1MjQsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAorICAgICAgICBFeGVjdXRhYmxlSW5mbyBleGVj
dXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlv
bigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UpOyB9CisKICAgICBwcml2YXRl
OgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CisKICAg
ICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYpOwog
CisgICAgICAgIGVudW0gQ29uc3RhbnRNb2RlIHsgSXNDb25zdGFudCwgSXNWYXJpYWJsZSB9Owor
ICAgICAgICBlbnVtIEZ1bmN0aW9uTW9kZSB7IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUsIE5vdEZ1
bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlIH07CisgICAgICAgIGludCBhZGRHbG9iYWxWYXIoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBGdW5jdGlvbk1v
ZGUpOworCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNT
Y29wZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01B
WCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBt
X3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICAgICAgT3duUHRyPFByb2dyYW1Db2RlQmxv
Y2s+IG1fcHJvZ3JhbUNvZGVCbG9jazsKICAgICB9OwogCkBAIC01MzEsOSArNTQ4LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIFNjcmlwdEV4ZWN1dGFi
bGUgQmFzZTsKIAotICAgICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQorICAgICAgICBz
dGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1
bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFsRGF0
YS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERhdGEsIG5vZGUpOworICAgICAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBGdW5jdGlvbkV4ZWN1
dGFibGUoZ2xvYmFsRGF0YSwgc291cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwg
bGFzdExpbmUpOwogICAgICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQpAQCAtNTU0
LDcgKzU3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgRnVuY3Rpb25D
b2RlQmxvY2sqIGNvZGVCbG9ja1dpdGhCeXRlY29kZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKICAgICAgICAgCi0gICAgICAgIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1
Y2VDb2RlQmxvY2tGb3IoSlNTY29wZSosIENvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24pOworICAgICAgICBQYXNzT3duUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiBwcm9kdWNlQ29kZUJsb2NrRm9yKEpTU2NvcGUqLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbik7CiAKICAgICAgICAgSlNPYmplY3QqIGNv
bXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCiAgICAgICAgIHsK
QEAgLTY3OSwxNCArNjk2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJuIG1faW5mZXJyZWROYW1lOyB9
Ci0gICAgICAgIEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25hbWVWYWx1
ZS5nZXQoKTsgfQotICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX3BhcmFtZXRlcnMtPnNpemUoKTsgfSAvLyBFeGNsdWRpbmcgJ3RoaXMnIQorICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5h
bWUoKTsgfQorICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSB7IHJldHVy
biBtX3VubGlua2VkRXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCk7IH0KKyAgICAgICAgSlNTdHJp
bmcqIG5hbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5uYW1l
VmFsdWUoKTsgfQorICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKTsgfSAvLyBFeGNsdWRpbmcg
J3RoaXMnIQogICAgICAgICBTdHJpbmcgcGFyYW1TdHJpbmcoKSBjb25zdDsKLSAgICAgICAgU2hh
cmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1ib2xUYWJs
ZS5nZXQoKTsgfQorICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJs
ZS0+c3ltYm9sVGFibGUoa2luZCk7IH0KIAogICAgICAgICB2b2lkIGNsZWFyQ29kZUlmTm90Q29t
cGlsaW5nKCk7CisgICAgICAgIHZvaWQgY2xlYXJVbmxpbmtlZENvZGVJZk5vdENvbXBpbGluZygp
OwogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG8pCiAgICAgICAgIHsKQEAgLTY5OSwxNSArNzE3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbV9u
YW1lVmFsdWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBuYW1l
KCkuc3RyaW5nKCkpKTsKLSAgICAgICAgfQotCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIEZ1bmN0aW9uQm9keU5vZGUqKTsKKyAgICAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFz
dExpbmUpOwogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNT
dGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
ID0gVUlOVF9NQVgpOwogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4ID0gVUlOVF9NQVgpOwpAQCAtNzMyLDE2ICs3NDMsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1
cmVGbGFnczsKLSAgICAgICAgYm9vbCBtX2ZvcmNlVXNlc0FyZ3VtZW50czsKLQotICAgICAgICBS
ZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gbV91bmxpbmtlZEV4ZWN1dGFibGU7CiAg
ICAgICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOwogICAg
ICAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0Owot
ICAgICAgICBJZGVudGlmaWVyIG1fbmFtZTsKLSAgICAgICAgSWRlbnRpZmllciBtX2luZmVycmVk
TmFtZTsKLSAgICAgICAgRnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlIG1fZnVuY3Rpb25OYW1l
SXNJblNjb3BlVG9nZ2xlOwotICAgICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fbmFtZVZh
bHVlOwotICAgICAgICBXcml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFi
bGU7CiAgICAgfTsKIAogICAgIGlubGluZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3Bl
KiBzY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGlvbkhhcm5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhh
cm5lc3MuaAppbmRleCAwNjU3ODhhZWUxYmUyNWYzMGRmNjViYzk5YTEzMTA1OGVlMTljNjU2Li5i
NzFiNjAyMTdmYTVlNGMzMTQ0MTRhOTkwZTYxMGM5ZjU5NDZjMThiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCkBAIC00OSw3ICs0OSw3
IEBAIGlubGluZSBib29sIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBPd25Q
dHI8Q29kZUJsb2NrVHlwZT4mIGNvZGVCbG9jCiAgICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJv
cHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwg
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNj
ZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIH0KIAotaW5saW5lIGJvb2wgcHJlcGFyZUZ1
bmN0aW9uRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIm
IGppdENvZGVXaXRoQXJpdHlDaGVjaywgV3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiYg
c3ltYm9sVGFibGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5saW5lIGJvb2wgcHJlcGFyZUZ1
bmN0aW9uRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIm
IGppdENvZGVXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5B
QkxFKExMSU5UKQogICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewpA
QCAtNjEsNyArNjEsNyBAQCBpbmxpbmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24o
RXhlY1N0YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvYwogI2Vsc2UKICAgICBVTlVT
RURfUEFSQU0oa2luZCk7CiAjZW5kaWYgLy8gRU5BQkxFKExMSU5UKQotICAgIHJldHVybiBqaXRD
b21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0
Q29kZVdpdGhBcml0eUNoZWNrLCBzeW1ib2xUYWJsZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwg
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNj
ZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0
aW9uSWZBcHByb3ByaWF0ZShleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJp
dHlDaGVjaywgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUo
aml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5oCmluZGV4IGZhMjI5MTgxM2Y5YmFhYmUwZDZmMGM2OWJlNjc3
ODRjZDQzNGQxMWQuLmZjNjMzNjQ2MzE2ODU4YmRmNjlkZmRmNDFiMmE3MjBiOGMwMTRlYmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCkBAIC00Niwx
NSArNDYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVm
IEpTVmFyaWFibGVPYmplY3QgQmFzZTsKIAotICAgICAgICBzdGF0aWMgSlNBY3RpdmF0aW9uKiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUpCisgICAgICAgIHN0YXRpYyBKU0Fj
dGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgeworICAgICAgICAgICAgU2hh
cmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwog
ICAgICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3ICgKICAgICAgICAgICAg
ICAgICBOb3ROdWxsLAogICAgICAgICAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRpb24+
KAogICAgICAgICAgICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAsCi0gICAgICAgICAgICAgICAg
ICAgIGFsbG9jYXRpb25TaXplKGZ1bmN0aW9uRXhlY3V0YWJsZS0+c3ltYm9sVGFibGUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpCiAgICAgICAgICAg
ICAgICAgKQotICAgICAgICAgICAgKSBKU0FjdGl2YXRpb24oZ2xvYmFsRGF0YSwgY2FsbEZyYW1l
LCBmdW5jdGlvbkV4ZWN1dGFibGUtPnN5bWJvbFRhYmxlKCkpOworICAgICAgICAgICAgKSBKU0Fj
dGl2YXRpb24oZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLCBzeW1ib2xUYWJsZSk7CiAgICAgICAgICAg
ICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIHJl
dHVybiBhY3RpdmF0aW9uOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAppbmRleCAxMmEyOGUzNDFmYjAyYWI5ODczMmZlMjBkNWU2
MzU2NTg4NGEwMWVkLi40ZGNhNWIwZjZmZTdhYTE1ZjcwYjg5MTRhNmUzNjJhNTkwZGY5NzViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKIAogI2luY2x1ZGUgIkFy
Z0xpc3QuaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlm
aWVycy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkZ1bmN0
aW9uQ29uc3RydWN0b3IuaCIKQEAgLTU3LDYgKzU4LDcgQEAKICNpbmNsdWRlICJSZWdFeHBPYmpl
Y3QuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9u
Z0lubGluZXMuaCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L1dURlRocmVhZERhdGEuaD4KQEAgLTE5Niw2ICsxOTgsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YShHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAgICAgLCBtX2luaXRpYWxpemluZ09iamVjdENsYXNzKDApCiAjZW5kaWYKICAgICAsIG1faW5E
ZWZpbmVPd25Qcm9wZXJ0eShmYWxzZSkKKyAgICAsIG1fY29kZUNhY2hlKENvZGVDYWNoZTo6Y3Jl
YXRlKCkpCiB7CiAgICAgaW50ZXJwcmV0ZXIgPSBuZXcgSW50ZXJwcmV0ZXIoKnRoaXMpOwogCkBA
IC0yMjEsNiArMjI0LDExIEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFU
eXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBzaGFyZWRTeW1ib2xU
YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFNoYXJlZFN5bWJvbFRhYmxlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogICAgIHNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAg
d2l0aFNjb3BlU3RydWN0dXJlLnNldCgqdGhpcywgSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0
cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
U3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRFdmFsQ29kZUJsb2NrU3Ry
dWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVj
dHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50
SWRlbnRpZmllclRhYmxlKGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCmluZGV4IGU5N2MwYTAxNWQ0
ODU0NDU0NzA3NzczZjE3MTY2ZTIwMDZjMDQzZGUuLjBmZmFjY2I2YWQxMjVmNzY0ZjRiNWQ1YjEy
OTdlZWM1M2EyNmE5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5oCkBAIC02Myw2ICs2Myw3IEBAIHN0cnVjdCBPcGFxdWVKU0NsYXNzQ29udGV4dERh
dGE7CiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENvZGVCbG9jazsKKyAgICBjbGFzcyBD
b2RlQ2FjaGU7CiAgICAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiAgICAgY2xhc3MgSGFuZGxl
U3RhY2s7CiAgICAgY2xhc3MgSWRlbnRpZmllclRhYmxlOwpAQCAtODAsNiArODEsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIGNsYXNzIFJlZ0V4
cDsKICNlbmRpZgorICAgIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOworICAgIGNsYXNzIFVubGlu
a2VkRXZhbENvZGVCbG9jazsKKyAgICBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsK
KyAgICBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7CiAKICAgICBzdHJ1Y3QgSGFzaFRh
YmxlOwogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKQEAgLTIyMyw2ICsyMjgsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNoYXJlZFN5bWJvbFRhYmxlU3Ry
dWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVy
ZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVy
ZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2l0aFNjb3BlU3RydWN0dXJlOworICAgICAg
ICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsK
KyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0
dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1
Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2tTdHJ1Y3R1cmU7CiAKICAgICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGU7
CiAgICAgICAgIENvbW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0eU5hbWVzOwpAQCAtNDM2LDYgKzQ0
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgSlNMb2NrJiBhcGlM
b2NrKCkgeyByZXR1cm4gbV9hcGlMb2NrOyB9CisgICAgICAgIENvZGVDYWNoZSogY29kZUNhY2hl
KCkgeyByZXR1cm4gbV9jb2RlQ2FjaGUuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC00NTYsNiArNDY3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9pbml0aWFsaXppbmdP
YmplY3RDbGFzczsKICNlbmRpZgogICAgICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsK
KyAgICAgICAgT3duUHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAKICAgICAgICAgVHlwZWRB
cnJheURlc2NyaXB0b3IgbV9pbnQ4QXJyYXlEZXNjcmlwdG9yOwogICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBtX2ludDE2QXJyYXlEZXNjcmlwdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDAzMjUyZmFkMWNhNzEyODRj
NmEwY2MyMGRiZTYxN2FlYzc3ODdiY2IuLmM0NjZhMmIwNGEyZDYxZWEzODljMTFiYTcyZmI1Y2Jm
OWM0YjgwYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJCb29sZWFuQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJCb29sZWFuUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCkBAIC01
ODAsNCArNTgxLDU4IEBAIHZvaWQgc2xvd1ZhbGlkYXRlQ2VsbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoZ2xvYmFsT2JqZWN0LCAm
SlNHbG9iYWxPYmplY3Q6OnNfaW5mbyk7CiB9CiAKK1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jayog
SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVByb2dyYW1Db2RlQmxvY2soQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikK
K3sKKyAgICBQYXJzZXJFcnJvciBlcnJvcjsKKyAgICBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0
bmVzcyA9IGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFy
c2VOb3JtYWw7CisgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSA9IGhhc0RlYnVnZ2VyKCkg
PyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CisgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9k
ZSA9IGhhc1Byb2ZpbGVyKCkgPyBQcm9maWxlck9uIDogUHJvZmlsZXJPZmY7CisgICAgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGUgPSBnbG9iYWxEYXRhKCkuY29kZUNhY2hl
KCktPmdldFByb2dyYW1Db2RlQmxvY2soZ2xvYmFsRGF0YSgpLCBleGVjdXRhYmxlLCBleGVjdXRh
YmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVy
cm9yKTsKKworICAgIGlmIChoYXNEZWJ1Z2dlcigpKQorICAgICAgICBkZWJ1Z2dlcigpLT5zb3Vy
Y2VQYXJzZWQoY2FsbEZyYW1lLCBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBlcnJv
ci5tX2xpbmUsIGVycm9yLm1fbWVzc2FnZSk7CisKKyAgICBpZiAoZXJyb3IubV90eXBlICE9IFBh
cnNlckVycm9yOjpFcnJvck5vbmUpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGVycm9yLnRvRXJy
b3JPYmplY3QodGhpcywgZXhlY3V0YWJsZS0+c291cmNlKCkpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKK30KKworVW5saW5rZWRFdmFs
Q29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlRXZhbENvZGVCbG9jayhDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTT2JqZWN0KiogZXhjZXB0
aW9uKQoreworICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIEpTUGFyc2VyU3RyaWN0bmVzcyBz
dHJpY3RuZXNzID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDog
SlNQYXJzZU5vcm1hbDsKKyAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gaGFzRGVidWdn
ZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKKyAgICBQcm9maWxlck1vZGUgcHJvZmls
ZXJNb2RlID0gaGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKKyAgICBV
bmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZSA9IGdsb2JhbERhdGEoKS5jb2RlQ2Fj
aGUoKS0+Z2V0RXZhbENvZGVCbG9jayhnbG9iYWxEYXRhKCksIGV4ZWN1dGFibGUsIGV4ZWN1dGFi
bGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJy
b3IpOworCisgICAgaWYgKGhhc0RlYnVnZ2VyKCkpCisgICAgICAgIGRlYnVnZ2VyKCktPnNvdXJj
ZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGVycm9y
Lm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKKworICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFy
c2VyRXJyb3I6OkVycm9yTm9uZSkgeworICAgICAgICAqZXhjZXB0aW9uID0gZXJyb3IudG9FcnJv
ck9iamVjdCh0aGlzLCBleGVjdXRhYmxlLT5zb3VyY2UoKSk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIHJldHVybiB1bmxpbmtlZENvZGU7Cit9CisKK1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlRnVuY3Rpb25FeGVjdXRhYmxlRnJvbUds
b2JhbENvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNv
bnN0IFNvdXJjZUNvZGUmIGNvZGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQoreworICAgIFBhcnNl
ckVycm9yIGVycm9yOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gZ2xvYmFsRGF0YSgpLmNvZGVDYWNoZSgpLT5nZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xv
YmFsQ29kZShnbG9iYWxEYXRhKCksIG5hbWUsIGNvZGUsIGVycm9yKTsKKyAgICBpZiAoaGFzRGVi
dWdnZXIoKSkKKyAgICAgICAgZGVidWdnZXIoKS0+c291cmNlUGFyc2VkKGNhbGxGcmFtZSwgY29k
ZS5wcm92aWRlcigpLCBlcnJvci5tX2xpbmUsIGVycm9yLm1fbWVzc2FnZSk7CisKKyAgICBpZiAo
ZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpIHsKKyAgICAgICAgKmV4Y2Vw
dGlvbiA9IGVycm9yLnRvRXJyb3JPYmplY3QodGhpcywgY29kZSk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIHJldHVybiBleGVjdXRhYmxlOworfQorCisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
aW5kZXggNjVmZGE0OWQ4NDg4NDgyMDIyMzI2OGY1YTNiMWE1NTA1NWZlN2QyMi4uMzIxMjM2M2Fi
NGU3MTNhZmI0YTE2NDI5OTNjMDM1NjQ0NDdmZmFkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC00Myw2ICs0MywxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBEZWJ1Z2dlcjsKICAgICBjbGFzcyBFcnJvckNvbnN0cnVjdG9y
OwogICAgIGNsYXNzIEVycm9yUHJvdG90eXBlOworICAgIGNsYXNzIEV2YWxDb2RlQmxvY2s7Cisg
ICAgY2xhc3MgRXZhbEV4ZWN1dGFibGU7CisgICAgY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7Cisg
ICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBl
OwogICAgIGNsYXNzIEdldHRlclNldHRlcjsKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2s7CkBA
IC01MCw5ICs1NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiAgICAgY2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcjsKICAgICBjbGFzcyBQ
cm9ncmFtQ29kZUJsb2NrOworICAgIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlOwogICAgIGNsYXNz
IFJlZ0V4cENvbnN0cnVjdG9yOwogICAgIGNsYXNzIFJlZ0V4cFByb3RvdHlwZTsKLQorICAgIGNs
YXNzIFNvdXJjZUNvZGU7CiAgICAgc3RydWN0IEFjdGl2YXRpb25TdGFja05vZGU7CiAgICAgc3Ry
dWN0IEhhc2hUYWJsZTsKIApAQCAtMTg1LDYgKzE5MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKKyAg
ICAgICAgYm9vbCBoYXNEZWJ1Z2dlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KKyAg
ICAgICAgYm9vbCBoYXNQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKCktPnN1cHBvcnRzUHJvZmlsaW5nKHRoaXMpOyB9CisKICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDApOwog
CkBAIC0zNjYsNiArMzc0LDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGRvdWJsZSB3
ZWFrUmFuZG9tTnVtYmVyKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9tLmdldCgpOyB9CiAgICAgICAg
IHVuc2lnbmVkIHdlYWtSYW5kb21JbnRlZ2VyKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9tLmdldFVp
bnQzMigpOyB9CisKKyAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGVQcm9n
cmFtQ29kZUJsb2NrKENhbGxGcmFtZSosIFByb2dyYW1FeGVjdXRhYmxlKiwgSlNPYmplY3QqKiBl
eGNlcHRpb24pOworICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNyZWF0ZUV2YWxDb2Rl
QmxvY2soQ2FsbEZyYW1lKiwgRXZhbEV4ZWN1dGFibGUqLCBKU09iamVjdCoqIGV4Y2VwdGlvbik7
CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGVGdW5jdGlvbkV4ZWN1
dGFibGVGcm9tR2xvYmFsQ29kZShDYWxsRnJhbWUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
U291cmNlQ29kZSYsIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKKwogICAgIHByb3RlY3RlZDoKIAog
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGUuaAppbmRleCAwM2Y0YTc3OTA5MDc3ZTZhNmM1ZGFhMzhiNWIzMjllMDA2
MWM2MjhiLi4xMGQ5OGQyYmQyNWE2ZDFlMjI3NDdiNzAwM2E4MTYwZDgzMWIzMTZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaApAQCAtNDEsNiArNDEsMTEgQEAgZW51bSBK
U1R5cGUgewogICAgIFByb2dyYW1FeGVjdXRhYmxlVHlwZSwKICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGVUeXBlLAogCisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLAorICAgIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9ja1R5cGUsCisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrVHlwZSwK
KyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrVHlwZSwKKwogICAgIC8vIFRoZSBPYmplY3RU
eXBlIHZhbHVlIG11c3QgY29tZSBiZWZvcmUgYW55IEpTVHlwZSB0aGF0IGlzIGEgc3ViY2xhc3Mg
b2YgSlNPYmplY3QuCiAgICAgT2JqZWN0VHlwZSwKICAgICBGaW5hbE9iamVjdFR5cGUsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172461</attachid>
            <date>2012-11-05 18:00:25 -0800</date>
            <delta_ts>2012-11-06 11:51:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101127-20121105175839.patch</filename>
            <type>text/plain</type>
            <size>231294</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ODUwOGZhYjE3NWQwYzc2ODVjNTYzZTcyN2NkMjBjYTIzOWIxYjI2Li5kMTdiZGQzOTNhNGQ1MzA4
ZTNmYjY3Nzg4ZjBiMDY2M2I3ZGFjZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MiBAQAorMjAxMi0xMS0wMiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZHVjZSBwYXJzZXIgb3ZlcmhlYWQgaW4gSlNDCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExMjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbiBleGNpdGluZyBqb3VybmV5IGludG8g
dGhlIHdvcmxkIG9mIGFyY2hpdGVjdHVyZSBpbiB3aGljaCBvdXIgaGVybworICAgICAgICBhZGRz
IHlldCBhbm90aGVyIGxheWVyIHRvIEpTQyBjb2RlZ2VuZXJhdGlvbi4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgYSBtYXJnaW5hbGx5IG1vcmUgY29tcGFjdCBmb3JtIG9mIGJ5dGVjb2RlIHRo
YXQgaXMKKyAgICAgICAgZnJlZSBmcm9tIGFueSBkYXRhIHNwZWNpZmljIHRvIGEgZ2l2ZW4gZXhl
Y3V0aW9uIGNvbnRleHQsIGFuZCB0aGF0CisgICAgICAgIGRvZXMgc3RvcmUgYW55IGRhdGEgc3Ry
dWN0dXJlcyBuZWNlc3NhcnkgZm9yIGV4ZWN1dGlvbi4gIFRvIGFjdHVhbGx5CisgICAgICAgIGV4
ZWN1dGUgdGhpcyBVbmxpbmtlZEJ5dGVjb2RlIHdlIHN0aWxsIG5lZWQgdG8gaW5zdGFudGlhdGUg
YSByZWFsCisgICAgICAgIENvZGVCbG9jaywgYnV0IHRoaXMgaXMgYSBtdWNoIGZhc3RlciBsaW5l
YXIgdGltZSBvcGVyYXRpb24gdGhhbiBhbnkKKyAgICAgICAgb2YgdGhlIGVhcmxpZXIgcGFyc2lu
ZyBvciBjb2RlIGdlbmVyYXRpb24gcGFzc2VzLgorCisgICAgICAgIEFzIHRoZSB1bmxpbmtlZCBj
b2RlIGlzIGNvbnRleHQgZnJlZSB3ZSBjYW4gdGhlbiBzaW1wbHkgdXNlIGEgY2FjaGUKKyAgICAg
ICAgZnJvbSBzb3VyY2UgdG8gdW5saW5rZWQgY29kZSBtYXBwaW5nIHRvIGNvbXBsZXRlbHkgYXZv
aWQgYWxsIG9mIHRoZQorICAgICAgICBvbGQgcGFyc2VyIG92ZXJoZWFkLiAgVGhlIGNhY2hlIGlz
IGN1cnJlbnRseSB2ZXJ5IHNpbXBsZSBhbmQgbWVtb3J5CisgICAgICAgIGhlYXZ5LCB1c2luZyB0
aGUgY29tcGxldGUgc291cmNlIHRleHQgYXMgYSBrZXkgKHJhdGhlciB0aGFuIFNvdXJjZUNvZGUK
KyAgICAgICAgb3IgZXF1aXZhbGVudCksIGFuZCBhIHJhbmRvbSBldmljdGlvbiBwb2xpY3kuCisK
KyAgICAgICAgVGhpcyBzZWVtcyB0byBwcm9kdWNlIGEgc3Vic3RhbnRpYWwgd2luIHdoZW4gbG9h
ZGluZyBpZGVudGljYWwgY29udGVudAorICAgICAgICBpbiBkaWZmZXJlbnQgY29udGV4dHMuCisK
KyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgICAgIE1vdmVkIGEgbnVtYmVyIG9mIGZpZWxkcywgYW5k
IGEgYnVuY2ggb2YgbG9naWMgdG8gVW5saW5rZWRDb2RlQmxvY2suaC9jcHAKKyAgICAgICAgKiBi
eXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgICAgIEFkZGVkIGEgZ2xvYmFsIGNvbnN0IGluaXQg
bm8gb3AgaW5zdHJ1Y3Rpb24gbmVlZGVkIHRvIGdldCBjb3JyZWN0CisgICAgICAgICAgICBiZWhh
dmlvdXIgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBzZW1hbnRpY3MuCisgICAgICAgICogYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgICAgIEEgZmFpcmx5IHNoYWxsb3csIEdD
IGFsbG9jYXRlZCB2ZXJzaW9uIG9mIHRoZSBvbGQgQ29kZUJsb2NrCisgICAgICAgICAgICBjbGFz
c2VzIHdpdGggYSAzMmJpdCBpbnN0cnVjdGlvbiBzaXplLCBhbmQganVzdCBtZXRhZGF0YQorICAg
ICAgICAgICAgc2l6ZSB0cmFja2luZy4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
OgorICAgICAgICAgICAgUmVwbGFjZSBkaXJlY3QgYWNjZXNzIHRvIG1fc3ltYm9sVGFibGUgd2l0
aCBhY2Nlc3MgdGhyb3VnaAorICAgICAgICAgICAgc3ltYm9sVGFibGUoKS4gIFByb2dyYW1Db2Rl
IG5vIGxvbmdlciBoYXMgYSBzeW1ib2wgdGFibGUgYXQKKyAgICAgICAgICAgIGFsbCBzbyBzb21l
IHByZXZpb3VzbHkgdW5jb25kaXRpb25hbCAoYW5kIHBvaW50bGVzcykgdXNlcworICAgICAgICAg
ICAgb2Ygc3ltYm9sVGFibGUgZ2V0IG51bGwgY2hlY2tzLgorICAgICAgICAgICAgQSBmZXcgb3Ro
ZXIgY2hhbmdlcyB0byBkZWFsIHdpdGggdHlwZSBjaGFuZ2VzIGR1ZSB0byB1cyBnZW5lcmF0aW5n
CisgICAgICAgICAgICB1bmxpbmtlZCBjb2RlIChlZy4gcG9pbnRlciBmcmVlLCBzbyBwcm9maWxl
IGluZGljZXMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIHBvaW50ZXJzKS4KKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMu
aDoKKyAgICAgICAgICAgIFN1cHBvcnQgZ2xvYmFsX2luaXRfbm9wICAgICAgICAKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgICAgICBOb3cgZ2V0IHRoZSBQ
cm9ncmFtRXhlY3V0YWJsZSB0byBpbml0aWFsaXNlIG5ldyBnbG9iYWwgcHJvcGVydGllcworICAg
ICAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIGV4ZWN1dGlvbi4gICAgICAgIAorICAgICAgICAqIGpp
dC9KSVQuY3BwOgorICAgICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKiBqaXQvSklU
U3R1YnMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgICAgIEFk
ZGluZyBpbml0X2dsb2JhbF9jb25zdF9ub3AgZXZlcnl3aGVyZSBlbHNlCisgICAgICAgICogcGFy
c2VyL1BhcnNlci5oOgorICAgICAgICAqIHBhcnNlci9QYXJzZXJNb2Rlcy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyVG9rZW5zLmg6CisgICAgICAgICAgICBQYXJzZXIgbm8gbG9u
Z2VyIG5lZWRzIGEgZ2xvYmFsIG9iamVjdCBvciBjYWxsZnJhbWUgdG8gZnVuY3Rpb24gICAgICAg
IAorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9Db2RlQ2FjaGUuaDogQWRkZWQuCisgICAgICAgICAgICBBIHNpbXBsZSwgcmFuZG9tIGV2
aWN0aW9uLCBTb3VyY2UtPlVubGlua2VkQ29kZSBjYWNoZSAgICAgICAgCisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAg
ICAgICAgICAgIEV4ZWN1dGFibGVzIG5vdyByZWZlcmVuY2UgdGhlaXIgdW5saW5rZWQgY291bnRl
cnBhcnRzLCBhbmQKKyAgICAgICAgICAgIHJlcXVlc3QgY29kZSBzcGVjaWZpY2FsbHkgZm9yIHRo
ZSB0YXJnZXQgZ2xvYmFsIG9iamVjdC4gICAgICAgIAorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAg
ICAgR2xvYmFsRGF0YSBub3cgb3ducyBhIENvZGVDYWNoZSBhbmQgYSBzZXQgb2YgbmV3IHN0cnVj
dHVyZXMKKyAgICAgICAgICAgIGZvciB0aGUgdW5saW5rZWQgY29kZSB0eXBlcy4gIAorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgICAgIFV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgZXhlY3V0
YWJsZXMgdG8gcGVyZm9ybSBjb21waWxhdGlvbgorIAorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBl
Lmg6CisgICAgICAgICAgQWRkIG5ldyBKU1R5cGVzIGZvciB1bmxpbmtlZCBjb2RlCisKIDIwMTIt
MTEtMDQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWR1Y2Ug
dGhlIHZlcmJvc2l0eSBvZiByZWZlcnJpbmcgdG8gUU5hTiBpbiBKYXZhU2NyaXB0Q29yZQpAQCAt
MTc3OSw3ICsxODY4LDcgQEAKICAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25leHRfcG5hbWUp
OgogICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKICAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhdGNoKToKLSAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93X3Jl
ZmVyZW5jZV9lcnJvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvd19zdGF0aWNf
ZXJyb3IpOgogICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CiAgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CiAgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9j
cmVhdGVfYWN0aXZhdGlvbik6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGkuYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jCmluZGV4IGI1MmEyYjQ0MDcyYWE2ODVlOTljNWQwODAzOTM1ZmMyYTAzOThlZDIuLmZjYWI5
YTU4YjY2MDE1NDRmNDc4MmZkM2E5OWI5ZGU3MDU5ZGFkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCkBAIC0xNDU4LDcgKzE0NTgsOSBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhciogYXJndltdKQogICAgIEpTU3RyaW5nUmVsZWFzZShmdW5jdGlvbkJvZHkp
OwogICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoSlNPYmplY3RJc0Z1bmN0aW9u
KGNvbnRleHQsIGZ1bmN0aW9uKSk7Ci0gICAgdiA9IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29u
dGV4dCwgZnVuY3Rpb24sIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworICAgIGV4Y2VwdGlvbiA9IDA7
CisgICAgdiA9IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIE5VTEws
IDAsIE5VTEwsICZleGNlcHRpb24pOworICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKICAgICBBU1NF
UlQodik7CiAgICAgQVNTRVJUKEpTVmFsdWVJc0VxdWFsKGNvbnRleHQsIHYsIGFycmF5Q29uc3Ry
dWN0b3IsIE5VTEwpKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRl
eCBjNzA2ZjY1ZTlkMzliMWI4NjFkZDQwYzk4OTZhMmZkMmQ3NzVmMWYxLi5kZTlkMTY2ZTlkNWY0
NjNkZDU1ODAxNmE3NDg0N2Q0MzcwYjYzMDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC02MSw2ICs2MSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
Ynl0ZWNvZGUvU3BlY2lhbFBvaW50ZXIuY3BwCiAgICAgYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5jcHAKICAgICBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAK
KyAgICBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKICAgICBieXRlY29kZS9XYXRjaHBv
aW50LmNwcAogCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTc2
LDYgKzE3Nyw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9Cb29s
ZWFuT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKICAgICBydW50
aW1lL0NhbGxEYXRhLmNwcAorICAgIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcAogICAgIHJ1bnRpbWUv
Q29tbW9uSWRlbnRpZmllcnMuY3BwCiAgICAgcnVudGltZS9Db21wbGV0aW9uLmNwcAogICAgIHJ1
bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggNmU3NGMzYjUzMWZjMGVlOTI1OGI0ODhiNWExNTY0YmVjZjNhOWVkMy4u
YTViMmZkNWQwMjFjOTAxMDk4MDlmMzkzYzJlODRlNzE0ZmQwZjBkZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE0Miw2ICsxNDIsOCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmggXApAQCAtNDQ4LDYgKzQ1MCw3IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9r
ZW5zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1Jlc3VsdFR5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2Rl
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaCBcCkBA
IC00ODgsNiArNDkxLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWxsRGF0YS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bGFzc0luZm8uaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNw
cCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKaW5k
ZXggMGY5NmE2MGVkZDEyNDk0N2Y5YzA3MGQ5OTk1ZjUxZWQ5M2ZjMmI3Mi4uMjc5OGM5MDVlMGM4
MjI5NzNlNTRkYWI4YzY5NjA0NzFmMjYzMDk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKQEAgLTYzOCw2ICs2MzgsMTQg
QEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
cnVudGltZVxDb2RlQ2FjaGUuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXENvZGVDYWNoZS5oIgorCQkJCT4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXENvbW1vbklkZW50
aWZpZXJzLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNzYyLDYgKzE3NzAsMTQgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNv
ZGVcVW5saW5rZWRDb2RlQmxvY2suY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxVbmxpbmtlZENvZGVCbG9jay5oIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29k
ZVxWYWx1ZVByb2ZpbGUuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yMjQ2LDYgKzIyNjIsMTAg
QEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
cGFyc2VyXFBhcnNlck1vZGVzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHBhcnNlclxQYXJzZXJBcmVuYS5jcHAiCiAJCQkJPgogCQkJPC9G
aWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyYTZhNWM0YzBmZTE5ZjcyZWNk
YzlmNTYyNjFhM2JiNjcxOTljZTA1Li41NzRiZmEwZDYwYTQ2NmM3NWJiOTNjYTRiNzJiY2RjNGVi
ZjZkMzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTg0LDEyICs1ODQsMTcg
QEAKIAkJQTc1NzA2REUxMThBMkJDRjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzU3MDZERDEx
OEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLzsgfTsKIAkJQTc2NkI0
NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI1MEVFNzRDRkMwMERDQkRC
NiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJm
YWNlSklULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzZGMjc5NDE1RjEzQzk2MDA1
MTdENjcgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTc5RTc4MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2Vk
Q29kZUJsb2NrLmNwcCAqLzsgfTsKIAkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdy
aXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovOyB9Owor
CQlBNzdGMTgyMTE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3N0YxODFGMTY0MDg4QjIwMDY0MEE0
NyAvKiBDb2RlQ2FjaGUuY3BwICovOyB9OworCQlBNzdGMTgyMjE2NDA4OEIyMDA2NDBBNDcgLyog
Q29kZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzdGMTgyMDE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTc3RjE4MjUxNjQxOTJDNzAwNjQw
QTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzdGMTgyNDE2NDE5MjU0MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2MTEx
RDE2NjIyMDA1Nzc2QUMgLyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxk
ZXIuaCAqLzsgfTsKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc3
MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IH07CiAJCUE3QUZDMTc5MTVG
N0VGRTMwMDQ4RjU3QiAvKiBSZXNvbHZlT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0FGQzE3NzE1RjdFRkUzMDA0OEY1N0IgLyogUmVz
b2x2ZU9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4
REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLzsgfTsKIAkJ
QTdCNEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0QUNBRTE0ODRDOUNFMDBCMzhB
MzYgLyogSlNFeHBvcnRNYWNyb3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlBN0I2MDE4MjE2MzlGRDJBMDAzNzJCQTMgLyogVW5saW5rZWRDb2Rl
QmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QzFFOEU0MTEyRTcyRUYw
MEEzN0Y5OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5OCAvKiBK
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLzsgfTsKIAkJQTdEQ0I5NzMxMkU1MTkzRjAwOTEx
OTQwIC8qIFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdEQ0I3NzkxMkUzRDkwNTAwOTExOTQwIC8qIFdyaXRlQmFycmllci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3RTJFQTZC
MEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0UyRUE2OTBGQjQ2MENGMDA2MDFGMDYgLyogTGl0
ZXJhbFBhcnNlci5oICovOyB9OwpAQCAtMTM4Niw2ICsxMzkxLDExIEBACiAJCUE3NjdGRjlGMTRG
NDUwMjkwMDc4OTA1OSAvKiBKU0NUeXBlZEFycmF5U3R1YnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDVHlwZWRBcnJheVN0dWJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVyZmFjZUpJVC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3Jp
dGVCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdyaXRlQmFy
cmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzdGMTgxRjE2NDA4OEIyMDA2
NDBBNDcgLyogQ29kZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvZGVDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3N0YxODIw
MTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29kZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3N0Yx
ODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJz
ZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzlFNzgxRTE1RUVDQkE4
MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVW5saW5rZWRDb2RlQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBNzlFNzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5saW5rZWRDb2RlQmxvY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc5RURCMDgxMTUzMUNENjAwMTlFOTEyIC8q
IEpTT2JqZWN0UmVmUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U09iamVjdFJlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBN0VF
NzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQVNUQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTeW50YXhDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMDcxLDYgKzIwODEsNyBAQAogCQkJCUU0OURDMTUxMTJFRjI3MjIwMDE4NEEx
RiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi8sCiAJCQkJRTQ5REMxNDkxMkVGMjYxQTAwMTg0
QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi8sCiAJCQkJQTdBN0VFNzcxMUI5OEI4
RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLywKKwkJCQlBNzdGMTgyNDE2NDE5MjU0MDA2
NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcGFyc2VyOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIzMDUsNiArMjMxNiw4IEBACiAJCQkJMTQyMEJF
N0ExMEFBNkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQlBN0RDQjc3OTEyRTNE
OTA1MDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJQzJENThDMzMxNTkxMkZFRTAw
MjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCisJCQkJQTc3RjE4MUYxNjQwODhC
MjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgKi8sCisJCQkJQTc3RjE4MjAxNjQwODhCMjAwNjQw
QTQ3IC8qIENvZGVDYWNoZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBydW50aW1lOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI1ODEsNiArMjU5NCw4IEBACiAJCQkJMEY0MjZBNDYx
NDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovLAogCQkJCTBGOTE5RDIyMTU4
NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmNwcCAqLywKIAkJCQkwRjkxOUQyMzE1ODUzQ0RF
MDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oICovLAorCQkJCUE3OUU3ODFFMTVFRUNCQTgwMDQ3Qzg1
NSAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgKi8sCisJCQkJQTc5RTc4MUYxNUVFQ0JBODAwNDdD
ODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGJ5dGVjb2Rl
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMwMDksNiArMzAyNCw5IEBACiAJCQkJ
MEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxs
b2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDFCMTYy
NjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdCNjAxODIx
NjM5RkQyQTAwMzcyQkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBNzdGMTgyMjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLywK
KwkJCQlBNzdGMTgyNTE2NDE5MkM3MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMzU4Nyw2ICszNjA1LDggQEAKIAkJCQlDMjREMzFFMjE2MUNENjk1MDAyQUE0REIg
LyogSGVhcFN0YXRpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMTcxNjI2MkJE
RDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjM5RDFB
MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzZG
Mjc5NDE1RjEzQzk2MDA1MTdENjcgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTc3RjE4MjExNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
aW5kZXggNzI5Zjg1Zjc4MDM0ODZlNWRiMWI2ODRkNzk3NWE4NmE0MDQ2YzRkNi4uMjg0MjA5ZmY2
ZWQyZTk4YjlhMjE1NTY4Y2JmMDQzZmU1MmE5NDU5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQ5MSwxMyArNDkxLDEzIEBAIHZvaWQgQ29k
ZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgKytpbnN0cnVjdGlvbkNvdW50
OwogCiAgICAgZGF0YUxvZygKLSAgICAgICAgIiVsdSBtX2luc3RydWN0aW9uczsgJWx1IGJ5dGVz
IGF0ICVwICglcyk7ICVkIHBhcmFtZXRlcihzKTsgJWQgY2FsbGVlIHJlZ2lzdGVyKHMpOyAlZCB2
YXJpYWJsZShzKSIsCisgICAgICAgICIlbHUgbV9pbnN0cnVjdGlvbnM7ICVsdSBieXRlcyBhdCAl
cCAoJXMpOyAlZCBwYXJhbWV0ZXIocyk7ICVkIGNhbGxlZSByZWdpc3RlcihzKTsgJWQgdmFyaWFi
bGUocyksIDB4JTA0eCBmZWF0dXJlcyIsCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KGluc3RydWN0aW9ucygpLnNpemUoKSksCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KGluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpLAogICAg
ICAgICB0aGlzLCBjb2RlVHlwZVRvU3RyaW5nKGNvZGVUeXBlKCkpLCBtX251bVBhcmFtZXRlcnMs
IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzLAotICAgICAgICBtX251bVZhcnMpOwotICAgIGlmIChtX3N5
bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkKLSAgICAgICAgZGF0YUxvZygiOyAlZCBjYXB0dXJl
ZCB2YXIocykiLCBtX3N5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSk7CisgICAgICAgIG1fbnVt
VmFycywgbV9vd25lckV4ZWN1dGFibGUtPmZlYXR1cmVzKCkpOworICAgIGlmIChzeW1ib2xUYWJs
ZSgpICYmIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpKQorICAgICAgICBkYXRhTG9nKCI7
ICVkIGNhcHR1cmVkIHZhcihzKSIsIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpKTsKICAg
ICBpZiAodXNlc0FyZ3VtZW50cygpKSB7CiAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAi
OyB1c2VzIGFyZ3VtZW50cywgaW4gciVkLCByJWQiLApAQCAtNTMxLDEzICs1MzEsMTMgQEAgdm9p
ZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB9IHdoaWxlIChpIDwg
bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwogICAgIH0KIAotICAgIGlmIChtX3JhcmVEYXRh
ICYmICFtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuaXNFbXB0eSgpKSB7CisgICAgaWYgKHNpemVfdCBj
b3VudCA9IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlJlZ0V4cHMoKSkgewogICAgICAgICBkYXRh
TG9nKCJcbm1fcmVnZXhwczpcbiIpOwogICAgICAgICBzaXplX3QgaSA9IDA7CiAgICAgICAgIGRv
IHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgcmUldSA9ICVzXG4iLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaSksIHJlZ2V4cFRvU291cmNlU3RyaW5nKG1fcmFyZURhdGEtPm1fcmVnZXhwc1tpXS5n
ZXQoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBkYXRhTG9nKCIgIHJlJXUgPSAlc1xu
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCByZWdleHBUb1NvdXJjZVN0cmluZyhtX3VubGlu
a2VkQ29kZS0+cmVnZXhwKGkpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgICsraTsKLSAg
ICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCkpOworICAgICAg
ICB9IHdoaWxlIChpIDwgY291bnQpOwogICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC02NzEs
NyArNjcxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBW
ZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIGludCBkc3Qg
PSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmd2ID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CiAgICAgICAgICAgICBpbnQgYXJnYyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgZGF0YUxvZygiWyU0ZF0gbmV3X2FycmF5X2J1ZmZlciAlcywgJWQsICVkIiwgbG9jYXRp
b24sIHJlZ2lzdGVyTmFtZShleGVjLCBkc3QpLmRhdGEoKSwgYXJndiwgYXJnYyk7CisgICAgICAg
ICAgICBkYXRhTG9nKCJbJTRkXSBuZXdfYXJyYXlfYnVmZmVyXHQgJXMsICVkLCAlZCIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgZHN0KS5kYXRhKCksIGFyZ3YsIGFyZ2MpOwogICAgICAg
ICAgICAgZHVtcEJ5dGVjb2RlQ29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTY3OSw3ICs2NzksNyBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0
ZXJhdG9yJgogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBpbnQgcmUwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBkYXRhTG9nKCJb
JTRkXSBuZXdfcmVnZXhwXHQgJXMsICIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjAp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBpZiAocjAgPj0wICYmIHIwIDwgKGludCludW1iZXJPZlJl
Z0V4cHMoKSkKKyAgICAgICAgICAgIGlmIChyMCA+PTAgJiYgcjAgPCAoaW50KW1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZlJlZ0V4cHMoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIlcyIsIHJl
Z2V4cE5hbWUocmUwLCByZWdleHAocmUwKSkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJiYWRfcmVnZXhwKCVkKSIsIHJlMCk7CkBAIC04ODksMTEg
Kzg4OSwyMiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZl
Y3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJgogICAgICAgICAgICAgaXQrKzsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxf
Y29uc3Rfbm9wOiB7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBpbml0X2dsb2JhbF9jb25z
dF9ub3BcdCIsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIGR1bXBCeXRlY29kZUNvbW1lbnRBbmRO
ZXdMaW5lKGxvY2F0aW9uKTsKKyAgICAgICAgICAgIGl0Kys7CisgICAgICAgICAgICBpdCsrOwor
ICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgICAgIGl0Kys7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0OiB7CiAgICAgICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9ICgrK2l0KS0+dS5y
ZWdpc3RlclBvaW50ZXI7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGluaXRfZ2xvYmFsX2NvbnN0XHQgZyVkKCVwKSwg
JXMiLCBsb2NhdGlvbiwgbV9nbG9iYWxPYmplY3QtPmZpbmRSZWdpc3RlckluZGV4KHJlZ2lzdGVy
UG9pbnRlciksIHJlZ2lzdGVyUG9pbnRlciwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkp
OwogICAgICAgICAgICAgZHVtcEJ5dGVjb2RlQ29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOwor
ICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgICAgIGl0Kys7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOiB7CkBA
IC0xNDMxLDkgKzE0NDIsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAg
IGR1bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yOiB7
CisgICAgICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOiB7CiAgICAgICAgICAgICBpbnQg
azAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIHRocm93
X3JlZmVyZW5jZV9lcnJvclx0ICVzIiwgbG9jYXRpb24sIGNvbnN0YW50TmFtZShleGVjLCBrMCwg
Z2V0Q29uc3RhbnQoazApKS5kYXRhKCkpOworICAgICAgICAgICAgaW50IGsxID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSB0aHJvd19zdGF0aWNfZXJyb3Jc
dCAlcywgJXMiLCBsb2NhdGlvbiwgY29uc3RhbnROYW1lKGV4ZWMsIGswLCBnZXRDb25zdGFudChr
MCkpLmRhdGEoKSwgazEgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICAgICAgICAgIGR1bXBCeXRl
Y29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0xNTMxLDkgKzE1NDMsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3Rp
Y3MoKQogICAgICAgICAgICAgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUihHRVRfU1RBVFMpCiAgICAg
ICAgICN1bmRlZiBHRVRfU1RBVFMKIAotICAgICAgICBpZiAoIWNvZGVCbG9jay0+bV9zeW1ib2xU
YWJsZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSAm
JiAhY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHN5
bWJvbFRhYmxlSXNOb3RFbXB0eSsrOwotICAgICAgICAgICAgc3ltYm9sVGFibGVUb3RhbFNpemUg
Kz0gKGNvZGVCbG9jay0+bV9zeW1ib2xUYWJsZS5jYXBhY2l0eSgpICogKHNpemVvZihTeW1ib2xU
YWJsZTo6S2V5VHlwZSkgKyBzaXplb2YoU3ltYm9sVGFibGU6Ok1hcHBlZFR5cGUpKSk7CisgICAg
ICAgICAgICBzeW1ib2xUYWJsZVRvdGFsU2l6ZSArPSAoY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jYXBhY2l0eSgpICogKHNpemVvZihTeW1ib2xUYWJsZTo6S2V5VHlwZSkgKyBzaXplb2YoU3lt
Ym9sVGFibGU6Ok1hcHBlZFR5cGUpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY29kZUJs
b2NrLT5tX3JhcmVEYXRhKSB7CkBAIC0xNjAxLDMzICsxNjEzLDI2IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKICAgICAsIG1fbnVt
Q2FsbGVlUmVnaXN0ZXJzKG90aGVyLm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQogICAgICwgbV9udW1W
YXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29u
c3RydWN0b3IpCisgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV9nbG9iYWxEYXRhLCBvdGhl
ci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCiAg
ICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV9nbG9iYWxEYXRhLCBvdGhlci5tX293bmVy
RXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBt
X2dsb2JhbERhdGEob3RoZXIubV9nbG9iYWxEYXRhKQogICAgICwgbV9pbnN0cnVjdGlvbnMob3Ro
ZXIubV9pbnN0cnVjdGlvbnMpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdp
c3RlcikKICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIob3RoZXIubV9hcmd1bWVudHNSZWdpc3Rl
cikKICAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKG90aGVyLm1fYWN0aXZhdGlvblJlZ2lzdGVy
KQotICAgICwgbV9uZWVkc0Z1bGxTY29wZUNoYWluKG90aGVyLm1fbmVlZHNGdWxsU2NvcGVDaGFp
bikKLSAgICAsIG1fdXNlc0V2YWwob3RoZXIubV91c2VzRXZhbCkKLSAgICAsIG1faXNOdW1lcmlj
Q29tcGFyZUZ1bmN0aW9uKG90aGVyLm1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKQogICAgICwg
bV9pc1N0cmljdE1vZGUob3RoZXIubV9pc1N0cmljdE1vZGUpCi0gICAgLCBtX2NvZGVUeXBlKG90
aGVyLm1fY29kZVR5cGUpCiAgICAgLCBtX3NvdXJjZShvdGhlci5tX3NvdXJjZSkKICAgICAsIG1f
c291cmNlT2Zmc2V0KG90aGVyLm1fc291cmNlT2Zmc2V0KQogI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKICAgICAsIG1fZXhlY3V0aW9uRW50cnlDb3VudCgwKQogI2VuZGlmCi0gICAgLCBtX2p1
bXBUYXJnZXRzKG90aGVyLm1fanVtcFRhcmdldHMpCi0gICAgLCBtX2xvb3BUYXJnZXRzKG90aGVy
Lm1fbG9vcFRhcmdldHMpCiAgICAgLCBtX2lkZW50aWZpZXJzKG90aGVyLm1faWRlbnRpZmllcnMp
CiAgICAgLCBtX2NvbnN0YW50UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdpc3RlcnMpCiAg
ICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9mdW5jdGlvbkRlY2xzKQogICAgICwgbV9mdW5j
dGlvbkV4cHJzKG90aGVyLm1fZnVuY3Rpb25FeHBycykKLSAgICAsIG1fc3ltYm9sVGFibGUoKm90
aGVyLm1fZ2xvYmFsRGF0YSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLnN5
bWJvbFRhYmxlKCkpCiAgICAgLCBtX29zckV4aXRDb3VudGVyKDApCiAgICAgLCBtX29wdGltaXph
dGlvbkRlbGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigw
KQotICAgICwgbV9saW5lSW5mbyhvdGhlci5tX2xpbmVJbmZvKQogICAgICwgbV9yZXNvbHZlT3Bl
cmF0aW9ucyhvdGhlci5tX3Jlc29sdmVPcGVyYXRpb25zKQogICAgICwgbV9wdXRUb0Jhc2VPcGVy
YXRpb25zKG90aGVyLm1fcHV0VG9CYXNlT3BlcmF0aW9ucykKICNpZiBFTkFCTEUoQllURUNPREVf
Q09NTUVOVFMpCkBAIC0xNjQ1LDM2ICsxNjUwLDMxIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENv
cHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKICAgICAgICAgY3JlYXRlUmFyZURh
dGFJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVycyA9IG90aGVyLm1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnM7Ci0gICAg
ICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcyA9IG90aGVyLm1fcmFyZURhdGEtPm1fcmVnZXhwczsK
ICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMgPSBvdGhlci5tX3JhcmVEYXRh
LT5tX2NvbnN0YW50QnVmZmVyczsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0
Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFi
bGVzOwogICAgICAgICBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMgPSBv
dGhlci5tX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXM7CiAgICAgICAgIG1f
cmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IG90aGVyLm1fcmFyZURhdGEtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9u
SW5mbyA9IG90aGVyLm1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm87CiAgICAgfQogfQogCi1D
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENv
ZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBi
b29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKK0Nv
ZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBiYXNlU2NvcGVEZXB0aCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRl
cj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2Rl
QmxvY2s+IGFsdGVybmF0aXZlKQogICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQogICAgICwgbV9oZWFw
KCZtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApCi0gICAgLCBtX251bUNhbGxlZVJl
Z2lzdGVycygwKQotICAgICwgbV9udW1WYXJzKDApCi0gICAgLCBtX2lzQ29uc3RydWN0b3IoaXND
b25zdHJ1Y3RvcikKLSAgICAsIG1fbnVtUGFyYW1ldGVycygwKQorICAgICwgbV9udW1DYWxsZWVS
ZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQorICAgICwg
bV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZhcnMpCisgICAgLCBtX2lzQ29uc3Ry
dWN0b3IodW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAsIG1fdW5saW5r
ZWRDb2RlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrKQogICAgICwgbV9vd25lckV4ZWN1dGFibGUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSwgb3duZXJFeGVjdXRhYmxlKQotICAgICwgbV9nbG9i
YWxEYXRhKDApCi0gICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKC0xKQotICAgICwgbV9uZWVkc0Z1
bGxTY29wZUNoYWluKG93bmVyRXhlY3V0YWJsZS0+bmVlZHNBY3RpdmF0aW9uKCkpCi0gICAgLCBt
X3VzZXNFdmFsKG93bmVyRXhlY3V0YWJsZS0+dXNlc0V2YWwoKSkKLSAgICAsIG1faXNOdW1lcmlj
Q29tcGFyZUZ1bmN0aW9uKGZhbHNlKQotICAgICwgbV9pc1N0cmljdE1vZGUob3duZXJFeGVjdXRh
YmxlLT5pc1N0cmljdE1vZGUoKSkKLSAgICAsIG1fY29kZVR5cGUoY29kZVR5cGUpCisgICAgLCBt
X2dsb2JhbERhdGEodW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbERhdGEoKSkKKyAgICAsIG1fdGhp
c1JlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSkKKyAgICAsIG1fYXJn
dW1lbnRzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpCisg
ICAgLCBtX2FjdGl2YXRpb25SZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+YWN0aXZhdGlvblJl
Z2lzdGVyKCkpCisgICAgLCBtX2lzU3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJp
Y3RNb2RlKCkpCiAgICAgLCBtX3NvdXJjZShzb3VyY2VQcm92aWRlcikKICAgICAsIG1fc291cmNl
T2Zmc2V0KHNvdXJjZU9mZnNldCkKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgLCBt
X2V4ZWN1dGlvbkVudHJ5Q291bnQoMCkKICNlbmRpZgotICAgICwgbV9zeW1ib2xUYWJsZShnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlLCBTaGFyZWRTeW1ib2xUYWJs
ZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKSkKICAgICAsIG1fYWx0ZXJuYXRp
dmUoYWx0ZXJuYXRpdmUpCiAgICAgLCBtX29zckV4aXRDb3VudGVyKDApCiAgICAgLCBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcigwKQpAQCAtMTY4Myw3ICsxNjgzLDEwIEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29k
ZVR5cGUsIEpTR2xvCiAgICAgLCBtX2J5dGVjb2RlQ29tbWVudEl0ZXJhdG9yKDApCiAjZW5kaWYK
IHsKKyAgICBtX2dsb2JhbERhdGEtPnN0YXJ0ZWRDb21waWxpbmcodGhpcyk7CisKICAgICBBU1NF
UlQobV9zb3VyY2UpOworICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSk7CiAKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgaml0QWZ0
ZXJXYXJtVXAoKTsKQEAgLTE2OTEsOSArMTY5NCwxOTkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNH
bG8KICNpZiBEVU1QX0NPREVfQkxPQ0tfU1RBVElTVElDUwogICAgIGxpdmVDb2RlQmxvY2tTZXQu
YWRkKHRoaXMpOwogI2VuZGlmCi0gICAgLy8gV2UgaGF2ZSBhIHN0dWIgcHV0VG9CYXNlIG9wZXJh
dGlvbiB0byBhbGxvdyByZXNvbHZlX2Jhc2UgdG8KLSAgICAvLyByZW1haW4gYnJhbmNobGVzcwot
ICAgIG1fcHV0VG9CYXNlT3BlcmF0aW9ucy5hcHBlbmQoUHV0VG9CYXNlT3BlcmF0aW9uKGlzU3Ry
aWN0TW9kZSgpKSk7CisgICAgc2V0SWRlbnRpZmllcnModW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXJzKCkpOworICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVycygpKTsKKworICAgIG1fZnVuY3Rpb25EZWNscy5ncm93KHVubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSk7CisgICAgZm9yIChzaXplX3QgY291
bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCksIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5s
aW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChpKTsKKyAg
ICAgICAgdW5zaWduZWQgbGluZUNvdW50ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5lQ291bnQo
KTsKKyAgICAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5saW5lTm8o
KSArIHVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCk7CisgICAgICAgIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsgdW5saW5rZWRFeGVjdXRhYmxlLT5zdGFy
dE9mZnNldCgpOworICAgICAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGggPSB1bmxpbmtlZEV4ZWN1
dGFibGUtPnNvdXJjZUxlbmd0aCgpOworICAgICAgICBTb3VyY2VDb2RlIGNvZGUobV9zb3VyY2Us
IHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lKTsKKyAg
ICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxl
OjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgY29kZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExp
bmUsIGZpcnN0TGluZSArIGxpbmVDb3VudCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNsc1tpXS5z
ZXQoKm1fZ2xvYmFsRGF0YSwgb3duZXJFeGVjdXRhYmxlLCBleGVjdXRhYmxlKTsKKyAgICB9CisK
KyAgICBtX2Z1bmN0aW9uRXhwcnMuZ3Jvdyh1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5j
dGlvbkV4cHJzKCkpOworICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2st
Pm51bWJlck9mRnVuY3Rpb25FeHBycygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAg
ICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlu
a2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSk7CisgICAgICAgIHVuc2lnbmVkIGxpbmVDb3Vu
dCA9IHVubGlua2VkRXhlY3V0YWJsZS0+bGluZUNvdW50KCk7CisgICAgICAgIHVuc2lnbmVkIGZp
cnN0TGluZSA9IG93bmVyRXhlY3V0YWJsZS0+bGluZU5vKCkgKyB1bmxpbmtlZEV4ZWN1dGFibGUt
PmZpcnN0TGluZU9mZnNldCgpOworICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJj
ZU9mZnNldCArIHVubGlua2VkRXhlY3V0YWJsZS0+c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgdW5z
aWduZWQgc291cmNlTGVuZ3RoID0gdW5saW5rZWRFeGVjdXRhYmxlLT5zb3VyY2VMZW5ndGgoKTsK
KyAgICAgICAgU291cmNlQ29kZSBjb2RlKG1fc291cmNlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZz
ZXQgKyBzb3VyY2VMZW5ndGgsIGZpcnN0TGluZSk7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEs
IGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291
bnQpOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX2dsb2JhbERhdGEsIG93bmVy
RXhlY3V0YWJsZSwgZXhlY3V0YWJsZSk7CisgICAgfQorCisgICAgaWYgKHVubGlua2VkQ29kZUJs
b2NrLT5oYXNSYXJlRGF0YSgpKSB7CisgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nhcnko
KTsKKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dEJ1ZmZlckNvdW50KCkpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZm
ZXJzLmdyb3coY291bnQpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRDb2RlQmxvY2s6OkNvbnN0
YW50QnVmZmVyJiBidWZmZXIgPSB1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIoaSk7
CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaV0gPSBidWZm
ZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9
IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKKyAgICAg
ICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuZ3Jvdyhjb3VudCk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gdW5saW5rZWRDb2RlQmxv
Y2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9l
eGNlcHRpb25IYW5kbGVyc1tpXS5zdGFydCA9IGhhbmRsZXIuc3RhcnQ7CisgICAgICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXS5lbmQgPSBoYW5kbGVyLmVuZDsK
KyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldLnRhcmdl
dCA9IGhhbmRsZXIudGFyZ2V0OworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0
aW9uSGFuZGxlcnNbaV0uc2NvcGVEZXB0aCA9IGhhbmRsZXIuc2NvcGVEZXB0aCArIGJhc2VTY29w
ZURlcHRoOworI2lmIEVOQUJMRShKSVQpICYmIEVOQUJMRShMTElOVCkKKyAgICAgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldLm5hdGl2ZUNvZGUgPSBDb2RlTG9j
YXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRk
cmVzcyhMTEludDo6Z2V0Q29kZVB0cihsbGludF9vcF9jYXRjaCkpKTsKKyNlbmRpZgorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmdyb3coY291bnQpOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRv
ciBwdHIgPSB1bmxpbmtlZENvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGkpLm9mZnNl
dFRhYmxlLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGU6
OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB1bmxpbmtlZENvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGkpLm9mZnNldFRhYmxlLmVuZCgpOworICAgICAgICAgICAgICAg
IGZvciAoOyBwdHIgIT0gZW5kOyArK3B0cikgeworICAgICAgICAgICAgICAgICAgICBPZmZzZXRM
b2NhdGlvbiBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldC5icmFuY2hPZmZzZXQg
PSBwdHItPnZhbHVlOworICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuYWRkKHB0ci0+a2V5LCBvZmZzZXQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hK
dW1wVGFibGVzKCkpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNo
SnVtcFRhYmxlcy5ncm93KGNvdW50KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiBzb3VyY2VUYWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFi
bGUoaSk7CisgICAgICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBkZXN0VGFibGUgPSBtX3Jh
cmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXNbaV07CisgICAgICAgICAgICAgICAg
ZGVzdFRhYmxlLmJyYW5jaE9mZnNldHMgPSBzb3VyY2VUYWJsZS5icmFuY2hPZmZzZXRzOworICAg
ICAgICAgICAgICAgIGRlc3RUYWJsZS5taW4gPSBzb3VyY2VUYWJsZS5taW47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mQ2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMuZ3Jvdyhjb3VudCk7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc291cmNlVGFibGUgPSB1bmxpbmtlZENv
ZGVCbG9jay0+Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKGkpOworICAgICAgICAgICAgICAgIFNp
bXBsZUp1bXBUYWJsZSYgZGVzdFRhYmxlID0gbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hK
dW1wVGFibGVzW2ldOworICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5icmFuY2hPZmZzZXRzID0g
c291cmNlVGFibGUuYnJhbmNoT2Zmc2V0czsKKyAgICAgICAgICAgICAgICBkZXN0VGFibGUubWlu
ID0gc291cmNlVGFibGUubWluOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQWxsb2NhdGUgbWV0YWRhdGEgYnVmZmVycyBmb3IgdGhlIGJ5dGVjb2RlCisgICAgaWYg
KHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mTExpbnRDYWxsTGlua0lu
Zm9zKCkpCisgICAgICAgIG1fbGxpbnRDYWxsTGlua0luZm9zLmdyb3coc2l6ZSk7CisgICAgaWYg
KHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mQXJyYXlQcm9maWxlcygp
KQorICAgICAgICBtX2FycmF5UHJvZmlsZXMuZ3JvdyhzaXplKTsKKyAgICBpZiAoc2l6ZV90IHNp
emUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkpCisgICAgICAg
IG1fdmFsdWVQcm9maWxlcy5ncm93KHNpemUpOworICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlu
a2VkQ29kZUJsb2NrLT5udW1iZXJPZlJlc29sdmVPcGVyYXRpb25zKCkpCisgICAgICAgIG1fcmVz
b2x2ZU9wZXJhdGlvbnMuZ3JvdyhzaXplKTsKKyAgICBzaXplX3QgcHV0VG9CYXNlQ291bnQgPSB1
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZQdXRUb0Jhc2VPcGVyYXRpb25zKCk7CisgICAgbV9w
dXRUb0Jhc2VPcGVyYXRpb25zLnJlc2VydmVDYXBhY2l0eShwdXRUb0Jhc2VDb3VudCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwdXRUb0Jhc2VDb3VudDsgKytpKQorICAgICAgICBtX3B1
dFRvQmFzZU9wZXJhdGlvbnMuYXBwZW5kKFB1dFRvQmFzZU9wZXJhdGlvbihpc1N0cmljdE1vZGUo
KSkpOworCisgICAgQVNTRVJUKG1fcHV0VG9CYXNlT3BlcmF0aW9ucy5jYXBhY2l0eSgpID09IHB1
dFRvQmFzZUNvdW50KTsKKworICAgIC8vIENvcHkgYW5kIHRyYW5zbGF0ZSB0aGUgVW5saW5rZWRJ
bnN0cnVjdGlvbnMKKyAgICBzaXplX3QgaW5zdHJ1Y3Rpb25Db3VudCA9IHVubGlua2VkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbiogcGMg
PSB1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuZGF0YSgpOworICAgIFZlY3RvcjxJ
bnN0cnVjdGlvbj4gaW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9uQ291bnQpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsg
KSB7CisgICAgICAgIHVuc2lnbmVkIG9wTGVuZ3RoID0gb3Bjb2RlTGVuZ3RoKHBjW2ldLnUub3Bj
b2RlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zW2ldID0gZ2xvYmFsRGF0YSgpLT5pbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlKHBjW2ldLnUub3Bjb2RlKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDE7
IGogPCBvcExlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBpZiAoc2l6ZW9mKGludDMyX3QpICE9
IHNpemVvZihpbnRwdHJfdCkpCisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51
LnBvaW50ZXIgPSAwOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51Lm9wZXJhbmQg
PSBwY1tpICsgal0udS5vcGVyYW5kOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAocGNbaV0u
dS5vcGNvZGUpIHsKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBjYXNlIG9w
X2dldF9hcmd1bWVudF9ieV92YWw6IHsKKyAgICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRl
eCA9IHBjW2kgKyBvcExlbmd0aCAtIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIG1fYXJyYXlQ
cm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7CisgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMl0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5
UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoCisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZToKKyAg
ICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV93aXRo
X2Jhc2U6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV93aXRoX3RoaXM6CisgICAgICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkOgorICAgICAgICBjYXNlIG9wX2NhbGxfcHV0X3Jlc3VsdDogeworICAgICAg
ICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gJm1fdmFsdWVQcm9maWxlc1twY1tpICsgb3BM
ZW5ndGggLSAxXS51Lm9wZXJhbmRdOworICAgICAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0
ZWNvZGVPZmZzZXQgPT0gLTEpOworICAgICAgICAgICAgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNl
dCA9IGk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSBwcm9m
aWxlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRf
YnlfdmFsOiB7CisgICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tpICsgb3BM
ZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQ
cm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyBvcExlbmd0aCAtIDFdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9ieV9p
ZF9vdXRfb2ZfbGluZToKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWlu
OgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfc2VsZjoKKyAgICAgICAgY2FzZSBv
cF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0
ZXJfY2hhaW46CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9zZWxmOgorICAgICAg
ICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX2N1c3RvbV9jaGFpbjoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAg
ICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgorICAgICAgICBjYXNlIG9wX2dldF9zdHJp
bmdfbGVuZ3RoOgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIG9wX2NhbGw6CisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAgICAgICBp
bnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tpICsgb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9m
aWxlKGkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gJm1f
YXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07CisgICAgICAgICAgICAvLyBmYWxsdGhy
b3VnaAorICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA0XSA9ICZtX2xsaW50Q2FsbExpbmtJbmZvc1twY1tpICsgNF0udS5v
cGVyYW5kXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9i
YWxfY29uc3Rfbm9wOiB7CisgICAgICAgICAgICBBU1NFUlQoY29kZVR5cGUoKSA9PSBHbG9iYWxD
b2RlKTsKKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBpZGVudGlmaWVyKHBjW2kgKyA0
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2Jh
bE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICBp
ZiAoZW50cnkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGlmIChlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyAwXSA9IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9pbml0
X2dsb2JhbF9jb25zdF9jaGVjayk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAx
XSA9ICZnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAzXSA9IGVudHJ5LmFkZHJlc3NPZklzV2F0Y2hlZCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDBdID0gZ2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2Rl
KG9wX2luaXRfZ2xvYmFsX2NvbnN0KTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMV0g
PSAmZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGkgKz0gb3BMZW5ndGg7CisgICAgfQorICAgIG1faW5zdHJ1
Y3Rpb25zID0gV1RGOjpSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+KGluc3RydWN0aW9ucyk7
CisKKyAgICBpZiAoQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQorICAg
ICAgICBkdW1wKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOworICAgIG1fZ2xvYmFsRGF0
YS0+ZmluaXNoZWRDb21waWxpbmcodGhpcyk7CiB9CiAKIENvZGVCbG9jazo6fkNvZGVCbG9jaygp
CkBAIC0xNzQ0LDE1ICsxOTM3LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMo
aW50IG5ld1ZhbHVlKQogI2VuZGlmCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjphZGRQYXJhbWV0ZXIo
KQotewotICAgIG1fbnVtUGFyYW1ldGVycysrOwotCi0jaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVS
KQotICAgIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLmFwcGVuZChWYWx1ZVByb2ZpbGUoKSk7Ci0j
ZW5kaWYKLX0KLQogdm9pZCBDb2RlQmxvY2s6OnZpc2l0U3RydWN0dXJlcyhTbG90VmlzaXRvciYg
dmlzaXRvciwgSW5zdHJ1Y3Rpb24qIHZQQykKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0
ZXIgPSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOwpAQCAtMTgzNSw2ICsyMDE5LDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIGlm
ICghIW1fYWx0ZXJuYXRpdmUpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOwogCisgICAgdmlzaXRvci5hcHBlbmQoJm1fdW5saW5rZWRDb2RlKTsKKwogICAg
IC8vIFRoZXJlIGFyZSB0aHJlZSB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0aW9uYWwgZmlu
YWxpemVyczogbGF6eSBieXRlY29kZSBmcmVlaW5nLAogICAgIC8vIGlubGluZSBjYWNoZSBjbGVh
cmluZywgYW5kIGpldHRpc29uaW5nLiBUaGUgcHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBk
byBhdAogICAgIC8vIGxlYXN0IG9uZSBvZiB0aG9zZSB0aGluZ3MgaXMgcHJvYmFibHkgcXVpdGUg
Y2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hhdApAQCAtMTk0OSw4ICsyMTM1
LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKICNpZiBFTkFC
TEUoTExJTlQpCiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRhLT5p
bnRlcnByZXRlcjsKICAgICBpZiAoISFudW1iZXJPZkluc3RydWN0aW9ucygpKSB7Ci0gICAgICAg
IGZvciAoc2l6ZV90IHNpemUgPSBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBjdXJJbnN0
cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnMoKVttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ld
XTsKKyAgICAgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnMgPSBtX3VubGlua2VkQ29kZS0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKTsKKyAg
ICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUo
KSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBjdXJJ
bnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnMoKVtwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tp
XV07CiAgICAgICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJJbnN0
cnVjdGlvblswXS51Lm9wY29kZSkpIHsKICAgICAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgog
ICAgICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CkBAIC0yMTMyLDE0ICsy
MzE5LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9iamVj
dCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKLSAgICB2aXNpdG9y
LmFwcGVuZCgmbV9zeW1ib2xUYWJsZSk7Ci0gICAgaWYgKG1fcmFyZURhdGEpIHsKKyAgICB2aXNp
dG9yLmFwcGVuZCgmbV91bmxpbmtlZENvZGUpOworICAgIGlmIChtX3JhcmVEYXRhKQogICAgICAg
ICBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGUudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0g
ICAgICAgIHNpemVfdCByZWdFeHBDb3VudCA9IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxSZWdFeHA+KiByZWdleHBzID0gbV9yYXJlRGF0YS0+bV9y
ZWdleHBzLmRhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdFeHBDb3Vu
dDsgaSsrKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQocmVnZXhwcyArIGkpOwotICAgIH0K
ICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhtX2NvbnN0YW50UmVnaXN0ZXJzLmRhdGEoKSwgbV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9m
dW5jdGlvbkV4cHJzLnNpemUoKTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9mdW5j
dGlvbkV4cHJzW2ldKTsKQEAgLTIyNjYsNjQgKzI0NDgsMTcgQEAgSGFuZGxlckluZm8qIENvZGVC
bG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQog
aW50IENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KQogewogICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygp
LnNpemUoKSk7Ci0KLSAgICBWZWN0b3I8TGluZUluZm8+JiBsaW5lSW5mbyA9IG1fbGluZUluZm87
Ci0KLSAgICBpbnQgbG93ID0gMDsKLSAgICBpbnQgaGlnaCA9IGxpbmVJbmZvLnNpemUoKTsKLSAg
ICB3aGlsZSAobG93IDwgaGlnaCkgewotICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBs
b3cpIC8gMjsKLSAgICAgICAgaWYgKGxpbmVJbmZvW21pZF0uaW5zdHJ1Y3Rpb25PZmZzZXQgPD0g
Ynl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBoaWdoID0gbWlkOwotICAgIH0KLQotICAgIGlmICghbG93KQotICAgICAg
ICByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpLmZpcnN0TGluZSgpOwotICAgIHJl
dHVybiBsaW5lSW5mb1tsb3cgLSAxXS5saW5lTnVtYmVyOworICAgIHJldHVybiBtX293bmVyRXhl
Y3V0YWJsZS0+bGluZU5vKCkgKyBtX3VubGlua2VkQ29kZS0+bGluZU51bWJlckZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmV4cHJlc3Npb25S
YW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90
LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCkKIHsKLSAgICBBU1NFUlQoYnl0ZWNv
ZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotCi0gICAgaWYgKCFtX3JhcmVEYXRh
KSB7Ci0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAg
ICAgICAgZGl2b3QgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPEV4
cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbyA9IG1fcmFyZURhdGEtPm1fZXhwcmVz
c2lvbkluZm87Ci0KLSAgICBpbnQgbG93ID0gMDsKLSAgICBpbnQgaGlnaCA9IGV4cHJlc3Npb25J
bmZvLnNpemUoKTsKLSAgICB3aGlsZSAobG93IDwgaGlnaCkgewotICAgICAgICBpbnQgbWlkID0g
bG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKLSAgICAgICAgaWYgKGV4cHJlc3Npb25JbmZvW21pZF0u
aW5zdHJ1Y3Rpb25PZmZzZXQgPD0gYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICBsb3cgPSBt
aWQgKyAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBoaWdoID0gbWlkOwotICAgIH0KLQot
ICAgIEFTU0VSVChsb3cpOwotICAgIGlmICghbG93KSB7Ci0gICAgICAgIHN0YXJ0T2Zmc2V0ID0g
MDsKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAgICAgICAgZGl2b3QgPSAwOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc3RhcnRPZmZzZXQgPSBleHByZXNzaW9uSW5mb1tsb3cgLSAx
XS5zdGFydE9mZnNldDsKLSAgICBlbmRPZmZzZXQgPSBleHByZXNzaW9uSW5mb1tsb3cgLSAxXS5l
bmRPZmZzZXQ7Ci0gICAgZGl2b3QgPSBleHByZXNzaW9uSW5mb1tsb3cgLSAxXS5kaXZvdFBvaW50
ICsgbV9zb3VyY2VPZmZzZXQ7Ci0gICAgcmV0dXJuOworICAgIG1fdW5saW5rZWRDb2RlLT5leHBy
ZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgIGRpdm90ICs9IG1fc291cmNlT2Zmc2V0OwogfQogCiB2
b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQogewotICAg
IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKICNpZiBFTkFCTEUo
TExJTlQpCiAgICAgbV9sbGludENhbGxMaW5rSW5mb3Muc2hyaW5rVG9GaXQoKTsKICNlbmRpZgpA
QCAtMjMzNSw3ICsyNDcwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01v
ZGUgc2hyaW5rTW9kZSkKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgaWYgKHNocmlu
a01vZGUgPT0gRWFybHlTaHJpbmspCiAgICAgICAgIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNo
cmlua1RvRml0KCk7Ci0gICAgbV92YWx1ZVByb2ZpbGVzLnNocmlua1RvRml0KCk7CiAgICAgbV9y
YXJlQ2FzZVByb2ZpbGVzLnNocmlua1RvRml0KCk7CiAgICAgbV9zcGVjaWFsRmFzdENhc2VQcm9m
aWxlcy5zaHJpbmtUb0ZpdCgpOwogI2VuZGlmCkBAIC0yMzQ3LDE1ICsyNDgxLDExIEBAIHZvaWQg
Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiAgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKICAgICB9IC8vIGVsc2UgZG9uJ3Qgc2hy
aW5rIHRoZXNlLCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBwb2ludGVkIHBvaW50ZXJz
IGludG8gdGhlc2UgdGFibGVzLgogCi0gICAgbV9yZXNvbHZlT3BlcmF0aW9ucy5zaHJpbmtUb0Zp
dCgpOwotICAgIG1fbGluZUluZm8uc2hyaW5rVG9GaXQoKTsKICAgICBpZiAobV9yYXJlRGF0YSkg
ewogICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0KCk7
Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaHJpbmtUb0ZpdCgpOwogICAgICAgICBt
X3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0
KCk7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtU
b0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvLnNocmlua1RvRml0
KCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgbV9yYXJlRGF0YS0+bV9jYWxsUmV0dXJuSW5k
ZXhWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKICNlbmRpZgpAQCAtMjM4Myw3ICsyNTEzLDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAg
QVNTRVJUKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKICAgICBBU1NFUlQobmVlZHNGdWxs
U2NvcGVDaGFpbigpKTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+dW5jaGVja2VkUihhY3RpdmF0
aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24g
PSBKU0FjdGl2YXRpb246OmNyZWF0ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1l
LCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkpOwor
ICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIHRoaXMpOwogICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihhY3RpdmF0aW9uUmVnaXN0ZXIoKSkgPSBKU1ZhbHVlKGFjdGl2YXRpb24pOwogICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiB9CkBAIC0yODc4LDggKzMwMDgsOCBA
QCBib29sIENvZGVCbG9jazo6dXNlc09wY29kZShPcGNvZGVJRCBvcGNvZGVJRCkKIAogU3RyaW5n
IENvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKGludCByZWdpc3Rlck51bWJlcikKIHsKLSAgICBT
eW1ib2xUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9zeW1ib2xUYWJsZS0+ZW5kKCk7Ci0gICAgZm9y
IChTeW1ib2xUYWJsZTo6aXRlcmF0b3IgcHRyID0gbV9zeW1ib2xUYWJsZS0+YmVnaW4oKTsgcHRy
ICE9IGVuZDsgKytwdHIpIHsKKyAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgZW5kID0gc3ltYm9s
VGFibGUoKS0+ZW5kKCk7CisgICAgZm9yIChTeW1ib2xUYWJsZTo6aXRlcmF0b3IgcHRyID0gc3lt
Ym9sVGFibGUoKS0+YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpIHsKICAgICAgICAgaWYgKHB0
ci0+dmFsdWUuZ2V0SW5kZXgoKSA9PSByZWdpc3Rlck51bWJlcikKICAgICAgICAgICAgIHJldHVy
biBTdHJpbmcocHRyLT5rZXkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAppbmRleCBiOGYwNDczOGIzOWI3OGVhMjBiZmE4Yjc0NmZmNDMwNGNkMDUz
YzQzLi41NTljZmM1YzdlZGM2NDViNWU2NTMzOGUxYTgzNDA2NGU1Mjc2OTNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0xMjEsNyArMTIxLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBDb2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKICAgICAgICAgCi0gICAgICAgIENvZGVC
bG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZl
KTsKKyAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rZWRDb2RlQmxvY2sqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIGJhc2VTY29wZURl
cHRoLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQ
YXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpOwogCiAgICAgICAgIFdyaXRlQmFycmll
cjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgICAgIEhlYXAqIG1faGVhcDsK
QEAgLTEzMSw3ICsxMzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGlu
dCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
ICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpOwotICAgICAgICB2b2lkIGFk
ZFBhcmFtZXRlcigpOwogICAgICAgICAKICAgICAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0
ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KQEAgLTQ0NSw4ICs0NDQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KHJldHVy
bkFkZHJlc3MpIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICAgICAgfQogCi0gICAgICAg
IHZvaWQgc2V0SXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1
bmN0aW9uKSB7IG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uID0gaXNOdW1lcmljQ29tcGFyZUZ1
bmN0aW9uOyB9Ci0gICAgICAgIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKCkgeyByZXR1
cm4gbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb247IH0KKyAgICAgICAgYm9vbCBpc051bWVyaWND
b21wYXJlRnVuY3Rpb24oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aXNOdW1lcmljQ29tcGFy
ZUZ1bmN0aW9uKCk7IH0KIAogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQogICAgICAgICBSZWZDb3Vu
dGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0
aW9uczsgfQpAQCAtNTM1LDEwICs1MzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBzZXRUaGlzUmVnaXN0ZXIoaW50IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRo
aXNSZWdpc3RlcjsgfQogICAgICAgICBpbnQgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4g
bV90aGlzUmVnaXN0ZXI7IH0KIAotICAgICAgICB2b2lkIHNldE5lZWRzRnVsbFNjb3BlQ2hhaW4o
Ym9vbCBuZWVkc0Z1bGxTY29wZUNoYWluKSB7IG1fbmVlZHNGdWxsU2NvcGVDaGFpbiA9IG5lZWRz
RnVsbFNjb3BlQ2hhaW47IH0KLSAgICAgICAgYm9vbCBuZWVkc0Z1bGxTY29wZUNoYWluKCkgY29u
c3QgeyByZXR1cm4gbV9uZWVkc0Z1bGxTY29wZUNoYWluOyB9Ci0gICAgICAgIHZvaWQgc2V0VXNl
c0V2YWwoYm9vbCB1c2VzRXZhbCkgeyBtX3VzZXNFdmFsID0gdXNlc0V2YWw7IH0KLSAgICAgICAg
Ym9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0V2YWw7IH0KKyAgICAgICAgYm9v
bCBuZWVkc0Z1bGxTY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4oKTsgfQorICAgICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPnVzZXNFdmFsKCk7IH0KICAgICAgICAgCiAgICAgICAgIHZv
aWQgc2V0QXJndW1lbnRzUmVnaXN0ZXIoaW50IGFyZ3VtZW50c1JlZ2lzdGVyKQogICAgICAgICB7
CkBAIC02MDAsMzcgKzU5NiwyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmICh1
c2VzQXJndW1lbnRzKCkgJiYgb3BlcmFuZCA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIo
YXJndW1lbnRzUmVnaXN0ZXIoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYW5kID49IG1fc3ltYm9sVGFibGUtPmNhcHR1cmVTdGFydCgp
IAotICAgICAgICAgICAgICAgICYmIG9wZXJhbmQgPCBtX3N5bWJvbFRhYmxlLT5jYXB0dXJlRW5k
KCk7CisgICAgICAgICAgICAvLyBXZSdyZSBpbiBnbG9iYWwgY29kZSBzbyB0aGVyZSBhcmUgbm8g
bG9jYWxzIHRvIGNhcHR1cmUKKyAgICAgICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kID49
IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpCisgICAgICAgICAgICAgICAgJiYgb3BlcmFu
ZCA8IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKTsKICAgICAgICAgfQogCi0gICAgICAgIENv
ZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQorICAgICAgICBD
b2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb2RlVHlw
ZSgpOyB9CiAKICAgICAgICAgU291cmNlUHJvdmlkZXIqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlLmdldCgpOyB9CiAgICAgICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlT2Zmc2V0OyB9CiAKLSAgICAgICAgc2l6ZV90IG51bWJlck9mSnVt
cFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLnNpemUoKTsgfQotICAgICAg
ICB2b2lkIGFkZEp1bXBUYXJnZXQodW5zaWduZWQganVtcFRhcmdldCkgeyBtX2p1bXBUYXJnZXRz
LmFwcGVuZChqdW1wVGFyZ2V0KTsgfQotICAgICAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0KGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tpbmRleF07IH0KLSAgICAgICAgdW5z
aWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLmxhc3Qo
KTsgfQorICAgICAgICBzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkp1bXBUYXJnZXRzKCk7IH0KKyAgICAgICAgdW5zaWdu
ZWQganVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5q
dW1wVGFyZ2V0KGluZGV4KTsgfQogCiAgICAgICAgIHZvaWQgY3JlYXRlQWN0aXZhdGlvbihDYWxs
RnJhbWUqKTsKIAogICAgICAgICB2b2lkIGNsZWFyRXZhbENhY2hlKCk7CiAgICAgICAgIAogICAg
ICAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKGludCByZWdpc3Rlck51bWJlcik7Ci0gICAgICAg
IAotICAgICAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24odW5zaWduZWQgcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgbV9wcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9ucy5hcHBlbmQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbik7Ci0g
ICAgICAgIH0KLSNpZiBFTkFCTEUoTExJTlQpCi0gICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBh
ZGRMTEludENhbGxMaW5rSW5mbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbGxpbnRDYWxs
TGlua0luZm9zLmFwcGVuZChMTEludENhbGxMaW5rSW5mbygpKTsKLSAgICAgICAgICAgIHJldHVy
biAmbV9sbGludENhbGxMaW5rSW5mb3MubGFzdCgpOwotICAgICAgICB9Ci0jZW5kaWYKKwogI2lm
IEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Mo
c2l6ZV90IHNpemUpIHsgbV9zdHJ1Y3R1cmVTdHViSW5mb3MuZ3JvdyhzaXplKTsgfQogICAgICAg
ICBzaXplX3QgbnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MoKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZVN0dWJJbmZvcy5zaXplKCk7IH0KQEAgLTY2MiwxNCArNjQ5LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0x
KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFZhbHVlUHJvZmlsZSogYWRkVmFsdWVQcm9maWxlKGludCBieXRlY29kZU9mZnNldCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0ICE9IC0xKTsKLSAgICAg
ICAgICAgIEFTU0VSVChtX3ZhbHVlUHJvZmlsZXMuaXNFbXB0eSgpIHx8IG1fdmFsdWVQcm9maWxl
cy5sYXN0KCkubV9ieXRlY29kZU9mZnNldCA8IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAg
IG1fdmFsdWVQcm9maWxlcy5hcHBlbmQoVmFsdWVQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICByZXR1cm4gJm1fdmFsdWVQcm9maWxlcy5sYXN0KCk7Ci0gICAgICAgIH0KKwog
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVl
UHJvZmlsZXMuc2l6ZSgpOyB9CiAgICAgICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlKGlu
dCBpbmRleCkKICAgICAgICAgewpAQCAtNzk1LDI1ICs3NzUsMjQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CiAKICAgICAgICAgc2l6ZV90
IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8g
bV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkgOiAwOyB9Ci0gICAgICAgIHZv
aWQgYWRkRXhjZXB0aW9uSGFuZGxlcihjb25zdCBIYW5kbGVySW5mbyYgaGFubGVyKSB7IGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFu
ZGxlcnMuYXBwZW5kKGhhbmxlcik7IH0KLSAgICAgICAgSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhh
bmRsZXIoaW50IGluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEt
Pm1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9Ci0KLSAgICAgICAgdm9pZCBhZGRFeHByZXNz
aW9uSW5mbyhjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvJiBleHByZXNzaW9uSW5mbykKKyAgICAg
ICAgdm9pZCBhbGxvY2F0ZUhhbmRsZXJzKGNvbnN0IFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZv
PiYgdW5saW5rZWRIYW5kbGVycykKICAgICAgICAgeworICAgICAgICAgICAgc2l6ZV90IGNvdW50
ID0gdW5saW5rZWRIYW5kbGVycy5zaXplKCk7CisgICAgICAgICAgICBpZiAoIWNvdW50KQorICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nh
cnkoKTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm8uYXBwZW5kKGV4
cHJlc3Npb25JbmZvKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYWRkTGluZUluZm8odW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCBsaW5lTm8pCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFZlY3RvcjxMaW5lSW5mbz4mIGxpbmVJbmZvID0gbV9saW5lSW5mbzsKLSAgICAgICAgICAgIGlm
ICghbGluZUluZm8uc2l6ZSgpIHx8IGxpbmVJbmZvLmxhc3QoKS5saW5lTnVtYmVyICE9IGxpbmVO
bykgewotICAgICAgICAgICAgICAgIExpbmVJbmZvIGluZm8gPSB7IGJ5dGVjb2RlT2Zmc2V0LCBs
aW5lTm8gfTsKLSAgICAgICAgICAgICAgICBsaW5lSW5mby5hcHBlbmQoaW5mbyk7CisgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZShjb3VudCk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldLnN0YXJ0ID0gdW5saW5rZWRI
YW5kbGVyc1tpXS5zdGFydDsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzW2ldLmVuZCA9IHVubGlua2VkSGFuZGxlcnNbaV0uZW5kOworICAgICAgICAgICAg
ICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0udGFyZ2V0ID0gdW5saW5rZWRI
YW5kbGVyc1tpXS50YXJnZXQ7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVyc1tpXS5zY29wZURlcHRoID0gdW5saW5rZWRIYW5kbGVyc1tpXS5zY29wZURlcHRo
OwogICAgICAgICAgICAgfQorCiAgICAgICAgIH0KKyAgICAgICAgSGFuZGxlckluZm8mIGV4Y2Vw
dGlvbkhhbmRsZXIoaW50IGluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9CiAKLSAgICAgICAgYm9vbCBoYXNF
eHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fcmFyZURhdGEgJiYgbV9yYXJlRGF0YS0+bV9leHBy
ZXNzaW9uSW5mby5zaXplKCk7IH0KKyAgICAgICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNFeHByZXNzaW9uSW5mbygpOyB9CiAKICNpZiBFTkFC
TEUoSklUKQogICAgICAgICBWZWN0b3I8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQ+
JiBjYWxsUmV0dXJuSW5kZXhWZWN0b3IoKQpAQCAtODg4LDYgKzg2Nyw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KG1fZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCksIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCB2KTsKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KKworCiAgICAgICAgIHVuc2lnbmVkIGFk
ZE9yRmluZENvbnN0YW50KEpTVmFsdWUpOwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJz
W2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CiAgICAgICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CkBAIC05MTEsMjAgKzg5
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzW2lu
ZGV4XS5nZXQoKTsgfQogCi0gICAgICAgIHVuc2lnbmVkIGFkZFJlZ0V4cChSZWdFeHAqIHIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOwotICAg
ICAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLmFwcGVuZChXcml0ZUJhcnJpZXI8UmVnRXhw
PigqbV9nbG9iYWxEYXRhLCBvd25lckV4ZWN1dGFibGUoKSwgcikpOwotICAgICAgICAgICAgcmV0
dXJuIHNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdFeHBzKCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhw
cy5zaXplKCk7Ci0gICAgICAgIH0KLSAgICAgICAgUmVnRXhwKiByZWdleHAoaW50IGluZGV4KSBj
b25zdCB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwc1tp
bmRleF0uZ2V0KCk7IH0KKyAgICAgICAgUmVnRXhwKiByZWdleHAoaW50IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+cmVnZXhwKGluZGV4KTsgfQogCiAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkgY29uc3QKICAgICAgICAgewpAQCAtOTM5LDEw
ICs5MDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fY29u
c3RhbnRCdWZmZXJzLmFwcGVuZChidWZmZXIpOwogICAgICAgICAgICAgcmV0dXJuIHNpemU7CiAg
ICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnRCdWZmZXIodW5zaWduZWQgbGVu
Z3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRkQ29uc3RhbnRCdWZmZXIoVmVj
dG9yPEpTVmFsdWU+KGxlbmd0aCkpOwotICAgICAgICB9CiAKICAgICAgICAgVmVjdG9yPEpTVmFs
dWU+JiBjb25zdGFudEJ1ZmZlckFzVmVjdG9yKHVuc2lnbmVkIGluZGV4KQogICAgICAgICB7CkBA
IC05NzksNyArOTQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJs
ZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVE
YXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsgfQogCiAKLSAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgeyBy
ZXR1cm4gbV9zeW1ib2xUYWJsZS5nZXQoKTsgfQorICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+c3ltYm9sVGFibGUo
KTsgfQogCiAgICAgICAgIEV2YWxDb2RlQ2FjaGUmIGV2YWxDb2RlQ2FjaGUoKSB7IGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZTsg
fQogCkBAIC0xMjIzLDYgKzExODcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVh
bCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7CiAKKyAgICAgICAgVW5saW5rZWRDb2Rl
QmxvY2sqIHVubGlua2VkQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUu
Z2V0KCk7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBERkdDb2RlQmxv
Y2tzOwogICAgICAgICAKQEAgLTEyMzQsNyArMTIwMCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlv
bnNBbmRDb3VudExpdmVuZXNzKE9wZXJhdGlvbkluUHJvZ3Jlc3MsIHVuc2lnbmVkJiBudW1iZXJP
ZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzKTsKICNlbmRpZgotICAgICAgICAKKworICAgICAgICB2b2lkIHNldElkZW50aWZp
ZXJzKGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRpZmllcnMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChtX2lkZW50aWZpZXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBt
X2lkZW50aWZpZXJzLmFwcGVuZFZlY3RvcihpZGVudGlmaWVycyk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4gPiYgY29uc3RhbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgY291
bnQgPSBjb25zdGFudHMuc2l6ZSgpOworICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5y
ZXNpemUoY291bnQpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgICAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KCptX2dsb2Jh
bERhdGEsIG93bmVyRXhlY3V0YWJsZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOworICAgICAgICB9
CisKICAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSosIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlv
bj46OmNvbnN0X2l0ZXJhdG9yJiBiZWdpbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRl
cmF0b3ImKTsKIAogICAgICAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShFeGVjU3RhdGUqLCBpbnQg
cikgY29uc3Q7CkBAIC0xMjg0LDI5ICsxMjY0LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVO
QUJMRShKSVQpCiAgICAgICAgIHZvaWQgcmVzZXRTdHViSW50ZXJuYWwoUmVwYXRjaEJ1ZmZlciYs
IFN0cnVjdHVyZVN0dWJJbmZvJik7CiAjZW5kaWYKLSAgICAgICAgCisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmxpbmtlZENvZGVCbG9jaz4gbV91bmxpbmtlZENvZGU7CiAgICAgICAgIGludCBtX251
bVBhcmFtZXRlcnM7Ci0KICAgICAgICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFibGU+IG1f
b3duZXJFeGVjdXRhYmxlOwogICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKIAog
ICAgICAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwotCiAg
ICAgICAgIGludCBtX3RoaXNSZWdpc3RlcjsKICAgICAgICAgaW50IG1fYXJndW1lbnRzUmVnaXN0
ZXI7CiAgICAgICAgIGludCBtX2FjdGl2YXRpb25SZWdpc3RlcjsKIAotICAgICAgICBib29sIG1f
bmVlZHNGdWxsU2NvcGVDaGFpbjsKLSAgICAgICAgYm9vbCBtX3VzZXNFdmFsOwotICAgICAgICBi
b29sIG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uOwogICAgICAgICBib29sIG1faXNTdHJpY3RN
b2RlOwogCi0gICAgICAgIENvZGVUeXBlIG1fY29kZVR5cGU7Ci0KICAgICAgICAgUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBtX3NvdXJjZTsKICAgICAgICAgdW5zaWduZWQgbV9zb3VyY2VPZmZzZXQ7
CiAKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
OwogI2lmIEVOQUJMRShMTElOVCkKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPExMSW50Q2FsbExp
bmtJbmZvLCA4PiBtX2xsaW50Q2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRM
aXN0PExMSW50Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMTEludENhbGxMaW5r
SW5mbz4gPiBtX2luY29taW5nTExJbnRDYWxsczsKQEAgLTEzNzgsMTggKzEzNTAsMTUgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fZXhlY3V0aW9uRW50cnlDb3VudDsKICNl
bmRpZgogCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9qdW1wVGFyZ2V0czsKLSAgICAgICAg
VmVjdG9yPHVuc2lnbmVkPiBtX2xvb3BUYXJnZXRzOwotCiAgICAgICAgIC8vIENvbnN0YW50IFBv
b2wKICAgICAgICAgVmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CiAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihSZWdpc3RlcikgPT0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPiksIFJlZ2lzdGVyX211c3RfYmVfc2FtZV9zaXplX2FzX1dyaXRlQmFycmllcl9Vbmtub3du
KTsKKyAgICAgICAgLy8gVE9ETzogVGhpcyBjb3VsZCBqdXN0IGJlIGEgcG9pbnRlciB0byBtX3Vu
bGlua2VkQ29kZUJsb2NrJ3MgZGF0YSwgYnV0IHRoZSBERkcgbXV0YXRlcworICAgICAgICAvLyBp
dCwgc28gd2UncmUgc3R1Y2sgd2l0aCBpdCBmb3Igbm93LgogICAgICAgICBWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+ID4gbV9jb25zdGFudFJlZ2lzdGVyczsKICAgICAgICAgVmVjdG9yPFdy
aXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+ID4gbV9mdW5jdGlvbkRlY2xzOwogICAgICAg
ICBWZWN0b3I8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gPiBtX2Z1bmN0aW9uRXhw
cnM7CiAKLSAgICAgICAgV3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRh
YmxlOwotCiAgICAgICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgICAg
IAogICAgICAgICBFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKQEAgLTE0
MDAsMTEgKzEzNjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdWludDE2X3QgbV9vcHRp
bWl6YXRpb25EZWxheUNvdW50ZXI7CiAgICAgICAgIHVpbnQxNl90IG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXI7CiAKLSAgICAgICAgVmVjdG9yPExpbmVJbmZvPiBtX2xpbmVJbmZvOwotI2lm
IEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKLSAgICAgICAgVmVjdG9yPENvbW1lbnQ+ICBtX2J5
dGVjb2RlQ29tbWVudHM7Ci0gICAgICAgIHNpemVfdCBtX2J5dGVjb2RlQ29tbWVudEl0ZXJhdG9y
OwotI2VuZGlmCiAgICAgICAgIFZlY3RvcjxSZXNvbHZlT3BlcmF0aW9ucz4gbV9yZXNvbHZlT3Bl
cmF0aW9uczsKICAgICAgICAgVmVjdG9yPFB1dFRvQmFzZU9wZXJhdGlvbiwgMT4gbV9wdXRUb0Jh
c2VPcGVyYXRpb25zOwogCkBAIC0xNDEzLDkgKzEzNzcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgcHVibGljOgogICAgICAgICAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlv
bkhhbmRsZXJzOwogCi0gICAgICAgICAgICAvLyBSYXJlIENvbnN0YW50cwotICAgICAgICAgICAg
VmVjdG9yPFdyaXRlQmFycmllcjxSZWdFeHA+ID4gbV9yZWdleHBzOwotCiAgICAgICAgICAgICAv
LyBCdWZmZXJzIHVzZWQgZm9yIGxhcmdlIGFycmF5IGxpdGVyYWxzCiAgICAgICAgICAgICBWZWN0
b3I8VmVjdG9yPEpTVmFsdWU+ID4gbV9jb25zdGFudEJ1ZmZlcnM7CiAgICAgICAgICAgICAKQEAg
LTE0MjYsOSArMTM4Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgICAgICBFdmFsQ29k
ZUNhY2hlIG1fZXZhbENvZGVDYWNoZTsKIAotICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiBpbmZv
IC0gcHJlc2VudCBpZiBkZWJ1Z2dpbmcuCi0gICAgICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblJh
bmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKLSAgICAgICAgICAgIC8vIExpbmUgaW5mbyAtIHBy
ZXNlbnQgaWYgcHJvZmlsaW5nIG9yIGRlYnVnZ2luZy4KICNpZiBFTkFCTEUoSklUKQogICAgICAg
ICAgICAgVmVjdG9yPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0PiBtX2NhbGxSZXR1
cm5JbmRleFZlY3RvcjsKICNlbmRpZgpAQCAtMTQ1Niw4ICsxNDE0LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgR2xvYmFsQ29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFBhc3NPd25QdHI8Q29kZUJs
b2NrPiBhbHRlcm5hdGl2ZSkKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJs
ZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwg
ZmFsc2UsIGFsdGVybmF0aXZlKQorICAgICAgICBHbG9iYWxDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxv
Y2ssIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGJhc2VTY29wZURlcHRo
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291
cmNlT2Zmc2V0LCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAg
ICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIGJhc2VTY29wZURlcHRoLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBhbHRl
cm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgfTsKQEAgLTE0NjksMTEgKzE0Mjcs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIFBy
b2dyYW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5
cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJu
YXRpdmUpCi0gICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNv
ZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKKyAg
ICAgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92
aWRlciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAgOiBH
bG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgZ2xvYmFs
T2JqZWN0LCAwLCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAg
ICAgICAgfQotICAgICAgICAKKwogI2lmIEVOQUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgogICAg
ICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2Nv
cGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKQEAgLTE0ODgsMjYgKzE0NDYsMTYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBFdmFsQ29kZUJsb2NrKENvcHlQYXJz
ZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCiAgICAgICAgICAgICA6IEdsb2JhbENv
ZGVCbG9jayhDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VTY29w
ZURlcHRoKG90aGVyLm1fYmFzZVNjb3BlRGVwdGgpCi0gICAgICAgICAgICAsIG1fdmFyaWFibGVz
KG90aGVyLm1fdmFyaWFibGVzKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
UHJvdmlkZXIsIGludCBiYXNlU2NvcGVEZXB0aCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVy
bmF0aXZlKQotICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBF
dmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCi0g
ICAgICAgICAgICAsIG1fYmFzZVNjb3BlRGVwdGgoYmFzZVNjb3BlRGVwdGgpCisgICAgICAgIEV2
YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFs
Q29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIGludCBiYXNlU2Nv
cGVEZXB0aCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAg
OiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgZ2xv
YmFsT2JqZWN0LCBiYXNlU2NvcGVEZXB0aCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZl
KQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgYmFzZVNjb3BlRGVwdGgoKSBj
b25zdCB7IHJldHVybiBtX2Jhc2VTY29wZURlcHRoOyB9Ci0KLSAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgdmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFyaWFibGVzW2luZGV4
XTsgfQotICAgICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiBtX3ZhcmlhYmxl
cy5zaXplKCk7IH0KLSAgICAgICAgdm9pZCBhZG9wdFZhcmlhYmxlcyhWZWN0b3I8SWRlbnRpZmll
cj4mIHZhcmlhYmxlcykKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdmFyaWFibGVz
LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBtX3ZhcmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7Ci0g
ICAgICAgIH0KKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgdmFyaWFibGUodW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIHVubGlua2VkRXZhbENvZGVCbG9jaygpLT52YXJpYWJsZShpbmRleCk7IH0K
KyAgICAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29k
ZUJsb2NrKCktPm51bVZhcmlhYmxlcygpOyB9CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgpAQCAtMTUxOSw4ICsxNDY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5k
aWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGludCBtX2Jhc2VTY29wZURlcHRoOwotICAgICAg
ICBWZWN0b3I8SWRlbnRpZmllcj4gbV92YXJpYWJsZXM7CisgICAgICAgIFVubGlua2VkRXZhbENv
ZGVCbG9jayogdW5saW5rZWRFdmFsQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4ganNDYXN0PFVu
bGlua2VkRXZhbENvZGVCbG9jayo+KHVubGlua2VkQ29kZUJsb2NrKCkpOyB9CiAgICAgfTsKIAog
ICAgIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CkBAIC0xNTMw
LDggKzE0NzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAg
ICAgICAgRnVuY3Rpb25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zm
c2V0LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2
ZSA9IG51bGxwdHIpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNv
ZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGlzQ29u
c3RydWN0b3IsIGFsdGVybmF0aXZlKQorICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlv
bkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQs
IFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSA9IG51bGxwdHIpCisgICAgICAgICAg
ICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIDAsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGFsdGVybmF0aXZlKQogICAg
ICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3Bjb2RlLmgKaW5kZXggM2NlNTZjODBlZWViMGJiMTYzODY1M2JlMjk0NTljYzQyYzI0NjNhYi4u
NDQ3MzY1MTVmYTFiNWQyMmRjZWJmZjFiMDZhNTlmMjMyZGI4MmEzNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMTE4LDcgKzExOCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBtYWNybyhvcF9wdXRfdG9fYmFzZSwgNSkgXAogICAgICAgICBtYWNybyhv
cF9wdXRfdG9fYmFzZV92YXJpYWJsZSwgNSkgXAogICAgICAgICBcCi0gICAgICAgIG1hY3JvKG9w
X2luaXRfZ2xvYmFsX2NvbnN0LCAzKSBcCisgICAgICAgIG1hY3JvKG9wX2luaXRfZ2xvYmFsX2Nv
bnN0X25vcCwgNSkgXAorICAgICAgICBtYWNybyhvcF9pbml0X2dsb2JhbF9jb25zdCwgNSkgXAog
ICAgICAgICBtYWNybyhvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjaywgNSkgXAogICAgICAgICBt
YWNybyhvcF9nZXRfYnlfaWQsIDkpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAogICAgICAg
ICBtYWNybyhvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmUsIDkpIC8qIGhhcyB2YWx1ZSBwcm9maWxp
bmcgKi8gXApAQCAtMjA1LDcgKzIwNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBcCiAg
ICAgICAgIG1hY3JvKG9wX2NhdGNoLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX3Rocm93LCAyKSBc
Ci0gICAgICAgIG1hY3JvKG9wX3Rocm93X3JlZmVyZW5jZV9lcnJvciwgMikgXAorICAgICAgICBt
YWNybyhvcF90aHJvd19zdGF0aWNfZXJyb3IsIDMpIFwKICAgICAgICAgXAogICAgICAgICBtYWNy
byhvcF9kZWJ1ZywgNSkgXAogICAgICAgICBtYWNybyhvcF9wcm9maWxlX3dpbGxfY2FsbCwgMikg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFhNDg0MDRhY2FjN2FmMWY0ZTAyNDFhOWUzNTRkMDhmOGEw
NmFmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3Iu
aCIKKyNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKKyNpbmNs
dWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJTb3Vy
Y2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgIlN5bWJvbFRh
YmxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlIiwg
MCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSkg
fTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5r
ZWRDb2RlQmxvY2siLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkQ29kZUJs
b2NrKSB9OworY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpzX2luZm8g
PSB7ICJVbmxpbmtlZEdsb2JhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoVW5saW5rZWRHbG9iYWxDb2RlQmxvY2spIH07Citjb25zdCBDbGFzc0lu
Zm8gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jaykgfTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkRXZhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8s
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRFdmFsQ29kZUJsb2NrKSB9OworY29u
c3QgQ2xhc3NJbmZvIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spIH07CisKK3Vuc2lnbmVkIFVubGlua2Vk
Q29kZUJsb2NrOjphZGRPckZpbmRDb25zdGFudChKU1ZhbHVlIHYpCit7CisgICAgdW5zaWduZWQg
bnVtYmVyT2ZDb25zdGFudHMgPSBudW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ29uc3RhbnRzOyArK2kpIHsKKyAgICAgICAg
aWYgKGdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgaSkgPT0gdikKKyAg
ICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gYWRkQ29uc3RhbnQodik7Cit9
CisKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpCisgICAgOiBCYXNlKCpn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgLCBtX251bUNhcHR1cmVkVmFyaWFibGVzKG5vZGUt
PmNhcHR1cmVkVmFyaWFibGVDb3VudCgpKQorICAgICwgbV9mb3JjZVVzZXNBcmd1bWVudHMobm9k
ZS0+dXNlc0FyZ3VtZW50cygpKQorICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChub2RlLT5pc1N0
cmljdE1vZGUoKSkKKyAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMobm9kZS0+aGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSkKKyAgICAsIG1fbmFtZShub2RlLT5pZGVudCgpKQorICAgICwgbV9pbmZl
cnJlZE5hbWUobm9kZS0+aW5mZXJyZWROYW1lKCkpCisgICAgLCBtX3BhcmFtZXRlcnMobm9kZS0+
cGFyYW1ldGVycygpKQorICAgICwgbV9maXJzdExpbmVPZmZzZXQobm9kZS0+Zmlyc3RMaW5lKCkg
LSBzb3VyY2UuZmlyc3RMaW5lKCkpCisgICAgLCBtX2xpbmVDb3VudChub2RlLT5sYXN0TGluZSgp
IC0gbm9kZS0+Zmlyc3RMaW5lKCkpCisgICAgLCBtX3N0YXJ0T2Zmc2V0KG5vZGUtPnNvdXJjZSgp
LnN0YXJ0T2Zmc2V0KCkgLSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSkKKyAgICAsIG1fc291cmNlTGVu
Z3RoKG5vZGUtPnNvdXJjZSgpLmxlbmd0aCgpKQorICAgICwgbV9mZWF0dXJlcyhub2RlLT5mZWF0
dXJlcygpKQorICAgICwgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUobm9kZS0+ZnVuY3Rp
b25OYW1lSXNJblNjb3BlVG9nZ2xlKCkpCit7Cit9CisKK3ZvaWQgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQ09NUElMRV9BU1NFUlQoU3Ry
dWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxk
cmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJl
KCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fbmFtZVZhbHVlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9z
eW1ib2xUYWJsZUZvckNhbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N5
bWJvbFRhYmxlRm9yQ29uc3RydWN0KTsKK30KKworRnVuY3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGluayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgc2l6ZV90IGxpbmVPZmZzZXQsIHNpemVfdCBzb3VyY2VPZmZz
ZXQpCit7CisgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gbGluZU9mZnNldCArIG1fZmlyc3RMaW5l
T2Zmc2V0OworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsgbV9zdGFy
dE9mZnNldDsKKyAgICBTb3VyY2VDb2RlIGNvZGUoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zm
c2V0LCBzdGFydE9mZnNldCArIG1fc291cmNlTGVuZ3RoLCBmaXJzdExpbmUpOworICAgIHJldHVy
biBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhLCBjb2RlLCB0aGlzLCBmaXJz
dExpbmUsIGZpcnN0TGluZSArIG1fbGluZUNvdW50KTsKK30KKworVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZShjb25z
dCBJZGVudGlmaWVyJiBuYW1lLCBFeGVjU3RhdGUqIGV4ZWMsIERlYnVnZ2VyKiwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikKK3sKKyAgICBQYXJzZXJFcnJv
ciBlcnJvcjsKKyAgICBDb2RlQ2FjaGUqIGNvZGVDYWNoZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5j
b2RlQ2FjaGUoKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IGNvZGVDYWNoZS0+Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBuYW1lLCBzb3VyY2UsIGVycm9yKTsKKyAgICBpZiAoZXJyb3IubV90eXBlICE9
IFBhcnNlckVycm9yOjpFcnJvck5vbmUpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGVycm9yLnRv
RXJyb3JPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzb3VyY2UpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gZXhlY3V0YWJsZTsKK30KKworVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNvZGVCbG9j
a0ZvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJv
cikKK3sKKyAgICBzd2l0Y2ggKHNwZWNpYWxpemF0aW9uS2luZCkgeworICAgIGNhc2UgQ29kZUZv
ckNhbGw6CisgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwpCisgICAgICAgICAgICByZXR1
cm4gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENv
ZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkKKyAg
ICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0g
Z2xvYmFsRGF0YS5jb2RlQ2FjaGUoKS0+Z2V0RnVuY3Rpb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwg
dGhpcywgc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJN
b2RlLCBlcnJvcik7CisgICAgCisgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6
RXJyb3JOb25lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHN3aXRjaCAoc3BlY2lhbGl6YXRp
b25LaW5kKSB7CisgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JD
YWxsLnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1bHQpOworICAgICAgICBtX3N5bWJvbFRhYmxl
Rm9yQ2FsbC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0LT5zeW1ib2xUYWJsZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0KTsKKyAgICAgICAg
bV9zeW1ib2xUYWJsZUZvckNvbnN0cnVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0LT5z
eW1ib2xUYWJsZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1N0cmluZyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJpbmcoKSBj
b25zdAoreworICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICptX3BhcmFtZXRl
cnM7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoc2l6ZV90IHBvcyA9IDA7
IHBvcyA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK3BvcykgeworICAgICAgICBpZiAoIWJ1aWxkZXIu
aXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZChwYXJhbWV0ZXJzW3Bvc10uc3RyaW5nKCkpOworICAgIH0KKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAg
IDogQmFzZSgqZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgICwgbV9udW1WYXJzKDApCisgICAg
LCBtX251bUNhbGxlZVJlZ2lzdGVycygwKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKDApCisgICAg
LCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIoLTEp
CisgICAgLCBtX25lZWRzRnVsbFNjb3BlQ2hhaW4oaW5mby5tX25lZWRzQWN0aXZhdGlvbikKKyAg
ICAsIG1fdXNlc0V2YWwoaW5mby5tX3VzZXNFdmFsKQorICAgICwgbV9pc051bWVyaWNDb21wYXJl
RnVuY3Rpb24oZmFsc2UpCisgICAgLCBtX2lzU3RyaWN0TW9kZShpbmZvLm1faXNTdHJpY3RNb2Rl
KQorICAgICwgbV9pc0NvbnN0cnVjdG9yKGluZm8ubV9pc0NvbnN0cnVjdG9yKQorICAgICwgbV9o
YXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKKyAgICAsIG1fZmlyc3RMaW5lKDApCisgICAgLCBt
X2xpbmVDb3VudCgwKQorICAgICwgbV9mZWF0dXJlcygwKQorICAgICwgbV9jb2RlVHlwZShjb2Rl
VHlwZSkKKyAgICAsIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50KDApCisgICAgLCBtX3B1dFRvQmFz
ZU9wZXJhdGlvbkNvdW50KDEpCisgICAgLCBtX2FycmF5UHJvZmlsZUNvdW50KDApCisgICAgLCBt
X3ZhbHVlUHJvZmlsZUNvdW50KDApCisgICAgLCBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQoMCkK
KyNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCisgICAgLCBtX2J5dGVjb2RlQ29tbWVudEl0
ZXJhdG9yKDApCisjZW5kaWYKK3sKKworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVW5s
aW5rZWRDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihj
ZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8p
OworICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNT
RVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
KyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CisgICAgZm9y
IChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1f
ZnVuY3Rpb25EZWNscy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMu
ZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQorICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOwor
ICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2Jq
ZWN0LT5tX2Z1bmN0aW9uRXhwcnMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlv
bkV4cHJzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKKyAgICAgICAgdmlzaXRvci5hcHBlbmQo
cHRyKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVn
aXN0ZXJzLmRhdGEoKSwgdGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOyBpICE9
IGVuZDsgaSsrKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmFy
ZURhdGEtPm1fcmVnZXhwc1tpXSk7CisgICAgfQorfQorCitpbnQgVW5saW5rZWRDb2RlQmxvY2s6
OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sK
KyAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAg
IFZlY3RvcjxMaW5lSW5mbz4mIGxpbmVJbmZvID0gbV9saW5lSW5mbzsKKyAgICAKKyAgICBpbnQg
bG93ID0gMDsKKyAgICBpbnQgaGlnaCA9IGxpbmVJbmZvLnNpemUoKTsKKyAgICB3aGlsZSAobG93
IDwgaGlnaCkgeworICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKKyAg
ICAgICAgaWYgKGxpbmVJbmZvW21pZF0uaW5zdHJ1Y3Rpb25PZmZzZXQgPD0gYnl0ZWNvZGVPZmZz
ZXQpCisgICAgICAgICAgICBsb3cgPSBtaWQgKyAxOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBoaWdoID0gbWlkOworICAgIH0KKyAgICAKKyAgICBpZiAoIWxvdykKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGxpbmVJbmZvW2xvdyAtIDFdLmxpbmVOdW1iZXI7Cit9CisKK3ZvaWQg
VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVu
ZE9mZnNldCkKK3sKKyAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5z
aXplKCkpOworCisgICAgaWYgKCFtX2V4cHJlc3Npb25JbmZvLnNpemUoKSkgeworICAgICAgICBz
dGFydE9mZnNldCA9IDA7CisgICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAgICAgIGRpdm90ID0g
MDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJ
bmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOworCisgICAgaW50IGxvdyA9
IDA7CisgICAgaW50IGhpZ2ggPSBleHByZXNzaW9uSW5mby5zaXplKCk7CisgICAgd2hpbGUgKGxv
dyA8IGhpZ2gpIHsKKyAgICAgICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDI7Cisg
ICAgICAgIGlmIChleHByZXNzaW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5dGVj
b2RlT2Zmc2V0KQorICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgaGlnaCA9IG1pZDsKKyAgICB9CisKKyAgICBBU1NFUlQobG93KTsKKyAgICBpZiAo
IWxvdykgeworICAgICAgICBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIGVuZE9mZnNldCA9IDA7
CisgICAgICAgIGRpdm90ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXJ0
T2Zmc2V0ID0gZXhwcmVzc2lvbkluZm9bbG93IC0gMV0uc3RhcnRPZmZzZXQ7CisgICAgZW5kT2Zm
c2V0ID0gZXhwcmVzc2lvbkluZm9bbG93IC0gMV0uZW5kT2Zmc2V0OworICAgIGRpdm90ID0gZXhw
cmVzc2lvbkluZm9bbG93IC0gMV0uZGl2b3RQb2ludDsKK30KKwordm9pZCBVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChTdHJ1
Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW5XaXRob3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgZm9yIChzaXplX3QgaSA9IDAsIGVu
ZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNsYXJhdGlvbnMuc2l6ZSgpOyBpICE9IGVuZDsg
aSsrKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xh
cmF0aW9uc1tpXS5zZWNvbmQpOworfQorCitVbmxpbmtlZENvZGVCbG9jazo6flVubGlua2VkQ29k
ZUJsb2NrKCkKK3sKK30KKwordm9pZCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqPihj
ZWxsKS0+flVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaygpOworfQorCit2b2lkIFVubGlua2VkRXZh
bENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFVubGlua2Vk
RXZhbENvZGVCbG9jayo+KGNlbGwpLT5+VW5saW5rZWRFdmFsQ29kZUJsb2NrKCk7Cit9CisKK3Zv
aWQgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7Cisg
ICAganNDYXN0PFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqPihjZWxsKS0+flVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2soKTsKK30KKwordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOworfQorCit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmYzZjVmZGZmZmJjNTg1NWY5ODUyOWUxMjQzYzdhNmJkNzYyMDU4Ngot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCkBAIC0wLDAgKzEsNzAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBVbmxpbmtlZENvZGVCbG9ja19oCisjZGVmaW5l
IFVubGlua2VkQ29kZUJsb2NrX2gKKworI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIK
KyNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiQ29kZVR5cGUu
aCIKKyNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCisjaW5jbHVkZSAiSWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkxpbmVJbmZvLmgiCisjaW5jbHVk
ZSAiTm9kZXMuaCIKKyNpbmNsdWRlICJSZWdFeHAuaCIKKyNpbmNsdWRlICJTcGVjaWFsUG9pbnRl
ci5oIgorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIERlYnVnZ2VyOworY2xhc3MgRnVu
Y3Rpb25Cb2R5Tm9kZTsKK2NsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEZ1bmN0aW9u
UGFyYW1ldGVyczsKK3N0cnVjdCBQYXJzZXJFcnJvcjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGFibGU7
CitjbGFzcyBTb3VyY2VDb2RlOworY2xhc3MgU291cmNlUHJvdmlkZXI7CitjbGFzcyBTaGFyZWRT
eW1ib2xUYWJsZTsKK2NsYXNzIFVubGlua2VkQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jazsKKwordHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZFZhbHVlUHJvZmlsZTsK
K3R5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheVByb2ZpbGU7Cit0eXBlZGVmIHVuc2lnbmVk
IFVubGlua2VkTExJbnRDYWxsTGlua0luZm87CisKK3N0cnVjdCBFeGVjdXRhYmxlSW5mbyB7Cisg
ICAgRXhlY3V0YWJsZUluZm8oYm9vbCBuZWVkc0FjdGl2YXRpb24sIGJvb2wgdXNlc0V2YWwsIGJv
b2wgaXNTdHJpY3RNb2RlLCBib29sIGlzQ29uc3RydWN0b3IpCisgICAgICAgIDogbV9uZWVkc0Fj
dGl2YXRpb24obmVlZHNBY3RpdmF0aW9uKQorICAgICAgICAsIG1fdXNlc0V2YWwodXNlc0V2YWwp
CisgICAgICAgICwgbV9pc1N0cmljdE1vZGUoaXNTdHJpY3RNb2RlKQorICAgICAgICAsIG1faXND
b25zdHJ1Y3Rvcihpc0NvbnN0cnVjdG9yKQorICAgIHsKKyAgICB9CisgICAgYm9vbCBtX25lZWRz
QWN0aXZhdGlvbjsKKyAgICBib29sIG1fdXNlc0V2YWw7CisgICAgYm9vbCBtX2lzU3RyaWN0TW9k
ZTsKKyAgICBib29sIG1faXNDb25zdHJ1Y3RvcjsKK307CisKK2NsYXNzIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNz
IENvZGVDYWNoZTsKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0YXRpYyBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2JhbERhdGEtPmhl
YXApKSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT51
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgc291cmNlLCBub2RlKTsK
KyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCpnbG9iYWxEYXRhKTsKKyAgICAgICAg
cmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5h
bWUoKSBjb25zdCB7IHJldHVybiBtX2luZmVycmVkTmFtZTsgfQorICAgIEpTU3RyaW5nKiBuYW1l
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25hbWVWYWx1ZS5nZXQoKTsgfQorICAgIFNoYXJlZFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZShDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAg
eworICAgICAgICByZXR1cm4gKGtpbmQgPT0gQ29kZUZvckNhbGwpID8gbV9zeW1ib2xUYWJsZUZv
ckNhbGwuZ2V0KCkgOiBtX3N5bWJvbFRhYmxlRm9yQ29uc3RydWN0LmdldCgpOworICAgIH0KKyAg
ICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMtPnNp
emUoKTsgfQorICAgIGJvb2wgaXNJblN0cmljdENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lz
SW5TdHJpY3RDb250ZXh0OyB9CisgICAgRnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlIGZ1bmN0
aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25OYW1lSXNJ
blNjb3BlVG9nZ2xlOyB9CisKKyAgICB1bnNpZ25lZCBmaXJzdExpbmVPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX2ZpcnN0TGluZU9mZnNldDsgfQorICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CisgICAgdW5zaWduZWQgc291cmNlTGVuZ3Ro
KCkgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KKworICAgIFN0cmluZyBwYXJhbVN0cmluZygp
IGNvbnN0OworCisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrRm9yKEpT
R2xvYmFsRGF0YSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBE
ZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKworICAgIHN0YXRpYyBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRpZmll
ciYsIEV4ZWNTdGF0ZSosIERlYnVnZ2VyKiwgY29uc3QgU291cmNlQ29kZSYsIEpTT2JqZWN0Kiog
ZXhjZXB0aW9uKTsKKworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbGluayhKU0dsb2JhbERhdGEm
LCBjb25zdCBTb3VyY2VDb2RlJiwgc2l6ZV90IGxpbmVPZmZzZXQsIHNpemVfdCBzb3VyY2VPZmZz
ZXQpOworCisgICAgdm9pZCBjbGVhckNvZGUoKQorICAgIHsKKyAgICAgICAgbV9zeW1ib2xUYWJs
ZUZvckNhbGwuY2xlYXIoKTsKKyAgICAgICAgbV9zeW1ib2xUYWJsZUZvckNvbnN0cnVjdC5jbGVh
cigpOworICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIoKTsKKyAgICB9CisKKyAgICBGdW5jdGlvblBhcmFtZXRl
cnMqIHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KKworICAgIHZv
aWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFy
aWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCisgICAgeworICAgICAgICBtX2Zl
YXR1cmVzID0gZmVhdHVyZXM7CisgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXND
YXB0dXJlZFZhcmlhYmxlczsKKyAgICAgICAgbV9saW5lQ291bnQgPSBsYXN0TGluZSAtIGZpcnN0
TGluZTsKKyAgICB9CisKKyAgICBib29sIGZvcmNlVXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fZm9yY2VVc2VzQXJndW1lbnRzOyB9CisKKyAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMo
KSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CisgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlh
YmxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7IH0KKworICAgIHN0
YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOworCitwcml2YXRlOgorICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KEpTR2xvYmFsRGF0YSosIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvbkJv
ZHlOb2RlKik7CisgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1f
Y29kZUJsb2NrRm9yQ2FsbDsKKyAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisKKyAgICB1bnNpZ25lZCBtX251bUNhcHR1
cmVkVmFyaWFibGVzIDogMjk7CisgICAgYm9vbCBtX2ZvcmNlVXNlc0FyZ3VtZW50cyA6IDE7Cisg
ICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0IDogMTsKKyAgICBib29sIG1faGFzQ2FwdHVyZWRW
YXJpYWJsZXMgOiAxOworCisgICAgSWRlbnRpZmllciBtX25hbWU7CisgICAgSWRlbnRpZmllciBt
X2luZmVycmVkTmFtZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fbmFtZVZhbHVlOwor
ICAgIFdyaXRlQmFycmllcjxTaGFyZWRTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZUZvckNhbGw7
CisgICAgV3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlRm9yQ29u
c3RydWN0OworICAgIFJlZlB0cjxGdW5jdGlvblBhcmFtZXRlcnM+IG1fcGFyYW1ldGVyczsKKyAg
ICB1bnNpZ25lZCBtX2ZpcnN0TGluZU9mZnNldDsKKyAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsK
KyAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVkIG1fc291cmNlTGVuZ3Ro
OworCisgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisKKyAgICBGdW5jdGlvbk5hbWVJc0lu
U2NvcGVUb2dnbGUgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGU7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB7
CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBtX25h
bWVWYWx1ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywganNTdHJpbmcoJmdsb2JhbERhdGEsIG5hbWUo
KS5zdHJpbmcoKSkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwor
ICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU0NlbGw6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1w
VGFibGUgeworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIGludDMyX3Q+
IFN0cmluZ09mZnNldFRhYmxlOworICAgIFN0cmluZ09mZnNldFRhYmxlIG9mZnNldFRhYmxlOwor
CisgICAgaW5saW5lIGludDMyX3Qgb2Zmc2V0Rm9yVmFsdWUoU3RyaW5nSW1wbCogdmFsdWUsIGlu
dDMyX3QgZGVmYXVsdE9mZnNldCkKKyAgICB7CisgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBvZmZzZXRUYWJsZS5lbmQoKTsKKyAgICAgICAgU3RyaW5nT2Zm
c2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFsdWUpOwor
ICAgICAgICBpZiAobG9jID09IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0T2Zmc2V0
OworICAgICAgICByZXR1cm4gbG9jLT52YWx1ZTsKKyAgICB9CisKK307CisKK3N0cnVjdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSB7CisgICAgVmVjdG9yPGludDMyX3Q+IGJyYW5jaE9mZnNldHM7
CisgICAgaW50MzJfdCBtaW47CisKKyAgICBpbnQzMl90IG9mZnNldEZvclZhbHVlKGludDMyX3Qg
dmFsdWUsIGludDMyX3QgZGVmYXVsdE9mZnNldCk7CisgICAgdm9pZCBhZGQoaW50MzJfdCBrZXks
IGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFicmFuY2hPZmZzZXRzW2tleV0p
CisgICAgICAgICAgICBicmFuY2hPZmZzZXRzW2tleV0gPSBvZmZzZXQ7CisgICAgfQorfTsKKwor
c3RydWN0IFVubGlua2VkSGFuZGxlckluZm8geworICAgIHVpbnQzMl90IHN0YXJ0OworICAgIHVp
bnQzMl90IGVuZDsKKyAgICB1aW50MzJfdCB0YXJnZXQ7CisgICAgdWludDMyX3Qgc2NvcGVEZXB0
aDsKK307CisKK3N0cnVjdCBVbmxpbmtlZEluc3RydWN0aW9uIHsKKyAgICBVbmxpbmtlZEluc3Ry
dWN0aW9uKCkgeyB1Lm9wZXJhbmQgPSAwOyB9CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbihPcGNv
ZGVJRCBvcGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7IH0KKyAgICBVbmxpbmtlZEluc3RydWN0
aW9uKGludCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0KKyAgICB1bmlvbiB7Cisg
ICAgICAgIE9wY29kZUlEIG9wY29kZTsKKyAgICAgICAgaW50MzJfdCBvcGVyYW5kOworICAgIH0g
dTsKK307CisKK2NsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0
cnVjdHVyZSA9IHRydWU7CisKKyAgICBlbnVtIHsgQ2FsbEZ1bmN0aW9uLCBBcHBseUZ1bmN0aW9u
IH07CisKKyAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2lzQ29uc3Ry
dWN0b3I7IH0KKyAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdHJp
Y3RNb2RlOyB9CisgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0V2YWw7
IH0KKworICAgIGJvb2wgbmVlZHNGdWxsU2NvcGVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fbmVl
ZHNGdWxsU2NvcGVDaGFpbjsgfQorICAgIHZvaWQgc2V0TmVlZHNGdWxsU2NvcGVDaGFpbihib29s
IG5lZWRzRnVsbFNjb3BlQ2hhaW4pIHsgbV9uZWVkc0Z1bGxTY29wZUNoYWluID0gbmVlZHNGdWxs
U2NvcGVDaGFpbjsgfQorCisgICAgdm9pZCBhZGRFeHByZXNzaW9uSW5mbyhjb25zdCBFeHByZXNz
aW9uUmFuZ2VJbmZvJiBleHByZXNzaW9uSW5mbykKKyAgICB7CisgICAgICAgIG1fZXhwcmVzc2lv
bkluZm8uYXBwZW5kKGV4cHJlc3Npb25JbmZvKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZExpbmVJ
bmZvKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQgbGluZU5vKQorICAgIHsKKyAgICAgICAg
VmVjdG9yPExpbmVJbmZvPiYgbGluZUluZm8gPSBtX2xpbmVJbmZvOworICAgICAgICBpZiAoIWxp
bmVJbmZvLnNpemUoKSB8fCBsaW5lSW5mby5sYXN0KCkubGluZU51bWJlciAhPSBsaW5lTm8pIHsK
KyAgICAgICAgICAgIExpbmVJbmZvIGluZm8gPSB7IGJ5dGVjb2RlT2Zmc2V0LCBsaW5lTm8gfTsK
KyAgICAgICAgICAgIGxpbmVJbmZvLmFwcGVuZChpbmZvKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNp
emUoKTsgfQorCisgICAgLy8gU3BlY2lhbCByZWdpc3RlcnMKKyAgICB2b2lkIHNldFRoaXNSZWdp
c3RlcihpbnQgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9
CisgICAgdm9pZCBzZXRBY3RpdmF0aW9uUmVnaXN0ZXIoaW50IGFjdGl2YXRpb25SZWdpc3Rlcikg
eyBtX2FjdGl2YXRpb25SZWdpc3RlciA9IGFjdGl2YXRpb25SZWdpc3RlcjsgfQorCisgICAgdm9p
ZCBzZXRBcmd1bWVudHNSZWdpc3RlcihpbnQgYXJndW1lbnRzUmVnaXN0ZXIpIHsgbV9hcmd1bWVu
dHNSZWdpc3RlciA9IGFyZ3VtZW50c1JlZ2lzdGVyOyB9CisgICAgYm9vbCB1c2VzQXJndW1lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNSZWdpc3RlciAhPSAtMTsgfQorICAgIGludCBh
cmd1bWVudHNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0ZXI7IH0K
KworICAgIC8vIFBhcmFtZXRlciBpbmZvcm1hdGlvbgorICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVy
cyhpbnQgbmV3VmFsdWUpIHsgbV9udW1QYXJhbWV0ZXJzID0gbmV3VmFsdWU7IH0KKyAgICB2b2lk
IGFkZFBhcmFtZXRlcigpIHsgbV9udW1QYXJhbWV0ZXJzKys7IH0KKyAgICB1bnNpZ25lZCBudW1Q
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9CisKKyAgICB1bnNp
Z25lZCBhZGRSZWdFeHAoUmVnRXhwKiByKQorICAgIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJ
Zk5lY2Vzc2FyeSgpOworICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9yZWdl
eHBzLnNpemUoKTsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLmFwcGVuZChXcml0ZUJh
cnJpZXI8UmVnRXhwPigqbV9nbG9iYWxEYXRhLCB0aGlzLCByKSk7CisgICAgICAgIHJldHVybiBz
aXplOworICAgIH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ0V4cHMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOworICAgIH0KKyAgICBSZWdFeHAq
IHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9y
YXJlRGF0YS0+bV9yZWdleHBzW2luZGV4XS5nZXQoKTsgfQorCisgICAgLy8gQ29uc3RhbnQgUG9v
bHMKKworICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9p
ZGVudGlmaWVycy5zaXplKCk7IH0KKyAgICB2b2lkIGFkZElkZW50aWZpZXIoY29uc3QgSWRlbnRp
ZmllciYgaSkgeyByZXR1cm4gbV9pZGVudGlmaWVycy5hcHBlbmQoaSk7IH0KKyAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlm
aWVyc1tpbmRleF07IH0KKyAgICBjb25zdCBWZWN0b3I8SWRlbnRpZmllcj4mIGlkZW50aWZpZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyczsgfQorCisgICAgc2l6ZV90IG51bWJlck9m
Q29uc3RhbnRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzLnNp
emUoKTsgfQorICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOworICAgICAg
ICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Cisg
ICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlz
LCB2KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgdW5zaWduZWQgYWRkT3JG
aW5kQ29uc3RhbnQoSlNWYWx1ZSk7CisgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtu
b3duPiA+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7
IH0KKyAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29u
c3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4
IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CisKKyAgICAvLyBKdW1wcwor
ICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFy
Z2V0cy5zaXplKCk7IH0KKyAgICB2b2lkIGFkZEp1bXBUYXJnZXQodW5zaWduZWQganVtcFRhcmdl
dCkgeyBtX2p1bXBUYXJnZXRzLmFwcGVuZChqdW1wVGFyZ2V0KTsgfQorICAgIHVuc2lnbmVkIGp1
bXBUYXJnZXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzW2luZGV4XTsg
fQorICAgIHVuc2lnbmVkIGxhc3RKdW1wVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFy
Z2V0cy5sYXN0KCk7IH0KKworICAgIHZvaWQgc2V0SXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKGJv
b2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKSB7IG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9u
ID0gaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uOyB9CisgICAgYm9vbCBpc051bWVyaWNDb21wYXJl
RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQor
CisgICAgdm9pZCBzaHJpbmtUb0ZpdCgpCisgICAgeworICAgICAgICBtX2p1bXBUYXJnZXRzLnNo
cmlua1RvRml0KCk7CisgICAgICAgIG1faWRlbnRpZmllcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAg
ICAgbV9jb25zdGFudFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2Z1bmN0aW9u
RGVjbHMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzLnNocmlua1RvRml0
KCk7CisgICAgICAgIG1fbGluZUluZm8uc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9wcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2V4cHJlc3Npb25J
bmZvLnNocmlua1RvRml0KCk7CisKKyNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCisgICAg
ICAgIG1fYnl0ZWNvZGVDb21tZW50cy5zaHJpbmtUb0ZpdCgpOworI2VuZGlmCisgICAgICAgIGlm
IChtX3JhcmVEYXRhKSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRs
ZXJzLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2hy
aW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNo
cmlua1RvRml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1
bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fY2hhcmFj
dGVyU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0
YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRJbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CisgICAgUmVmQ291bnRlZEFycmF5PFVu
bGlua2VkSW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX3VubGlua2VkSW5z
dHJ1Y3Rpb25zOyB9CisgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PFVubGlua2VkSW5zdHJ1Y3Rp
b24+JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkSW5zdHJ1Y3Rpb25z
OyB9CisKKyAgICBpbnQgbV9udW1WYXJzOworICAgIGludCBtX251bUNhcHR1cmVkVmFyczsKKyAg
ICBpbnQgbV9udW1DYWxsZWVSZWdpc3RlcnM7CisKKyAgICAvLyBKdW1wIFRhYmxlcworCisgICAg
c2l6ZV90IG51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMuc2l6
ZSgpIDogMDsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBhZGRJbW1lZGlhdGVTd2l0
Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+
bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5sYXN0
KCk7IH0KKyAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgaW1tZWRpYXRlU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURh
dGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQorCisgICAgc2l6
ZV90IG51bWJlck9mQ2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
cmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMuc2l6ZSgp
IDogMDsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBhZGRDaGFyYWN0ZXJTd2l0Y2hK
dW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9j
aGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSgp
KTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7
IH0KKyAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxl
KGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEt
Pm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQorCisgICAgc2l6ZV90
IG51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURh
dGEgPyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQor
ICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzLmFwcGVuZChVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KKyAgICBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFT
U0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsgfQorCisgICAgdW5zaWduZWQgYWRkRnVuY3Rpb25EZWNsKFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9
IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQo
V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAgICAgbV9m
dW5jdGlvbkRlY2xzLmxhc3QoKS5zZXQoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbik7CisgICAgICAg
IHJldHVybiBzaXplOworICAgIH0KKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQo
KTsgfQorICAgIHNpemVfdCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0
aW9uRGVjbHMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgYWRkRnVuY3Rpb25FeHByKFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1f
ZnVuY3Rpb25FeHBycy5zaXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5hcHBlbmQoV3Jp
dGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAgICAgbV9mdW5j
dGlvbkV4cHJzLmxhc3QoKS5zZXQoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbik7CisgICAgICAgIHJl
dHVybiBzaXplOworICAgIH0KKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b25FeHByKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzW2luZGV4XS5nZXQoKTsg
fQorICAgIHNpemVfdCBudW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSB7IHJldHVybiBtX2Z1bmN0aW9u
RXhwcnMuc2l6ZSgpOyB9CisKKyAgICAvLyBFeGNlcHRpb24gaGFuZGxpbmcgc3VwcG9ydAorICAg
IHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJl
RGF0YSA/IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpIDogMDsgfQorICAg
IHZvaWQgYWRkRXhjZXB0aW9uSGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5s
ZXIpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9l
eGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFubGVyKTsgfQorICAgIFVubGlua2VkSGFuZGxlcklu
Zm8mIGV4Y2VwdGlvbkhhbmRsZXIoaW50IGluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0
dXJuIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9CisKKyAgICBTaGFy
ZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5bWJvbFRhYmxl
LmdldCgpOyB9CisKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbERhdGE7IH0KKworICAgIHVuc2lnbmVkIGFkZFJlc29sdmUoKSB7IHJldHVybiBt
X3Jlc29sdmVPcGVyYXRpb25Db3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZSZXNvbHZl
T3BlcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50OyB9Cisg
ICAgdW5zaWduZWQgYWRkUHV0VG9CYXNlKCkgeyByZXR1cm4gbV9wdXRUb0Jhc2VPcGVyYXRpb25D
b3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZQdXRUb0Jhc2VPcGVyYXRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9wdXRUb0Jhc2VPcGVyYXRpb25Db3VudDsgfQorCisgICAgVW5saW5rZWRB
cnJheVByb2ZpbGUgYWRkQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3Vu
dCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkgeyByZXR1cm4gbV9h
cnJheVByb2ZpbGVDb3VudDsgfQorICAgIFVubGlua2VkVmFsdWVQcm9maWxlIGFkZFZhbHVlUHJv
ZmlsZSgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlQ291bnQrKzsgfQorICAgIHVuc2lnbmVkIG51
bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlQ291bnQ7IH0KKwor
ICAgIFVubGlua2VkTExJbnRDYWxsTGlua0luZm8gYWRkTExJbnRDYWxsTGlua0luZm8oKSB7IHJl
dHVybiBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQrKzsgfQorICAgIHVuc2lnbmVkIG51bWJlck9m
TExpbnRDYWxsTGlua0luZm9zKCkgeyByZXR1cm4gbV9sbGludENhbGxMaW5rSW5mb0NvdW50OyB9
CisKKyAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVR5cGU7IH0K
KworICAgIGludCB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdpc3Rlcjsg
fQorICAgIGludCBhY3RpdmF0aW9uUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2YXRp
b25SZWdpc3RlcjsgfQorCisKKyAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24o
dW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIG1fcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuYXBwZW5kKHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24p
OworICAgIH0KKworICAgIHNpemVfdCBudW1iZXJPZlByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCk7IH0K
KyAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7IH0KKworICAgIHR5
cGVkZWYgVmVjdG9yPEpTVmFsdWU+IENvbnN0YW50QnVmZmVyOworCisgICAgc2l6ZV90IGNvbnN0
YW50QnVmZmVyQ291bnQoKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEt
Pm1fY29uc3RhbnRCdWZmZXJzLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIGFkZENvbnN0YW50QnVm
ZmVyKHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNl
c3NhcnkoKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fY29uc3RhbnRC
dWZmZXJzLnNpemUoKTsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuYXBw
ZW5kKFZlY3RvcjxKU1ZhbHVlPihsZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAg
fQorCisgICAgY29uc3QgQ29uc3RhbnRCdWZmZXImIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOworICAgICAgICBy
ZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaW5kZXhdOworICAgIH0KKworICAg
IENvbnN0YW50QnVmZmVyJiBjb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBpbmRleCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1f
Y29uc3RhbnRCdWZmZXJzW2luZGV4XTsKKyAgICB9CisKKyAgICBib29sIGhhc1JhcmVEYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YTsgfQorCisgICAgaW50IGxpbmVOdW1iZXJGb3JCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisKKyAgICB2b2lkIGV4cHJlc3Np
b25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRp
dm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCk7CisKKyAgICB2b2lkIHJlY29y
ZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcywg
dW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsaW5lQ291bnQpCisgICAgeworICAgICAgICBt
X2ZlYXR1cmVzID0gZmVhdHVyZXM7CisgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBo
YXNDYXB0dXJlZFZhcmlhYmxlczsKKyAgICAgICAgbV9maXJzdExpbmUgPSBmaXJzdExpbmU7Cisg
ICAgICAgIG1fbGluZUNvdW50ID0gbGluZUNvdW50OworICAgIH0KKworICAgIENvZGVGZWF0dXJl
cyBjb2RlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CisgICAgYm9vbCBo
YXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRWYXJpYWJs
ZXM7IH0KKyAgICB1bnNpZ25lZCBmaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGlu
ZTsgfQorICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50
OyB9CisKK3Byb3RlY3RlZDoKKyAgICBVbmxpbmtlZENvZGVCbG9jayhKU0dsb2JhbERhdGEqLCBT
dHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mKTsKKyAgICB+VW5saW5r
ZWRDb2RlQmxvY2soKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0
YSk7CisgICAgICAgIGlmIChjb2RlVHlwZSgpID09IEdsb2JhbENvZGUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIFNoYXJl
ZFN5bWJvbFRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSkpOworICAgIH0KKworcHJpdmF0ZToKKwor
ICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpCisgICAgeworICAgICAgICBpZiAo
IW1fcmFyZURhdGEpCisgICAgICAgICAgICBtX3JhcmVEYXRhID0gYWRvcHRQdHIobmV3IFJhcmVE
YXRhKTsKKyAgICB9CisKKyAgICBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRJbnN0cnVjdGlvbj4g
bV91bmxpbmtlZEluc3RydWN0aW9uczsKKworICAgIGludCBtX251bVBhcmFtZXRlcnM7CisgICAg
SlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisKKyAgICBpbnQgbV90aGlzUmVnaXN0ZXI7Cisg
ICAgaW50IG1fYXJndW1lbnRzUmVnaXN0ZXI7CisgICAgaW50IG1fYWN0aXZhdGlvblJlZ2lzdGVy
OworCisgICAgYm9vbCBtX25lZWRzRnVsbFNjb3BlQ2hhaW4gOiAxOworICAgIGJvb2wgbV91c2Vz
RXZhbCA6IDE7CisgICAgYm9vbCBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbiA6IDE7CisgICAg
Ym9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7CisgICAgYm9vbCBtX2lzQ29uc3RydWN0b3IgOiAxOwor
ICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CisgICAgdW5zaWduZWQgbV9maXJz
dExpbmU7CisgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CisKKyAgICBDb2RlRmVhdHVyZXMgbV9m
ZWF0dXJlczsKKyAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOworCisgICAgVmVjdG9yPHVuc2lnbmVk
PiBtX2p1bXBUYXJnZXRzOworCisgICAgLy8gQ29uc3RhbnQgUG9vbHMKKyAgICBWZWN0b3I8SWRl
bnRpZmllcj4gbV9pZGVudGlmaWVyczsKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+
ID4gbV9jb25zdGFudFJlZ2lzdGVyczsKKyAgICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+ID4gRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOwor
ICAgIEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRGVjbHM7CisgICAgRnVuY3Rp
b25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25FeHByczsKKworICAgIFdyaXRlQmFycmllcjxT
aGFyZWRTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKKworICAgIFZlY3RvcjxMaW5lSW5mbz4g
bV9saW5lSW5mbzsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9wcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uczsKKworI2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKKyAgICBWZWN0b3I8Q29t
bWVudD4gIG1fYnl0ZWNvZGVDb21tZW50czsKKyAgICBzaXplX3QgbV9ieXRlY29kZUNvbW1lbnRJ
dGVyYXRvcjsKKyNlbmRpZgorCisgICAgdW5zaWduZWQgbV9yZXNvbHZlT3BlcmF0aW9uQ291bnQ7
CisgICAgdW5zaWduZWQgbV9wdXRUb0Jhc2VPcGVyYXRpb25Db3VudDsKKyAgICB1bnNpZ25lZCBt
X2FycmF5UHJvZmlsZUNvdW50OworICAgIHVuc2lnbmVkIG1fdmFsdWVQcm9maWxlQ291bnQ7Cisg
ICAgdW5zaWduZWQgbV9sbGludENhbGxMaW5rSW5mb0NvdW50OworCitwdWJsaWM6CisgICAgc3Ry
dWN0IFJhcmVEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVi
bGljOgorICAgICAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5k
bGVyczsKKworICAgICAgICAvLyBSYXJlIENvbnN0YW50cworICAgICAgICBWZWN0b3I8V3JpdGVC
YXJyaWVyPFJlZ0V4cD4gPiBtX3JlZ2V4cHM7CisKKyAgICAgICAgLy8gQnVmZmVycyB1c2VkIGZv
ciBsYXJnZSBhcnJheSBsaXRlcmFscworICAgICAgICBWZWN0b3I8Q29uc3RhbnRCdWZmZXI+IG1f
Y29uc3RhbnRCdWZmZXJzOworCisgICAgICAgIC8vIEp1bXAgVGFibGVzCisgICAgICAgIFZlY3Rv
cjxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzOwor
ICAgICAgICBWZWN0b3I8VW5saW5rZWRTaW1wbGVKdW1wVGFibGU+IG1fY2hhcmFjdGVyU3dpdGNo
SnVtcFRhYmxlczsKKyAgICAgICAgVmVjdG9yPFVubGlua2VkU3RyaW5nSnVtcFRhYmxlPiBtX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgLy8gRXhwcmVzc2lvbiBpbmZvIC0gcHJl
c2VudCBpZiBkZWJ1Z2dpbmcuCisgICAgfTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8UmFyZURh
dGE+IG1fcmFyZURhdGE7CisgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVz
c2lvbkluZm87CisKK3Byb3RlY3RlZDoKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFn
czsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK2Ns
YXNzIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIDogcHVibGljIFVubGlua2VkQ29kZUJsb2NrIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkQ29kZUJsb2NrIEJhc2U7CisKK3Byb3RlY3Rl
ZDoKKyAgICBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJs
ZUluZm8mIGluZm8pCisgICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGNvZGVU
eXBlLCBpbmZvKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CisKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK2NsYXNzIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CisgICAgc3RhdGljIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgeworICAgICAgICBVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrPihnbG9iYWxEYXRhLT5oZWFwKSkgVW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVj
dHVyZS5nZXQoKSwgaW5mbyk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xv
YmFsRGF0YSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7CisgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKKworICAgIHZvaWQgYWRkRnVuY3Rpb25EZWNsYXJhdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtX2Z1
bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lLCBXcml0ZUJhcnJp
ZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2JhbERhdGEsIHRoaXMsIGZ1bmN0aW9u
RXhlY3V0YWJsZSkpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFZhcmlhYmxlRGVjbGFyYXRpb24o
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgYm9vbCBpc0NvbnN0YW50KQorICAgIHsKKyAgICAgICAg
bV92YXJEZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5hbWUsIGlzQ29uc3RhbnQp
KTsKKyAgICB9CisKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRpZmllciwgYm9v
bD4gPiBWYXJpYWJsZURlY2xhdGlvbnM7CisgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPElk
ZW50aWZpZXIsIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gPiA+IEZ1
bmN0aW9uRGVjbGF0aW9uczsKKworICAgIGNvbnN0IFZhcmlhYmxlRGVjbGF0aW9ucyYgdmFyaWFi
bGVEZWNsYXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3ZhckRlY2xhcmF0aW9uczsgfQorICAg
IGNvbnN0IEZ1bmN0aW9uRGVjbGF0aW9ucyYgZnVuY3Rpb25EZWNsYXJhdGlvbnMoKSBjb25zdCB7
IHJldHVybiBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOyB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6CisgICAgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgICAgICA6IEJhc2UoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlLCBHbG9iYWxDb2RlLCBpbmZvKQorICAgIHsKKyAgICB9CisKKyAg
ICBWYXJpYWJsZURlY2xhdGlvbnMgbV92YXJEZWNsYXJhdGlvbnM7CisgICAgRnVuY3Rpb25EZWNs
YXRpb25zIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5
cGVJbmZvKFVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFzcyBVbmxpbmtlZEV2YWxD
b2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgeworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOworCisgICAgc3RhdGljIFVubGlua2VkRXZhbENvZGVC
bG9jayogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mIGluZm8pCisgICAgeworICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGluc3RhbmNl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPihnbG9i
YWxEYXRhLT5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKGdsb2JhbERhdGEsIGdsb2JhbERh
dGEtPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbyk7CisgICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29k
ZUJsb2NrIEJhc2U7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIGNv
bnN0IElkZW50aWZpZXImIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3Zhcmlh
Ymxlc1tpbmRleF07IH0KKyAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiBtX3Zh
cmlhYmxlcy5zaXplKCk7IH0KKyAgICB2b2lkIGFkb3B0VmFyaWFibGVzKFZlY3RvcjxJZGVudGlm
aWVyPiYgdmFyaWFibGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmFyaWFibGVzLmlzRW1w
dHkoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFibGVzKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAg
ICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBFdmFsQ29kZSwgaW5mbykKKyAgICB7
CisgICAgfQorCisgICAgVmVjdG9yPElkZW50aWZpZXI+IG1fdmFyaWFibGVzOworCitwdWJsaWM6
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAg
ICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEV2YWxDb2RlQmxvY2tUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKKworICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworY2xhc3Mg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7Citw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CisKKyAgICBzdGF0aWMgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29k
ZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgIHsKKyAgICAg
ICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPihnbG9iYWxEYXRhLT5oZWFwKSkg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT51bmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjb2RlVHlwZSwgaW5mbyk7CisgICAg
ICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVy
biBpbnN0YW5jZTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkQ29kZUJs
b2NrIEJhc2U7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworcHJpdmF0ZToK
KyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxl
SW5mbyYgaW5mbykKKyAgICAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgY29kZVR5
cGUsIGluZm8pCisgICAgeworICAgIH0KKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJ
bmZvKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworfQorCisjZW5kaWYgLy8gVW5saW5r
ZWRDb2RlQmxvY2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBmYjA4NGUzZjk3YmU1N2Q2OThjMTE1
MGE4ODkzNTExMDZhNTEyMjhjLi43MGRlMDY0YTc1MThhNDZmM2VlMDNjODE3NjI0Yzk3ZTg4MGVi
ZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIGJvb2wgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpCiAgICAgcmV0dXJuIHNfZHVtcHNHZW5lcmF0
ZWRDb2RlOwogfQogCi1KU09iamVjdCogQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkKK1Bh
cnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiB7CiAgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIkJ5dGVjb2RlIEdlbmVyYXRpb24iKTsKICAgICAKQEAgLTE2
OSwzNiArMTY5LDIxIEBAIEpTT2JqZWN0KiBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyeVJhbmdlcy5zaXplKCk7ICsraSkgewog
ICAgICAgICBUcnlSYW5nZSYgcmFuZ2UgPSBtX3RyeVJhbmdlc1tpXTsKICAgICAgICAgQVNTRVJU
KHJhbmdlLnRyeURhdGEtPnRhcmdldFNjb3BlRGVwdGggIT0gVUlOVF9NQVgpOwotICAgICAgICBI
YW5kbGVySW5mbyBpbmZvID0geworICAgICAgICBVbmxpbmtlZEhhbmRsZXJJbmZvIGluZm8gPSB7
CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmFuZ2Uuc3RhcnQtPmJpbmQoMCwg
MCkpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmFuZ2UuZW5kLT5iaW5kKDAsIDApKSwKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5nZS50cnlEYXRhLT50YXJnZXQtPmJpbmQo
MCwgMCkpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmFuZ2UudHJ5RGF0YS0+dGFyZ2V0U2NvcGVE
ZXB0aCkKLSNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgLAotI2lmIEVOQUJMRShMTElOVCkK
LSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKExMSW50OjpnZXRDb2RlUHRyKGxsaW50X29wX2NhdGNo
KSkpCi0jZWxzZQotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoKQotI2VuZGlmCi0jZW5k
aWYKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5nZS50cnlEYXRhLT50YXJn
ZXQtPmJpbmQoMCwgMCkpLAorICAgICAgICAgICAgcmFuZ2UudHJ5RGF0YS0+dGFyZ2V0U2NvcGVE
ZXB0aAogICAgICAgICB9OwogICAgICAgICBtX2NvZGVCbG9jay0+YWRkRXhjZXB0aW9uSGFuZGxl
cihpbmZvKTsKICAgICB9CiAgICAgCi0gICAgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpID0g
UmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPihtX2luc3RydWN0aW9ucyk7Ci0KLSAgICBpZiAo
c19kdW1wc0dlbmVyYXRlZENvZGUpCi0gICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKG1fc2NvcGUt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOworICAgIG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKSA9IFJlZkNvdW50ZWRBcnJheTxVbmxpbmtlZEluc3RydWN0aW9uPihtX2luc3RydWN0
aW9ucyk7CiAKLSNpZmRlZiBOREVCVUcKLSAgICBpZiAoKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25D
b2RlICYmICFtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpICYmICFtX2NvZGVCbG9j
ay0+dXNlc0FyZ3VtZW50cygpKSB8fCBtX2NvZGVUeXBlID09IEV2YWxDb2RlKQotICAgICAgICBz
eW1ib2xUYWJsZSgpLmNsZWFyKCk7Ci0jZW5kaWYKLQotICAgIG1fY29kZUJsb2NrLT5zaHJpbmtU
b0ZpdChDb2RlQmxvY2s6OkVhcmx5U2hyaW5rKTsKKyAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9G
aXQoKTsKIAogICAgIGlmIChtX2V4cHJlc3Npb25Ub29EZWVwKQotICAgICAgICByZXR1cm4gY3Jl
YXRlT3V0T2ZNZW1vcnlFcnJvcihtX3Njb3BlLT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBQYXJzZXJFcnJvcjo6T3V0T2ZNZW1vcnk7CisgICAgcmV0dXJu
IFBhcnNlckVycm9yOjpFcnJvck5vbmU7CiB9CiAKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFk
ZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50LCBSZWdpc3RlcklE
KiYgcjApCkBAIC0yMTYsNTEgKzIwMSwzMiBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRW
YXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZQogICAg
IHJldHVybiB0cnVlOwogfQogCi1pbnQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZEdsb2JhbFZhcigK
LSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwg
RnVuY3Rpb25Nb2RlIGZ1bmN0aW9uTW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25N
b2RlKTsKLSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZSgpLnNpemUoKTsKLSAgICBTeW1ib2xU
YWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCAoY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQpID8g
UmVhZE9ubHkgOiAwKTsKLSAgICBpZiAoZnVuY3Rpb25Nb2RlID09IElzRnVuY3Rpb25Ub1NwZWNp
YWxpemUpCi0gICAgICAgIG5ld0VudHJ5LmF0dGVtcHRUb1dhdGNoKCk7Ci0gICAgU3ltYm9sVGFi
bGU6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC5pbXBsKCksIG5l
d0VudHJ5KTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKLSAgICAgICAgaW5kZXggPSByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmdldEluZGV4KCk7Ci0gICAgfQotICAgIHJldHVybiBpbmRleDsKLX0KLQog
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlc2VydmVMYXN0VmFyKCkKIHsKICAgICBpZiAoKG1f
Zmlyc3RDb25zdGFudEluZGV4ID0gbV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSAhPSAwKQogICAg
ICAgICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVSZWdpc3RlcnMubGFzdCgpOwogfQogCi1CeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBK
U1Njb3BlKiBzY29wZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFtQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktpbmQpCi0gICAg
OiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIo
KSkKLSAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUHJvZmlsaW5nKHNjb3BlLT5nbG9i
YWxPYmplY3QoKSkpCi0gICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUmljaFNvdXJj
ZUluZm8oc2NvcGUtPmdsb2JhbE9iamVjdCgpKSkKLSAgICAsIG1fc2NvcGUoKnNjb3BlLT5nbG9i
YWxEYXRhKCksIHNjb3BlKQotICAgICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKK0J5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1v
ZGUpCisgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dl
ck9uKQorICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHByb2ZpbGVyTW9kZSA9PSBQcm9m
aWxlck9uKQogI2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKICAgICAsIG1fY3VycmVudENv
bW1lbnRTdHJpbmcoMCkKICNlbmRpZgorICAgICwgbV9zeW1ib2xUYWJsZSgwKQogICAgICwgbV9z
Y29wZU5vZGUocHJvZ3JhbU5vZGUpCi0gICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAg
LCBtX2NvZGVCbG9jayhnbG9iYWxEYXRhLCBjb2RlQmxvY2spCiAgICAgLCBtX3RoaXNSZWdpc3Rl
cihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQogICAgICwgbV9lbXB0eVZhbHVlUmVn
aXN0ZXIoMCkKICAgICAsIG1fZmluYWxseURlcHRoKDApCiAgICAgLCBtX2R5bmFtaWNTY29wZURl
cHRoKDApCi0gICAgLCBtX2Jhc2VTY29wZURlcHRoKDApCiAgICAgLCBtX2NvZGVUeXBlKEdsb2Jh
bENvZGUpCiAgICAgLCBtX25leHRDb25zdGFudE9mZnNldCgwKQogICAgICwgbV9nbG9iYWxDb25z
dGFudEluZGV4KDApCiAgICAgLCBtX2hhc0NyZWF0ZWRBY3RpdmF0aW9uKHRydWUpCiAgICAgLCBt
X2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xhc3RMYXp5RnVuY3Rpb24oMCkKLSAgICAs
IG1fZ2xvYmFsRGF0YShzY29wZS0+Z2xvYmFsRGF0YSgpKQorICAgICwgbV9nbG9iYWxEYXRhKCZn
bG9iYWxEYXRhKQogICAgICwgbV9sYXN0T3Bjb2RlSUQob3BfZW5kKQogI2lmbmRlZiBOREVCVUcK
ICAgICAsIG1fbGFzdE9wY29kZVBvc2l0aW9uKDApCkBAIC0yNjksODEgKzIzNSw0OCBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2Rl
LCBKU1Njb3BlKiBzY29wZSwgUwogICAgICwgbV91c2VzRXhjZXB0aW9ucyhmYWxzZSkKICAgICAs
IG1fZXhwcmVzc2lvblRvb0RlZXAoZmFsc2UpCiB7Ci0gICAgbV9nbG9iYWxEYXRhLT5zdGFydGVk
Q29tcGlsaW5nKG1fY29kZUJsb2NrKTsKLSAgICAKICAgICBpZiAobV9zaG91bGRFbWl0RGVidWdI
b29rcykKICAgICAgICAgbV9jb2RlQmxvY2stPnNldE5lZWRzRnVsbFNjb3BlQ2hhaW4odHJ1ZSk7
CiAKLSAgICBjb2RlQmxvY2stPnNldEdsb2JhbERhdGEobV9nbG9iYWxEYXRhKTsKLSAgICBzeW1i
b2xUYWJsZS0+c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFj
b2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsgICAgCiAgICAgbV9jb2RlQmxvY2stPnNldE51bVBh
cmFtZXRlcnMoMSk7IC8vIEFsbG9jYXRlIHNwYWNlIGZvciAidGhpcyIKIAogICAgIHByZXBlbmRD
b21tZW50KCJlbnRlcmluZyBQcm9ncmFtIGJsb2NrIik7CiAgICAgZW1pdE9wY29kZShvcF9lbnRl
cik7CiAKLSAgICAvLyBGSVhNRTogTW92ZSBjb2RlIHRoYXQgbW9kaWZpZXMgdGhlIGdsb2JhbCBv
YmplY3QgdG8gSW50ZXJwcmV0ZXI6OmV4ZWN1dGUuCi0gICAgCi0gICAgaWYgKGNvbXBpbGF0aW9u
S2luZCA9PSBPcHRpbWl6aW5nQ29tcGlsYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgCi0gICAg
QmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKCptX2dsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCk7Ci0KICAgICBjb25zdCBWYXJTdGFjayYgdmFyU3RhY2sgPSBwcm9ncmFtTm9kZS0+
dmFyU3RhY2soKTsKICAgICBjb25zdCBGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrID0gcHJv
Z3JhbU5vZGUtPmZ1bmN0aW9uU3RhY2soKTsKIAotICAgIHNpemVfdCBuZXdHbG9iYWxzID0gdmFy
U3RhY2suc2l6ZSgpICsgZnVuY3Rpb25TdGFjay5zaXplKCk7Ci0gICAgaWYgKCFuZXdHbG9iYWxz
KQotICAgICAgICByZXR1cm47Ci0gICAgZ2xvYmFsT2JqZWN0LT5hZGRSZWdpc3RlcnMobmV3R2xv
YmFscyk7Ci0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBmdW5jdGlvblN0
YWNrW2ldOwotICAgICAgICBib29sIHByb3BlcnR5RGlkRXhpc3QgPSAKLSAgICAgICAgICAgIGds
b2JhbE9iamVjdC0+cmVtb3ZlRGlyZWN0KCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uLT5pZGVudCgp
KTsgLy8gTmV3bHkgZGVjbGFyZWQgZnVuY3Rpb25zIG92ZXJ3cml0ZSBleGlzdGluZyBwcm9wZXJ0
aWVzLgotCi0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywg
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBzY29w
ZSk7Ci0gICAgICAgIGludCBpbmRleCA9IGFkZEdsb2JhbFZhcigKLSAgICAgICAgICAgIGZ1bmN0
aW9uLT5pZGVudCgpLCBJc1ZhcmlhYmxlLAotICAgICAgICAgICAgIXByb3BlcnR5RGlkRXhpc3Qg
PyBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplIDogTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUp
OwotICAgICAgICBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoaW5kZXgpLnNldCgqbV9nbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIHVubGlua2VkRnVuY3Rpb24gPSBtYWtlRnVuY3Rpb24oZnVuY3Rpb24pOworICAgICAg
ICBjb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbGFyYXRpb24oKm1fZ2xvYmFsRGF0YSwgZnVuY3Rp
b24tPmlkZW50KCksIHVubGlua2VkRnVuY3Rpb24pOwogICAgIH0KIAotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFyU3RhY2suc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGdsb2JhbE9i
amVjdC0+aGFzUHJvcGVydHkoZXhlYywgKnZhclN0YWNrW2ldLmZpcnN0KSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBhZGRHbG9iYWxWYXIoCi0gICAgICAgICAgICAqdmFyU3RhY2tb
aV0uZmlyc3QsCi0gICAgICAgICAgICAodmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25T
dGFja3M6OklzQ29uc3RhbnQpID8gSXNDb25zdGFudCA6IElzVmFyaWFibGUsCi0gICAgICAgICAg
ICBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6YWJsZSk7Ci0gICAgfQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFyU3RhY2suc2l6ZSgpOyArK2kpCisgICAgICAgIGNvZGVCbG9jay0+YWRk
VmFyaWFibGVEZWNsYXJhdGlvbigqdmFyU3RhY2tbaV0uZmlyc3QsICEhKHZhclN0YWNrW2ldLnNl
Y29uZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSk7CisKIH0KIAotQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9k
eSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCkKLSAgICA6IG1fc2hvdWxkRW1pdERlYnVn
SG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQotICAgICwgbV9zaG91bGRF
bWl0UHJvZmlsZUhvb2tzKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUoKS0+c3VwcG9ydHNQcm9maWxpbmcoc2NvcGUtPmdsb2JhbE9iamVjdCgpKSkKLSAgICAs
IG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNSaWNoU291cmNlSW5mbyhzY29wZS0+Z2xvYmFs
T2JqZWN0KCkpKQotICAgICwgbV9zY29wZSgqc2NvcGUtPmdsb2JhbERhdGEoKSwgc2NvcGUpCi0g
ICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRnVuY3Rpb25Cb2R5Tm9kZSog
ZnVuY3Rpb25Cb2R5LCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVn
Z2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCisgICAgOiBt
X3Nob3VsZEVtaXREZWJ1Z0hvb2tzKGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9uKQorICAgICwg
bV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9uKQorICAg
ICwgbV9zeW1ib2xUYWJsZShjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCiAjaWYgRU5BQkxFKEJZ
VEVDT0RFX0NPTU1FTlRTKQogICAgICwgbV9jdXJyZW50Q29tbWVudFN0cmluZygwKQogI2VuZGlm
CiAgICAgLCBtX3Njb3BlTm9kZShmdW5jdGlvbkJvZHkpCi0gICAgLCBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCisgICAgLCBtX2NvZGVCbG9jayhnbG9iYWxEYXRhLCBjb2RlQmxvY2spCiAgICAgLCBt
X2FjdGl2YXRpb25SZWdpc3RlcigwKQogICAgICwgbV9lbXB0eVZhbHVlUmVnaXN0ZXIoMCkKICAg
ICAsIG1fZmluYWxseURlcHRoKDApCiAgICAgLCBtX2R5bmFtaWNTY29wZURlcHRoKDApCi0gICAg
LCBtX2Jhc2VTY29wZURlcHRoKDApCiAgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29kZSkKICAg
ICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCiAgICAgLCBtX2dsb2JhbENvbnN0YW50SW5kZXgo
MCkKICAgICAsIG1faGFzQ3JlYXRlZEFjdGl2YXRpb24oZmFsc2UpCiAgICAgLCBtX2ZpcnN0TGF6
eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xhc3RMYXp5RnVuY3Rpb24oMCkKLSAgICAsIG1fZ2xvYmFs
RGF0YShzY29wZS0+Z2xvYmFsRGF0YSgpKQorICAgICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRh
KQogICAgICwgbV9sYXN0T3Bjb2RlSUQob3BfZW5kKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1f
bGFzdE9wY29kZVBvc2l0aW9uKDApCkBAIC0zNTIsMTQgKzI4NSwxMSBAQCBCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBK
U1Njb3BlKiBzYwogICAgICwgbV91c2VzRXhjZXB0aW9ucyhmYWxzZSkKICAgICAsIG1fZXhwcmVz
c2lvblRvb0RlZXAoZmFsc2UpCiB7Ci0gICAgbV9nbG9iYWxEYXRhLT5zdGFydGVkQ29tcGlsaW5n
KG1fY29kZUJsb2NrKTsKLQogICAgIGlmIChtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKQogICAgICAg
ICBtX2NvZGVCbG9jay0+c2V0TmVlZHNGdWxsU2NvcGVDaGFpbih0cnVlKTsKIAotICAgIGNvZGVC
bG9jay0+c2V0R2xvYmFsRGF0YShtX2dsb2JhbERhdGEpOwotICAgIHN5bWJvbFRhYmxlLT5zZXRV
c2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIWNvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCkpOwotICAgIHN5bWJvbFRhYmxlLT5zZXRQYXJhbWV0ZXJDb3VudEluY2x1ZGlu
Z1RoaXMoZnVuY3Rpb25Cb2R5LT5wYXJhbWV0ZXJzKCktPnNpemUoKSArIDEpOworICAgIG1fc3lt
Ym9sVGFibGUtPnNldFVzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAh
Y29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7CisgICAgbV9zeW1ib2xUYWJsZS0+c2V0UGFyYW1l
dGVyQ291bnRJbmNsdWRpbmdUaGlzKGZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpLT5zaXplKCkg
KyAxKTsKIAogICAgIHByZXBlbmRDb21tZW50KCJlbnRlcmluZyBGdW5jdGlvbiBibG9jayIpOwog
ICAgIGVtaXRPcGNvZGUob3BfZW50ZXIpOwpAQCAtMzcwLDcgKzMwMCw3IEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHks
IEpTU2NvcGUqIHNjCiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXRBY3RpdmF0aW9uUmVnaXN0ZXIo
bV9hY3RpdmF0aW9uUmVnaXN0ZXItPmluZGV4KCkpOwogICAgIH0KIAotICAgIHN5bWJvbFRhYmxl
LT5zZXRDYXB0dXJlU3RhcnQobV9jb2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAgbV9zeW1ib2xU
YWJsZS0+c2V0Q2FwdHVyZVN0YXJ0KG1fY29kZUJsb2NrLT5tX251bVZhcnMpOwogCiAgICAgaWYg
KGZ1bmN0aW9uQm9keS0+dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSB8
fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKSB7IC8vIE1heSByZWlmeSBhcmd1bWVudHMgb2JqZWN0
LgogICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRW
YXIoKTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBiZSBtb2RpZmllZCBieSB1c2VyIGNvZGUu
CkBAIC00MjAsNyArMzUwLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgSlNTY29wZSogc2MKICAgICB9CiAKICAg
ICBpZiAoY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1v
ZGUoKSkgewotICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQgPSBzeW1ib2xUYWJsZS0+cGFy
YW1ldGVyQ291bnQoKTsKKyAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50ID0gbV9zeW1ib2xU
YWJsZS0+cGFyYW1ldGVyQ291bnQoKTsKICAgICAgICAgT3duQXJyYXlQdHI8U2xvd0FyZ3VtZW50
PiBzbG93QXJndW1lbnRzID0gYWRvcHRBcnJheVB0cihuZXcgU2xvd0FyZ3VtZW50W3BhcmFtZXRl
ckNvdW50XSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7
ICsraSkgewogICAgICAgICAgICAgaWYgKCFjYXB0dXJlZEFyZ3VtZW50c1tpXSkgewpAQCAtNDMx
LDcgKzM2MSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlv
bkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIEpTU2NvcGUqIHNjCiAgICAgICAgICAgICBzbG93QXJn
dW1lbnRzW2ldLnN0YXR1cyA9IFNsb3dBcmd1bWVudDo6Q2FwdHVyZWQ7CiAgICAgICAgICAgICBz
bG93QXJndW1lbnRzW2ldLmluZGV4ID0gY2FwdHVyZWRBcmd1bWVudHNbaV0tPmluZGV4KCk7CiAg
ICAgICAgIH0KLSAgICAgICAgc3ltYm9sVGFibGUtPnNldFNsb3dBcmd1bWVudHMoc2xvd0FyZ3Vt
ZW50cy5yZWxlYXNlKCkpOworICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXRTbG93QXJndW1lbnRz
KHNsb3dBcmd1bWVudHMucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBSZWdpc3RlcklEKiBjYWxs
ZWVSZWdpc3RlciA9IHJlc29sdmVDYWxsZWUoZnVuY3Rpb25Cb2R5KTsgLy8gTWF5IHB1c2ggdG8g
dGhlIHNjb3BlIGNoYWluIGFuZC9vciBhZGQgYSBjYXB0dXJlZCB2YXIuCkBAIC00NzIsNyArNDAy
LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5v
ZGUqIGZ1bmN0aW9uQm9keSwgSlNTY29wZSogc2MKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICB9CiAKLSAgICBzeW1ib2xU
YWJsZS0+c2V0Q2FwdHVyZUVuZChjb2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAgbV9zeW1ib2xU
YWJsZS0+c2V0Q2FwdHVyZUVuZChjb2RlQmxvY2stPm1fbnVtVmFycyk7CiAKICAgICBtX2ZpcnN0
TGF6eUZ1bmN0aW9uID0gY29kZUJsb2NrLT5tX251bVZhcnM7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7CkBAIC01MDAsNyArNDMwLDcgQEAg
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1
bmN0aW9uQm9keSwgSlNTY29wZSogc2MKICAgICB9CiAKICAgICBpZiAoc2hvdWxkQ2FwdHVyZUFs
bFRoZVRoaW5ncykKLSAgICAgICAgc3ltYm9sVGFibGUtPnNldENhcHR1cmVFbmQoY29kZUJsb2Nr
LT5tX251bVZhcnMpOworICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXRDYXB0dXJlRW5kKGNvZGVC
bG9jay0+bV9udW1WYXJzKTsKIAogICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9
ICpmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKTsKICAgICBtX3BhcmFtZXRlcnMuZ3JvdyhwYXJh
bWV0ZXJzLnNpemUoKSArIDEpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKQEAgLTUzMCwz
NSArNDYwLDMyIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlv
bkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIEpTU2NvcGUqIHNjCiAgICAgICAgIGVtaXRPcGNvZGUo
b3BfY3JlYXRlX3RoaXMpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV90aGlzUmVn
aXN0ZXIuaW5kZXgoKSk7CiAgICAgfSBlbHNlIGlmICghY29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSAmJiAoZnVuY3Rpb25Cb2R5LT51c2VzVGhpcygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSB8
fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKSkgewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2Zp
bGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY29udmVydF90aGlzKTsKKyAgICAgICAgVW5saW5r
ZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9jb252ZXJ0X3Ro
aXMpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV90aGlzUmVnaXN0ZXIuaW5kZXgo
KSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAgICB9CiB9CiAK
LUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSogZXZhbE5vZGUs
IEpTU2NvcGUqIHNjb3BlLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEV2YWxDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kKQotICAgIDogbV9zaG91bGRFbWl0RGVi
dWdIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCi0gICAgLCBtX3Nob3Vs
ZEVtaXRQcm9maWxlSG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSgpLT5zdXBwb3J0c1Byb2ZpbGluZyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkpKQotICAg
ICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9i
YWxPYmplY3QoKSkpCi0gICAgLCBtX3Njb3BlKCpzY29wZS0+Z2xvYmFsRGF0YSgpLCBzY29wZSkK
LSAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFdmFsTm9kZSogZXZhbE5v
ZGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdn
ZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQorICAgIDogbV9zaG91bGRFbWl0RGVi
dWdIb29rcyhkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPbikKKyAgICAsIG1fc2hvdWxkRW1pdFBy
b2ZpbGVIb29rcyhwcm9maWxlck1vZGUgPT0gUHJvZmlsZXJPbikKKyAgICAsIG1fc3ltYm9sVGFi
bGUoY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQogI2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5U
UykKICAgICAsIG1fY3VycmVudENvbW1lbnRTdHJpbmcoMCkKICNlbmRpZgogICAgICwgbV9zY29w
ZU5vZGUoZXZhbE5vZGUpCi0gICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgLCBtX2Nv
ZGVCbG9jayhnbG9iYWxEYXRhLCBjb2RlQmxvY2spCiAgICAgLCBtX3RoaXNSZWdpc3RlcihDYWxs
RnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQogICAgICwgbV9lbXB0eVZhbHVlUmVnaXN0ZXIo
MCkKICAgICAsIG1fZmluYWxseURlcHRoKDApCiAgICAgLCBtX2R5bmFtaWNTY29wZURlcHRoKDAp
Ci0gICAgLCBtX2Jhc2VTY29wZURlcHRoKGNvZGVCbG9jay0+YmFzZVNjb3BlRGVwdGgoKSkKICAg
ICAsIG1fY29kZVR5cGUoRXZhbENvZGUpCiAgICAgLCBtX25leHRDb25zdGFudE9mZnNldCgwKQog
ICAgICwgbV9nbG9iYWxDb25zdGFudEluZGV4KDApCiAgICAgLCBtX2hhc0NyZWF0ZWRBY3RpdmF0
aW9uKHRydWUpCiAgICAgLCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xhc3RMYXp5
RnVuY3Rpb24oMCkKLSAgICAsIG1fZ2xvYmFsRGF0YShzY29wZS0+Z2xvYmFsRGF0YSgpKQorICAg
ICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQogICAgICwgbV9sYXN0T3Bjb2RlSUQob3BfZW5k
KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fbGFzdE9wY29kZVBvc2l0aW9uKDApCkBAIC01Njcs
MTMgKzQ5NCw5IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9k
ZSogZXZhbE5vZGUsIEpTU2NvcGUqIHNjb3BlLCBTaGFyZWRTCiAgICAgLCBtX3VzZXNFeGNlcHRp
b25zKGZhbHNlKQogICAgICwgbV9leHByZXNzaW9uVG9vRGVlcChmYWxzZSkKIHsKLSAgICBtX2ds
b2JhbERhdGEtPnN0YXJ0ZWRDb21waWxpbmcobV9jb2RlQmxvY2spOwotCi0gICAgaWYgKG1fc2hv
dWxkRW1pdERlYnVnSG9va3MgfHwgbV9iYXNlU2NvcGVEZXB0aCkKLSAgICAgICAgbV9jb2RlQmxv
Y2stPnNldE5lZWRzRnVsbFNjb3BlQ2hhaW4odHJ1ZSk7CisgICAgbV9jb2RlQmxvY2stPnNldE5l
ZWRzRnVsbFNjb3BlQ2hhaW4odHJ1ZSk7CiAKLSAgICBjb2RlQmxvY2stPnNldEdsb2JhbERhdGEo
bV9nbG9iYWxEYXRhKTsKLSAgICBzeW1ib2xUYWJsZS0+c2V0VXNlc05vblN0cmljdEV2YWwoY29k
ZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsgICAgCisg
ICAgbV9zeW1ib2xUYWJsZS0+c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZh
bCgpICYmICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsKICAgICBtX2NvZGVCbG9jay0+c2V0
TnVtUGFyYW1ldGVycygxKTsKIAogICAgIHByZXBlbmRDb21tZW50KCJlbnRlcmluZyBFdmFsIGJs
b2NrIik7CkBAIC01ODEsNyArNTA0LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFMKIAogICAg
IGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrID0g
ZXZhbE5vZGUtPmZ1bmN0aW9uU3RhY2soKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1
bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlv
bkRlY2woRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb25T
dGFja1tpXSkpOworICAgICAgICBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1ha2VGdW5j
dGlvbihmdW5jdGlvblN0YWNrW2ldKSk7CiAKICAgICBjb25zdCBEZWNsYXJhdGlvblN0YWNrczo6
VmFyU3RhY2smIHZhclN0YWNrID0gZXZhbE5vZGUtPnZhclN0YWNrKCk7CiAgICAgdW5zaWduZWQg
bnVtVmFyaWFibGVzID0gdmFyU3RhY2suc2l6ZSgpOwpAQCAtNTk1LDcgKzUxOCw2IEBAIEJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSogZXZhbE5vZGUsIEpTU2Nv
cGUqIHNjb3BlLCBTaGFyZWRTCiAKIEJ5dGVjb2RlR2VuZXJhdG9yOjp+Qnl0ZWNvZGVHZW5lcmF0
b3IoKQogewotICAgIG1fZ2xvYmFsRGF0YS0+ZmluaXNoZWRDb21waWxpbmcobV9jb2RlQmxvY2sp
OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluaXRMYXp5UmVnaXN0
ZXIoUmVnaXN0ZXJJRCogcmVnKQpAQCAtNjE4LDE3ICs1NDAsNiBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNhbGxlZShGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJv
ZHlOb2RlKQogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoZnVuY3Rp
b25Cb2R5Tm9kZS0+aWRlbnQoKSkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9j
YWxsZWVSZWdpc3Rlci5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJl
YWRPbmx5IHwgRG9udERlbGV0ZSk7Ci0KLSAgICAgICAgLy8gUHV0IGEgbWlycm9yIG9iamVjdCBp
biBjb21waWxhdGlvbiBzY29wZSwgc28gY29tcGlsZS10aW1lIHZhcmlhYmxlIHJlc29sdXRpb24g
c2VlcyB0aGUgcHJvcGVydHkgbmFtZSB3ZSdsbCBzZWUgYXQgcnVudGltZS4KLSAgICAgICAgbV9z
Y29wZS5zZXQoKmdsb2JhbERhdGEoKSwKLSAgICAgICAgICAgIEpTTmFtZVNjb3BlOjpjcmVhdGUo
Ci0gICAgICAgICAgICAgICAgbV9zY29wZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwK
LSAgICAgICAgICAgICAgICBmdW5jdGlvbkJvZHlOb2RlLT5pZGVudCgpLAotICAgICAgICAgICAg
ICAgIGpzVW5kZWZpbmVkKCksCi0gICAgICAgICAgICAgICAgUmVhZE9ubHkgfCBEb250RGVsZXRl
LAotICAgICAgICAgICAgICAgIG1fc2NvcGUuZ2V0KCkKLSAgICAgICAgICAgICkKLSAgICAgICAg
KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC03NzIsNyArNjgzLDcgQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wY29kZShPcGNvZGVJRCBvcGNvZGVJRCkKICAgICBtX2xh
c3RPcGNvZGVQb3NpdGlvbiA9IG9wY29kZVBvc2l0aW9uOwogI2VuZGlmCiAgICAgZW1pdENvbW1l
bnQoKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZ2xvYmFsRGF0YSgpLT5pbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlKG9wY29kZUlEKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG9wY29k
ZUlEKTsKICAgICBtX2xhc3RPcGNvZGVJRCA9IG9wY29kZUlEOwogfQogCkBAIC03OTYsMjEgKzcw
NywyMSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwcmVwZW5kQ29tbWVudChjb25zdCBjaGFy
KiBzdHJpbmcpCiB9CiAjZW5kaWYKIAotQXJyYXlQcm9maWxlKiBCeXRlY29kZUdlbmVyYXRvcjo6
bmV3QXJyYXlQcm9maWxlKCkKK1VubGlua2VkQXJyYXlQcm9maWxlIEJ5dGVjb2RlR2VuZXJhdG9y
OjpuZXdBcnJheVByb2ZpbGUoKQogewogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBy
ZXR1cm4gbV9jb2RlQmxvY2stPmFkZEFycmF5UHJvZmlsZShpbnN0cnVjdGlvbnMoKS5zaXplKCkp
OworICAgIHJldHVybiBtX2NvZGVCbG9jay0+YWRkQXJyYXlQcm9maWxlKCk7CiAjZWxzZQogICAg
IHJldHVybiAwOwogI2VuZGlmCiB9CiAKLVZhbHVlUHJvZmlsZSogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRQcm9maWxlZE9wY29kZShPcGNvZGVJRCBvcGNvZGVJRCkKK1VubGlua2VkVmFsdWVQcm9m
aWxlIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmlsZWRPcGNvZGUoT3Bjb2RlSUQgb3Bjb2Rl
SUQpCiB7CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQotICAgIFZhbHVlUHJvZmlsZSogcmVz
dWx0ID0gbV9jb2RlQmxvY2stPmFkZFZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbnMoKS5zaXplKCkp
OworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHJlc3VsdCA9IG1fY29kZUJsb2NrLT5hZGRWYWx1
ZVByb2ZpbGUoKTsKICNlbHNlCi0gICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSAwOworICAgIFVu
bGlua2VkVmFsdWVQcm9maWxlIHJlc3VsdCA9IDA7CiAjZW5kaWYKICAgICBlbWl0T3Bjb2RlKG9w
Y29kZUlEKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODQwLDE0ICs3NTEsNiBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxhc3RVbmFyeU9wKGludCYgZHN0SW5kZXgsIGludCYg
c3JjSW5kZXgpCiAgICAgc3JjSW5kZXggPSBpbnN0cnVjdGlvbnMoKS5hdChzaXplIC0gMSkudS5v
cGVyYW5kOwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxhc3RVbmFyeU9w
KFdyaXRlQmFycmllcjxVbmtub3duPiomIGRzdFBvaW50ZXIsIGludCYgc3JjSW5kZXgpCi17Ci0g
ICAgQVNTRVJUKGluc3RydWN0aW9ucygpLnNpemUoKSA+PSAzKTsKLSAgICBzaXplX3Qgc2l6ZSA9
IGluc3RydWN0aW9ucygpLnNpemUoKTsKLSAgICBkc3RQb2ludGVyID0gaW5zdHJ1Y3Rpb25zKCku
YXQoc2l6ZSAtIDIpLnUucmVnaXN0ZXJQb2ludGVyOwotICAgIHNyY0luZGV4ID0gaW5zdHJ1Y3Rp
b25zKCkuYXQoc2l6ZSAtIDEpLnUub3BlcmFuZDsKLX0KLQogdm9pZCBBTFdBWVNfSU5MSU5FIEJ5
dGVjb2RlR2VuZXJhdG9yOjpyZXdpbmRCaW5hcnlPcCgpCiB7CiAgICAgQVNTRVJUKGluc3RydWN0
aW9ucygpLnNpemUoKSA+PSA0KTsKQEAgLTEzMzYsNyArMTIzOSw3IEBAIFJlc29sdmVSZXN1bHQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiAg
ICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpyZWdpc3RlclJlc29sdmUodGhpc1JlZ2lzdGVy
KCksIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZyk7CiAKICAgICAvLyBDaGVjayBpZiB0aGUg
cHJvcGVydHkgc2hvdWxkIGJlIGFsbG9jYXRlZCBpbiBhIHJlZ2lzdGVyLgotICAgIGlmIChtX2Nv
ZGVUeXBlICE9IEdsb2JhbENvZGUgJiYgc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkgeworICAgIGlm
IChtX2NvZGVUeXBlICE9IEdsb2JhbENvZGUgJiYgc2hvdWxkT3B0aW1pemVMb2NhbHMoKSAmJiBt
X3N5bWJvbFRhYmxlKSB7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xU
YWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwogICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgp
KSB7CiAgICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50
cykKQEAgLTEzNTIsNyArMTI1NSw3IEBAIFJlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6
OnJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiBSZXNvbHZlUmVzdWx0IEJ5dGVj
b2RlR2VuZXJhdG9yOjpyZXNvbHZlQ29uc3REZWNsKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
KQogewogICAgIC8vIFJlZ2lzdGVyLWFsbG9jYXRlZCBjb25zdCBkZWNsYXJhdGlvbnMuCi0gICAg
aWYgKG1fY29kZVR5cGUgIT0gRXZhbENvZGUgJiYgbV9jb2RlVHlwZSAhPSBHbG9iYWxDb2RlKSB7
CisgICAgaWYgKG1fY29kZVR5cGUgIT0gRXZhbENvZGUgJiYgbV9jb2RlVHlwZSAhPSBHbG9iYWxD
b2RlICYmIG1fc3ltYm9sVGFibGUpIHsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9
IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAgICAgICAgIGlmICghZW50cnku
aXNOdWxsKCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzID0gZW50cnkuaXNSZWFkT25s
eSgpID8gUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlGbGFnIDogMDsKQEAgLTEzOTQsNyArMTI5Nyw3
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZShSZWdpc3RlcklE
KiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmCiAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNSZWdp
c3RlcigpKQogICAgICAgICByZXR1cm4gZW1pdEdldExvY2FsVmFyKGRzdCwgcmVzb2x2ZVJlc3Vs
dCwgcHJvcGVydHkpOwogCi0gICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVk
T3Bjb2RlKG9wX3Jlc29sdmUpOworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBl
bWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHBy
b3BlcnR5KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGdldFJlc29sdmVPcGVyYXRpb25z
KHByb3BlcnR5KSk7CkBAIC0xNDA2LDcgKzEzMDksNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFJlc29sdmVCYXNlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJl
cwogewogICAgIEFTU0VSVF9VTlVTRUQocmVzb2x2ZVJlc3VsdCwgIXJlc29sdmVSZXN1bHQuaXNS
ZWdpc3RlcigpKTsKICAgICAvLyBXZSBjYW4ndCBvcHRpbWlzZSBhdCBhbGwgOi0oCi0gICAgVmFs
dWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfYmFzZSk7
CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShv
cF9yZXNvbHZlX2Jhc2UpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChmYWxzZSk7CkBAIC0xNDIwLDcgKzEzMjMsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVCYXNlRm9yUHV0KFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgUmVzbwogewogICAgIEFTU0VSVF9VTlVTRUQocmVzb2x2ZVJlc3VsdCwg
IXJlc29sdmVSZXN1bHQuaXNSZWdpc3RlcigpKTsKICAgICAvLyBXZSBjYW4ndCBvcHRpbWlzZSBh
dCBhbGwgOi0oCi0gICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2Rl
KG9wX3Jlc29sdmVfYmFzZSk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVt
aXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZlX2Jhc2UpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFu
dChwcm9wZXJ0eSkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCkpOwpAQCAtMTQzNSw3ICsxMzM4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZUZvclB1dChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJl
c28KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhCYXNlRm9y
UHV0KFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVySUQqIHByb3BEc3QsIGNvbnN0IFJlc29s
dmVSZXN1bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBOb25s
b2NhbFJlc29sdmVJbmZvJiB2ZXJpZmllcikKIHsKICAgICBBU1NFUlRfVU5VU0VEKHJlc29sdmVS
ZXN1bHQsICFyZXNvbHZlUmVzdWx0LmlzUmVnaXN0ZXIoKSk7Ci0gICAgVmFsdWVQcm9maWxlKiBw
cm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfd2l0aF9iYXNlKTsKKyAgICBV
bmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29s
dmVfd2l0aF9iYXNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZURzdC0+aW5kZXgo
KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BEc3QtPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwpAQCAtMTQ1NSw3ICsx
MzU4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aFRo
aXMoUmVnaXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0ZXIKICAgICAgICAgcmV0dXJuIGJhc2VEc3Q7
CiAgICAgfQogCi0gICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2Rl
KG9wX3Jlc29sdmVfd2l0aF90aGlzKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxl
ID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfd2l0aF90aGlzKTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoYmFzZURzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHByb3BEc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25z
dGFudChwcm9wZXJ0eSkpOwpAQCAtMTQ4MiwyMyArMTM4NSwxMSBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEdldExvY2FsVmFyKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVz
b2x2ZVJlcwogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbml0R2xvYmFsQ29u
c3QoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVnaXN0ZXJJRCogdmFsdWUpCiB7CiAg
ICAgQVNTRVJUKG1fY29kZVR5cGUgPT0gR2xvYmFsQ29kZSk7Ci0gICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICBTeW1ib2xU
YWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQoaWRlbnRp
Zmllci5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgCi0gICAgaWYgKGVudHJ5LmNvdWxkQmVXYXRjaGVkKCkpIHsKLSAgICAgICAgZW1pdE9w
Y29kZShvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjayk7Ci0gICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCgmZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpKTsKLSAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKLSAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGVudHJ5LmFkZHJlc3NPZklzV2F0Y2hlZCgpKTsKLSAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgIH0KLSAgICAKLSAgICBlbWl0T3Bjb2RlKG9wX2luaXRfZ2xvYmFs
X2NvbnN0KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoJmdsb2JhbE9iamVjdC0+cmVnaXN0
ZXJBdChlbnRyeS5nZXRJbmRleCgpKSk7CisgICAgZW1pdE9wY29kZShvcF9pbml0X2dsb2JhbF9j
b25zdF9ub3ApOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgw
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtMTUxMSw3ICsxNDAyLDcgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeUlkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogYmFzZSwgY28KIHsKICAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogCi0gICAgVmFsdWVQcm9maWxlKiBwcm9maWxl
ID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9ieV9pZCk7CisgICAgVW5saW5rZWRWYWx1ZVBy
b2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYnlfaWQpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChiYXNlLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3Rh
bnQocHJvcGVydHkpKTsKQEAgLTE1OTcsOCArMTQ4OCw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0RGVsZXRlQnlJZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UsCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QXJndW1lbnRCeVZh
bChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5
KQogewotICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxlKCk7
Ci0gICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9h
cmd1bWVudF9ieV92YWwpOworICAgIFVubGlua2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9
IG5ld0FycmF5UHJvZmlsZSgpOworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBl
bWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgQVNTRVJUKGJhc2UtPmluZGV4KCkgPT0g
bV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChiYXNlLT5pbmRleCgpKTsKQEAgLTE2MjMsOCArMTUxNCw4IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBiYXNlLCBSCiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9CiAgICAgfQotICAg
IEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxlKCk7Ci0gICAgVmFs
dWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9ieV92YWwpOwor
ICAgIFVubGlua2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgp
OworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUo
b3BfZ2V0X2J5X3ZhbCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChwcm9wZXJ0eS0+aW5kZXgoKSk7CkBAIC0xNjM1LDcgKzE1MjYsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogYmFzZSwgUgogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFB1dEJ5VmFsKFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5LCBSZWdp
c3RlcklEKiB2YWx1ZSkKIHsKLSAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IG5ld0Fy
cmF5UHJvZmlsZSgpOworICAgIFVubGlua2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9IG5l
d0FycmF5UHJvZmlsZSgpOwogICAgIGVtaXRPcGNvZGUob3BfcHV0X2J5X3ZhbCk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChwcm9wZXJ0eS0+aW5kZXgoKSk7CkBAIC0xNzA1LDcgKzE1OTYsNyBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0FycmF5KFJlZ2lzdGVySUQqIGRzdCwgRWxlbWVu
dE5vZGUqIGVsZW1lbgogICAgICAgICBpZiAoIWhhZFZhcmlhYmxlRXhwcmVzc2lvbikgewogICAg
ICAgICAgICAgQVNTRVJUKGxlbmd0aCA9PSBjaGVja0xlbmd0aCk7CiAgICAgICAgICAgICB1bnNp
Z25lZCBjb25zdGFudEJ1ZmZlckluZGV4ID0gYWRkQ29uc3RhbnRCdWZmZXIobGVuZ3RoKTsKLSAg
ICAgICAgICAgIEpTVmFsdWUqIGNvbnN0YW50QnVmZmVyID0gbV9jb2RlQmxvY2stPmNvbnN0YW50
QnVmZmVyKGNvbnN0YW50QnVmZmVySW5kZXgpOworICAgICAgICAgICAgSlNWYWx1ZSogY29uc3Rh
bnRCdWZmZXIgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIoY29uc3RhbnRCdWZmZXJJbmRl
eCkuZGF0YSgpOwogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICAgICAg
Zm9yIChFbGVtZW50Tm9kZSogbiA9IGVsZW1lbnRzOyBpbmRleCA8IGxlbmd0aDsgbiA9IG4tPm5l
eHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChuLT52YWx1ZSgpLT5pc051bWJlcigpKQpAQCAt
MTc0MSwxNCArMTYzMiwxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5l
d0FycmF5KFJlZ2lzdGVySUQqIGRzdCwgRWxlbWVudE5vZGUqIGVsZW1lbgogCiBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVu
Y3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbklu
dGVybmFsKGRzdCwgbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpLCBmYWxzZSk7CisgICAgcmV0dXJu
IGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVj
bChtYWtlRnVuY3Rpb24oZnVuY3Rpb24pKSwgZmFsc2UpOwogfQogCiBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0
aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQogewogICAgIEZ1bmN0aW9uT2Zmc2V0TWFwOjpBZGRSZXN1
bHQgcHRyID0gbV9mdW5jdGlvbk9mZnNldHMuYWRkKGZ1bmN0aW9uLCAwKTsKICAgICBpZiAocHRy
LmlzTmV3RW50cnkpCi0gICAgICAgIHB0ci5pdGVyYXRvci0+dmFsdWUgPSBtX2NvZGVCbG9jay0+
YWRkRnVuY3Rpb25EZWNsKEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEs
IGZ1bmN0aW9uKSk7CisgICAgICAgIHB0ci5pdGVyYXRvci0+dmFsdWUgPSBtX2NvZGVCbG9jay0+
YWRkRnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlvbihmdW5jdGlvbikpOwogICAgIHJldHVybiBlbWl0
TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+dmFsdWUsIHRydWUpOwogfQog
CkBAIC0xNzczLDcgKzE2NjQsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dE5ld1JlZ0V4cChSZWdpc3RlcklEKiBkc3QsIFJlZ0V4cCogcmVnRXhwKQogUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0ZXJJRCog
cjAsIEZ1bmNFeHByTm9kZSogbikKIHsKICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9
IG4tPmJvZHkoKTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlv
bkV4cHIoRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24p
KTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkV4cHIobWFr
ZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7CiAgICAgCiAgICAgY3JlYXRlQWN0aXZhdGlvbklmTmVjZXNz
YXJ5KCk7CiAgICAgZW1pdE9wY29kZShvcF9uZXdfZnVuY19leHApOwpAQCAtMTkyNCw3ICsxODE1
LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE9wY29kZUlEIG9w
Y29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2kKICAgICBleHBlY3RlZEZ1bmN0aW9uID0gZW1p
dEV4cGVjdGVkRnVuY3Rpb25TbmlwcGV0KGRzdCwgZnVuYywgZXhwZWN0ZWRGdW5jdGlvbiwgY2Fs
bEFyZ3VtZW50cywgZG9uZS5nZXQoKSk7CiAgICAgCiAgICAgLy8gRW1pdCBjYWxsLgotICAgIEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxlKCk7CisgICAgVW5saW5r
ZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxlKCk7CiAgICAgZW1p
dE9wY29kZShvcGNvZGVJRCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4
KCkpOyAvLyBmdW5jCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNhbGxBcmd1bWVudHMuYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7IC8vIGFyZ0NvdW50CkBAIC0xOTM2LDcgKzE4Mjcs
NyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3Bjb2RlSUQgb3Bj
b2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaQogI2VuZGlmCiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGFycmF5UHJvZmlsZSk7CiAgICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpIHsK
LSAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2Nh
bGxfcHV0X3Jlc3VsdCk7CisgICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBl
bWl0UHJvZmlsZWRPcGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7IC8vIGRzdAogICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQocHJvZmlsZSk7CiAgICAgfQpAQCAtMTk2OSw3ICsxODYwLDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGZ1bmMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndW1lbnRzLT5pbmRl
eCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmlyc3RGcmVlUmVnaXN0ZXItPmluZGV4
KCkpOwogICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7Ci0gICAgICAgIFZhbHVlUHJv
ZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9jYWxsX3B1dF9yZXN1bHQpOwor
ICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2Rl
KG9wX2NhbGxfcHV0X3Jlc3VsdCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3Qt
PmluZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAg
fQpAQCAtMjA1Miw3ICsxOTQzLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRDb25zdHJ1Y3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLAogI2VuZGlmCiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3Vs
dCgpKSB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29k
ZShvcF9jYWxsX3B1dF9yZXN1bHQpOworICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9m
aWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CiAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOyAvLyBkc3QKICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIH0KQEAgLTI0MzEsNyArMjMyMiw3IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSog
dHJ5RGF0YSwgUmVnaXN0ZXJJRCoKICAgICBtX3RyeUNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7
CiAgICAgCiAgICAgZW1pdExhYmVsKHRyeVJhbmdlLnRyeURhdGEtPnRhcmdldC5nZXQoKSk7Ci0g
ICAgdHJ5UmFuZ2UudHJ5RGF0YS0+dGFyZ2V0U2NvcGVEZXB0aCA9IG1fZHluYW1pY1Njb3BlRGVw
dGggKyBtX2Jhc2VTY29wZURlcHRoOworICAgIHRyeVJhbmdlLnRyeURhdGEtPnRhcmdldFNjb3Bl
RGVwdGggPSBtX2R5bmFtaWNTY29wZURlcHRoOwogCiAgICAgZW1pdE9wY29kZShvcF9jYXRjaCk7
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldFJlZ2lzdGVyLT5pbmRleCgpKTsKQEAg
LTI0NDAsOCArMjMzMSw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BUcnlB
bmRFbWl0Q2F0Y2goVHJ5RGF0YSogdHJ5RGF0YSwgUmVnaXN0ZXJJRCoKIAogdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQogewotICAgIGVtaXRPcGNvZGUob3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKTsKKyAgICBlbWl0
T3Bjb2RlKG9wX3Rocm93X3N0YXRpY19lcnJvcik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGFkZENvbnN0YW50VmFsdWUoanNTdHJpbmcoZ2xvYmFsRGF0YSgpLCBtZXNzYWdlKSktPmluZGV4
KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0cnVlKTsKIH0KIAogdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFB1c2hOYW1lU2NvcGUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHks
IFJlZ2lzdGVySUQqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMjQ5Miw3ICsyMzg0
LDcgQEAgc3RhdGljIGludDMyX3Qga2V5Rm9ySW1tZWRpYXRlU3dpdGNoKEV4cHJlc3Npb25Ob2Rl
KiBub2RlLCBpbnQzMl90IG1pbiwgaW50MzJfdAogICAgIHJldHVybiBrZXkgLSBtaW47CiB9CiAK
LXN0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JJbW1lZGlhdGVTd2l0Y2goU2ltcGxlSnVt
cFRhYmxlJiBqdW1wVGFibGUsIGludDMyX3Qgc3dpdGNoQWRkcmVzcywgdWludDMyX3QgY2xhdXNl
Q291bnQsIFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRXhwcmVzc2lvbk5vZGUqKiBub2RlcywgaW50
MzJfdCBtaW4sIGludDMyX3QgbWF4KQorc3RhdGljIHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZvcklt
bWVkaWF0ZVN3aXRjaChVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlLCBpbnQzMl90
IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNsYXVzZUNvdW50LCBSZWZQdHI8TGFiZWw+KiBsYWJl
bHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMsIGludDMyX3QgbWluLCBpbnQzMl90IG1heCkKIHsK
ICAgICBqdW1wVGFibGUubWluID0gbWluOwogICAgIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRzLnJl
c2l6ZShtYXggLSBtaW4gKyAxKTsKQEAgLTI1MTgsNyArMjQxMCw3IEBAIHN0YXRpYyBpbnQzMl90
IGtleUZvckNoYXJhY3RlclN3aXRjaChFeHByZXNzaW9uTm9kZSogbm9kZSwgaW50MzJfdCBtaW4s
IGludDMyX3QKICAgICByZXR1cm4ga2V5IC0gbWluOwogfQogCi1zdGF0aWMgdm9pZCBwcmVwYXJl
SnVtcFRhYmxlRm9yQ2hhcmFjdGVyU3dpdGNoKFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlLCBp
bnQzMl90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNsYXVzZUNvdW50LCBSZWZQdHI8TGFiZWw+
KiBsYWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMsIGludDMyX3QgbWluLCBpbnQzMl90IG1h
eCkKK3N0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JDaGFyYWN0ZXJTd2l0Y2goVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50MzJfdCBzd2l0Y2hBZGRyZXNzLCB1aW50
MzJfdCBjbGF1c2VDb3VudCwgUmVmUHRyPExhYmVsPiogbGFiZWxzLCBFeHByZXNzaW9uTm9kZSoq
IG5vZGVzLCBpbnQzMl90IG1pbiwgaW50MzJfdCBtYXgpCiB7CiAgICAganVtcFRhYmxlLm1pbiA9
IG1pbjsKICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNpemUobWF4IC0gbWluICsgMSk7
CkBAIC0yNTMxLDcgKzI0MjMsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlSnVtcFRhYmxlRm9yQ2hh
cmFjdGVyU3dpdGNoKFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlLCBpbnQzMgogICAgIH0KIH0K
IAotc3RhdGljIHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZvclN0cmluZ1N3aXRjaChTdHJpbmdKdW1w
VGFibGUmIGp1bXBUYWJsZSwgaW50MzJfdCBzd2l0Y2hBZGRyZXNzLCB1aW50MzJfdCBjbGF1c2VD
b3VudCwgUmVmUHRyPExhYmVsPiogbGFiZWxzLCBFeHByZXNzaW9uTm9kZSoqIG5vZGVzKQorc3Rh
dGljIHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZvclN0cmluZ1N3aXRjaChVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYganVtcFRhYmxlLCBpbnQzMl90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNsYXVz
ZUNvdW50LCBSZWZQdHI8TGFiZWw+KiBsYWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMpCiB7
CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNsYXVzZUNvdW50OyArK2kpIHsKICAgICAg
ICAgLy8gV2UncmUgZW1pdHRpbmcgdGhpcyBhZnRlciB0aGUgY2xhdXNlIGxhYmVscyBzaG91bGQg
aGF2ZSBiZWVuIGZpeGVkLCBzbyAKQEAgLTI1NDAsOSArMjQzMiw3IEBAIHN0YXRpYyB2b2lkIHBy
ZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0Y2goU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFibGUs
IGludDMyX3QKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2Rlc1tpXS0+aXNTdHJpbmcoKSk7
CiAgICAgICAgIFN0cmluZ0ltcGwqIGNsYXVzZSA9IHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihu
b2Rlc1tpXSktPnZhbHVlKCkuaW1wbCgpOwotICAgICAgICBPZmZzZXRMb2NhdGlvbiBsb2NhdGlv
bjsKLSAgICAgICAgbG9jYXRpb24uYnJhbmNoT2Zmc2V0ID0gbGFiZWxzW2ldLT5iaW5kKHN3aXRj
aEFkZHJlc3MsIHN3aXRjaEFkZHJlc3MgKyAzKTsKLSAgICAgICAganVtcFRhYmxlLm9mZnNldFRh
YmxlLmFkZChjbGF1c2UsIGxvY2F0aW9uKTsKKyAgICAgICAganVtcFRhYmxlLm9mZnNldFRhYmxl
LmFkZChjbGF1c2UsIGxhYmVsc1tpXS0+YmluZChzd2l0Y2hBZGRyZXNzLCBzd2l0Y2hBZGRyZXNz
ICsgMykpOwogICAgIH0KIH0KIApAQCAtMjU1NCwyMCArMjQ0NCwyMCBAQCB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbmRTd2l0Y2godWludDMyX3QgY2xhdXNlQ291bnQsIFJlZlB0cjxMYWJlbD4q
IGxhYmVscywgRQogICAgICAgICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zm
c2V0ICsgMV0gPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVz
KCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAy
XSA9IGRlZmF1bHRMYWJlbC0+YmluZChzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBzd2l0Y2hJ
bmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMyk7CiAKLSAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBqdW1w
VGFibGUgPSBtX2NvZGVCbG9jay0+YWRkSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKCk7CisgICAg
ICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRk
SW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAgICAgIHByZXBhcmVKdW1wVGFibGVGb3JJ
bW1lZGlhdGVTd2l0Y2goanVtcFRhYmxlLCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBjbGF1
c2VDb3VudCwgbGFiZWxzLCBub2RlcywgbWluLCBtYXgpOwogICAgIH0gZWxzZSBpZiAoc3dpdGNo
SW5mby5zd2l0Y2hUeXBlID09IFN3aXRjaEluZm86OlN3aXRjaENoYXJhY3RlcikgewogICAgICAg
ICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMV0gPSBtX2NvZGVC
bG9jay0+bnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCk7CiAgICAgICAgIGluc3Ry
dWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAyXSA9IGRlZmF1bHRMYWJlbC0+
YmluZChzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0
ICsgMyk7CiAgICAgICAgIAotICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSA9IG1f
Y29kZUJsb2NrLT5hZGRDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoKTsKKyAgICAgICAgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRDaGFyYWN0ZXJT
d2l0Y2hKdW1wVGFibGUoKTsKICAgICAgICAgcHJlcGFyZUp1bXBUYWJsZUZvckNoYXJhY3RlclN3
aXRjaChqdW1wVGFibGUsIHN3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQsIGNsYXVzZUNvdW50LCBs
YWJlbHMsIG5vZGVzLCBtaW4sIG1heCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHN3
aXRjaEluZm8uc3dpdGNoVHlwZSA9PSBTd2l0Y2hJbmZvOjpTd2l0Y2hTdHJpbmcpOwogICAgICAg
ICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMV0gPSBtX2NvZGVC
bG9jay0+bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7CiAgICAgICAgIGluc3RydWN0
aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAyXSA9IGRlZmF1bHRMYWJlbC0+Ymlu
ZChzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0ICsg
Myk7CiAKLSAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+
YWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCk7CisgICAgICAgIFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCk7
CiAgICAgICAgIHByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0Y2goanVtcFRhYmxlLCBzd2l0
Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBjbGF1c2VDb3VudCwgbGFiZWxzLCBub2Rlcyk7CiAgICAg
fQogfQpAQCAtMjU5OSw5ICsyNDg5LDkgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJl
YWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKQogewogICAgIGlmICghaXNTdHJpY3RNb2RlKCkpCiAg
ICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlcnJvciA9IGVtaXRMb2Fk
KG5ld1RlbXBvcmFyeSgpLCBKU1ZhbHVlKGNyZWF0ZVR5cGVFcnJvcihzY29wZSgpLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpKSk7Ci0gICAgZW1pdFRocm93KGVycm9yLmdldCgpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3Ro
cm93X3N0YXRpY19lcnJvcik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50
VmFsdWUoanNTdHJpbmcoZ2xvYmFsRGF0YSgpLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpKS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggMjQ2NTMwYWIyODY4Zjhm
YjZmYTQ1NWJjYjIzMGMyNDE0MTZiNzIxNC4uODU3ZWM4Zjg0MjdmNzljZWM3MTU3MTlhMTNlZjg2
YzAxMWE1ZjNjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlN5
bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgor
I2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtMjExLDE4ICsyMTIsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldER1bXBzR2VuZXJhdGVkQ29kZShib29sIGR1bXBz
R2VuZXJhdGVkQ29kZSk7CiAgICAgICAgIHN0YXRpYyBib29sIGR1bXBzR2VuZXJhdGVkQ29kZSgp
OwogCi0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgSlNTY29wZSosIFNo
YXJlZFN5bWJvbFRhYmxlKiwgUHJvZ3JhbUNvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7Ci0g
ICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqLCBKU1Njb3BlKiwgU2hh
cmVkU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOwotICAgICAgICBC
eXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIEpTU2NvcGUqLCBTaGFyZWRTeW1ib2xUYWJsZSos
IEV2YWxDb2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOworICAgICAgICBCeXRlY29kZUdlbmVy
YXRvcihKU0dsb2JhbERhdGEmLCBQcm9ncmFtTm9kZSosIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhJiwgRnVuY3Rpb25Cb2R5Tm9kZSosIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7CisgICAgICAgIEJ5dGVjb2RlR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSYsIEV2YWxOb2RlKiwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiwg
RGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOwogCiAgICAgICAgIH5CeXRlY29kZUdlbmVyYXRv
cigpOwogICAgICAgICAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJz
JiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKm1fZ2xvYmFsRGF0YS0+cHJvcGVydHlO
YW1lczsgfQogCi0gICAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIHsgcmV0dXJuIG1fY29kZUJs
b2NrLT5tX2lzQ29uc3RydWN0b3I7IH0KKyAgICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsgfQogCi0gICAgICAgIEpTT2JqZWN0
KiBnZW5lcmF0ZSgpOworICAgICAgICBQYXJzZXJFcnJvciBnZW5lcmF0ZSgpOwogCiAgICAgICAg
IGJvb2wgaXNBcmd1bWVudE51bWJlcihjb25zdCBJZGVudGlmaWVyJiwgaW50KTsKIApAQCAtMzMy
LDEwICszMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRFeHByZXNz
aW9uSW5mbyh1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX3Nob3VsZEVtaXRSaWNoU291
cmNlSW5mbykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGRpdm90IC09
IG1fY29kZUJsb2NrLT5zb3VyY2VPZmZzZXQoKTsKKyAgICAgICAgICAgIGRpdm90IC09IG1fc2Nv
cGVOb2RlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOwogICAgICAgICAgICAgaWYgKGRpdm90ID4g
RXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RGl2b3QpIHsKICAgICAgICAgICAgICAgICAvLyBPdmVy
ZmxvdyBoYXMgb2NjdXJyZWQsIHdlIGNhbiBvbmx5IGdpdmUgbGluZSBudW1iZXIgaW5mbyBmb3Ig
ZXJyb3JzIGZvciB0aGlzIHJlZ2lvbgogICAgICAgICAgICAgICAgIGRpdm90ID0gMDsKQEAgLTUx
MCw4ICs1MDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJv
ZmlsZUhvb2tzKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzOyB9CiAgICAgICAg
IAogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2Nr
LT5pc1N0cmljdE1vZGUoKTsgfQotICAgICAgICAKLSAgICAgICAgSlNTY29wZSogc2NvcGUoKSBj
b25zdCB7IHJldHVybiBtX3Njb3BlLmdldCgpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBm
cmllbmQgY2xhc3MgTGFiZWw7CkBAIC01MjksMTEgKzUyNSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICNlbmRpZgogCiAgICAgICAgIHZvaWQgZW1pdE9wY29kZShPcGNvZGVJRCk7Ci0gICAgICAgIEFy
cmF5UHJvZmlsZSogbmV3QXJyYXlQcm9maWxlKCk7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogZW1p
dFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEKTsKKyAgICAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUg
bmV3QXJyYXlQcm9maWxlKCk7CisgICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIGVtaXRQcm9m
aWxlZE9wY29kZShPcGNvZGVJRCk7CiAgICAgICAgIHZvaWQgcmV0cmlldmVMYXN0QmluYXJ5T3Ao
aW50JiBkc3RJbmRleCwgaW50JiBzcmMxSW5kZXgsIGludCYgc3JjMkluZGV4KTsKICAgICAgICAg
dm9pZCByZXRyaWV2ZUxhc3RVbmFyeU9wKGludCYgZHN0SW5kZXgsIGludCYgc3JjSW5kZXgpOwot
ICAgICAgICB2b2lkIHJldHJpZXZlTGFzdFVuYXJ5T3AoV3JpdGVCYXJyaWVyPFVua25vd24+KiYg
ZHN0UG9pbnRlciwgaW50JiBzcmNJbmRleCk7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBy
ZXdpbmRCaW5hcnlPcCgpOwogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3aW5kVW5hcnlP
cCgpOwogCkBAIC01NzYsMTAgKzU3MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGFkZGVkIHZhci4KLSAgICAgICAg
ZW51bSBDb25zdGFudE1vZGUgeyBJc0NvbnN0YW50LCBJc1ZhcmlhYmxlIH07Ci0gICAgICAgIGVu
dW0gRnVuY3Rpb25Nb2RlIHsgSXNGdW5jdGlvblRvU3BlY2lhbGl6ZSwgTm90RnVuY3Rpb25Pck5v
dFNwZWNpYWxpemFibGUgfTsKLSAgICAgICAgaW50IGFkZEdsb2JhbFZhcihjb25zdCBJZGVudGlm
aWVyJiwgQ29uc3RhbnRNb2RlLCBGdW5jdGlvbk1vZGUpOwotCiAgICAgICAgIHZvaWQgYWRkUGFy
YW1ldGVyKGNvbnN0IElkZW50aWZpZXImLCBpbnQgcGFyYW1ldGVySW5kZXgpOwogICAgICAgICBS
ZWdpc3RlcklEKiByZXNvbHZlQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqKTsKICAgICAgICAgdm9p
ZCBhZGRDYWxsZWUoRnVuY3Rpb25Cb2R5Tm9kZSosIFJlZ2lzdGVySUQqKTsKQEAgLTYwNiwxNyAr
NTk3LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHVuc2lnbmVkIGFkZENvbnN0YW50
QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIAorICAgICAgICBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogbWFrZUZ1bmN0aW9uKEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3Jl
YXRlKG1fZ2xvYmFsRGF0YSwgbV9zY29wZU5vZGUtPnNvdXJjZSgpLCBib2R5KTsKKyAgICAgICAg
fQorCiAgICAgICAgIEpTU3RyaW5nKiBhZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVy
Jik7CiAKICAgICAgICAgdm9pZCBhZGRMaW5lSW5mbyh1bnNpZ25lZCBsaW5lTm8pCiAgICAgICAg
IHsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRMaW5lSW5mbyhpbnN0cnVjdGlvbnMoKS5z
aXplKCksIGxpbmVObyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkTGluZUluZm8oaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpLCBsaW5lTm8gLSBtX3Njb3BlTm9kZS0+Zmlyc3RMaW5lKCkpOwog
ICAgICAgICB9CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEluaXRMYXp5UmVnaXN0ZXIoUmVn
aXN0ZXJJRCopOwogCiAgICAgcHVibGljOgotICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBp
bnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQorICAgICAgICBWZWN0b3I8
VW5saW5rZWRJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rp
b25zOyB9CiAKICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgeyByZXR1
cm4gKm1fc3ltYm9sVGFibGU7IH0KICNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCkBAIC02
NTQsMTMgKzY1MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjcmVhdGVBY3Rp
dmF0aW9uSWZOZWNlc3NhcnkoKTsKICAgICAgICAgUmVnaXN0ZXJJRCogY3JlYXRlTGF6eVJlZ2lz
dGVySWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCopOwogICAgICAgICAKLSAgICAgICAgVmVjdG9yPElu
c3RydWN0aW9uPiBtX2luc3RydWN0aW9uczsKKyAgICAgICAgVmVjdG9yPFVubGlua2VkSW5zdHJ1
Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0RGVidWdI
b29rczsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3M7Ci0gICAgICAgIGJv
b2wgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm87CiAKLSAgICAgICAgU3Ryb25nPEpTU2NvcGU+
IG1fc2NvcGU7CiAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwogCiAj
aWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQpAQCAtNjY5LDcgKzY2Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2VuZGlmCiAKICAgICAgICAgU2NvcGVOb2RlKiBtX3Njb3BlTm9kZTsKLSAgICAg
ICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICAgICAgU3Ryb25nPFVubGlua2VkQ29kZUJs
b2NrPiBtX2NvZGVCbG9jazsKIAogICAgICAgICAvLyBTb21lIG9mIHRoZXNlIG9iamVjdHMga2Vl
cCBwb2ludGVycyB0byBvbmUgYW5vdGhlci4gVGhleSBhcmUgYXJyYW5nZWQKICAgICAgICAgLy8g
dG8gZW5zdXJlIGEgc2FuZSBkZXN0cnVjdGlvbiBvcmRlciB0aGF0IGF2b2lkcyByZWZlcmVuY2Vz
IHRvIGZyZWVkIG1lbW9yeS4KQEAgLTY4Nyw3ICs2ODEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fbGFzdFZhcjsKICAgICAgICAgaW50IG1fZmluYWxs
eURlcHRoOwogICAgICAgICBpbnQgbV9keW5hbWljU2NvcGVEZXB0aDsKLSAgICAgICAgaW50IG1f
YmFzZVNjb3BlRGVwdGg7CiAgICAgICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CiAKICAgICAgICAg
VmVjdG9yPENvbnRyb2xGbG93Q29udGV4dD4gbV9zY29wZUNvbnRleHRTdGFjazsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCmluZGV4IDM3MzFiMDQ3MzAyZGEz
OTEyZTU3ODhhNjBhZGQxMmNiNjRjOGI0ZTkuLmIxNDcyOTE0NjhhMmIwNTA5ODQyMWI4ZDJiNzBl
ZWYwOTQ1NjZmZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
LmNwcApAQCAtODAsNiArODAsNyBAQCBpbmxpbmUgdm9pZCBSZWNvbXBpbGVyOjpvcGVyYXRvcigp
KEpTQ2VsbCogY2VsbCkKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZ1bmN0aW9uLT5zY29wZSgp
LT5nbG9iYWxPYmplY3QoKS0+SlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKTsKICAgICBleGVj
dXRhYmxlLT5jbGVhckNvZGVJZk5vdENvbXBpbGluZygpOworICAgIGV4ZWN1dGFibGUtPmNsZWFy
VW5saW5rZWRDb2RlSWZOb3RDb21waWxpbmcoKTsKICAgICBpZiAobV9kZWJ1Z2dlciA9PSBmdW5j
dGlvbi0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCiAgICAgICAgIG1fc291
cmNlUHJvdmlkZXJzLmFkZChleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBleGVjKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNo
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgKaW5kZXgg
NmI5MDU2ZTU0YTE4YzZiZmQwMDEzMDNiOGY0ZTRlZTY1YWQwNjRjNy4uZTE4MzdiMDQxZDcyOTA2
NTljMTUwOTZlNGY1ZWE1ODY1OGI0ZmNiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZUNhY2hlLmgKQEAgLTE1OCw3ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAvLyBOb3BlLCBzbyB0cnkgdG8gcGFyc2Ugb25lLgogICAgICAgICAgICAgSlNPYmplY3Qq
IGV4Y2VwdGlvbjsKICAgICAgICAgICAgIHZhbHVlLm93bmVkID0gdHJ1ZTsKLSAgICAgICAgICAg
IHZhbHVlLmNvZGVCbG9jayA9IGtleS5leGVjdXRhYmxlKCktPnByb2R1Y2VDb2RlQmxvY2tGb3Io
c2NvcGUsIE9wdGltaXppbmdDb21waWxhdGlvbiwga2V5LmtpbmQoKSwgZXhjZXB0aW9uKS5sZWFr
UHRyKCk7CisgICAgICAgICAgICB2YWx1ZS5jb2RlQmxvY2sgPSBrZXkuZXhlY3V0YWJsZSgpLT5w
cm9kdWNlQ29kZUJsb2NrRm9yKHNjb3BlLCBrZXkua2luZCgpLCBleGNlcHRpb24pLmxlYWtQdHIo
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55
IHJlYXNvbiB0byByZWplY3QgdGhpcyBmcm9tIG91ciBjYWNoZS4gSWYgc28sIHRoZW4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggN2E1
ZTdmYzZhMDQ0MmEzMzk0YTI3NjE0YjQzZmFlZWM3NjdhZTg5Ny4uMzhhYzZmZjc1OGQwNTMwOTBl
YTU4ZjcyNDkyYzRhZTUxZmFkMzRiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTI2NTcsNiArMjY1NywxMCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHV0X2J5X2lkKTsKICAgICAgICAgfQogCisgICAgICAgIGNhc2Ugb3BfaW5pdF9n
bG9iYWxfY29uc3Rfbm9wOiB7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbml0X2dsb2Jh
bF9jb25zdF9ub3ApOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9j
b25zdDogewogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgYWRkVG9HcmFwaCgKQEAgLTI4OTQsMTAg
KzI4OTgsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3csIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvdyk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBvcF90aHJvd19yZWZlcmVuY2VfZXJyb3I6CisgICAgICAg
IGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgogICAgICAgICAgICAgZmx1c2hBcmd1bWVudHNB
bmRDYXB0dXJlZFZhcmlhYmxlcygpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChUaHJvd1JlZmVy
ZW5jZUVycm9yKTsKLSAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3Rocm93X3JlZmVyZW5jZV9l
cnJvcik7CisgICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvd19zdGF0aWNfZXJyb3IpOwog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbDoKICAgICAgICAgICAgIGhhbmRsZUNh
bGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCwgQ29kZUZvckNhbGwpOwpA
QCAtMzY0MCw3ICszNjQ0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2so
KQogICAgIGRhdGFMb2coIlBhcnNpbmcgY29kZSBibG9jayAlcC4gY29kZVR5cGUgPSAlcywgY2Fw
dHVyZUNvdW50ID0gJXUsIG5lZWRzRnVsbFNjb3BlQ2hhaW4gPSAlcywgbmVlZHNBY3RpdmF0aW9u
ID0gJXMsIGlzU3RyaWN0TW9kZSA9ICVzXG4iLAogICAgICAgICAgICAgY29kZUJsb2NrLAogICAg
ICAgICAgICAgY29kZVR5cGVUb1N0cmluZyhjb2RlQmxvY2stPmNvZGVUeXBlKCkpLAotICAgICAg
ICAgICAgY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKSwKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSA/IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+
Y2FwdHVyZUNvdW50KCkgOiAwLAogICAgICAgICAgICAgY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29w
ZUNoYWluKCk/InRydWUiOiJmYWxzZSIsCiAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLT5uZWVkc0FjdGl2YXRpb24oKT8idHJ1ZSI6ImZhbHNlIiwKICAgICAgICAgICAg
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpPyJ0cnVlIjoiZmFs
c2UiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCmluZGV4
IGU4MGNjMjhhZTkxNzgzMjNhZDkxNWE2MDYzNGRlMWNkMmQwZmU0ZDcuLmEwNGE1NDU3NjI0ZGUx
NjhmNzhiMmUxNDFhNGRjOGFmMzMwZjc5OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuaApAQCAtMTY3LDYgKzE2Nyw3IEBAIGlubGluZSBDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiwgSW5z
dHJ1Y3RpCiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xp
bmU6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CiAgICAgY2FzZSBv
cF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9p
bml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAg
ICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOgogICAgIGNhc2Ugb3Bfam1wOgpAQCAt
MjAwLDcgKzIwMSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZU9wY29kZShP
cGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3RpCiAgICAgY2FzZSBvcF9zdHJj
YXQ6CiAgICAgY2FzZSBvcF90b19wcmltaXRpdmU6CiAgICAgY2FzZSBvcF90aHJvdzoKLSAgICBj
YXNlIG9wX3Rocm93X3JlZmVyZW5jZV9lcnJvcjoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19l
cnJvcjoKICAgICBjYXNlIG9wX2NhbGw6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CiAgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCmluZGV4IDEzZTA0Mzg4Y2Q2YTg1NmQ2ZWEzN2JiYzRmOGVmMGY2NmViZGVhYjQuLjBl
NDVlMjMwYzM5OWNjYTgxYzY0YzYyYWU5ZDYzYWUxODNlNmYzNjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAtMTE1Nyw4ICsxMTU3LDcgQEAgSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsK
LSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZSgKLSAg
ICAgICAgZ2xvYmFsRGF0YSwgZXhlYywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKSk7CisgICAgSlNBY3RpdmF0aW9u
KiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYywgZXhl
Yy0+Y29kZUJsb2NrKCkpOwogICAgIGV4ZWMtPnNldFNjb3BlKGFjdGl2YXRpb24pOwogICAgIHJl
dHVybiBhY3RpdmF0aW9uOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCBj
ZDMzOTNhYTIwYzE1NjY0YjJhNDRjZmM2MjkzOWM0ZTJiMmNiNGJhLi5jNDU1ZmMyYjE4OWI2ZmY2
N2E4OWNkOWU1NjQxN2QxMzQ2Y2E3ZDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTT05P
YmplY3QuaCIKICNpbmNsdWRlICJUcmFjaW5nLmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4K
ICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgpAQCAtNDg0LDEzICs0ODUsMTMgQEAgdm9pZCBIZWFw
OjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRp
ZgotICAgIAorCiAgICAgICAgIGlmIChtX2dsb2JhbERhdGEtPmNvZGVCbG9ja3NCZWluZ0NvbXBp
bGVkLnNpemUoKSkgewogICAgICAgICAgICAgR0NQSEFTRShWaXNpdEFjdGl2ZUNvZGVCbG9jayk7
CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2xvYmFsRGF0YS0+Y29kZUJs
b2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICAgICAgbV9nbG9iYWxE
YXRhLT5jb2RlQmxvY2tzQmVpbmdDb21waWxlZFtpXS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICB7CiAgICAgICAgICAgICBHQ1BIQVNFKFZpc2l0
TWFjaGluZVJvb3RzKTsKICAgICAgICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRvciwgIkMrKyBT
dGFjayIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaApp
bmRleCAxM2JkOGU0OTNkMGQ3YjNmMzhlOTgzYjM1NTk0NjdjMjMzZDViODVjLi44Njc0ODFmZTMz
Mjk2MTNlYzdhMjdkZjMzMzA3YmVhYTU1MDg4M2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaApAQCAtNzQsMTAgKzc0LDE4IEBAIGlubGluZSB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6aW5pdChIZWFwKiBoZWFwLCBNYXJrZWRTcGFjZSogbWFya2VkU3Bh
Y2UsIHNpemVfdCBjCiBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShzaXpl
X3QgYnl0ZXMpCiB7CiAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlz
dC5oZWFkOwotICAgIGlmIChVTkxJS0VMWSghaGVhZCkpCi0gICAgICAgIHJldHVybiBhbGxvY2F0
ZVNsb3dDYXNlKGJ5dGVzKTsKKyAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKSB7CisgICAgICAgIHZv
aWQqIHJlc3VsdCA9IGFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOworI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgbWVtc2V0KHJlc3VsdCwgMHhDRCwgYnl0ZXMpOworI2VuZGlmCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQogICAgIAogICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7
CisjaWZuZGVmIE5ERUJVRworICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CisjZW5kaWYK
ICAgICByZXR1cm4gaGVhZDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCmluZGV4IDdhMzBkZWJkYTRmY2RmODhjZDUzZWE3ZmY3NjFjYTdmMzhjYjVhYzMu
LjM5MTk3MDVkMDBlYTEyOWE2Y2EyYjg0Y2MwNGZjNTZmYWRjZTkzYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKQEAgLTI5NCw2ICsyOTQsOCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKEpTVmFsdWUqIHNsb3Qp
CiAgICAgaWYgKCFjZWxsKQogICAgICAgICByZXR1cm47CiAKKyAgICB2YWxpZGF0ZShjZWxsKTsK
KwogICAgIGlmIChtX3Nob3VsZEhhc2hDb25zdCAmJiBjZWxsLT5pc1N0cmluZygpKSB7CiAgICAg
ICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihjZWxsKTsKICAgICAgICAg
aWYgKHN0cmluZy0+c2hvdWxkVHJ5SGFzaENvbnN0KCkgJiYgc3RyaW5nLT50cnlIYXNoQ29uc3RM
b2NrKCkpIHsKQEAgLTM1NSw2ICszNTcsMTAgQEAgdm9pZCBTbG90VmlzaXRvcjo6dmFsaWRhdGUo
SlNDZWxsKiBjZWxsKQogICAgICAgICAgICAgICAgIGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1
cmUoKSwgcGFyZW50Q2xhc3NOYW1lLCBjZWxsLCBjZWxsLT5zdHJ1Y3R1cmUoKSwgb3VyQ2xhc3NO
YW1lKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgd2UgY2Fu
IHdhbGsgdGhlIENsYXNzSW5mbyBjaGFpbgorICAgIGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IGNl
bGwtPmNsYXNzSW5mbygpOworICAgIGRvIHsgfSB3aGlsZSAoKGluZm8gPSBpbmZvLT5wYXJlbnRD
bGFzcykpOwogfQogI2Vsc2UKIHZvaWQgU2xvdFZpc2l0b3I6OnZhbGlkYXRlKEpTQ2VsbCopCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApp
bmRleCAzZTY0NzFiMGZmN2Y1MDk3MzJkOWVhODc1OGIwM2M4ZWUyN2QzNmUyLi4zOTdhYzg0NzQ4
NDFjY2ViMDQxMjhjYjBhOThkNjhmOGFiOGU1YjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTk0OCwxMCArOTQ4LDEzIEBA
IGZhaWxlZEpTT05QOgogICAgIC8vIG9iamVjdC4KIAogICAgIC8vIENvbXBpbGUgc291cmNlIHRv
IGJ5dGVjb2RlIGlmIG5lY2Vzc2FyeToKLSAgICBKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5j
b21waWxlKGNhbGxGcmFtZSwgc2NvcGUpOwotICAgIGlmIChlcnJvcikKKyAgICBpZiAoSlNPYmpl
Y3QqIGVycm9yID0gcHJvZ3JhbS0+aW5pdGFsaXplR2xvYmFsUHJvcGVydGllcyhnbG9iYWxEYXRh
LCBjYWxsRnJhbWUsIHNjb3BlKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dF
cnJvcihjYWxsRnJhbWUsIGVycm9yKSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmcHJv
Z3JhbS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsKKworICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBw
cm9ncmFtLT5jb21waWxlKGNhbGxGcmFtZSwgc2NvcGUpKQorICAgICAgICByZXR1cm4gY2hlY2tl
ZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgZXJyb3IpKTsKKworICAgIFByb2dyYW1Db2Rl
QmxvY2sqIGNvZGVCbG9jayA9ICZwcm9ncmFtLT5nZW5lcmF0ZWRCeXRlY29kZSgpOwogCiAgICAg
Ly8gUHVzaCB0aGUgY2FsbCBmcmFtZSBmb3IgdGhpcyBpbnZvY2F0aW9uOgogICAgIEFTU0VSVChj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIgZm9yICd0aGlz
Jy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCAyZDI5OTFiNWZjODNhZDc1MWQ5NGZl
NjA3NzI5N2E1ZGNhNWJjZjE2Li5kYWQwYjg0YzIyNWQ0N2Q0YjFkZTM4MjI1NzgzMjBiN2FjZWI5
MmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0zMzYsNiArMzM2LDggQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfcHV0
X2J5X2luZGV4KQogICAgICAgICBERUZJTkVfT1Aob3BfcHV0X2J5X3ZhbCkKICAgICAgICAgREVG
SU5FX09QKG9wX3B1dF9nZXR0ZXJfc2V0dGVyKQorICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFs
X2NvbnN0X25vcDoKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luaXRfZ2xvYmFsX2NvbnN0
X25vcCk7CiAgICAgICAgIERFRklORV9PUChvcF9pbml0X2dsb2JhbF9jb25zdCkKICAgICAgICAg
REVGSU5FX09QKG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKQogCkBAIC0zNzIsNyArMzc0LDcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Ao
b3BfdGVhcl9vZmZfYWN0aXZhdGlvbikKICAgICAgICAgREVGSU5FX09QKG9wX3RlYXJfb2ZmX2Fy
Z3VtZW50cykKICAgICAgICAgREVGSU5FX09QKG9wX3Rocm93KQotICAgICAgICBERUZJTkVfT1Ao
b3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKQorICAgICAgICBERUZJTkVfT1Aob3BfdGhyb3dfc3Rh
dGljX2Vycm9yKQogICAgICAgICBERUZJTkVfT1Aob3BfdG9fanNudW1iZXIpCiAgICAgICAgIERF
RklORV9PUChvcF90b19wcmltaXRpdmUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDQ0
Yzc0YTZjYzgyMTc5NGRmMjdmNGY0NzJkODAyMjA4YzUyOGNlYzguLjkxMmZhMDBlZDEyMzVlZjhl
MjRlNDIyZGFiOTZiZTRmZmRkNmYwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtNzY0
LDcgKzc2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfdGVhcl9v
ZmZfYWN0aXZhdGlvbihJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdGVhcl9v
ZmZfYXJndW1lbnRzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90aHJvdyhJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9y
KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF90aHJvd19zdGF0aWNfZXJyb3Io
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX2pzbnVtYmVyKEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3VuZXhwZWN0ZWRfbG9hZChJbnN0cnVjdGlvbiopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgKaW5kZXggMzE4YjRlN2FhZWI4YWI5NTMyNmFj
MjZmMmMyZTY0MTAwZmYyYjI4Zi4uNjQ1YzY1YjI4MWU4YzYyMzU3ZmFmOTBlYTMwZTI3ZjQ2ZjY5
NmNhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCkBAIC03NSw3ICs3NSw3
IEBAIGlubGluZSBib29sIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywg
T3duUHRyPENvZGVCbG9ja1R5cGU+JiBjb2RlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGlu
ZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoRXhlY1N0YXRlKiBleGVjLCBP
d25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBXcml0ZUJhcnJpZXI8
U2hhcmVkU3ltYm9sVGFibGU+JiBzeW1ib2xUYWJsZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBl
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitp
bmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhl
YywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2Rl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6
SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwogICAgIApAQCAtOTksNyArOTksNiBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxl
RnVuY3Rpb25JZkFwcHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29k
ZQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpIHsK
ICAgICAgICAgICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2Rl
QmxvY2s+KGNvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgICAgICAgICAgc3lt
Ym9sVGFibGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKTsKICAgICAgICAgICAgIGppdENvZGUgPSBv
bGRKSVRDb2RlOwogICAgICAgICAgICAgaml0Q29kZVdpdGhBcml0eUNoZWNrID0gb2xkSklUQ29k
ZVdpdGhBcml0eUNoZWNrOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggMDdjOGFjZTJhMzUzOTVlZGFmOGE1NzY1
M2VlMWQxZTEwMWNiZWEwMC4uMjQ5ZGNiYWM5MTU5YjE4ZTJlMjdmMGVmMGE2YTEyNGI1ODdlMzUy
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0xMDY5LDEz
ICsxMDY5LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBqdW1wKHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit2b2lkIEpJVDo6ZW1pdF9vcF90aHJvd19zdGF0aWNfZXJyb3IoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlf
b3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKTsKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfdGhyb3dfc3RhdGljX2Vycm9yKTsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKS5pc051bWJlcigpKQogICAg
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkp
KTsKICAgICBlbHNlCiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTY0KEpTVmFsdWU6
OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCkpKSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICBzdHViQ2FsbC5jYWxsKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCA0
NDEyM2JlMTk4MTc5ZTFiNzZiNzUxMjgyNGQzYThjOTNmMGVlOTQ3Li45YzVkMjYwYWI2ZWM4ZGQ5
OTlhOTk5OGU0MzkzYjIwMmY2MDZjOGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xNDAxLDEyICsxNDAxLDEzIEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBqdW1wKHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3dfcmVmZXJlbmNlX2Vy
cm9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF90
aHJvd19zdGF0aWNfZXJyb3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICB1bnNpZ25lZCBtZXNzYWdlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKIAot
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90aHJvd19yZWZlcmVuY2VfZXJy
b3IpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90aHJvd19zdGF0aWNf
ZXJyb3IpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChtZXNzYWdlKSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICBzdHViQ2FsbC5jYWxsKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggYmE4Yzc2Y2ZiY2I5NDJi
ODk1ZmMxMTI5MmJiNWY5ZWEyMTIyZWIwMC4uYzI0MzBiMDg5ZTMwMDE3YWI3ZGYyNWU0YjAyMTc5
NWZjY2Y0YmU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTIz
MDgsNyArMjMwOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHVzaF9h
Y3RpdmF0aW9uKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAot
ICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHN0YWNr
RnJhbWUuY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKSk7CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9u
ID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2so
KSk7CiAgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOwogICAg
IHJldHVybiBhY3RpdmF0aW9uOwogfQpAQCAtMzUwMCwxMyArMzUwMCwxNiBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkLCBvcF9wdXRfZ2V0dGVyX3NldHRlcikKICAgICBiYXNlT2JqLT5wdXRE
aXJlY3RBY2Nlc3NvcihjYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCks
IGFjY2Vzc29yLCBBY2Nlc3Nvcik7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9w
X3Rocm93X3JlZmVyZW5jZV9lcnJvcikKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3Ro
cm93X3N0YXRpY19lcnJvcikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFt
ZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwog
ICAgIFN0cmluZyBtZXNzYWdlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS50b1N0cmlu
ZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpOwotICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uID0gY3JlYXRlUmVmZXJlbmNlRXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKTsK
KyAgICBpZiAoc3RhY2tGcmFtZS5hcmdzWzFdLmFzSW50MzIpCisgICAgICAgIHN0YWNrRnJhbWUu
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlUmVmZXJlbmNlRXJyb3IoY2FsbEZyYW1lLCBt
ZXNzYWdlKTsKKyAgICBlbHNlCisgICAgICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uID0gY3JlYXRlVHlwZUVycm9yKGNhbGxGcmFtZSwgbWVzc2FnZSk7CiAgICAgVk1fVEhST1df
RVhDRVBUSU9OX0FUX0VORCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgK
aW5kZXggNmUzMTQxZTIyM2ZhMjU5Yzg2NDgxMDUzMDQ1NjQ1Njg4NzEyMzI1OS4uZDdiMjJmYWUz
MDBiZjRiNjg0ZGRmMjcyNjcwYjlmYWFmMjdiMDg1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaApAQCAtNDU0LDcgKzQ1NCw3IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQgSklU
X1NUVUIgY3RpX29wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2
YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRf
U1RVQiBjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOwotICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3Rocm93X3JlZmVyZW5jZV9lcnJv
cihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKKyAgICB2b2lkIEpJVF9TVFVC
IGN0aV9vcF90aHJvd19zdGF0aWNfZXJyb3IoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3B0aW1p
emUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggOGUyZGFjZjRkNGEzMzAxYmE3
NTg4ZThhNThhOTEwNzhjNGY5NjdhMy4uZWVjMzc2YjM3OWFlODYzZGU2NTE2Y2M4N2RiMzZkYWJj
NGYzOTFkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0
YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKQEAg
LTEwMyw3ICsxMDMsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKICAgICBBU1NFUlQoVmFsdWVOdWxsID09IFRhZ0JpdFR5cGVPdGhlcik7
CiAjZW5kaWYKICAgICBBU1NFUlQoU3RyaW5nVHlwZSA9PSA1KTsKLSAgICBBU1NFUlQoT2JqZWN0
VHlwZSA9PSAxMyk7CisgICAgQVNTRVJUKE9iamVjdFR5cGUgPT0gMTcpOwogICAgIEFTU0VSVChN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID09IDEpOwogICAgIEFTU0VSVChJbXBsZW1lbnRzSGFzSW5z
dGFuY2UgPT0gMik7CiAgICAgQVNTRVJUKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UgPT0g
OCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApp
bmRleCA3NGJlYWU5OGEyNzQ1ODM2ODAyNzcwZWIyN2YxMjU1MzZhNTFjNzE4Li5iOGViYjhmZGY0
MTVmMTEwYTZjNTc4NDIwOGQ2YTA0ZjQxMjU0NDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTQ2MCw3ICs0NjAsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2FjdGl2YXRpb24pCiAjaWYgTExJTlRfU0xP
V19QQVRIX1RSQUNJTkcKICAgICBkYXRhTG9nKCJDcmVhdGluZyBhbiBhY3RpdmF0aW9uLCBleGVj
ID0gJXAhXG4iLCBleGVjKTsKICNlbmRpZgotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9
IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGdsb2JhbERhdGEsIGV4ZWMsIHN0YXRpY19jYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSkpOwor
ICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpKTsKICAgICBleGVjLT5zZXRTY29wZShhY3Rp
dmF0aW9uKTsKICAgICBMTElOVF9SRVRVUk4oSlNWYWx1ZShhY3RpdmF0aW9uKSk7CiB9CkBAIC0x
NjIyLDEwICsxNjIyLDEzIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90aHJvdykK
ICAgICBMTElOVF9USFJPVyhMTElOVF9PUF9DKDEpLmpzVmFsdWUoKSk7CiB9CiAKLUxMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90aHJvd19yZWZlcmVuY2VfZXJyb3IpCitMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfdGhyb3dfc3RhdGljX2Vycm9yKQogewogICAgIExMSU5UX0JF
R0lOKCk7Ci0gICAgTExJTlRfVEhST1coY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgTExJTlRf
T1BfQygxKS5qc1ZhbHVlKCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CisgICAgaWYg
KHBjWzJdLnUub3BlcmFuZCkKKyAgICAgICAgTExJTlRfVEhST1coY3JlYXRlUmVmZXJlbmNlRXJy
b3IoZXhlYywgTExJTlRfT1BfQygxKS5qc1ZhbHVlKCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKSk7CisgICAgZWxzZQorICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhl
YywgTExJTlRfT1BfQygxKS5qc1ZhbHVlKCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7
CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWJ1ZykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKaW5kZXggZjc4NDc2ODQxMDBjNjVj
NzllM2YyZDc5OGRhODk4OWE2NmI2N2YwMi4uOTlmYmFjY2ZhMjgyMzFiZDBjOTVlMjE2ZDg3YmI3
NDRiNmUxNGE4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmgKQEAgLTIwNCw3ICsyMDQsNyBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX3B1c2hfd2l0aF9zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX3BvcF9zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3B1c2hfbmFtZV9zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3Rocm93KTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdGhyb3dfcmVm
ZXJlbmNlX2Vycm9yKTsKK0xMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdGhy
b3dfc3RhdGljX2Vycm9yKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
ZGVidWcpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX3dp
bGxfY2FsbCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVf
ZGlkX2NhbGwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCmluZGV4IGIyMTJmZDRkMWEzMTMzMmVkNmE2OGRkMGQxZGUxNDhjYWM0
Zjc0MjQuLmYwMmIwNGRmYzZiYzBiYWE4NmVjOTIyMjNiMjE4MDk5NzgyY2I3ZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20K
QEAgLTk2LDcgKzk2LDcgQEAgY29uc3QgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID0gMzAKIAog
IyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA1Ci1jb25zdCBPYmplY3RUeXBl
ID0gMTMKK2NvbnN0IE9iamVjdFR5cGUgPSAxNwogCiAjIFR5cGUgZmxhZ3MgY29uc3RhbnRzLgog
Y29uc3QgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IDEKQEAgLTEyMzksMTAgKzEyMzksMTAgQEAg
X2xsaW50X29wX3Rocm93OgogICAgIGRpc3BhdGNoKDIpCiAKIAotX2xsaW50X29wX3Rocm93X3Jl
ZmVyZW5jZV9lcnJvcjoKK19sbGludF9vcF90aHJvd19zdGF0aWNfZXJyb3I6CiAgICAgdHJhY2VF
eGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Rocm93X3JlZmVy
ZW5jZV9lcnJvcikKLSAgICBkaXNwYXRjaCgyKQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xv
d19wYXRoX3Rocm93X3N0YXRpY19lcnJvcikKKyAgICBkaXNwYXRjaCgzKQogCiAKIF9sbGludF9v
cF9wcm9maWxlX3dpbGxfY2FsbDoKQEAgLTEzMzEsNiArMTMzMSw4IEBAIF9sbGludF9vcF9wdXRf
YnlfaWRfcmVwbGFjZToKIF9sbGludF9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbjoKICAgICBub3RT
dXBwb3J0ZWQoKQogCitfbGxpbnRfb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgorICAgIGRpc3Bh
dGNoKDUpCiAKICMgSW5kaWNhdGUgdGhlIGVuZCBvZiBMTEludC4KIF9sbGludF9lbmQ6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCmluZGV4IDg5MWI2M2Q2NGI5YTJkNTRmZjE2YTViYzdjOWQ4YWMyNThkMTZlZTgu
LmZmYjE0NjI0N2ZiNTcwYTM4YmFmNDYxNWJhOGNhYzNiNWJlZjQ3M2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCkBAIC05ODQsNyArOTg0LDcgQEAgX2xsaW50X29wX2luaXRfZ2xvYmFsX2NvbnN0OgogICAg
IHdyaXRlQmFycmllcih0MiwgdDMpCiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbdDBdCiAgICAg
c3RvcmVpIHQzLCBQYXlsb2FkT2Zmc2V0W3QwXQotICAgIGRpc3BhdGNoKDMpCisgICAgZGlzcGF0
Y2goNSkKIAogCiBfbGxpbnRfb3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2s6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmlu
ZGV4IGZiZDcxMWViNGFhMDU2MWQ5YjNjZGJkYzU3Y2YxMDdkOTFkNmFhNGQuLjk4MTYzOTQ2NjUz
ZGM3OWQ4YzkzNjVmNmY1N2UyNWIzZjU4YTlhMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC04MjIsNyArODIy
LDcgQEAgX2xsaW50X29wX2luaXRfZ2xvYmFsX2NvbnN0OgogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUodDEsIHQyKQogICAgIHdyaXRlQmFycmllcih0MikKICAgICBzdG9yZXAgdDIsIFt0MF0K
LSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3BhdGNoKDUpCiAKIAogX2xsaW50X29wX2luaXRfZ2xv
YmFsX2NvbnN0X2NoZWNrOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKaW5kZXgg
M2IwMzE2ZjgxNjVhMDg1NmEzMjk3NTk1Y2U1MjEyNWRjMGZhNjMyZi4uNjE1ZDA5ZWI3NWQ4M2E3
OWIxYmFhMDk1ZGI4YTI5ODJiZWM2NTRmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5oCkBAIC03Niw2ICs3Niw0OSBAQCBDT01QSUxFX0FTU0VSVChMYXN0VW50YWdnZWRUb2tl
biA8IDY0LCBMZXNzVGhhbjY0VW50YWdnZWRUb2tlbnMpOwogZW51bSBTb3VyY2VFbGVtZW50c01v
ZGUgeyBDaGVja0ZvclN0cmljdE1vZGUsIERvbnRDaGVja0ZvclN0cmljdE1vZGUgfTsKIGVudW0g
RnVuY3Rpb25SZXF1aXJlbWVudHMgeyBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBGdW5jdGlvbk5l
ZWRzTmFtZSB9OwogCitzdHJ1Y3QgUGFyc2VyRXJyb3IgeworICAgIGVudW0gRXJyb3JUeXBlIHsg
RXJyb3JOb25lLCBTdGFja092ZXJmbG93LCBTeW50YXhFcnJvciwgRXZhbEVycm9yLCBPdXRPZk1l
bW9yeSB9IG1fdHlwZTsKKyAgICBTdHJpbmcgbV9tZXNzYWdlOworICAgIGludCBtX2xpbmU7Cisg
ICAgUGFyc2VyRXJyb3IoKQorICAgICAgICA6IG1fdHlwZShFcnJvck5vbmUpCisgICAgICAgICwg
bV9saW5lKC0xKQorICAgIHsKKyAgICB9CisKKyAgICBQYXJzZXJFcnJvcihFcnJvclR5cGUgdHlw
ZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2xpbmUoLTEpCisgICAgewor
ICAgIH0KKworICAgIFBhcnNlckVycm9yKEVycm9yVHlwZSB0eXBlLCBTdHJpbmcgbXNnLCBpbnQg
bGluZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX21lc3NhZ2UobXNnKQor
ICAgICAgICAsIG1fbGluZShsaW5lKQorICAgIHsKKyAgICB9CisKKyAgICBKU09iamVjdCogdG9F
cnJvck9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNl
IEVycm9yTm9uZToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIFN5bnRheEVy
cm9yOgorICAgICAgICAgICAgcmV0dXJuIGFkZEVycm9ySW5mbyhnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgY3JlYXRlU3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCBtX21lc3NhZ2UpLCBtX2xp
bmUsIHNvdXJjZSk7CisgICAgICAgIGNhc2UgRXZhbEVycm9yOgorICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgbV9tZXNzYWdlKTsKKyAgICAgICAgY2Fz
ZSBTdGFja092ZXJmbG93OgorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YWNrT3ZlcmZsb3dF
cnJvcihnbG9iYWxPYmplY3QpOworICAgICAgICBjYXNlIE91dE9mTWVtb3J5OgorICAgICAgICAg
ICAgcmV0dXJuIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
fQorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gY3JlYXRlT3V0T2ZNZW1vcnlFcnJv
cihnbG9iYWxPYmplY3QpOyAvLyBBcHBlYXNlIFF0IGJvdAorICAgIH0KKworfTsKKwogdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIGlzRXZhbE5vZGUoKSB7IHJldHVybiBmYWxzZTsg
fQogdGVtcGxhdGUgPD4gaW5saW5lIGJvb2wgaXNFdmFsTm9kZTxFdmFsTm9kZT4oKSB7IHJldHVy
biB0cnVlOyB9CiAKQEAgLTM3MCw3ICs0MTMsNyBAQCBwdWJsaWM6CiAgICAgflBhcnNlcigpOwog
CiAgICAgdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+Ci0gICAgUGFzc1JlZlB0cjxQYXJzZWRO
b2RlPiBwYXJzZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRGVidWdnZXIq
LCBFeGVjU3RhdGUqLCBKU09iamVjdCoqKTsKKyAgICBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBh
cnNlKFBhcnNlckVycm9yJik7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IEFsbG93SW5PdmVycmlk
ZSB7CkBAIC04OTAsNyArOTMzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fbGFzdFRv
a2VuRW5kOwogICAgIH0KIAotICAgIG11dGFibGUgY29uc3QgSlNHbG9iYWxEYXRhKiBtX2dsb2Jh
bERhdGE7CisgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAgY29uc3QgU291cmNl
Q29kZSogbV9zb3VyY2U7CiAgICAgUGFyc2VyQXJlbmEqIG1fYXJlbmE7CiAgICAgT3duUHRyPExl
eGVyVHlwZT4gbV9sZXhlcjsKQEAgLTkzNSwxMiArOTc4LDExIEBAIHByaXZhdGU6CiAgICAgfTsK
IH07CiAKKwogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBQ
YXJzZWROb2RlPgotUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIERlYnVnZ2VyKiBkZWJ1Z2dl
ciwgRXhlY1N0YXRlKiBkZWJ1Z2dlckV4ZWNTdGF0ZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCitQ
YXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJFcnJv
ciYgZXJyb3IpCiB7Ci0gICAgQVNTRVJUKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIEFTU0VS
VChleGNlcHRpb24gJiYgISpleGNlcHRpb24pOwogICAgIGludCBlcnJMaW5lOwogICAgIFN0cmlu
ZyBlcnJNc2c7CiAKQEAgLTk3MSw3ICsxMDEzLDcgQEAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmoK
ICAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uOwogICAgICAgICBsb2NhdGlvbi5saW5l
ID0gbV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKTsKICAgICAgICAgbG9jYXRpb24uY29sdW1uID0g
bV9sZXhlci0+Y3VycmVudENvbHVtbk51bWJlcigpOwotICAgICAgICByZXN1bHQgPSBQYXJzZWRO
b2RlOjpjcmVhdGUoJmxleGljYWxHbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwKKyAgICAgICAg
cmVzdWx0ID0gUGFyc2VkTm9kZTo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zb3VyY2VFbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdmFyRGVjbGFyYXRpb25zID8gJm1fdmFyRGVjbGFyYXRpb25zLT5kYXRhIDog
MCwKQEAgLTk4MSw3ICsxMDIzLDcgQEAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX251bUNvbnN0YW50cyk7CiAgICAgICAgIHJlc3VsdC0+c2V0
TG9jKG1fc291cmNlLT5maXJzdExpbmUoKSwgbV9sYXN0TGluZSwgbV9sZXhlci0+Y3VycmVudENv
bHVtbk51bWJlcigpKTsKLSAgICB9IGVsc2UgaWYgKGxleGljYWxHbG9iYWxPYmplY3QpIHsKKyAg
ICB9IGVsc2UgewogICAgICAgICAvLyBXZSBjYW4gbmV2ZXIgc2VlIGEgc3ludGF4IGVycm9yIHdo
ZW4gcmVwYXJzaW5nIGEgZnVuY3Rpb24sIHNpbmNlIHdlIHNob3VsZCBoYXZlCiAgICAgICAgIC8v
IHJlcG9ydGVkIHRoZSBlcnJvciB3aGVuIHBhcnNpbmcgdGhlIGNvbnRhaW5pbmcgcHJvZ3JhbSBv
ciBldmFsIGNvZGUuIFNvIGlmIHdlJ3JlCiAgICAgICAgIC8vIHBhcnNpbmcgYSBmdW5jdGlvbiBi
b2R5IG5vZGUsIHdlIGFzc3VtZSB0aGF0IHdoYXQgYWN0dWFsbHkgaGFwcGVuZWQgaGVyZSBpcyB0
aGF0CkBAIC05ODksMzUgKzEwMzEsMzEgQEAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmoKICAgICAg
ICAgLy8gY29kZSB3ZSBhc3N1bWUgdGhhdCBpdCB3YXMgYSBzeW50YXggZXJyb3Igc2luY2UgcnVu
bmluZyBvdXQgb2Ygc3RhY2sgaXMgbXVjaCBsZXNzCiAgICAgICAgIC8vIGxpa2VseSwgYW5kIHdl
IGFyZSBjdXJyZW50bHkgdW5hYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHR3byBjYXNl
cy4KICAgICAgICAgaWYgKGlzRnVuY3Rpb25Cb2R5Tm9kZShzdGF0aWNfY2FzdDxQYXJzZWROb2Rl
Kj4oMCkpIHx8IG1faGFzU3RhY2tPdmVyZmxvdykKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgICAgICAg
ICBlcnJvciA9IFBhcnNlckVycm9yOjpTdGFja092ZXJmbG93OwogICAgICAgICBlbHNlIGlmIChp
c0V2YWxOb2RlPFBhcnNlZE5vZGU+KCkpCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRl
U3ludGF4RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgZXJyTXNnKTsKKyAgICAgICAgICAgIGVy
cm9yID0gUGFyc2VyRXJyb3IoUGFyc2VyRXJyb3I6OkV2YWxFcnJvciwgZXJyTXNnLCBlcnJMaW5l
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGFkZEVycm9ySW5mbyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGNyZWF0ZVN5bnRheEVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIGVyck1zZyksIGVyckxpbmUsICptX3NvdXJjZSk7CisgICAgICAgICAg
ICBlcnJvciA9IFBhcnNlckVycm9yKFBhcnNlckVycm9yOjpTeW50YXhFcnJvciwgZXJyTXNnLCBl
cnJMaW5lKTsKICAgICB9CiAKLSAgICBpZiAoZGVidWdnZXIgJiYgIVBhcnNlZE5vZGU6OnNjb3Bl
SXNGdW5jdGlvbikKLSAgICAgICAgZGVidWdnZXItPnNvdXJjZVBhcnNlZChkZWJ1Z2dlckV4ZWNT
dGF0ZSwgbV9zb3VyY2UtPnByb3ZpZGVyKCksIGVyckxpbmUsIGVyck1zZyk7Ci0KICAgICBtX2Fy
ZW5hLT5yZXNldCgpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKIHRlbXBs
YXRlIDxjbGFzcyBQYXJzZWROb2RlPgotUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVy
cywgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3Ms
IEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBEZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSog
ZXhlY1N0YXRlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikKK1Bhc3NSZWZQdHI8UGFyc2VkTm9kZT4g
cGFyc2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
SlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBQ
YXJzZXJFcnJvciYgZXJyb3IpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IlBhcnNpbmciKTsKIAogICAgIEFTU0VSVCghc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlz
TnVsbCgpKTsKLQogICAgIGlmIChzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXM4Qml0KCkp
IHsKICAgICAgICAgUGFyc2VyPCBMZXhlcjxMQ2hhcj4gPiBwYXJzZXIoZ2xvYmFsRGF0YSwgc291
cmNlLCBwYXJhbWV0ZXJzLCBuYW1lLCBzdHJpY3RuZXNzLCBwYXJzZXJNb2RlKTsKLSAgICAgICAg
cmV0dXJuIHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBkZWJ1
Z2dlciwgZXhlY1N0YXRlLCBleGNlcHRpb24pOworICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNl
PFBhcnNlZE5vZGU+KGVycm9yKTsKICAgICB9CiAgICAgUGFyc2VyPCBMZXhlcjxVQ2hhcj4gPiBw
YXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBuYW1lLCBzdHJpY3RuZXNzLCBw
YXJzZXJNb2RlKTsKLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGxleGljYWxH
bG9iYWxPYmplY3QsIGRlYnVnZ2VyLCBleGVjU3RhdGUsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJu
IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvcik7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIAor
fSAvLyBuYW1lc3BhY2UKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXJNb2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXJNb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxZmI3ZmRmOTBkYTVkNWRjNTBiOTVjZDNmMmM2NGQ0MTYy
YzIwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlck1vZGVzLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBQYXJz
ZXJNb2Rlc19oCisjZGVmaW5lIFBhcnNlck1vZGVzX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2Vu
dW0gSlNQYXJzZXJTdHJpY3RuZXNzIHsgSlNQYXJzZU5vcm1hbCwgSlNQYXJzZVN0cmljdCB9Owor
ZW51bSBKU1BhcnNlck1vZGUgeyBKU1BhcnNlUHJvZ3JhbUNvZGUsIEpTUGFyc2VGdW5jdGlvbkNv
ZGUgfTsKKworZW51bSBQcm9maWxlck1vZGUgeyBQcm9maWxlck9mZiwgUHJvZmlsZXJPbiB9Owor
ZW51bSBEZWJ1Z2dlck1vZGUgeyBEZWJ1Z2dlck9mZiwgRGVidWdnZXJPbiB9OworCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tl
bnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKaW5kZXgg
NmU2Y2VjMTE0ZDQ0NWUzNzg2NWZlYzhjMzkxZGY1YjUxZGVjNTE3YS4uMTQxOTFiOTVkN2QzYjVi
Y2MwNDFiMTE5NzVlYjU1MTU2Y2RkYzc4NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlclRva2Vucy5oCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIFBhcnNlclRva2Vu
c19oCiAjZGVmaW5lIFBhcnNlclRva2Vuc19oCiAKKyNpbmNsdWRlICJQYXJzZXJNb2Rlcy5oIgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSWRlbnRpZmllcjsKQEAgLTE2MSw5ICsxNjMsNiBA
QCBzdHJ1Y3QgSlNUb2tlbiB7CiAgICAgSlNUb2tlbkxvY2F0aW9uIG1fbG9jYXRpb247CiB9Owog
Ci1lbnVtIEpTUGFyc2VyU3RyaWN0bmVzcyB7IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VTdHJpY3Qg
fTsKLWVudW0gSlNQYXJzZXJNb2RlIHsgSlNQYXJzZVByb2dyYW1Db2RlLCBKU1BhcnNlRnVuY3Rp
b25Db2RlIH07Ci0gICAgCiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1
bWVudHMuaAppbmRleCA3YzhiNjliZDEyNDUxYWMxYjY2NzYwZmZkYzZiNzFmZGJmZTU1YzJmLi43
OTYxZDRiYzgzMmRiMTNkM2ViZjhmOGNkMmJlMGEzNmEzOTljNjU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaApAQCAtMjY3LDggKzI2Nyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBtX292ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAgICAgICAgIG1fb3Zl
cnJvZGVDYWxsZXIgPSBmYWxzZTsKICAgICAgICAgbV9pc1N0cmljdE1vZGUgPSBqc0Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKS0+aXNT
dHJpY3RNb2RlKCk7Ci0KLSAgICAgICAgQVNTRVJUKCFqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKS0+c3ltYm9sVGFibGUoKS0+c2xv
d0FyZ3VtZW50cygpKTsKKyAgICAgICAgQVNTRVJUKCFqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKS0+c3ltYm9sVGFibGUoaW5saW5l
Q2FsbEZyYW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3QpLT5zbG93
QXJndW1lbnRzKCkpOwogCiAgICAgICAgIC8vIFRoZSBieXRlY29kZSBnZW5lcmF0b3Igb21pdHMg
b3BfdGVhcl9vZmZfYWN0aXZhdGlvbiBpbiBjYXNlcyBvZiBubwogICAgICAgICAvLyBkZWNsYXJl
ZCBwYXJhbWV0ZXJzLCBzbyB3ZSBuZWVkIHRvIHRlYXIgb2ZmIGltbWVkaWF0ZWx5LgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRlNzYw
ZTQ5ZGMwOGVjYThmY2RlMWI0NGZhMDc2MTU4YjljMzc1ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKQEAgLTAsMCArMSwxODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKKworI2luY2x1ZGUgIkJ5dGVj
b2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2lu
Y2x1ZGUgIlBhcnNlci5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKKyNpbmNsdWRlICJV
bmxpbmtlZENvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQ29kZUNhY2hlOjpDb2Rl
Q2FjaGUoKQorICAgIDogbV9yYW5kb21HZW5lcmF0b3Ioc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJh
bmRvbU51bWJlcigpICogVUlOVDMyX01BWCkpCit7Cit9CisKK0NvZGVDYWNoZTo6fkNvZGVDYWNo
ZSgpCit7Cit9CisKK0NvZGVDYWNoZTo6Q29kZUJsb2NrS2V5IENvZGVDYWNoZTo6bWFrZUNvZGVC
bG9ja0tleShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVDYWNoZTo6Q29kZVR5cGUgdHlw
ZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MpCit7CisgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKHNvdXJjZS50b1N0cmluZygpLCAodHlwZSA8PCAxKSB8IHN0cmljdG5lc3MpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IENhY2hlVHlwZXMgeyB9OworCit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQ2FjaGVUeXBlczxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB0
eXBlZGVmIEpTQzo6UHJvZ3JhbU5vZGUgUm9vdE5vZGU7CisgICAgc3RhdGljIGNvbnN0IENvZGVD
YWNoZTo6Q29kZVR5cGUgY29kZVR5cGUgPSBDb2RlQ2FjaGU6OlByb2dyYW1UeXBlOworfTsKKwor
dGVtcGxhdGUgPD4gc3RydWN0IENhY2hlVHlwZXM8VW5saW5rZWRFdmFsQ29kZUJsb2NrPiB7Cisg
ICAgdHlwZWRlZiBKU0M6OkV2YWxOb2RlIFJvb3ROb2RlOworICAgIHN0YXRpYyBjb25zdCBDb2Rl
Q2FjaGU6OkNvZGVUeXBlIGNvZGVUeXBlID0gQ29kZUNhY2hlOjpFdmFsVHlwZTsKK307CisKK3Rl
bXBsYXRlIDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFibGVUeXBl
PgorVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldENvZGVCbG9jayhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhYmxlLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBEZWJ1Z2dlck1v
ZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYg
ZXJyb3IpCit7CisgICAgQ29kZUJsb2NrS2V5IGtleSA9IG1ha2VDb2RlQmxvY2tLZXkoc291cmNl
LCBDYWNoZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OmNvZGVUeXBlLCBzdHJpY3RuZXNz
KTsKKyAgICBib29sIHN0b3JlSW5DYWNoZSA9IGZhbHNlOworICAgIGlmIChkZWJ1Z2dlck1vZGUg
PT0gRGVidWdnZXJPZmYgJiYgcHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT2ZmKSB7CisgICAgICAg
IENvZGVCbG9ja0luZGljZXNNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fY2FjaGVkQ29kZUJsb2Nr
SW5kaWNlcy5maW5kKGtleSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gbV9jYWNoZWRDb2RlQmxv
Y2tJbmRpY2VzLmVuZCgpKSB7CisgICAgICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVu
bGlua2VkQ29kZSA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihtX2NhY2hlZENvZGVC
bG9ja3NbcmVzdWx0LT52YWx1ZV0uc2Vjb25kLmdldCgpKTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGZpcnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlua2VkQ29kZS0+Zmlyc3RMaW5l
KCk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJzZSh1bmxpbmtlZENvZGUtPmNv
ZGVGZWF0dXJlcygpLCB1bmxpbmtlZENvZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGZpcnN0
TGluZSwgZmlyc3RMaW5lICsgdW5saW5rZWRDb2RlLT5saW5lQ291bnQoKSk7CisgICAgICAgICAg
ICByZXR1cm4gdW5saW5rZWRDb2RlOworICAgICAgICB9CisgICAgICAgIHN0b3JlSW5DYWNoZSA9
IHRydWU7CisgICAgfQorCisgICAgdHlwZWRlZiB0eXBlbmFtZSBDYWNoZVR5cGVzPFVubGlua2Vk
Q29kZUJsb2NrVHlwZT46OlJvb3ROb2RlIFJvb3ROb2RlOworICAgIFJlZlB0cjxSb290Tm9kZT4g
cm9vdE5vZGUgPSBwYXJzZTxSb290Tm9kZT4oJmdsb2JhbERhdGEsIHNvdXJjZSwgMCwgSWRlbnRp
ZmllcigpLCBzdHJpY3RuZXNzLCBKU1BhcnNlUHJvZ3JhbUNvZGUsIGVycm9yKTsKKyAgICBpZiAo
IXJvb3ROb2RlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJz
ZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCks
IHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmxhc3RMaW5lKCkpOworCisgICAgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGUgPSBVbmxpbmtlZENvZGVCbG9ja1R5cGU6OmNy
ZWF0ZSgmZ2xvYmFsRGF0YSwgZXhlY3V0YWJsZS0+ZXhlY3V0YWJsZUluZm8oKSk7CisgICAgdW5s
aW5rZWRDb2RlLT5yZWNvcmRQYXJzZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhh
c0NhcHR1cmVkVmFyaWFibGVzKCksIHJvb3ROb2RlLT5saW5lTm8oKSAtIHNvdXJjZS5maXJzdExp
bmUoKSwgcm9vdE5vZGUtPmxhc3RMaW5lKCkgLSByb290Tm9kZS0+bGluZU5vKCkpOworICAgIE93
blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdl
bmVyYXRvcihnbG9iYWxEYXRhLCByb290Tm9kZS5nZXQoKSwgdW5saW5rZWRDb2RlLCBkZWJ1Z2dl
ck1vZGUsIHByb2ZpbGVyTW9kZSkpKTsKKyAgICBlcnJvciA9IGdlbmVyYXRvci0+Z2VuZXJhdGUo
KTsKKyAgICByb290Tm9kZS0+ZGVzdHJveURhdGEoKTsKKyAgICBpZiAoZXJyb3IubV90eXBlICE9
IFBhcnNlckVycm9yOjpFcnJvck5vbmUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHN0
b3JlSW5DYWNoZSkgeworICAgICAgICBzaXplX3QgaW5kZXggPSBtX3JhbmRvbUdlbmVyYXRvci5n
ZXRVaW50MzIoKSAlIGtNYXhDb2RlQmxvY2tFbnRyaWVzOworICAgICAgICBpZiAobV9jYWNoZWRD
b2RlQmxvY2tzW2luZGV4XS5zZWNvbmQpCisgICAgICAgICAgICBtX2NhY2hlZENvZGVCbG9ja0lu
ZGljZXMucmVtb3ZlKG1fY2FjaGVkQ29kZUJsb2Nrc1tpbmRleF0uZmlyc3QpOworICAgICAgICBt
X2NhY2hlZENvZGVCbG9ja0luZGljZXMuc2V0KGtleSwgaW5kZXgpOworICAgICAgICBtX2NhY2hl
ZENvZGVCbG9ja3NbaW5kZXhdLnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdW5saW5rZWRDb2RlKTsK
KyAgICAgICAgbV9jYWNoZWRDb2RlQmxvY2tzW2luZGV4XS5maXJzdCA9IGtleTsKKyAgICB9CisK
KyAgICByZXR1cm4gdW5saW5rZWRDb2RlOworfQorCitVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sq
IENvZGVDYWNoZTo6Z2V0UHJvZ3JhbUNvZGVCbG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2Rl
LCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCit7CisgICAg
cmV0dXJuIGdldENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KGdsb2JhbERhdGEs
IGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1v
ZGUsIGVycm9yKTsKK30KKworVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdldEV2
YWxDb2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFdmFsRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3Ry
aWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVy
TW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQoreworICAgIHJldHVybiBnZXRDb2RlQmxvY2s8VW5s
aW5rZWRFdmFsQ29kZUJsb2NrPihnbG9iYWxEYXRhLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmlj
dG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7Cit9CisKK1VubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2sqIENvZGVDYWNoZTo6Z2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9jayhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9k
ZSwgUGFyc2VyRXJyb3ImIGVycm9yKQoreworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBi
b2R5ID0gcGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oJmdsb2JhbERhdGEsIHNvdXJjZSwgZXhlY3V0
YWJsZS0+cGFyYW1ldGVycygpLCBleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUtPmlzSW5T
dHJpY3RDb250ZXh0KCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgSlNQYXJzZUZ1
bmN0aW9uQ29kZSwgZXJyb3IpOworCisgICAgaWYgKCFib2R5KSB7CisgICAgICAgIEFTU0VSVChl
cnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIGlmIChleGVjdXRhYmxlLT5mb3JjZVVzZXNBcmd1bWVudHMoKSkKKyAg
ICAgICAgYm9keS0+c2V0VXNlc0FyZ3VtZW50cygpOworICAgIGJvZHktPmZpbmlzaFBhcnNpbmco
ZXhlY3V0YWJsZS0+cGFyYW1ldGVycygpLCBleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUt
PmZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSgpKTsKKyAgICBleGVjdXRhYmxlLT5yZWNvcmRQ
YXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBib2R5
LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7CisgICAgCisgICAgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogcmVzdWx0ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZn
bG9iYWxEYXRhLCBGdW5jdGlvbkNvZGUsIEV4ZWN1dGFibGVJbmZvKGJvZHktPm5lZWRzQWN0aXZh
dGlvbigpLCBib2R5LT51c2VzRXZhbCgpLCBib2R5LT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0KSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0
b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGdsb2JhbERhdGEsIGJvZHkuZ2V0KCks
IHJlc3VsdCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CisgICAgZXJyb3IgPSBnZW5l
cmF0b3ItPmdlbmVyYXRlKCk7CisgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKKyAgICBpZiAoZXJy
b3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIENvZGVD
YWNoZTo6Z2V0RnVuY3Rpb25Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1v
ZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAg
ICByZXR1cm4gZ2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBleGVjdXRhYmxl
LCBzb3VyY2UsIGtpbmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7Cit9CisK
K0NvZGVDYWNoZTo6R2xvYmFsRnVuY3Rpb25LZXkgQ29kZUNhY2hlOjptYWtlR2xvYmFsRnVuY3Rp
b25LZXkoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgcmV0dXJuIEdsb2JhbEZ1bmN0aW9uS2V5KHNvdXJjZS50b1N0cmluZygpLCBuYW1lKTsKK30K
KworVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6Z2V0RnVuY3Rpb25FeGVj
dXRhYmxlRnJvbUdsb2JhbENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVu
dGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckVycm9yJiBlcnJv
cikKK3sKKyAgICBHbG9iYWxGdW5jdGlvbktleSBrZXkgPSBtYWtlR2xvYmFsRnVuY3Rpb25LZXko
c291cmNlLCBuYW1lLnN0cmluZygpKTsKKyAgICBHbG9iYWxGdW5jdGlvbkluZGljZXNNYXA6Oml0
ZXJhdG9yIHJlc3VsdCA9IG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25JbmRpY2VzLmZpbmQoa2V5KTsK
KyAgICBpZiAocmVzdWx0ICE9IG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25JbmRpY2VzLmVuZCgpKQor
ICAgICAgICByZXR1cm4gbV9jYWNoZWRHbG9iYWxGdW5jdGlvbnNbcmVzdWx0LT52YWx1ZV0uc2Vj
b25kLmdldCgpOworCisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtID0gcGFyc2U8UHJv
Z3JhbU5vZGU+KCZnbG9iYWxEYXRhLCBzb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5v
cm1hbCwgSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CisgICAgaWYgKCFwcm9ncmFtKSB7Cisg
ICAgICAgIEFTU0VSVChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBh
biBpbnB1dCBzdHJpbmcgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBzaW5nbGUgYW5vbnltb3VzIGZ1
bmN0aW9uIGV4cHJlc3Npb24uCisgICAgU3RhdGVtZW50Tm9kZSogZXhwclN0YXRlbWVudCA9IHBy
b2dyYW0tPnNpbmdsZVN0YXRlbWVudCgpOworICAgIEFTU0VSVChleHByU3RhdGVtZW50KTsKKyAg
ICBBU1NFUlQoZXhwclN0YXRlbWVudC0+aXNFeHByU3RhdGVtZW50KCkpOworICAgIEV4cHJlc3Np
b25Ob2RlKiBmdW5jRXhwciA9IHN0YXRpY19jYXN0PEV4cHJTdGF0ZW1lbnROb2RlKj4oZXhwclN0
YXRlbWVudCktPmV4cHIoKTsKKyAgICBBU1NFUlQoZnVuY0V4cHIpOworICAgIEFTU0VSVChmdW5j
RXhwci0+aXNGdW5jRXhwck5vZGUoKSk7CisgICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9IHN0
YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGZ1bmNFeHByKS0+Ym9keSgpOworICAgIEFTU0VSVChi
b2R5KTsKKyAgICBBU1NFUlQoYm9keS0+aWRlbnQoKS5pc051bGwoKSk7CisKKyAgICBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OmNyZWF0ZSgmZ2xvYmFsRGF0YSwgc291cmNlLCBib2R5KTsKKyAgICBmdW5j
dGlvbkV4ZWN1dGFibGUtPm1fbmFtZVZhbHVlLnNldChnbG9iYWxEYXRhLCBmdW5jdGlvbkV4ZWN1
dGFibGUsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBuYW1lLnN0cmluZygpKSk7CisKKyAgICBzaXpl
X3QgaW5kZXggPSBtX3JhbmRvbUdlbmVyYXRvci5nZXRVaW50MzIoKSAlIGtNYXhHbG9iYWxGdW5j
dGlvbkVudHJpZXM7CisgICAgaWYgKG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25zW2luZGV4XS5zZWNv
bmQpCisgICAgICAgIG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25JbmRpY2VzLnJlbW92ZShtX2NhY2hl
ZEdsb2JhbEZ1bmN0aW9uc1tpbmRleF0uZmlyc3QpOworICAgIG1fY2FjaGVkR2xvYmFsRnVuY3Rp
b25JbmRpY2VzLnNldChrZXksIGluZGV4KTsKKyAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uc1tp
bmRleF0uc2Vjb25kLnNldChnbG9iYWxEYXRhLCBmdW5jdGlvbkV4ZWN1dGFibGUpOworICAgIG1f
Y2FjaGVkR2xvYmFsRnVuY3Rpb25zW2luZGV4XS5maXJzdCA9IGtleTsKKworICAgIHJldHVybiBm
dW5jdGlvbkV4ZWN1dGFibGU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29kZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ0NjE3MTg5ZWM0ZTY4OTQ3NjE3MTIxZTJhODZmMDkz
YzlmZGM3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvZGVDYWNoZV9oCisjZGVmaW5lIENvZGVDYWNo
ZV9oCisKKyNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiUGFy
c2VyTW9kZXMuaCIKKyNpbmNsdWRlICJTdHJvbmcuaCIKKyNpbmNsdWRlICJXZWFrUmFuZG9tLmgi
CisKKyNpbmNsdWRlIDx3dGYvRml4ZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV2YWxFeGVjdXRhYmxlOworY2xhc3Mg
SWRlbnRpZmllcjsKK2NsYXNzIFByb2dyYW1FeGVjdXRhYmxlOworY2xhc3MgVW5saW5rZWRDb2Rl
QmxvY2s7CitjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7CitjbGFzcyBKU0dsb2JhbERhdGE7CitzdHJ1Y3QgUGFy
c2VyRXJyb3I7CitjbGFzcyBTb3VyY2VDb2RlOworY2xhc3MgU291cmNlUHJvdmlkZXI7CisKK2Ns
YXNzIENvZGVDYWNoZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q29kZUNhY2hl
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ29kZUNhY2hlKTsgfQorCisgICAgVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBnZXRQcm9ncmFtQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYs
IFByb2dyYW1FeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyU3RyaWN0bmVz
cywgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CisgICAgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrKiBnZXRFdmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIEV2YWxFeGVj
dXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyU3RyaWN0bmVzcywgRGVidWdnZXJN
b2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CisgICAgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayogZ2V0RnVuY3Rpb25Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiwgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CisgICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2Rl
KEpTR2xvYmFsRGF0YSYsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFy
c2VyRXJyb3ImKTsKKyAgICB+Q29kZUNhY2hlKCk7CisKKyAgICBlbnVtIENvZGVUeXBlIHsgRXZh
bFR5cGUsIFByb2dyYW1UeXBlLCBGdW5jdGlvblR5cGUgfTsKKyAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxTdHJpbmcsIHVuc2lnbmVkPiBDb2RlQmxvY2tLZXk7CisgICAgdHlwZWRlZiBIYXNoTWFwPENv
ZGVCbG9ja0tleSwgdW5zaWduZWQ+IENvZGVCbG9ja0luZGljZXNNYXA7CisgICAgdHlwZWRlZiBz
dGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IEdsb2JhbEZ1bmN0aW9uS2V5OworICAgIHR5cGVkZWYg
SGFzaE1hcDxHbG9iYWxGdW5jdGlvbktleSwgdW5zaWduZWQ+IEdsb2JhbEZ1bmN0aW9uSW5kaWNl
c01hcDsKKworcHJpdmF0ZToKKyAgICBDb2RlQ2FjaGUoKTsKKworICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sqIGdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiwgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CisK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRh
YmxlVHlwZT4gaW5saW5lIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZ2V0Q29kZUJsb2NrKEpTR2xv
YmFsRGF0YSYsIEV4ZWN1dGFibGVUeXBlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyU3Ry
aWN0bmVzcywgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CisgICAg
Q29kZUJsb2NrS2V5IG1ha2VDb2RlQmxvY2tLZXkoY29uc3QgU291cmNlQ29kZSYsIENvZGVUeXBl
LCBKU1BhcnNlclN0cmljdG5lc3MpOworICAgIENvZGVCbG9ja0luZGljZXNNYXAgbV9jYWNoZWRD
b2RlQmxvY2tJbmRpY2VzOworICAgIEdsb2JhbEZ1bmN0aW9uS2V5IG1ha2VHbG9iYWxGdW5jdGlv
bktleShjb25zdCBTb3VyY2VDb2RlJiwgY29uc3QgU3RyaW5nJik7CisgICAgR2xvYmFsRnVuY3Rp
b25JbmRpY2VzTWFwIG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25JbmRpY2VzOworCisgICAgZW51bSB7
CisgICAgICAgIGtNYXhDb2RlQmxvY2tFbnRyaWVzID0gMTAyNCwKKyAgICAgICAga01heEdsb2Jh
bEZ1bmN0aW9uRW50cmllcyA9IDEwMjQKKyAgICB9OworCisgICAgRml4ZWRBcnJheTxzdGQ6OnBh
aXI8Q29kZUJsb2NrS2V5LCBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+ID4sIGtNYXhDb2RlQmxv
Y2tFbnRyaWVzPiBtX2NhY2hlZENvZGVCbG9ja3M7CisgICAgRml4ZWRBcnJheTxzdGQ6OnBhaXI8
R2xvYmFsRnVuY3Rpb25LZXksIFN0cm9uZzxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gPiwg
a01heEdsb2JhbEZ1bmN0aW9uRW50cmllcz4gbV9jYWNoZWRHbG9iYWxGdW5jdGlvbnM7CisgICAg
V2Vha1JhbmRvbSBtX3JhbmRvbUdlbmVyYXRvcjsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDBhNDUzZWVhMDU2
Njg0MGZlOTlmYmM1MmQ1MWRmMGIyMjljN2ZiZDMuLjBjNGNhYmQ4NGQ5MTJhYjkwM2FjMjdlNzg4
OWNjOWM2NmE3MDU2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRXhlY3V0YWJsZS5oIgogCisjaW5jbHVkZSAiQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIu
aCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgpAQCAtMTMzLDE2ICsxMzQsMTQgQEAgdm9pZCBQcm9n
cmFtRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAKIGNvbnN0IENsYXNzSW5mbyBG
dW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uRXhlY3V0YWJsZSIsICZTY3Jp
cHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRnVuY3Rpb25F
eGVjdXRhYmxlKSB9OwogCi1GdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpCi0gICAgOiBT
Y3JpcHRFeGVjdXRhYmxlKGdsb2JhbERhdGEuZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdl
dCgpLCBnbG9iYWxEYXRhLCBub2RlLT5zb3VyY2UoKSwgbm9kZS0+aXNTdHJpY3RNb2RlKCkpCi0g
ICAgLCBtX2ZvcmNlVXNlc0FyZ3VtZW50cyhub2RlLT51c2VzQXJndW1lbnRzKCkpCi0gICAgLCBt
X3BhcmFtZXRlcnMobm9kZS0+cGFyYW1ldGVycygpKQotICAgICwgbV9uYW1lKG5vZGUtPmlkZW50
KCkpCi0gICAgLCBtX2luZmVycmVkTmFtZShub2RlLT5pbmZlcnJlZE5hbWUoKS5pc051bGwoKSA/
IGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyIDogbm9kZS0+aW5mZXJy
ZWROYW1lKCkpCi0gICAgLCBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZShub2RlLT5mdW5j
dGlvbk5hbWVJc0luU2NvcGVUb2dnbGUoKSkKK0Z1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25F
eGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlLCB1bnNp
Z25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lKQorICAgIDogU2NyaXB0RXhlY3V0YWJs
ZShnbG9iYWxEYXRhLmZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgZ2xvYmFsRGF0
YSwgc291cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCisgICAg
LCBtX3VubGlua2VkRXhlY3V0YWJsZShnbG9iYWxEYXRhLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFi
bGUpCiB7Ci0gICAgbV9maXJzdExpbmUgPSBub2RlLT5saW5lTm8oKTsKLSAgICBtX2xhc3RMaW5l
ID0gbm9kZS0+bGFzdExpbmUoKTsKKyAgICBBU1NFUlQoIXNvdXJjZS5pc051bGwoKSk7CisgICAg
QVNTRVJUKHNvdXJjZS5sZW5ndGgoKSk7CisgICAgbV9maXJzdExpbmUgPSBmaXJzdExpbmU7Cisg
ICAgbV9sYXN0TGluZSA9IGxhc3RMaW5lOwogfQogCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0xOTEsNyArMTkwLDYgQEAgSlNPYmplY3QqIEV2YWxF
eGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29w
ZSwgSklUQ28KICAgICBVTlVTRURfUEFSQU0oaml0VHlwZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJ5
dGVjb2RlSW5kZXgpOwogI2VuZGlmCi0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKTsKICAgICAKQEAgLTIwMCwyOCArMTk4LDIxIEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJs
ZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpJVENv
CiAgICAgICAgIG5ld0NvZGVCbG9jay0+c2V0QWx0ZXJuYXRpdmUoc3RhdGljX3BvaW50ZXJfY2Fz
dDxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9jay5yZWxlYXNlKCkpKTsKICAgICAgICAgbV9ldmFs
Q29kZUJsb2NrID0gbmV3Q29kZUJsb2NrLnJlbGVhc2UoKTsKICAgICB9IGVsc2UgeworICAgICAg
ICBVTlVTRURfUEFSQU0oc2NvcGUpOworICAgICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7
CisgICAgICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgaWYg
KCFsZXhpY2FsR2xvYmFsT2JqZWN0LT5ldmFsRW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGxleGljYWxHbG9iYWxPYmpl
Y3QtPmV2YWxEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7Ci0gICAgICAgIFJlZlB0cjxFdmFsTm9k
ZT4gZXZhbE5vZGUgPSBwYXJzZTxFdmFsTm9kZT4oZ2xvYmFsRGF0YSwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgbV9zb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNl
U3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgRXZhbE5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJz
ZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgbGV4aWNhbEdsb2JhbE9iamVjdC0+
ZGVidWdnZXIoKSwgZXhlYywgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmICghZXZhbE5vZGUpIHsK
LSAgICAgICAgICAgIEFTU0VSVChleGNlcHRpb24pOworCisgICAgICAgIEpTT2JqZWN0KiBleGNl
cHRpb24gPSAwOworICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkRXZhbENv
ZGUgPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT5jcmVhdGVFdmFsQ29kZUJsb2NrKGV4ZWMsIHRoaXMs
ICZleGNlcHRpb24pOworICAgICAgICBpZiAoIXVubGlua2VkRXZhbENvZGUpCiAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uOwotICAgICAgICB9Ci0gICAgICAgIHJlY29yZFBhcnNlKGV2YWxO
b2RlLT5mZWF0dXJlcygpLCBldmFsTm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgZXZhbE5v
ZGUtPmxpbmVObygpLCBldmFsTm9kZS0+bGFzdExpbmUoKSk7Ci0gICAgICAgIAotICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwotICAg
ICAgICAKKwogICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1f
ZXZhbENvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRD
b2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7Ci0gICAgICAgIG1f
ZXZhbENvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIGdsb2JhbE9i
amVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGUtPmxvY2FsRGVwdGgoKSwgcHJldmlvdXND
b2RlQmxvY2sucmVsZWFzZSgpKSk7Ci0gICAgICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4g
Z2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihldmFsTm9kZS5nZXQoKSwg
c2NvcGUsIG1fZXZhbENvZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbV9ldmFsQ29kZUJsb2NrLmdl
dCgpLCAhIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IE9wdGltaXppbmdDb21waWxh
dGlvbiA6IEZpcnN0Q29tcGlsYXRpb24pKSk7Ci0gICAgICAgIGlmICgoZXhjZXB0aW9uID0gZ2Vu
ZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2stPnJlbGVhc2VB
bHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0YSgpOwotICAg
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
ZXZhbE5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgICAgIG1fdW5saW5rZWRFdmFsQ29kZUJsb2Nr
LnNldCgqZ2xvYmFsRGF0YSwgdGhpcywgdW5saW5rZWRFdmFsQ29kZSk7CisgICAgICAgIG1fZXZh
bENvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIHVubGlua2VkRXZh
bENvZGUsIGxleGljYWxHbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNjb3BlLT5s
b2NhbERlcHRoKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwogICAgICAgICBtX2V2
YWxDb2RlQmxvY2stPmNvcHlQb3N0UGFyc2VEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAgICAgfQog
CkBAIC0yNTcsNiArMjQ4LDcgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIFNjcmlwdEV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3Qt
Pm1fZXZhbENvZGVCbG9jaykKICAgICAgICAgdGhpc09iamVjdC0+bV9ldmFsQ29kZUJsb2NrLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV91bmxpbmtlZEV2YWxDb2RlQmxvY2spOwogfQogCiB2b2lkIEV2YWxFeGVjdXRhYmxlOjp1bmxp
bmtDYWxscygpCkBAIC0yNzIsMTkgKzI2NCwyMCBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp1bmxp
bmtDYWxscygpCiB2b2lkIEV2YWxFeGVjdXRhYmxlOjpjbGVhckNvZGUoKQogewogICAgIG1fZXZh
bENvZGVCbG9jay5jbGVhcigpOworICAgIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLmNsZWFyKCk7
CiAgICAgQmFzZTo6Y2xlYXJDb2RlKCk7CiB9CiAKIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJs
ZTo6Y2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTT2JqZWN0KiBleGNlcHRp
b24gPSAwOworICAgIFBhcnNlckVycm9yIGVycm9yOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgUmVmUHRyPFBy
b2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9iYWxEYXRhLCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBKU1BhcnNlTm9y
bWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDog
SlNQYXJzZVByb2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVj
LCAmZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gcGFy
c2U8UHJvZ3JhbU5vZGU+KGdsb2JhbERhdGEsIG1fc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpT
UGFyc2VOb3JtYWwsIFByb2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlv
bkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGVycm9yKTsKICAgICBpZiAocHJvZ3JhbU5vZGUp
CiAgICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChleGNlcHRpb24pOwotICAgIHJldHVybiBl
eGNlcHRpb247CisgICAgQVNTRVJUKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JO
b25lKTsKKyAgICByZXR1cm4gZXJyb3IudG9FcnJvck9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBtX3NvdXJjZSk7CiB9CiAKIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZU9w
dGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KQpAQCAtMzEzLDM1ICszMDYsMTMgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxl
Ojpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSkkKICAg
ICBVTlVTRURfUEFSQU0oaml0VHlwZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgp
OwogI2VuZGlmCi0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7Ci0gICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICAK
ICAgICBpZiAoISFtX3Byb2dyYW1Db2RlQmxvY2spIHsKICAgICAgICAgT3duUHRyPFByb2dyYW1D
b2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQcm9ncmFtQ29kZUJsb2NrKENv
ZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqbV9wcm9ncmFtQ29kZUJsb2NrKSk7CiAgICAgICAg
IG5ld0NvZGVCbG9jay0+c2V0QWx0ZXJuYXRpdmUoc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxv
Y2s+KG1fcHJvZ3JhbUNvZGVCbG9jay5yZWxlYXNlKCkpKTsKICAgICAgICAgbV9wcm9ncmFtQ29k
ZUJsb2NrID0gbmV3Q29kZUJsb2NrLnJlbGVhc2UoKTsKICAgICB9IGVsc2UgewotICAgICAgICBS
ZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gcGFyc2U8UHJvZ3JhbU5vZGU+KGdsb2Jh
bERhdGEsIGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlLCAwLCBJZGVudGlmaWVyKCksIGlz
U3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2Rl
Ojppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNv
ZGUsIGxleGljYWxHbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOwot
ICAgICAgICBpZiAoIXByb2dyYW1Ob2RlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9u
KTsKLSAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgICAgIH0KLSAgICAgICAgcmVj
b3JkUGFyc2UocHJvZ3JhbU5vZGUtPmZlYXR1cmVzKCksIHByb2dyYW1Ob2RlLT5oYXNDYXB0dXJl
ZFZhcmlhYmxlcygpLCBwcm9ncmFtTm9kZS0+bGluZU5vKCksIHByb2dyYW1Ob2RlLT5sYXN0TGlu
ZSgpKTsKLQogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmds
b2JhbE9iamVjdCgpOwotICAgIAotICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0Nv
ZGVCbG9jayA9IG1fcHJvZ3JhbUNvZGVCbG9jay5yZWxlYXNlKCk7Ci0gICAgICAgIEFTU0VSVCgo
aml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9j
ayk7Ci0gICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQcm9ncmFtQ29k
ZUJsb2NrKHRoaXMsIEdsb2JhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIo
KSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7Ci0gICAgICAgIE93blB0cjxCeXRlY29k
ZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihwcm9n
cmFtTm9kZS5nZXQoKSwgc2NvcGUsIGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9n
cmFtQ29kZUJsb2NrLmdldCgpLCAhIW1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/
IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24pKSk7Ci0gICAgICAgIGlm
ICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAgICAgICAgbV9w
cm9ncmFtQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJsb2NrPiht
X3Byb2dyYW1Db2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgIHBy
b2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOwotICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsK
LSAgICAgICAgfQotCi0gICAgICAgIHByb2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOworICAgICAg
ICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlz
LCBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2Uo
KS5wcm92aWRlcigpLCBtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpKSk7CiAgICAgICAgIG1f
cHJvZ3JhbUNvZGVCbG9jay0+Y29weVBvc3RQYXJzZURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKICAg
ICB9CiAKQEAgLTM3OCw2ICszNDksNjcgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dW5saW5r
Q2FsbHMoKQogI2VuZGlmCiB9CiAKK2ludCBQcm9ncmFtRXhlY3V0YWJsZTo6YWRkR2xvYmFsVmFy
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBD
b25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQorewor
ICAgIC8vIFRyeSB0byBzaGFyZSB0aGUgc3ltYm9sVGFibGUgaWYgcG9zc2libGUKKyAgICBTaGFy
ZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCk7
CisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uTW9kZSk7CisgICAgaW50IGluZGV4ID0gc3ltYm9s
VGFibGUtPnNpemUoKTsKKyAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCAoY29u
c3RhbnRNb2RlID09IElzQ29uc3RhbnQpID8gUmVhZE9ubHkgOiAwKTsKKyAgICBpZiAoZnVuY3Rp
b25Nb2RlID09IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUpCisgICAgICAgIG5ld0VudHJ5LmF0dGVt
cHRUb1dhdGNoKCk7CisgICAgU3ltYm9sVGFibGU6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xU
YWJsZS0+YWRkKGlkZW50LmltcGwoKSwgbmV3RW50cnkpOworICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpIHsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOwor
ICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKTsKKyAgICB9
CisgICAgcmV0dXJuIGluZGV4OworfQorCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6Omlu
aXRhbGl6ZUdsb2JhbFByb3BlcnRpZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNTY29wZSogc2NvcGUpCit7CisgICAgQVNTRVJUKHNjb3BlKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwor
ICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCgmZ2xvYmFsT2JqZWN0LT5nbG9i
YWxEYXRhKCkgPT0gJmdsb2JhbERhdGEpOworCisgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7
CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGUgPSBnbG9iYWxPYmpl
Y3QtPmNyZWF0ZVByb2dyYW1Db2RlQmxvY2soY2FsbEZyYW1lLCB0aGlzLCAmZXhjZXB0aW9uKTsK
KyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworCisgICAgbV91
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suc2V0KGdsb2JhbERhdGEsIHRoaXMsIHVubGlua2VkQ29k
ZSk7CisKKyAgICBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplciBvcHRpbWl6ZXIoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0KTsKKworICAgIGNvbnN0IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6
VmFyaWFibGVEZWNsYXRpb25zJiB2YXJpYWJsZURlY2xhcmF0aW9ucyA9IHVubGlua2VkQ29kZS0+
dmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKKyAgICBjb25zdCBVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2s6OkZ1bmN0aW9uRGVjbGF0aW9ucyYgZnVuY3Rpb25EZWNsYXJhdGlvbnMgPSB1bmxpbmtlZENv
ZGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25zKCk7CisKKyAgICBzaXplX3QgbmV3R2xvYmFscyA9IHZh
cmlhYmxlRGVjbGFyYXRpb25zLnNpemUoKSArIGZ1bmN0aW9uRGVjbGFyYXRpb25zLnNpemUoKTsK
KyAgICBpZiAoIW5ld0dsb2JhbHMpCisgICAgICAgIHJldHVybiAwOworICAgIGdsb2JhbE9iamVj
dC0+YWRkUmVnaXN0ZXJzKG5ld0dsb2JhbHMpOworICAgIENhbGxGcmFtZSogZ2xvYmFsRXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmdW5jdGlvbkRlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBib29sIHByb3Bl
cnR5RGlkRXhpc3QgPSBnbG9iYWxPYmplY3QtPnJlbW92ZURpcmVjdChnbG9iYWxEYXRhLCBmdW5j
dGlvbkRlY2xhcmF0aW9uc1tpXS5maXJzdCk7IC8vIE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9ucyBv
dmVyd3JpdGUgZXhpc3RpbmcgcHJvcGVydGllcy4KKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlID0gZnVuY3Rpb25EZWNsYXJhdGlv
bnNbaV0uc2Vjb25kLmdldCgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNGdW5jdGlvbjo6
Y3JlYXRlKGdsb2JhbEV4ZWMsIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5saW5rKGdsb2Jh
bERhdGEsIG1fc291cmNlLCBsaW5lTm8oKSwgMCksIHNjb3BlKTsKKyAgICAgICAgaW50IGluZGV4
ID0gYWRkR2xvYmFsVmFyKGdsb2JhbE9iamVjdCwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uZmly
c3QsIElzVmFyaWFibGUsCisgICAgICAgICAgICAhcHJvcGVydHlEaWRFeGlzdCA/IElzRnVuY3Rp
b25Ub1NwZWNpYWxpemUgOiBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6YWJsZSk7CisgICAgICAg
IGdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChpbmRleCkuc2V0KGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgdmFsdWUpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyaWFi
bGVEZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+
aGFzUHJvcGVydHkoZ2xvYmFsRXhlYywgdmFyaWFibGVEZWNsYXJhdGlvbnNbaV0uZmlyc3QpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGFkZEdsb2JhbFZhcihnbG9iYWxPYmplY3Qs
IHZhcmlhYmxlRGVjbGFyYXRpb25zW2ldLmZpcnN0LAorICAgICAgICAgICAgKHZhcmlhYmxlRGVj
bGFyYXRpb25zW2ldLnNlY29uZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElz
Q29uc3RhbnQgOiBJc1ZhcmlhYmxlLAorICAgICAgICAgICAgTm90RnVuY3Rpb25Pck5vdFNwZWNp
YWxpemFibGUpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBQcm9ncmFtRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFByb2dyYW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb2dyYW1FeGVj
dXRhYmxlKj4oY2VsbCk7CkBAIC0zODUsNiArNDE3LDcgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAg
IENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4o
KSk7CiAgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZFByb2dyYW1D
b2RlQmxvY2spOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2RlQmxvY2spCiAgICAg
ICAgIHRoaXNPYmplY3QtPm1fcHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiB9CkBAIC0zOTIsNiArNDI1LDcgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogdm9pZCBQcm9ncmFt
RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKIHsKICAgICBtX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIo
KTsKKyAgICBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOwogICAgIEJhc2U6OmNs
ZWFyQ29kZSgpOwogfQogCkBAIC00MzgsMTIgKzQ3MiwxMiBAQCBKU09iamVjdCogRnVuY3Rpb25F
eGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNTYwogI2lmIEVOQUJMRShKSVQpCiBib29sIEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGls
ZUZvckNhbGwoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rp
b25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2Fs
bCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBKSVRDb2Rl
Ojpib3R0b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAg
IHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2Nr
Rm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
LCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOwogfQogCiBib29sIEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNvbnN0cnVj
dChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBw
cm9wcmlhdGUoZXhlYywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0
cnVjdCwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUs
IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSwgVUlOVF9NQVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CisgICAgcmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoZXhlYywgbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdCwgbV9qaXRDb2RlRm9y
Q29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSwgVUlOVF9N
QVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9CiAjZW5kaWYKIApAQCAtNDUyLDQ5ICs0ODYs
MzAgQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29kZUJsb2NrV2l0
aEJ5dGVjb2RlRm9yKENvZGVTcGVjaWFsaXphdGkKICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxv
Y2tGb3Ioa2luZCk7CiB9CiAKLVBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9u
RXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihKU1Njb3BlKiBzY29wZSwgQ29tcGlsYXRp
b25LaW5kIGNvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXph
dGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQorUGFzc093blB0cjxGdW5jdGlvbkNvZGVC
bG9jaz4gRnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKEpTU2NvcGUqIHNj
b3BlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3Qq
JiBleGNlcHRpb24pCiB7CiAgICAgaWYgKCEhY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2lu
ZCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2soQ29kZUJs
b2NrOjpDb3B5UGFyc2VkQmxvY2ssICpjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKSkp
OwotICAgIAotICAgIGV4Y2VwdGlvbiA9IDA7CisKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSBzY29wZS0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBzY29wZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+
IGJvZHkgPSBwYXJzZTxGdW5jdGlvbkJvZHlOb2RlPigKLSAgICAgICAgZ2xvYmFsRGF0YSwKLSAg
ICAgICAgZ2xvYmFsT2JqZWN0LAotICAgICAgICBtX3NvdXJjZSwKLSAgICAgICAgbV9wYXJhbWV0
ZXJzLmdldCgpLAotICAgICAgICBuYW1lKCksCi0gICAgICAgIGlzU3RyaWN0TW9kZSgpID8gSlNQ
YXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsCi0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGU6Omlz
RnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwK
LSAgICAgICAgMCwKLSAgICAgICAgMCwKLSAgICAgICAgJmV4Y2VwdGlvbgotICAgICk7Ci0KLSAg
ICBpZiAoIWJvZHkpIHsKLSAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgUGFyc2VyRXJy
b3IgZXJyb3I7CisgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSA9IGdsb2JhbE9iamVjdC0+
aGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKKyAgICBQcm9maWxlck1v
ZGUgcHJvZmlsZXJNb2RlID0gZ2xvYmFsT2JqZWN0LT5oYXNQcm9maWxlcigpID8gUHJvZmlsZXJP
biA6IFByb2ZpbGVyT2ZmOworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrID0gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcigqZ2xvYmFsRGF0
YSwgbV9zb3VyY2UsIHNwZWNpYWxpemF0aW9uS2luZCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1v
ZGUsIGVycm9yKTsKKyAgICByZWNvcmRQYXJzZShtX3VubGlua2VkRXhlY3V0YWJsZS0+ZmVhdHVy
ZXMoKSwgbV91bmxpbmtlZEV4ZWN1dGFibGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGxpbmVO
bygpLCBsYXN0TGluZSgpKTsKKworICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spIHsKKyAgICAg
ICAgZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdChnbG9iYWxPYmplY3QsIG1fc291cmNl
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIGlmIChtX2ZvcmNlVXNlc0Fy
Z3VtZW50cykKLSAgICAgICAgYm9keS0+c2V0VXNlc0FyZ3VtZW50cygpOwotICAgIGJvZHktPmZp
bmlzaFBhcnNpbmcobV9wYXJhbWV0ZXJzLCBtX25hbWUsIG1fZnVuY3Rpb25OYW1lSXNJblNjb3Bl
VG9nZ2xlKTsKLSAgICByZWNvcmRQYXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXNDYXB0
dXJlZFZhcmlhYmxlcygpLCBib2R5LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7Ci0KLSAg
ICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHJlc3VsdDsKLSAgICBBU1NFUlQoKGNvbXBpbGF0
aW9uS2luZCA9PSBGaXJzdENvbXBpbGF0aW9uKSA9PSAhY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0
aW9uS2luZCkpOwotICAgIHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0
aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291
cmNlKCkuc3RhcnRPZmZzZXQoKSwgc3BlY2lhbGl6YXRpb25LaW5kID09IENvZGVGb3JDb25zdHJ1
Y3QpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihu
ZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGUsIHJlc3VsdC0+c3ltYm9sVGFi
bGUoKSwgcmVzdWx0LmdldCgpLCBjb21waWxhdGlvbktpbmQpKSk7Ci0gICAgZXhjZXB0aW9uID0g
Z2VuZXJhdG9yLT5nZW5lcmF0ZSgpOwotICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7Ci0gICAgaWYg
KGV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBPd25QdHI8RnVuY3Rp
b25Db2RlQmxvY2s+IHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlz
LCB1bmxpbmtlZENvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBz
b3VyY2UoKS5zdGFydE9mZnNldCgpKSk7CiAgICAgcmVzdWx0LT5jb3B5UG9zdFBhcnNlRGF0YUZy
b20oY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkuZ2V0KCkpOwogICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOwogfQogCisKIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNv
bXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSklU
Q29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlwZSkp
OwpAQCAtNTA3LDcgKzUyMiw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzCiAjZW5kaWYKICAg
ICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhbV9jb2Rl
QmxvY2tGb3JDYWxsKTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uOwotICAgIE93blB0cjxGdW5j
dGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwg
ISFtX2NvZGVCbG9ja0ZvckNhbGwgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBp
bGF0aW9uLCBDb2RlRm9yQ2FsbCwgZXhjZXB0aW9uKTsKKyAgICBPd25QdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsIENvZGVGb3JD
YWxsLCBleGNlcHRpb24pOwogICAgIGlmICghbmV3Q29kZUJsb2NrKQogICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uOwogCkBAIC01MTYsMTAgKzUzMSw5IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBz
CiAgICAgCiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+
bnVtUGFyYW1ldGVycygpOwogICAgIEFTU0VSVChtX251bVBhcmFtZXRlcnNGb3JDYWxsKTsKLSAg
ICBtX3N5bWJvbFRhYmxlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+c3ltYm9sVGFibGUoKSk7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJl
cGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9qaXRD
b2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxl
LCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBDb2RlRm9yQ2FsbCkpCisgICAgaWYgKCFwcmVwYXJl
RnVuY3Rpb25Gb3JFeGVjdXRpb24oZXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENvZGVG
b3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIGppdFR5cGUsIGJ5dGVjb2Rl
SW5kZXgsIENvZGVGb3JDYWxsKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIApAQCAtNTQ0
LDcgKzU1OCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25z
dHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvCiAgICAgCiAgICAgQVNTRVJUKChq
aXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ29u
c3RydWN0KTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uOwotICAgIE93blB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwgISFtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdCA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGls
YXRpb24sIENvZGVGb3JDb25zdHJ1Y3QsIGV4Y2VwdGlvbik7CisgICAgT3duUHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJsb2NrRm9yKHNjb3BlLCBDb2Rl
Rm9yQ29uc3RydWN0LCBleGNlcHRpb24pOwogICAgIGlmICghbmV3Q29kZUJsb2NrKQogICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uOwogCkBAIC01NTMsMTAgKzU2Nyw5IEBAIEpTT2JqZWN0KiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvCiAgICAgCiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QtPm51bVBhcmFtZXRlcnMoKTsKICAgICBBU1NFUlQobV9udW1QYXJh
bWV0ZXJzRm9yQ29uc3RydWN0KTsKLSAgICBtX3N5bWJvbFRhYmxlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpKTsKIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKCFwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oZXhl
YywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdCwgbV9qaXRD
b2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUsIGppdFR5cGUsIGJ5
dGVjb2RlSW5kZXgsIENvZGVGb3JDb25zdHJ1Y3QpKQorICAgIGlmICghcHJlcGFyZUZ1bmN0aW9u
Rm9yRXhlY3V0aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JD
b25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBi
eXRlY29kZUluZGV4LCBDb2RlRm9yQ29uc3RydWN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5k
aWYKIApAQCAtNTkyLDEyICs2MDUsMTEgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBDT01QSUxF
X0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAg
IFNjcmlwdEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0g
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmFtZVZhbHVlKTsKLSAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CiAgICAgaWYgKHRoaXNPYmplY3Qt
Pm1fY29kZUJsb2NrRm9yQ2FsbCkKICAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JD
YWxsLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV91bmxpbmtlZEV4ZWN1dGFibGUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKQpAQCAtNjA3LDYgKzYxOSwxMyBAQCB2b2lk
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKQogICAgIGNsZWFy
Q29kZSgpOwogfQogCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJVbmxpbmtlZENvZGVJ
Zk5vdENvbXBpbGluZygpCit7CisgICAgaWYgKGlzQ29tcGlsaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y2xlYXJDb2RlKCk7Cit9CisKIHZvaWQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjbGVhckNvZGUoKQogewogICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5j
bGVhcigpOwpAQCAtNjMwLDM5ICs2NDksMTkgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnVu
bGlua0NhbGxzKCkKIAogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZy
b21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4ZWNTdGF0ZSogZXhlYywgRGVi
dWdnZXIqIGRlYnVnZ2VyLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTT2JqZWN0KiogZXhj
ZXB0aW9uKQogewotICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3Jh
bSA9IHBhcnNlPFByb2dyYW1Ob2RlPigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5v
ZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFt
Q29kZSwgZGVidWdnZXIsIGV4ZWMsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0g
ICAgICAgIEFTU0VSVCgqZXhjZXB0aW9uKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogdW5saW5rZWRGdW5jdGlvbiA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xv
YmFsQ29kZShuYW1lLCBleGVjLCBkZWJ1Z2dlciwgc291cmNlLCBleGNlcHRpb24pOworICAgIGlm
ICghdW5saW5rZWRGdW5jdGlvbikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8g
VGhpcyBmdW5jdGlvbiBhc3N1bWVzIGFuIGlucHV0IHN0cmluZyB0aGF0IHdvdWxkIHJlc3VsdCBp
biBhIHNpbmdsZSBhbm9ueW1vdXMgZnVuY3Rpb24gZXhwcmVzc2lvbi4KLSAgICBTdGF0ZW1lbnRO
b2RlKiBleHByU3RhdGVtZW50ID0gcHJvZ3JhbS0+c2luZ2xlU3RhdGVtZW50KCk7Ci0gICAgQVNT
RVJUKGV4cHJTdGF0ZW1lbnQpOwotICAgIEFTU0VSVChleHByU3RhdGVtZW50LT5pc0V4cHJTdGF0
ZW1lbnQoKSk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGZ1bmNFeHByID0gc3RhdGljX2Nhc3Q8RXhw
clN0YXRlbWVudE5vZGUqPihleHByU3RhdGVtZW50KS0+ZXhwcigpOwotICAgIEFTU0VSVChmdW5j
RXhwcik7Ci0gICAgQVNTRVJUKGZ1bmNFeHByLT5pc0Z1bmNFeHByTm9kZSgpKTsKLSAgICBGdW5j
dGlvbkJvZHlOb2RlKiBib2R5ID0gc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4oZnVuY0V4cHIp
LT5ib2R5KCk7Ci0gICAgQVNTRVJUKGJvZHkpOwotICAgIEFTU0VSVChib2R5LT5pZGVudCgpLmlz
TnVsbCgpKTsKLQotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0g
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBib2R5KTsKLSAg
ICBmdW5jdGlvbkV4ZWN1dGFibGUtPm1fbmFtZVZhbHVlLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IGZ1bmN0aW9uRXhlY3V0YWJsZSwganNTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZS5z
dHJpbmcoKSkpOwotICAgIHJldHVybiBmdW5jdGlvbkV4ZWN1dGFibGU7CisgICAgdW5zaWduZWQg
Zmlyc3RMaW5lID0gc291cmNlLmZpcnN0TGluZSgpICsgdW5saW5rZWRGdW5jdGlvbi0+Zmlyc3RM
aW5lT2Zmc2V0KCk7CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZz
ZXQoKSArIHVubGlua2VkRnVuY3Rpb24tPnN0YXJ0T2Zmc2V0KCk7CisgICAgdW5zaWduZWQgc291
cmNlTGVuZ3RoID0gdW5saW5rZWRGdW5jdGlvbi0+c291cmNlTGVuZ3RoKCk7CisgICAgU291cmNl
Q29kZSBmdW5jdGlvblNvdXJjZShzb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRPZmZzZXQsIHN0YXJ0
T2Zmc2V0ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUpOworICAgIHJldHVybiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uU291cmNlLCB1bmxp
bmtlZEZ1bmN0aW9uLCBmaXJzdExpbmUsIHVubGlua2VkRnVuY3Rpb24tPmxpbmVDb3VudCgpKTsK
IH0KIAogU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJpbmcoKSBjb25zdAogewot
ICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICptX3BhcmFtZXRlcnM7Ci0gICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoc2l6ZV90IHBvcyA9IDA7IHBvcyA8IHBh
cmFtZXRlcnMuc2l6ZSgpOyArK3BvcykgewotICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgp
KQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICBidWls
ZGVyLmFwcGVuZChwYXJhbWV0ZXJzW3Bvc10uc3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOworICAgIHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+cGFy
YW1TdHJpbmcoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5oCmluZGV4IDc2YTUzN2RhMzI0YWFjOTIwM2NkODRkMDkxY2M4YzkzMmYyZmYwMzYuLjc0
YjRhZGQ3NWMzMmYzODZkNDRjYWUyNDg4YjE5MjRkZTJjODBjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl
ICJMTEludENMb29wLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rv
b2wuaCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzY0LDkgKzM2NSwxOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Zl
YXR1cmVzICYgU3RyaWN0TW9kZUZlYXR1cmU7IH0KIAogICAgICAgICB2b2lkIHVubGlua0NhbGxz
KCk7CisKKyAgICAgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9m
ZWF0dXJlczsgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CiAKKyAgICAgICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJv
b2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9mZWF0dXJlcyA9IGZlYXR1cmVzOworICAgICAgICAgICAg
bV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGhhc0NhcHR1cmVkVmFyaWFibGVzOworICAgICAgICAg
ICAgbV9maXJzdExpbmUgPSBmaXJzdExpbmU7CisgICAgICAgICAgICBtX2xhc3RMaW5lID0gbGFz
dExpbmU7CisgICAgICAgIH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKQEAgLTM3OSwxNCAr
MzkwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIHZv
aWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFy
aWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJlczsKLSAgICAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJp
YWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKLSAgICAgICAgICAgIG1fZmlyc3RMaW5lID0g
Zmlyc3RMaW5lOwotICAgICAgICAgICAgbV9sYXN0TGluZSA9IGxhc3RMaW5lOwotICAgICAgICB9
Ci0KICAgICAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKICAgICAgICAgQ29kZUZlYXR1cmVzIG1f
ZmVhdHVyZXM7CiAgICAgICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsKQEAgLTQ0OCw2
ICs0NTEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGNsZWFyQ29kZSgpOwog
CisgICAgICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4g
RXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9k
ZSgpLCBmYWxzZSk7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVj
dXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRl
KiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wpOwpAQCAtNDU2LDYgKzQ2MSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CiAKICAgICAgICAgT3duUHRyPEV2YWxDb2RlQmxvY2s+IG1fZXZhbENvZGVCbG9j
azsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRXZhbENvZGVCbG9jaz4gbV91bmxpbmtl
ZEV2YWxDb2RlQmxvY2s7CiAgICAgfTsKIAogICAgIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlIDog
cHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewpAQCAtNDcwLDYgKzQ3Niw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgICAgIH0KIAorCisgICAg
ICAgIEpTT2JqZWN0KiBpbml0YWxpemVHbG9iYWxQcm9wZXJ0aWVzKEpTR2xvYmFsRGF0YSYsIENh
bGxGcmFtZSosIEpTU2NvcGUqKTsKKwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29w
ZSogc2NvcGUpCkBAIC01MTUsMTMgKzUyNCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICB2b2lkIGNsZWFyQ29kZSgpOwogCisgICAgICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJ
bmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVz
ZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSk7IH0KKwogICAgIHByaXZhdGU6CiAgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKKwogICAgICAgICBQ
cm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKKyAgICAg
ICAgZW51bSBDb25zdGFudE1vZGUgeyBJc0NvbnN0YW50LCBJc1ZhcmlhYmxlIH07CisgICAgICAg
IGVudW0gRnVuY3Rpb25Nb2RlIHsgSXNGdW5jdGlvblRvU3BlY2lhbGl6ZSwgTm90RnVuY3Rpb25P
ck5vdFNwZWNpYWxpemFibGUgfTsKKyAgICAgICAgaW50IGFkZEdsb2JhbFZhcihKU0dsb2JhbE9i
amVjdCosIGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUsIEZ1bmN0aW9uTW9kZSk7CisK
ICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwg
SklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKICAg
ICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwog
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrOwogICAgICAgICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbV9w
cm9ncmFtQ29kZUJsb2NrOwogICAgIH07CiAKQEAgLTUzMSw5ICs1NDgsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgU2NyaXB0RXhlY3V0YWJsZSBCYXNl
OwogCi0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpCisgICAgICAgIHN0YXRpYyBG
dW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2Vk
RXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSkKICAgICAg
ICAgewotICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXAp
KSBGdW5jdGlvbkV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgbm9kZSk7CisgICAgICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxG
dW5jdGlvbkV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIEZ1bmN0aW9uRXhlY3V0YWJsZShn
bG9iYWxEYXRhLCBzb3VyY2UsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBsYXN0TGlu
ZSk7CiAgICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
ICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CkBAIC01NTQsNyArNTcx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBGdW5jdGlvbkNvZGVCbG9j
ayogY29kZUJsb2NrV2l0aEJ5dGVjb2RlRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAg
ICAgICAKLSAgICAgICAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcHJvZHVjZUNvZGVC
bG9ja0ZvcihKU1Njb3BlKiwgQ29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
LCBKU09iamVjdComIGV4Y2VwdGlvbik7CisgICAgICAgIFBhc3NPd25QdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+IHByb2R1Y2VDb2RlQmxvY2tGb3IoSlNTY29wZSosIENvZGVTcGVjaWFsaXphdGlvbktp
bmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUZv
ckNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewpAQCAtNjc5
LDE0ICs2OTYsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gYmFzZWxp
bmVDb2RlQmxvY2tGb3Ioa2luZCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGNvbnN0
IElkZW50aWZpZXImIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KLSAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaW5mZXJyZWROYW1lKCkgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0KLSAgICAg
ICAgSlNTdHJpbmcqIG5hbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZVZhbHVlLmdldCgp
OyB9Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
YW1ldGVycy0+c2l6ZSgpOyB9IC8vIEV4Y2x1ZGluZyAndGhpcychCisgICAgICAgIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+bmFtZSgpOyB9
CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJuIG1fdW5s
aW5rZWRFeGVjdXRhYmxlLT5pbmZlcnJlZE5hbWUoKTsgfQorICAgICAgICBKU1N0cmluZyogbmFt
ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWVWYWx1ZSgp
OyB9CisgICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRFeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOyB9IC8vIEV4Y2x1ZGluZyAndGhpcych
CiAgICAgICAgIFN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OwotICAgICAgICBTaGFyZWRTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5bWJvbFRhYmxlLmdldCgp
OyB9CisgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZShDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5zeW1i
b2xUYWJsZShraW5kKTsgfQogCiAgICAgICAgIHZvaWQgY2xlYXJDb2RlSWZOb3RDb21waWxpbmco
KTsKKyAgICAgICAgdm9pZCBjbGVhclVubGlua2VkQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAg
ICAgICAgewpAQCAtNjk5LDE1ICs3MTcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2
b2lkIGNsZWFyQ29kZSgpOwogCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBtX25hbWVWYWx1
ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywganNTdHJpbmcoJmdsb2JhbERhdGEsIG5hbWUoKS5zdHJp
bmcoKSkpOwotICAgICAgICB9Ci0KICAgICBwcml2YXRlOgotICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUoSlNHbG9iYWxEYXRhJiwgRnVuY3Rpb25Cb2R5Tm9kZSopOworICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiwgY29uc3QgU291cmNlQ29kZSYsIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSk7
CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwg
SlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5U
X01BWCk7CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhl
Y1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXggPSBVSU5UX01BWCk7CkBAIC03MzIsMTYgKzc0Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdz
OwotICAgICAgICBib29sIG1fZm9yY2VVc2VzQXJndW1lbnRzOwotCi0gICAgICAgIFJlZlB0cjxG
dW5jdGlvblBhcmFtZXRlcnM+IG1fcGFyYW1ldGVyczsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPiBtX3VubGlua2VkRXhlY3V0YWJsZTsKICAgICAgICAg
T3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgICAgIE93
blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7Ci0gICAgICAg
IElkZW50aWZpZXIgbV9uYW1lOwotICAgICAgICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOwot
ICAgICAgICBGdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUgbV9mdW5jdGlvbk5hbWVJc0luU2Nv
cGVUb2dnbGU7Ci0gICAgICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9uYW1lVmFsdWU7Ci0g
ICAgICAgIFdyaXRlQmFycmllcjxTaGFyZWRTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKICAg
ICB9OwogCiAgICAgaW5saW5lIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3Bl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFy
bmVzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5o
CmluZGV4IDA2NTc4OGFlZTFiZTI1ZjMwZGY2NWJjOTlhMTMxMDU4ZWUxOWM2NTYuLmI3MWI2MDIx
N2ZhNWU0YzMxNDQxNGE5OTBlNjEwYzlmNTk0NmMxOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgaW5s
aW5lIGJvb2wgcHJlcGFyZUZvckV4ZWN1dGlvbihFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxDb2Rl
QmxvY2tUeXBlPiYgY29kZUJsb2MKICAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUo
ZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSA/IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwogfQogCi1pbmxpbmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25G
b3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBj
b2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29k
ZVdpdGhBcml0eUNoZWNrLCBXcml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+JiBzeW1ib2xU
YWJsZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitpbmxpbmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25G
b3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBj
b2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29k
ZVdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICNpZiBFTkFCTEUoTExJ
TlQpCiAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKSB7CkBAIC02MSw3
ICs2MSw3IEBAIGlubGluZSBib29sIHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jCiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShraW5kKTsKICNlbmRpZiAvLyBFTkFCTEUoTExJTlQpCi0gICAgcmV0dXJuIGppdENvbXBpbGVG
dW5jdGlvbklmQXBwcm9wcmlhdGUoZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0
aEFyaXR5Q2hlY2ssIHN5bWJvbFRhYmxlLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSA/IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFw
cHJvcHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNr
LCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBl
KSA/IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBY3RpdmF0aW9uLmgKaW5kZXggZmEyMjkxODEzZjliYWFiZTBkNmYwYzY5YmU2Nzc4NGNkNDM0
ZDExZC4uZmM2MzM2NDYzMTY4NThiZGY2OWRmZGY0MWIyYTcyMGI4YzAxNGViZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKQEAgLTQ2LDE1ICs0Niwx
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNWYXJp
YWJsZU9iamVjdCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBKU0FjdGl2YXRpb24qIGNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBGdW5jdGlvbkV4
ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKKyAgICAgICAgc3RhdGljIEpTQWN0aXZhdGlv
biogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICAgICB7CisgICAgICAgICAgICBTaGFyZWRTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CiAgICAgICAg
ICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKAogICAgICAgICAgICAgICAgIE5v
dE51bGwsCiAgICAgICAgICAgICAgICAgYWxsb2NhdGVDZWxsPEpTQWN0aXZhdGlvbj4oCiAgICAg
ICAgICAgICAgICAgICAgIGdsb2JhbERhdGEuaGVhcCwKLSAgICAgICAgICAgICAgICAgICAgYWxs
b2NhdGlvblNpemUoZnVuY3Rpb25FeGVjdXRhYmxlLT5zeW1ib2xUYWJsZSgpKQorICAgICAgICAg
ICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkKICAgICAgICAgICAgICAgICAp
Ci0gICAgICAgICAgICApIEpTQWN0aXZhdGlvbihnbG9iYWxEYXRhLCBjYWxsRnJhbWUsIGZ1bmN0
aW9uRXhlY3V0YWJsZS0+c3ltYm9sVGFibGUoKSk7CisgICAgICAgICAgICApIEpTQWN0aXZhdGlv
bihnbG9iYWxEYXRhLCBjYWxsRnJhbWUsIHN5bWJvbFRhYmxlKTsKICAgICAgICAgICAgIGFjdGl2
YXRpb24tPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgcmV0dXJuIGFj
dGl2YXRpb247CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCmluZGV4IDEyYTI4ZTM0MWZiMDJhYjk4NzMyZmUyMGQ1ZTYzNTY1ODg0
YTAxZWQuLjRkY2E1YjBmNmZlN2FhMTVmNzBiODkxNGE2ZTM2MmE1OTBkZjk3NWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcApAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogCiAjaW5jbHVkZSAiQXJnTGlzdC5o
IgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgi
CiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25z
dHJ1Y3Rvci5oIgpAQCAtNTcsNiArNTgsNyBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgog
I2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5l
cy5oIgorI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhy
ZWFkRGF0YS5oPgpAQCAtMTk2LDYgKzE5OCw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRh
KEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAs
IG1faW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoMCkKICNlbmRpZgogICAgICwgbV9pbkRlZmluZU93
blByb3BlcnR5KGZhbHNlKQorICAgICwgbV9jb2RlQ2FjaGUoQ29kZUNhY2hlOjpjcmVhdGUoKSkK
IHsKICAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcigqdGhpcyk7CiAKQEAgLTIyMSw2
ICsyMjQsMTEgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xv
YmFsRGF0YVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHNoYXJlZFN5bWJvbFRhYmxlU3Ry
dWN0dXJlLnNldCgqdGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKICAgICBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5zZXQoKnRoaXMs
IFN0cnVjdHVyZUNoYWluOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB3aXRoU2Nv
cGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOworICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJl
LnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNl
dCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwogCiAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlm
aWVyVGFibGUoZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKaW5kZXggZTk3YzBhMDE1ZDQ4NTQ0NTQ3
MDc3NzNmMTcxNjZlMjAwNmMwNDNkZS4uMGZmYWNjYjZhZDEyNWY3NjRmNGI1ZDViMTI5N2VlYzUz
YTI2YTlkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmgKQEAgLTYzLDYgKzYzLDcgQEAgc3RydWN0IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTsKIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ29kZUJsb2NrOworICAgIGNsYXNzIENvZGVDYWNo
ZTsKICAgICBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKICAgICBjbGFzcyBIYW5kbGVTdGFjazsK
ICAgICBjbGFzcyBJZGVudGlmaWVyVGFibGU7CkBAIC04MCw2ICs4MSwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgY2xhc3MgUmVnRXhwOwogI2Vu
ZGlmCisgICAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CisgICAgY2xhc3MgVW5saW5rZWRFdmFs
Q29kZUJsb2NrOworICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworICAgIGNs
YXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKIAogICAgIHN0cnVjdCBIYXNoVGFibGU7CiAg
ICAgc3RydWN0IEluc3RydWN0aW9uOwpAQCAtMjIzLDYgKzIyOCwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1cmU7
CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZUNoYWluU3RydWN0dXJlOwogICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBzcGFyc2VBcnJheVZhbHVlTWFwU3RydWN0dXJlOworICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiB3aXRoU2NvcGVTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlOworICAgICAg
ICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmU7Cisg
ICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZTsK
KyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVj
dHVyZTsKIAogICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJUYWJsZTsKICAgICAg
ICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7CkBAIC00MzYsNiArNDQ2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU0xvY2smIGFwaUxvY2soKSB7
IHJldHVybiBtX2FwaUxvY2s7IH0KKyAgICAgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUoKSB7IHJl
dHVybiBtX2NvZGVDYWNoZS5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTQ1Niw2ICs0NjcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2luaXRpYWxpemluZ09iamVjdENs
YXNzOwogI2VuZGlmCiAgICAgICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5OworICAgICAg
ICBPd25QdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKIAogICAgICAgICBUeXBlZEFycmF5RGVz
Y3JpcHRvciBtX2ludDhBcnJheURlc2NyaXB0b3I7CiAgICAgICAgIFR5cGVkQXJyYXlEZXNjcmlw
dG9yIG1faW50MTZBcnJheURlc2NyaXB0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggMDMyNTJmYWQxY2E3MTI4NGM2YTBjYzIw
ZGJlNjE3YWVjNzc4N2JjYi4uYzQ2NmEyYjA0YTJkNjFlYTM4OWMxMWJhNzJmYjVjYmY5YzRiODBi
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkJvb2xlYW5Db25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkJvb2xlYW5Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJEYXRlQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJEYXRlUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKQEAgLTU4MCw0ICs1
ODEsNTggQEAgdm9pZCBzbG93VmFsaWRhdGVDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhnbG9iYWxPYmplY3QsICZKU0dsb2Jh
bE9iamVjdDo6c19pbmZvKTsKIH0KIAorVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBKU0dsb2Jh
bE9iamVjdDo6Y3JlYXRlUHJvZ3JhbUNvZGVCbG9jayhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUHJv
Z3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQoreworICAg
IFBhcnNlckVycm9yIGVycm9yOworICAgIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzID0g
ZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1h
bDsKKyAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gaGFzRGVidWdnZXIoKSA/IERlYnVn
Z2VyT24gOiBEZWJ1Z2dlck9mZjsKKyAgICBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlID0gaGFz
UHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKKyAgICBVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZSA9IGdsb2JhbERhdGEoKS5jb2RlQ2FjaGUoKS0+Z2V0
UHJvZ3JhbUNvZGVCbG9jayhnbG9iYWxEYXRhKCksIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnNv
dXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOwor
CisgICAgaWYgKGhhc0RlYnVnZ2VyKCkpCisgICAgICAgIGRlYnVnZ2VyKCktPnNvdXJjZVBhcnNl
ZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGVycm9yLm1fbGlu
ZSwgZXJyb3IubV9tZXNzYWdlKTsKKworICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJy
b3I6OkVycm9yTm9uZSkgeworICAgICAgICAqZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVj
dCh0aGlzLCBleGVjdXRhYmxlLT5zb3VyY2UoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gdW5saW5rZWRDb2RlOworfQorCitVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVFdmFsQ29kZUJsb2NrKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCit7
CisgICAgUGFyc2VyRXJyb3IgZXJyb3I7CisgICAgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5l
c3MgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNl
Tm9ybWFsOworICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBoYXNEZWJ1Z2dlcigpID8g
RGVidWdnZXJPbiA6IERlYnVnZ2VyT2ZmOworICAgIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUg
PSBoYXNQcm9maWxlcigpID8gUHJvZmlsZXJPbiA6IFByb2ZpbGVyT2ZmOworICAgIFVubGlua2Vk
RXZhbENvZGVCbG9jayogdW5saW5rZWRDb2RlID0gZ2xvYmFsRGF0YSgpLmNvZGVDYWNoZSgpLT5n
ZXRFdmFsQ29kZUJsb2NrKGdsb2JhbERhdGEoKSwgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+c291
cmNlKCksIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CisK
KyAgICBpZiAoaGFzRGVidWdnZXIoKSkKKyAgICAgICAgZGVidWdnZXIoKS0+c291cmNlUGFyc2Vk
KGNhbGxGcmFtZSwgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXJyb3IubV9saW5l
LCBlcnJvci5tX21lc3NhZ2UpOworCisgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJv
cjo6RXJyb3JOb25lKSB7CisgICAgICAgICpleGNlcHRpb24gPSBlcnJvci50b0Vycm9yT2JqZWN0
KHRoaXMsIGV4ZWN1dGFibGUtPnNvdXJjZSgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKK30KKworVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29k
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291
cmNlQ29kZSYgY29kZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCit7CisgICAgUGFyc2VyRXJyb3Ig
ZXJyb3I7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBnbG9i
YWxEYXRhKCkuY29kZUNhY2hlKCktPmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2Rl
KGdsb2JhbERhdGEoKSwgbmFtZSwgY29kZSwgZXJyb3IpOworICAgIGlmIChoYXNEZWJ1Z2dlcigp
KQorICAgICAgICBkZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoY2FsbEZyYW1lLCBjb2RlLnByb3Zp
ZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKKworICAgIGlmIChlcnJvci5t
X3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkgeworICAgICAgICAqZXhjZXB0aW9uID0g
ZXJyb3IudG9FcnJvck9iamVjdCh0aGlzLCBjb2RlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCA2
NWZkYTQ5ZDg0ODg0ODIwMjIzMjY4ZjVhM2IxYTU1MDU1ZmU3ZDIyLi4zMjEyMzYzYWI0ZTcxM2Fm
YjRhMTY0Mjk5M2MwMzU2NDQ0N2ZmYWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTQzLDYgKzQzLDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIGNsYXNzIERlYnVnZ2VyOwogICAgIGNsYXNzIEVycm9yQ29uc3RydWN0b3I7CiAgICAg
Y2xhc3MgRXJyb3JQcm90b3R5cGU7CisgICAgY2xhc3MgRXZhbENvZGVCbG9jazsKKyAgICBjbGFz
cyBFdmFsRXhlY3V0YWJsZTsKKyAgICBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKKyAgICBjbGFz
cyBGdW5jdGlvbkV4ZWN1dGFibGU7CiAgICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5cGU7CiAgICAg
Y2xhc3MgR2V0dGVyU2V0dGVyOwogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jazsKQEAgLTUwLDkg
KzU0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKICAgICBjbGFzcyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOwogICAgIGNsYXNzIFByb2dyYW1D
b2RlQmxvY2s7CisgICAgY2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGU7CiAgICAgY2xhc3MgUmVnRXhw
Q29uc3RydWN0b3I7CiAgICAgY2xhc3MgUmVnRXhwUHJvdG90eXBlOwotCisgICAgY2xhc3MgU291
cmNlQ29kZTsKICAgICBzdHJ1Y3QgQWN0aXZhdGlvblN0YWNrTm9kZTsKICAgICBzdHJ1Y3QgSGFz
aFRhYmxlOwogCkBAIC0xODUsNiArMTkwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
c3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAorICAgICAgICBi
b29sIGhhc0RlYnVnZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlcjsgfQorICAgICAgICBi
b29sIGhhc1Byb2ZpbGVyKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUo
KS0+c3VwcG9ydHNQcm9maWxpbmcodGhpcyk7IH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKiwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CiAKQEAgLTM2
Niw2ICszNzQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZG91YmxlIHdlYWtSYW5k
b21OdW1iZXIoKSB7IHJldHVybiBtX3dlYWtSYW5kb20uZ2V0KCk7IH0KICAgICAgICAgdW5zaWdu
ZWQgd2Vha1JhbmRvbUludGVnZXIoKSB7IHJldHVybiBtX3dlYWtSYW5kb20uZ2V0VWludDMyKCk7
IH0KKworICAgICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZVByb2dyYW1Db2Rl
QmxvY2soQ2FsbEZyYW1lKiwgUHJvZ3JhbUV4ZWN1dGFibGUqLCBKU09iamVjdCoqIGV4Y2VwdGlv
bik7CisgICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRlRXZhbENvZGVCbG9jayhD
YWxsRnJhbWUqLCBFdmFsRXhlY3V0YWJsZSosIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKKyAgICAg
ICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZUZ1bmN0aW9uRXhlY3V0YWJsZUZy
b21HbG9iYWxDb2RlKENhbGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBTb3VyY2VD
b2RlJiwgSlNPYmplY3QqKiBleGNlcHRpb24pOworCiAgICAgcHJvdGVjdGVkOgogCiAgICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0
eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZS5oCmluZGV4IDAzZjRhNzc5MDkwNzdlNmE2YzVkYWEzOGI1YjMyOWUwMDYxYzYyOGIu
LjEwZDk4ZDJiZDI1YTZkMWUyMjc0N2I3MDAzYTgxNjBkODMxYjMxNmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCkBAIC00MSw2ICs0MSwxMSBAQCBlbnVtIEpTVHlwZSB7
CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGVUeXBlLAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUs
CiAKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsCisgICAgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrVHlwZSwKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2tUeXBlLAorICAgIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2tUeXBlLAorCiAgICAgLy8gVGhlIE9iamVjdFR5cGUgdmFs
dWUgbXVzdCBjb21lIGJlZm9yZSBhbnkgSlNUeXBlIHRoYXQgaXMgYSBzdWJjbGFzcyBvZiBKU09i
amVjdC4KICAgICBPYmplY3RUeXBlLAogICAgIEZpbmFsT2JqZWN0VHlwZSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172627</attachid>
            <date>2012-11-06 11:51:06 -0800</date>
            <delta_ts>2012-11-06 14:09:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101127-20121106114918.patch</filename>
            <type>text/plain</type>
            <size>232090</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNjUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
NTNjZDFlNDVjYTI5ZGI2NjExYWNiMDIxMGUyNThiZDAyNjE5OWJjLi5hMGI0ZGI4NGRjMmNhY2Y1
MmU2ZTNhYzA1NTdlMWQ1ZDFlZDYzYTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MiBAQAorMjAxMi0xMS0wNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZHVjZSBwYXJzZXIgb3ZlcmhlYWQgaW4gSlNDCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExMjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbiBleGNpdGluZyBqb3VybmV5IGludG8g
dGhlIHdvcmxkIG9mIGFyY2hpdGVjdHVyZSBpbiB3aGljaCBvdXIgaGVybworICAgICAgICBhZGRz
IHlldCBhbm90aGVyIGxheWVyIHRvIEpTQyBjb2RlZ2VuZXJhdGlvbi4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgYSBtYXJnaW5hbGx5IG1vcmUgY29tcGFjdCBmb3JtIG9mIGJ5dGVjb2RlIHRo
YXQgaXMKKyAgICAgICAgZnJlZSBmcm9tIGFueSBkYXRhIHNwZWNpZmljIHRvIGEgZ2l2ZW4gZXhl
Y3V0aW9uIGNvbnRleHQsIGFuZCB0aGF0CisgICAgICAgIGRvZXMgc3RvcmUgYW55IGRhdGEgc3Ry
dWN0dXJlcyBuZWNlc3NhcnkgZm9yIGV4ZWN1dGlvbi4gIFRvIGFjdHVhbGx5CisgICAgICAgIGV4
ZWN1dGUgdGhpcyBVbmxpbmtlZEJ5dGVjb2RlIHdlIHN0aWxsIG5lZWQgdG8gaW5zdGFudGlhdGUg
YSByZWFsCisgICAgICAgIENvZGVCbG9jaywgYnV0IHRoaXMgaXMgYSBtdWNoIGZhc3RlciBsaW5l
YXIgdGltZSBvcGVyYXRpb24gdGhhbiBhbnkKKyAgICAgICAgb2YgdGhlIGVhcmxpZXIgcGFyc2lu
ZyBvciBjb2RlIGdlbmVyYXRpb24gcGFzc2VzLgorCisgICAgICAgIEFzIHRoZSB1bmxpbmtlZCBj
b2RlIGlzIGNvbnRleHQgZnJlZSB3ZSBjYW4gdGhlbiBzaW1wbHkgdXNlIGEgY2FjaGUKKyAgICAg
ICAgZnJvbSBzb3VyY2UgdG8gdW5saW5rZWQgY29kZSBtYXBwaW5nIHRvIGNvbXBsZXRlbHkgYXZv
aWQgYWxsIG9mIHRoZQorICAgICAgICBvbGQgcGFyc2VyIG92ZXJoZWFkLiAgVGhlIGNhY2hlIGlz
IGN1cnJlbnRseSB2ZXJ5IHNpbXBsZSBhbmQgbWVtb3J5CisgICAgICAgIGhlYXZ5LCB1c2luZyB0
aGUgY29tcGxldGUgc291cmNlIHRleHQgYXMgYSBrZXkgKHJhdGhlciB0aGFuIFNvdXJjZUNvZGUK
KyAgICAgICAgb3IgZXF1aXZhbGVudCksIGFuZCBhIHJhbmRvbSBldmljdGlvbiBwb2xpY3kuCisK
KyAgICAgICAgVGhpcyBzZWVtcyB0byBwcm9kdWNlIGEgc3Vic3RhbnRpYWwgd2luIHdoZW4gbG9h
ZGluZyBpZGVudGljYWwgY29udGVudAorICAgICAgICBpbiBkaWZmZXJlbnQgY29udGV4dHMuCisK
KyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgICAgIE1vdmVkIGEgbnVtYmVyIG9mIGZpZWxkcywgYW5k
IGEgYnVuY2ggb2YgbG9naWMgdG8gVW5saW5rZWRDb2RlQmxvY2suaC9jcHAKKyAgICAgICAgKiBi
eXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgICAgIEFkZGVkIGEgZ2xvYmFsIGNvbnN0IGluaXQg
bm8gb3AgaW5zdHJ1Y3Rpb24gbmVlZGVkIHRvIGdldCBjb3JyZWN0CisgICAgICAgICAgICBiZWhh
dmlvdXIgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBzZW1hbnRpY3MuCisgICAgICAgICogYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgICAgIEEgZmFpcmx5IHNoYWxsb3csIEdD
IGFsbG9jYXRlZCB2ZXJzaW9uIG9mIHRoZSBvbGQgQ29kZUJsb2NrCisgICAgICAgICAgICBjbGFz
c2VzIHdpdGggYSAzMmJpdCBpbnN0cnVjdGlvbiBzaXplLCBhbmQganVzdCBtZXRhZGF0YQorICAg
ICAgICAgICAgc2l6ZSB0cmFja2luZy4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
OgorICAgICAgICAgICAgUmVwbGFjZSBkaXJlY3QgYWNjZXNzIHRvIG1fc3ltYm9sVGFibGUgd2l0
aCBhY2Nlc3MgdGhyb3VnaAorICAgICAgICAgICAgc3ltYm9sVGFibGUoKS4gIFByb2dyYW1Db2Rl
IG5vIGxvbmdlciBoYXMgYSBzeW1ib2wgdGFibGUgYXQKKyAgICAgICAgICAgIGFsbCBzbyBzb21l
IHByZXZpb3VzbHkgdW5jb25kaXRpb25hbCAoYW5kIHBvaW50bGVzcykgdXNlcworICAgICAgICAg
ICAgb2Ygc3ltYm9sVGFibGUgZ2V0IG51bGwgY2hlY2tzLgorICAgICAgICAgICAgQSBmZXcgb3Ro
ZXIgY2hhbmdlcyB0byBkZWFsIHdpdGggdHlwZSBjaGFuZ2VzIGR1ZSB0byB1cyBnZW5lcmF0aW5n
CisgICAgICAgICAgICB1bmxpbmtlZCBjb2RlIChlZy4gcG9pbnRlciBmcmVlLCBzbyBwcm9maWxl
IGluZGljZXMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIHBvaW50ZXJzKS4KKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMu
aDoKKyAgICAgICAgICAgIFN1cHBvcnQgZ2xvYmFsX2luaXRfbm9wICAgICAgICAKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgICAgICBOb3cgZ2V0IHRoZSBQ
cm9ncmFtRXhlY3V0YWJsZSB0byBpbml0aWFsaXNlIG5ldyBnbG9iYWwgcHJvcGVydGllcworICAg
ICAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIGV4ZWN1dGlvbi4gICAgICAgIAorICAgICAgICAqIGpp
dC9KSVQuY3BwOgorICAgICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKiBqaXQvSklU
U3R1YnMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgICAgIEFk
ZGluZyBpbml0X2dsb2JhbF9jb25zdF9ub3AgZXZlcnl3aGVyZSBlbHNlCisgICAgICAgICogcGFy
c2VyL1BhcnNlci5oOgorICAgICAgICAqIHBhcnNlci9QYXJzZXJNb2Rlcy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyVG9rZW5zLmg6CisgICAgICAgICAgICBQYXJzZXIgbm8gbG9u
Z2VyIG5lZWRzIGEgZ2xvYmFsIG9iamVjdCBvciBjYWxsZnJhbWUgdG8gZnVuY3Rpb24gICAgICAg
IAorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9Db2RlQ2FjaGUuaDogQWRkZWQuCisgICAgICAgICAgICBBIHNpbXBsZSwgcmFuZG9tIGV2
aWN0aW9uLCBTb3VyY2UtPlVubGlua2VkQ29kZSBjYWNoZSAgICAgICAgCisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAg
ICAgICAgICAgIEV4ZWN1dGFibGVzIG5vdyByZWZlcmVuY2UgdGhlaXIgdW5saW5rZWQgY291bnRl
cnBhcnRzLCBhbmQKKyAgICAgICAgICAgIHJlcXVlc3QgY29kZSBzcGVjaWZpY2FsbHkgZm9yIHRo
ZSB0YXJnZXQgZ2xvYmFsIG9iamVjdC4gICAgICAgIAorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAg
ICAgR2xvYmFsRGF0YSBub3cgb3ducyBhIENvZGVDYWNoZSBhbmQgYSBzZXQgb2YgbmV3IHN0cnVj
dHVyZXMKKyAgICAgICAgICAgIGZvciB0aGUgdW5saW5rZWQgY29kZSB0eXBlcy4gIAorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgICAgIFV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgZXhlY3V0
YWJsZXMgdG8gcGVyZm9ybSBjb21waWxhdGlvbgorIAorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBl
Lmg6CisgICAgICAgICAgQWRkIG5ldyBKU1R5cGVzIGZvciB1bmxpbmtlZCBjb2RlCisKIDIwMTIt
MTEtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBJbmRlbnRh
dGlvbiBvZiBKU09iamVjdC5oIGlzIHdyb25nCkBAIC0xOTU0LDcgKzIwNDMsNyBAQAogICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV4dF9wbmFtZSk6CiAgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wU3RyaWN0RXEpOgogICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgotICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3Rocm93X3N0YXRpY19lcnJvcik6CiAgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcV9udWxsKToKICAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxs
KToKICAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV9hY3RpdmF0aW9uKToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKaW5kZXggYzI0MDBmN2VjOGVjYTYy
NDY3MzQ2ZDlhNTRjYzA5ZTcwMzA0ZThjYy4uN2IyNWU5YzMwYTIxNWQ4ZWZiYmI5MWVmOWNmM2Ni
ODMyMmJkOWYxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLmMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMK
QEAgLTE0NTcsNyArMTQ1Nyw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAg
ICAgSlNTdHJpbmdSZWxlYXNlKGZ1bmN0aW9uQm9keSk7CiAgICAgQVNTRVJUKCFleGNlcHRpb24p
OwogICAgIEFTU0VSVChKU09iamVjdElzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24pKTsKLSAg
ICB2ID0gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBmdW5jdGlvbiwgTlVMTCwgMCwg
TlVMTCwgTlVMTCk7CisgICAgZXhjZXB0aW9uID0gMDsKKyAgICB2ID0gSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihjb250ZXh0LCBmdW5jdGlvbiwgTlVMTCwgMCwgTlVMTCwgJmV4Y2VwdGlvbik7Cisg
ICAgQVNTRVJUKCFleGNlcHRpb24pOwogICAgIEFTU0VSVCh2KTsKICAgICBBU1NFUlQoSlNWYWx1
ZUlzRXF1YWwoY29udGV4dCwgdiwgYXJyYXlDb25zdHJ1Y3RvciwgTlVMTCkpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc1NGYzMDQ2NjhlMzExZDQ3ZDA5ZWE0
ZTc5NDBiNzg0OWFhMDNiMGQuLjM5M2RiNjdjM2IyMTg4M2U1NDcyOTNmY2ViNGIwOTc5ZDM4NjY0
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU5LDYgKzU5LDcgQEAg
U0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9TcGVjaWFsUG9pbnRlci5j
cHAKICAgICBieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAogICAg
IGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAorICAgIGJ5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcAogICAgIGJ5dGVjb2RlL1dhdGNocG9pbnQuY3BwCiAKICAgICBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0xNzQsNiArMTc1LDcgQEAgU0VUKEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0Jvb2xlYW5PYmplY3QuY3BwCiAgICAgcnVudGlt
ZS9Cb29sZWFuUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvQ2FsbERhdGEuY3BwCisgICAgcnVu
dGltZS9Db2RlQ2FjaGUuY3BwCiAgICAgcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAKICAg
ICBydW50aW1lL0NvbXBsZXRpb24uY3BwCiAgICAgcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA0NTdjY2U4ZDg1
MjJkZjAwZjVmNmM4MWNlOGUzZTBiOWY3MThlMTU5Li5kNjhhMjJiOWY3MTRhNDFjMjc2YTQ4MGRl
ZjdiN2Y5YWM0YWFjNzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQpAQCAtMTM4LDYgKzEzOCw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQ
cm9maWxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBc
CkBAIC00NDQsNiArNDQ2LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUmVzdWx0VHlwZS5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oIFwKQEAgLTQ4NCw2ICs0ODcsOCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxs
RGF0YS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2RlQ2FjaGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25JZGVudGlmaWVycy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vbklkZW50aWZpZXJzLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagppbmRleCAwNDgxZTFiZDUyYWVhODY5ZWM0ODIz
OWNiNjcyZWJhOTkwNDM0YTIxLi5jNjMyMzFjMmM3YjI1ZTIwZmQ2NmZjOWJhZGZkN2UyZDdhYjQy
ZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvagpAQCAtNjM4LDYgKzYzOCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXENvZGVDYWNoZS5jcHAiCisJ
CQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRp
bWVcQ29kZUNhY2hlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQ29tbW9uSWRlbnRpZmllcnMuY3BwIgogCQkJCT4KIAkJCTwv
RmlsZT4KQEAgLTE3NDYsNiArMTc1NCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxVbmxpbmtlZENvZGVCbG9jay5jcHAi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5
dGVjb2RlXFVubGlua2VkQ29kZUJsb2NrLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXFZhbHVlUHJvZmlsZS5oIgogCQkJCT4K
IAkJCTwvRmlsZT4KQEAgLTIyMzAsNiArMjI0NiwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwYXJzZXJcUGFyc2VyTW9kZXMuaCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGFyc2Vy
XFBhcnNlckFyZW5hLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDUzOWVmZTI4Y2NlYWM4NjA5ZThlNzQxZDEzYjhhMDAyMzJkN2ZkOGIuLjNj
YWRhMWNkN2NlZmZiOTI3YWNkYjdhODM4MDUxZTBiMTU3OGFmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC01ODAsMTIgKzU4MCwxNyBAQAogCQlBNzU3MDZERTExOEEyQkNGMDA1
N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0
aG1ldGljMzJfNjQuY3BwICovOyB9OwogCQlBNzY2QjQ0RjBFRThEQ0QxMDA5NTE4Q0EgLyogRXhl
Y3V0YWJsZUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzZD
NTE3NjExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAv
KiBKU0ludGVyZmFjZUpJVC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9j
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzlF
NzgxRTE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwICovOyB9OwogCQlB
NzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZGNTRBMjEzQjI4QUFCMDBFRjJC
Q0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi87IH07CisJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0
NyAvKiBDb2RlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTc3RjE4MUYxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgKi87IH07
CisJCUE3N0YxODIyMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3N0YxODIwMTY0MDg4QjIwMDY0MEE0
NyAvKiBDb2RlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlBNzdGMTgyNTE2NDE5MkM3MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3N0YxODI0MTY0MTky
NTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUE3ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWls
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3
RUU3NDExQjk4QjhEMDA2NUExNEYgLyogQVNUQnVpbGRlci5oICovOyB9OwogCQlBNzg0QTI2NDEx
RDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRh
eENoZWNrZXIuaCAqLzsgfTsKIAkJQTdBRkMxNzkxNUY3RUZFMzAwNDhGNTdCIC8qIFJlc29sdmVP
cGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QUZDMTc3MTVGN0VGRTMwMDQ4RjU3QiAvKiBSZXNvbHZlT3BlcmF0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdCNDhGNDkwRUU4OTM2
RjAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4
ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovOyB9OwogCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYg
LyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3QjYwMTgy
MTYzOUZEMkEwMDM3MkJBMyAvKiBVbmxpbmtlZENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc5RTc4MUYxNUVFQ0JBODAwNDdDODU1IC8q
IFVubGlua2VkQ29kZUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
ICovOyB9OwogCQlBN0RDQjk3MzEyRTUxOTNGMDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0RDQjc3OTEyRTNE
OTA1MDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVy
YWxQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3RTJFQTY5MEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmggKi87IH07CkBAIC0x
Mzc4LDYgKzEzODMsMTEgQEAKIAkJQTc2N0ZGOUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5cGVk
QXJyYXlTdHVicy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NUeXBlZEFy
cmF5U3R1YnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2QzUxNzQxMTgyNzQ4
RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTSW50ZXJmYWNlSklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSklUV3JpdGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUE3N0YxODFGMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUNhY2hlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc3RjE4MjAxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVD
YWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQ2FjaGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBh
cnNlck1vZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUE3OUU3ODFFMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVC
bG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmxpbmtlZENv
ZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3OUU3ODFGMTVFRUNC
QTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVbmxpbmtlZENvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyogSlNPYmplY3RSZWZQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT2JqZWN0UmVmUHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyogQVNU
QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBU1RCdWlsZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAv
KiBTeW50YXhDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bnRh
eENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjMsNiArMjA3Myw3
IEBACiAJCQkJRTQ5REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUu
aCAqLywKIAkJCQlFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW0uaCAqLywKIAkJCQlBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tl
ci5oICovLAorCQkJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICov
LAogCQkJKTsKIAkJCXBhdGggPSBwYXJzZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMjI5Nyw2ICsyMzA4LDggQEAKIAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vh
a1JhbmRvbS5oICovLAogCQkJCUE3RENCNzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJp
ZXIuaCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxi
YWNrLmNwcCAqLywKKwkJCQlBNzdGMTgxRjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNw
cCAqLywKKwkJCQlBNzdGMTgyMDE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmggKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MjU2Nyw2ICsyNTgwLDggQEAKIAkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJ
ZFN0YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRT
dGF0dXMuaCAqLywKIAkJCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0
LmggKi8sCisJCQkJQTc5RTc4MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2Nr
LmNwcCAqLywKKwkJCQlBNzlFNzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxv
Y2suaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gYnl0ZWNvZGU7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjk5Myw2ICszMDA4LDkgQEAKIAkJCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3
QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjU2QzM2
MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMUIxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhy
ZWFkLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0I2MDE4MjE2MzlGRDJBMDAzNzJCQTMgLyogVW5s
aW5rZWRDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUE3N0YxODIyMTY0MDg4QjIwMDY0
MEE0NyAvKiBDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3N0YxODI1MTY0MTkyQzcw
MDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNTY5LDYgKzM1ODcs
OCBAQAogCQkJCUMyNEQzMUUyMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMUExNjI2MkJERDAwNUFDNUZEIC8qIEdD
VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2NyAv
KiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzdGMTgyMTE2NDA4
OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQppbmRleCAxODZhNTRiNGVlNjE5OWU4ZDVmNWU2OThkNTY5MDU5MWFhMGM0NjJm
Li5iMGZjYzE2ZTdjNWJmNTViYTQ3N2RmZjEwMzk5Y2JjMTE0YTc2ODJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvVGFyZ2V0LnByaQpAQCAtNjksNiArNjksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5jcHAgXAogICAgIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQuY3BwIFwKICAgICBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgXAor
ICAgIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBcCiAgICAgYnl0ZWNvZGUvV2F0Y2hw
b2ludC5jcHAgXAogICAgIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgXAogICAg
IGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIFwKQEAgLTE4NCw2ICsxODUsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBydW50aW1lL0Jvb2xlYW5PYmplY3QuY3BwIFwKICAgICBydW50aW1lL0Jv
b2xlYW5Qcm90b3R5cGUuY3BwIFwKICAgICBydW50aW1lL0NhbGxEYXRhLmNwcCBcCisgICAgcnVu
dGltZS9Db2RlQ2FjaGUuY3BwIFwKICAgICBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcCBc
CiAgICAgcnVudGltZS9Db21wbGV0aW9uLmNwcCBcCiAgICAgcnVudGltZS9Db25zdHJ1Y3REYXRh
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmlu
ZGV4IDU4ZDM4MDc3MjA3ODc4YjI3ZDYxZWM0MjM1Nzk4OGM2YWQxOThhZGEuLmQ0NTg3NDRiYjc5
YzFmZWNlYzViMDZhYTM1N2FiZGRjZmRjNDhkNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC00ODcsMTMgKzQ4NywxMyBAQCB2b2lkIENvZGVC
bG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICsraW5zdHJ1Y3Rpb25Db3VudDsK
IAogICAgIGRhdGFMb2coCi0gICAgICAgICIlbHUgbV9pbnN0cnVjdGlvbnM7ICVsdSBieXRlcyBh
dCAlcCAoJXMpOyAlZCBwYXJhbWV0ZXIocyk7ICVkIGNhbGxlZSByZWdpc3RlcihzKTsgJWQgdmFy
aWFibGUocykiLAorICAgICAgICAiJWx1IG1faW5zdHJ1Y3Rpb25zOyAlbHUgYnl0ZXMgYXQgJXAg
KCVzKTsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVnaXN0ZXIocyk7ICVkIHZhcmlhYmxl
KHMpLCAweCUwNHggZmVhdHVyZXMiLAogICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
PihpbnN0cnVjdGlvbnMoKS5zaXplKCkpLAogICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKSwKICAgICAg
ICAgdGhpcywgY29kZVR5cGVUb1N0cmluZyhjb2RlVHlwZSgpKSwgbV9udW1QYXJhbWV0ZXJzLCBt
X251bUNhbGxlZVJlZ2lzdGVycywKLSAgICAgICAgbV9udW1WYXJzKTsKLSAgICBpZiAobV9zeW1i
b2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkpCi0gICAgICAgIGRhdGFMb2coIjsgJWQgY2FwdHVyZWQg
dmFyKHMpIiwgbV9zeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkpOworICAgICAgICBtX251bVZh
cnMsIG1fb3duZXJFeGVjdXRhYmxlLT5mZWF0dXJlcygpKTsKKyAgICBpZiAoc3ltYm9sVGFibGUo
KSAmJiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiOyAl
ZCBjYXB0dXJlZCB2YXIocykiLCBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKSk7CiAgICAg
aWYgKHVzZXNBcmd1bWVudHMoKSkgewogICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgIjsg
dXNlcyBhcmd1bWVudHMsIGluIHIlZCwgciVkIiwKQEAgLTUyNywxMyArNTI3LDEzIEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgfSB3aGlsZSAoaSA8IG1f
Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICB9CiAKLSAgICBpZiAobV9yYXJlRGF0YSAm
JiAhbV9yYXJlRGF0YS0+bV9yZWdleHBzLmlzRW1wdHkoKSkgeworICAgIGlmIChzaXplX3QgY291
bnQgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZSZWdFeHBzKCkpIHsKICAgICAgICAgZGF0YUxv
ZygiXG5tX3JlZ2V4cHM6XG4iKTsKICAgICAgICAgc2l6ZV90IGkgPSAwOwogICAgICAgICBkbyB7
Ci0gICAgICAgICAgICBkYXRhTG9nKCIgIHJlJXUgPSAlc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGkpLCByZWdleHBUb1NvdXJjZVN0cmluZyhtX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaV0uZ2V0
KCkpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGF0YUxvZygiICByZSV1ID0gJXNcbiIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgcmVnZXhwVG9Tb3VyY2VTdHJpbmcobV91bmxpbmtl
ZENvZGUtPnJlZ2V4cChpKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICArK2k7Ci0gICAg
ICAgIH0gd2hpbGUgKGkgPCBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpKTsKKyAgICAgICAg
fSB3aGlsZSAoaSA8IGNvdW50KTsKICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNjY3LDcg
KzY2Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVj
dG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImCiAgICAgICAgICAgICBpbnQgZHN0ID0g
KCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgYXJndiA9ICgrK2l0KS0+dS5vcGVy
YW5kOwogICAgICAgICAgICAgaW50IGFyZ2MgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGRhdGFMb2coIlslNGRdIG5ld19hcnJheV9idWZmZXIgJXMsICVkLCAlZCIsIGxvY2F0aW9u
LCByZWdpc3Rlck5hbWUoZXhlYywgZHN0KS5kYXRhKCksIGFyZ3YsIGFyZ2MpOworICAgICAgICAg
ICAgZGF0YUxvZygiWyU0ZF0gbmV3X2FycmF5X2J1ZmZlclx0ICVzLCAlZCwgJWQiLCBsb2NhdGlv
biwgcmVnaXN0ZXJOYW1lKGV4ZWMsIGRzdCkuZGF0YSgpLCBhcmd2LCBhcmdjKTsKICAgICAgICAg
ICAgIGR1bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC02NzUsNyArNjc1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVy
YXRvciYKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAg
ICAgaW50IHJlMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgZGF0YUxvZygiWyU0
ZF0gbmV3X3JlZ2V4cFx0ICVzLCAiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5k
YXRhKCkpOwotICAgICAgICAgICAgaWYgKHIwID49MCAmJiByMCA8IChpbnQpbnVtYmVyT2ZSZWdF
eHBzKCkpCisgICAgICAgICAgICBpZiAocjAgPj0wICYmIHIwIDwgKGludCltX3VubGlua2VkQ29k
ZS0+bnVtYmVyT2ZSZWdFeHBzKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiJXMiLCByZWdl
eHBOYW1lKHJlMCwgcmVnZXhwKHJlMCkpLmRhdGEoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiYmFkX3JlZ2V4cCglZCkiLCByZTApOwpAQCAtODg1LDExICs4
ODUsMjIgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0
b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIGl0Kys7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2Nv
bnN0X25vcDogeworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gaW5pdF9nbG9iYWxfY29uc3Rf
bm9wXHQiLCBsb2NhdGlvbik7CisgICAgICAgICAgICBkdW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3
TGluZShsb2NhdGlvbik7CisgICAgICAgICAgICBpdCsrOworICAgICAgICAgICAgaXQrKzsKKyAg
ICAgICAgICAgIGl0Kys7CisgICAgICAgICAgICBpdCsrOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDogewogICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSAoKytpdCktPnUucmVn
aXN0ZXJQb2ludGVyOwogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBpbml0X2dsb2JhbF9jb25zdFx0IGclZCglcCksICVz
IiwgbG9jYXRpb24sIG1fZ2xvYmFsT2JqZWN0LT5maW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBv
aW50ZXIpLCByZWdpc3RlclBvaW50ZXIsIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsK
ICAgICAgICAgICAgIGR1bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKKyAg
ICAgICAgICAgIGl0Kys7CisgICAgICAgICAgICBpdCsrOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazogewpAQCAt
MTM5MSw5ICsxNDAyLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImCiAgICAgICAgICAgICBk
dW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3TGluZShsb2NhdGlvbik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Rocm93X3JlZmVyZW5jZV9lcnJvcjogewor
ICAgICAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjogewogICAgICAgICAgICAgaW50IGsw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSB0aHJvd19y
ZWZlcmVuY2VfZXJyb3JcdCAlcyIsIGxvY2F0aW9uLCBjb25zdGFudE5hbWUoZXhlYywgazAsIGdl
dENvbnN0YW50KGswKSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGludCBrMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gdGhyb3dfc3RhdGljX2Vycm9yXHQg
JXMsICVzIiwgbG9jYXRpb24sIGNvbnN0YW50TmFtZShleGVjLCBrMCwgZ2V0Q29uc3RhbnQoazAp
KS5kYXRhKCksIGsxID8gInRydWUiIDogImZhbHNlIik7CiAgICAgICAgICAgICBkdW1wQnl0ZWNv
ZGVDb21tZW50QW5kTmV3TGluZShsb2NhdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtMTQ5MSw5ICsxNTAzLDkgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0aWNz
KCkKICAgICAgICAgICAgIEZPUl9FQUNIX01FTUJFUl9WRUNUT1IoR0VUX1NUQVRTKQogICAgICAg
ICAjdW5kZWYgR0VUX1NUQVRTCiAKLSAgICAgICAgaWYgKCFjb2RlQmxvY2stPm1fc3ltYm9sVGFi
bGUuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkgJiYg
IWNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBzeW1i
b2xUYWJsZUlzTm90RW1wdHkrKzsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlVG90YWxTaXplICs9
IChjb2RlQmxvY2stPm1fc3ltYm9sVGFibGUuY2FwYWNpdHkoKSAqIChzaXplb2YoU3ltYm9sVGFi
bGU6OktleVR5cGUpICsgc2l6ZW9mKFN5bWJvbFRhYmxlOjpNYXBwZWRUeXBlKSkpOworICAgICAg
ICAgICAgc3ltYm9sVGFibGVUb3RhbFNpemUgKz0gKGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+
Y2FwYWNpdHkoKSAqIChzaXplb2YoU3ltYm9sVGFibGU6OktleVR5cGUpICsgc2l6ZW9mKFN5bWJv
bFRhYmxlOjpNYXBwZWRUeXBlKSkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNvZGVCbG9j
ay0+bV9yYXJlRGF0YSkgewpAQCAtMTU2MSwzMyArMTU3MywyNiBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCiAgICAgLCBtX251bUNh
bGxlZVJlZ2lzdGVycyhvdGhlci5tX251bUNhbGxlZVJlZ2lzdGVycykKICAgICAsIG1fbnVtVmFy
cyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBtX2lzQ29uc3RydWN0b3Iob3RoZXIubV9pc0NvbnN0
cnVjdG9yKQorICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLm1fZ2xvYmFsRGF0YSwgb3RoZXIu
bV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAg
ICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fZ2xvYmFsRGF0YSwgb3RoZXIubV9vd25lckV4
ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV9n
bG9iYWxEYXRhKG90aGVyLm1fZ2xvYmFsRGF0YSkKICAgICAsIG1faW5zdHJ1Y3Rpb25zKG90aGVy
Lm1faW5zdHJ1Y3Rpb25zKQogICAgICwgbV90aGlzUmVnaXN0ZXIob3RoZXIubV90aGlzUmVnaXN0
ZXIpCiAgICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKG90aGVyLm1fYXJndW1lbnRzUmVnaXN0ZXIp
CiAgICAgLCBtX2FjdGl2YXRpb25SZWdpc3RlcihvdGhlci5tX2FjdGl2YXRpb25SZWdpc3RlcikK
LSAgICAsIG1fbmVlZHNGdWxsU2NvcGVDaGFpbihvdGhlci5tX25lZWRzRnVsbFNjb3BlQ2hhaW4p
Ci0gICAgLCBtX3VzZXNFdmFsKG90aGVyLm1fdXNlc0V2YWwpCi0gICAgLCBtX2lzTnVtZXJpY0Nv
bXBhcmVGdW5jdGlvbihvdGhlci5tX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbikKICAgICAsIG1f
aXNTdHJpY3RNb2RlKG90aGVyLm1faXNTdHJpY3RNb2RlKQotICAgICwgbV9jb2RlVHlwZShvdGhl
ci5tX2NvZGVUeXBlKQogICAgICwgbV9zb3VyY2Uob3RoZXIubV9zb3VyY2UpCiAgICAgLCBtX3Nv
dXJjZU9mZnNldChvdGhlci5tX3NvdXJjZU9mZnNldCkKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklM
RVIpCiAgICAgLCBtX2V4ZWN1dGlvbkVudHJ5Q291bnQoMCkKICNlbmRpZgotICAgICwgbV9qdW1w
VGFyZ2V0cyhvdGhlci5tX2p1bXBUYXJnZXRzKQotICAgICwgbV9sb29wVGFyZ2V0cyhvdGhlci5t
X2xvb3BUYXJnZXRzKQogICAgICwgbV9pZGVudGlmaWVycyhvdGhlci5tX2lkZW50aWZpZXJzKQog
ICAgICwgbV9jb25zdGFudFJlZ2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQogICAg
ICwgbV9mdW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKICAgICAsIG1fZnVuY3Rp
b25FeHBycyhvdGhlci5tX2Z1bmN0aW9uRXhwcnMpCi0gICAgLCBtX3N5bWJvbFRhYmxlKCpvdGhl
ci5tX2dsb2JhbERhdGEsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5zeW1i
b2xUYWJsZSgpKQogICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRp
b25EZWxheUNvdW50ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkK
LSAgICAsIG1fbGluZUluZm8ob3RoZXIubV9saW5lSW5mbykKICAgICAsIG1fcmVzb2x2ZU9wZXJh
dGlvbnMob3RoZXIubV9yZXNvbHZlT3BlcmF0aW9ucykKICAgICAsIG1fcHV0VG9CYXNlT3BlcmF0
aW9ucyhvdGhlci5tX3B1dFRvQmFzZU9wZXJhdGlvbnMpCiAjaWYgRU5BQkxFKEJZVEVDT0RFX0NP
TU1FTlRTKQpAQCAtMTYwNSwzNiArMTYxMCwzMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5
UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCiAgICAgICAgIGNyZWF0ZVJhcmVEYXRh
SWZOZWNlc3NhcnkoKTsKICAgICAgICAgCiAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9u
SGFuZGxlcnMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzOwotICAgICAg
ICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX3JlZ2V4cHM7CiAg
ICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzID0gb3RoZXIubV9yYXJlRGF0YS0+
bV9jb25zdGFudEJ1ZmZlcnM7CiAgICAgICAgIG1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNo
SnVtcFRhYmxlcyA9IG90aGVyLm1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxl
czsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzID0gb3Ro
ZXIubV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzOwogICAgICAgICBtX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbklu
Zm8gPSBvdGhlci5tX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvOwogICAgIH0KIH0KIAotQ29k
ZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2Rl
VHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QgKmdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgYm9v
bCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCitDb2Rl
QmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
a2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdW5zaWduZWQgYmFzZVNjb3BlRGVwdGgsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFBhc3NPd25QdHI8Q29kZUJs
b2NrPiBhbHRlcm5hdGl2ZSkKICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgm
bV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKQotICAgICwgbV9udW1DYWxsZWVSZWdp
c3RlcnMoMCkKLSAgICAsIG1fbnVtVmFycygwKQotICAgICwgbV9pc0NvbnN0cnVjdG9yKGlzQ29u
c3RydWN0b3IpCi0gICAgLCBtX251bVBhcmFtZXRlcnMoMCkKKyAgICAsIG1fbnVtQ2FsbGVlUmVn
aXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycykKKyAgICAsIG1f
bnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQorICAgICwgbV9pc0NvbnN0cnVj
dG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCisgICAgLCBtX3VubGlua2Vk
Q29kZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtl
ZENvZGVCbG9jaykKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKLSAgICAsIG1fZ2xvYmFs
RGF0YSgwKQotICAgICwgbV9hcmd1bWVudHNSZWdpc3RlcigtMSkKLSAgICAsIG1fbmVlZHNGdWxs
U2NvcGVDaGFpbihvd25lckV4ZWN1dGFibGUtPm5lZWRzQWN0aXZhdGlvbigpKQotICAgICwgbV91
c2VzRXZhbChvd25lckV4ZWN1dGFibGUtPnVzZXNFdmFsKCkpCi0gICAgLCBtX2lzTnVtZXJpY0Nv
bXBhcmVGdW5jdGlvbihmYWxzZSkKLSAgICAsIG1faXNTdHJpY3RNb2RlKG93bmVyRXhlY3V0YWJs
ZS0+aXNTdHJpY3RNb2RlKCkpCi0gICAgLCBtX2NvZGVUeXBlKGNvZGVUeXBlKQorICAgICwgbV9n
bG9iYWxEYXRhKHVubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX3RoaXNS
ZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpCisgICAgLCBtX2FyZ3Vt
ZW50c1JlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKQorICAg
ICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPmFjdGl2YXRpb25SZWdp
c3RlcigpKQorICAgICwgbV9pc1N0cmljdE1vZGUodW5saW5rZWRDb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpKQogICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlkZXIpCiAgICAgLCBtX3NvdXJjZU9m
ZnNldChzb3VyY2VPZmZzZXQpCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICwgbV9l
eGVjdXRpb25FbnRyeUNvdW50KDApCiAjZW5kaWYKLSAgICAsIG1fc3ltYm9sVGFibGUoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSwgU2hhcmVkU3ltYm9sVGFibGU6
OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSkpCiAgICAgLCBtX2FsdGVybmF0aXZl
KGFsdGVybmF0aXZlKQogICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQogICAgICwgbV9vcHRpbWl6
YXRpb25EZWxheUNvdW50ZXIoMCkKQEAgLTE2NDMsNyArMTY0MywxMCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVU
eXBlLCBKU0dsbwogICAgICwgbV9ieXRlY29kZUNvbW1lbnRJdGVyYXRvcigwKQogI2VuZGlmCiB7
CisgICAgbV9nbG9iYWxEYXRhLT5zdGFydGVkQ29tcGlsaW5nKHRoaXMpOworCiAgICAgQVNTRVJU
KG1fc291cmNlKTsKKyAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkpOwogCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgIGppdEFmdGVy
V2FybVVwKCk7CkBAIC0xNjUxLDkgKzE2NTQsMTk5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xv
CiAjaWYgRFVNUF9DT0RFX0JMT0NLX1NUQVRJU1RJQ1MKICAgICBsaXZlQ29kZUJsb2NrU2V0LmFk
ZCh0aGlzKTsKICNlbmRpZgotICAgIC8vIFdlIGhhdmUgYSBzdHViIHB1dFRvQmFzZSBvcGVyYXRp
b24gdG8gYWxsb3cgcmVzb2x2ZV9iYXNlIHRvCi0gICAgLy8gcmVtYWluIGJyYW5jaGxlc3MKLSAg
ICBtX3B1dFRvQmFzZU9wZXJhdGlvbnMuYXBwZW5kKFB1dFRvQmFzZU9wZXJhdGlvbihpc1N0cmlj
dE1vZGUoKSkpOworICAgIHNldElkZW50aWZpZXJzKHVubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVycygpKTsKKyAgICBzZXRDb25zdGFudFJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcnMoKSk7CisKKyAgICBtX2Z1bmN0aW9uRGVjbHMuZ3Jvdyh1bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOworICAgIGZvciAoc2l6ZV90IGNvdW50
ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlu
a2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7CisgICAg
ICAgIHVuc2lnbmVkIGxpbmVDb3VudCA9IHVubGlua2VkRXhlY3V0YWJsZS0+bGluZUNvdW50KCk7
CisgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IG93bmVyRXhlY3V0YWJsZS0+bGluZU5vKCkg
KyB1bmxpbmtlZEV4ZWN1dGFibGUtPmZpcnN0TGluZU9mZnNldCgpOworICAgICAgICB1bnNpZ25l
ZCBzdGFydE9mZnNldCA9IHNvdXJjZU9mZnNldCArIHVubGlua2VkRXhlY3V0YWJsZS0+c3RhcnRP
ZmZzZXQoKTsKKyAgICAgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoID0gdW5saW5rZWRFeGVjdXRh
YmxlLT5zb3VyY2VMZW5ndGgoKTsKKyAgICAgICAgU291cmNlQ29kZSBjb2RlKG1fc291cmNlLCBz
dGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBzb3VyY2VMZW5ndGgsIGZpcnN0TGluZSk7CisgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y3JlYXRlKCptX2dsb2JhbERhdGEsIGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5l
LCBmaXJzdExpbmUgKyBsaW5lQ291bnQpOworICAgICAgICBtX2Z1bmN0aW9uRGVjbHNbaV0uc2V0
KCptX2dsb2JhbERhdGEsIG93bmVyRXhlY3V0YWJsZSwgZXhlY3V0YWJsZSk7CisgICAgfQorCisg
ICAgbV9mdW5jdGlvbkV4cHJzLmdyb3codW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rp
b25FeHBycygpKTsKKyAgICBmb3IgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5u
dW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtl
ZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkpOworICAgICAgICB1bnNpZ25lZCBsaW5lQ291bnQg
PSB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmVDb3VudCgpOworICAgICAgICB1bnNpZ25lZCBmaXJz
dExpbmUgPSBvd25lckV4ZWN1dGFibGUtPmxpbmVObygpICsgdW5saW5rZWRFeGVjdXRhYmxlLT5m
aXJzdExpbmVPZmZzZXQoKTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2VP
ZmZzZXQgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIHVuc2ln
bmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRXhlY3V0YWJsZS0+c291cmNlTGVuZ3RoKCk7Cisg
ICAgICAgIFNvdXJjZUNvZGUgY29kZShtX3NvdXJjZSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0
ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUpOworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBj
b2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbGluZUNvdW50
KTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzW2ldLnNldCgqbV9nbG9iYWxEYXRhLCBvd25lckV4
ZWN1dGFibGUsIGV4ZWN1dGFibGUpOworICAgIH0KKworICAgIGlmICh1bmxpbmtlZENvZGVCbG9j
ay0+aGFzUmFyZURhdGEoKSkgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7
CisgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRC
dWZmZXJDb3VudCgpKSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVy
cy5ncm93KGNvdW50KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrOjpDb25zdGFu
dEJ1ZmZlciYgYnVmZmVyID0gdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKGkpOwor
ICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2ldID0gYnVmZmVy
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7CisgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmdyb3coY291bnQpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlciA9IHVubGlua2VkQ29kZUJsb2Nr
LT5leGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnNbaV0uc3RhcnQgPSBoYW5kbGVyLnN0YXJ0OworICAgICAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0uZW5kID0gaGFuZGxlci5lbmQ7Cisg
ICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXS50YXJnZXQg
PSBoYW5kbGVyLnRhcmdldDsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzW2ldLnNjb3BlRGVwdGggPSBoYW5kbGVyLnNjb3BlRGVwdGggKyBiYXNlU2NvcGVE
ZXB0aDsKKyNpZiBFTkFCTEUoSklUKSAmJiBFTkFCTEUoTExJTlQpCisgICAgICAgICAgICAgICAg
bV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXS5uYXRpdmVDb2RlID0gQ29kZUxvY2F0
aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3MoTExJbnQ6OmdldENvZGVQdHIobGxpbnRfb3BfY2F0Y2gpKSk7CisjZW5kaWYKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5ncm93KGNvdW50KTsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAg
ICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3Ig
cHRyID0gdW5saW5rZWRDb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShpKS5vZmZzZXRU
YWJsZS5iZWdpbigpOworICAgICAgICAgICAgICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjpT
dHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdW5saW5rZWRDb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZShpKS5vZmZzZXRUYWJsZS5lbmQoKTsKKyAgICAgICAgICAgICAgICBm
b3IgKDsgcHRyICE9IGVuZDsgKytwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgT2Zmc2V0TG9j
YXRpb24gb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBvZmZzZXQuYnJhbmNoT2Zmc2V0ID0g
cHRyLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmFkZChwdHItPmtleSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6
ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVt
cFRhYmxlcygpKSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1
bXBUYWJsZXMuZ3Jvdyhjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYg
c291cmNlVGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxl
KGkpOworICAgICAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgZGVzdFRhYmxlID0gbV9yYXJl
RGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzW2ldOworICAgICAgICAgICAgICAgIGRl
c3RUYWJsZS5icmFuY2hPZmZzZXRzID0gc291cmNlVGFibGUuYnJhbmNoT2Zmc2V0czsKKyAgICAg
ICAgICAgICAgICBkZXN0VGFibGUubWluID0gc291cmNlVGFibGUubWluOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZkNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICAgICAg
bV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLmdyb3coY291bnQpOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHNvdXJjZVRhYmxlID0gdW5saW5rZWRDb2Rl
QmxvY2stPmNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZShpKTsKKyAgICAgICAgICAgICAgICBTaW1w
bGVKdW1wVGFibGUmIGRlc3RUYWJsZSA9IG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVt
cFRhYmxlc1tpXTsKKyAgICAgICAgICAgICAgICBkZXN0VGFibGUuYnJhbmNoT2Zmc2V0cyA9IHNv
dXJjZVRhYmxlLmJyYW5jaE9mZnNldHM7CisgICAgICAgICAgICAgICAgZGVzdFRhYmxlLm1pbiA9
IHNvdXJjZVRhYmxlLm1pbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIEFsbG9jYXRlIG1ldGFkYXRhIGJ1ZmZlcnMgZm9yIHRoZSBieXRlY29kZQorICAgIGlmIChz
aXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkxMaW50Q2FsbExpbmtJbmZv
cygpKQorICAgICAgICBtX2xsaW50Q2FsbExpbmtJbmZvcy5ncm93KHNpemUpOworICAgIGlmIChz
aXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkFycmF5UHJvZmlsZXMoKSkK
KyAgICAgICAgbV9hcnJheVByb2ZpbGVzLmdyb3coc2l6ZSk7CisgICAgaWYgKHNpemVfdCBzaXpl
ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVmFsdWVQcm9maWxlcygpKQorICAgICAgICBt
X3ZhbHVlUHJvZmlsZXMuZ3JvdyhzaXplKTsKKyAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZSZXNvbHZlT3BlcmF0aW9ucygpKQorICAgICAgICBtX3Jlc29s
dmVPcGVyYXRpb25zLmdyb3coc2l6ZSk7CisgICAgc2l6ZV90IHB1dFRvQmFzZUNvdW50ID0gdW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mUHV0VG9CYXNlT3BlcmF0aW9ucygpOworICAgIG1fcHV0
VG9CYXNlT3BlcmF0aW9ucy5yZXNlcnZlQ2FwYWNpdHkocHV0VG9CYXNlQ291bnQpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcHV0VG9CYXNlQ291bnQ7ICsraSkKKyAgICAgICAgbV9wdXRU
b0Jhc2VPcGVyYXRpb25zLmFwcGVuZChQdXRUb0Jhc2VPcGVyYXRpb24oaXNTdHJpY3RNb2RlKCkp
KTsKKworICAgIEFTU0VSVChtX3B1dFRvQmFzZU9wZXJhdGlvbnMuY2FwYWNpdHkoKSA9PSBwdXRU
b0Jhc2VDb3VudCk7CisKKyAgICAvLyBDb3B5IGFuZCB0cmFuc2xhdGUgdGhlIFVubGlua2VkSW5z
dHJ1Y3Rpb25zCisgICAgc2l6ZV90IGluc3RydWN0aW9uQ291bnQgPSB1bmxpbmtlZENvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24qIHBjID0g
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmRhdGEoKTsKKyAgICBWZWN0b3I8SW5z
dHJ1Y3Rpb24+IGluc3RydWN0aW9ucyhpbnN0cnVjdGlvbkNvdW50KTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHVubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7ICkg
eworICAgICAgICB1bnNpZ25lZCBvcExlbmd0aCA9IG9wY29kZUxlbmd0aChwY1tpXS51Lm9wY29k
ZSk7CisgICAgICAgIGluc3RydWN0aW9uc1tpXSA9IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXIt
PmdldE9wY29kZShwY1tpXS51Lm9wY29kZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAxOyBq
IDwgb3BMZW5ndGg7ICsraikgeworICAgICAgICAgICAgaWYgKHNpemVvZihpbnQzMl90KSAhPSBz
aXplb2YoaW50cHRyX3QpKQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5w
b2ludGVyID0gMDsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5vcGVyYW5kID0g
cGNbaSArIGpdLnUub3BlcmFuZDsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHBjW2ldLnUu
b3Bjb2RlKSB7CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgY2FzZSBvcF9n
ZXRfYXJndW1lbnRfYnlfdmFsOiB7CisgICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXgg
PSBwY1tpICsgb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2FycmF5UHJv
ZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDJdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVBy
b2ZpbGVJbmRleF07CisgICAgICAgICAgICAvLyBmYWxsdGhyb3VnaAorICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfY29udmVydF90aGlzOgorICAgICAgICBjYXNlIG9wX3Jlc29sdmU6CisgICAg
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOgorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF9i
YXNlOgorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF90aGlzOgorICAgICAgICBjYXNlIG9w
X2dldF9ieV9pZDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX3B1dF9yZXN1bHQ6IHsKKyAgICAgICAg
ICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbcGNbaSArIG9wTGVu
Z3RoIC0gMV0udS5vcGVyYW5kXTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVj
b2RlT2Zmc2V0ID09IC0xKTsKKyAgICAgICAgICAgIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQg
PSBpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gcHJvZmls
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbDogeworICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbaSArIG9wTGVu
Z3RoIC0gMV0udS5vcGVyYW5kOworICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJv
ZmlsZUluZGV4XSA9IEFycmF5UHJvZmlsZShpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgb3BMZW5ndGggLSAxXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRf
b3V0X29mX2xpbmU6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6CisgICAgICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFpbjoK
KyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGY6CisgICAgICAgIGNhc2Ugb3Bf
Z2V0X2J5X2lkX2dldHRlcl9wcm90bzoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVy
X2NoYWluOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKKyAgICAgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3Byb3RvOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9p
ZF9jdXN0b21fY2hhaW46CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6CisgICAg
ICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKKyAgICAgICAgY2FzZSBvcF9nZXRfc3RyaW5n
X2xlbmd0aDoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBvcF9jYWxsOgorICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDogeworICAgICAgICAgICAgaW50
IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbaSArIG9wTGVuZ3RoIC0gMV0udS5vcGVyYW5kOworICAg
ICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmls
ZShpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9ICZtX2Fy
cmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOworICAgICAgICAgICAgLy8gZmFsbHRocm91
Z2gKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgNF0gPSAmbV9sbGludENhbGxMaW5rSW5mb3NbcGNbaSArIDRdLnUub3Bl
cmFuZF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFs
X2NvbnN0X25vcDogeworICAgICAgICAgICAgQVNTRVJUKGNvZGVUeXBlKCkgPT0gR2xvYmFsQ29k
ZSk7CisgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gaWRlbnRpZmllcihwY1tpICsgNF0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxP
YmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgaWYg
KGVudHJ5LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBp
ZiAoZW50cnkuY291bGRCZVdhdGNoZWQoKSkgeworICAgICAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgMF0gPSBnbG9iYWxEYXRhKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUob3BfaW5pdF9n
bG9iYWxfY29uc3RfY2hlY2spOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMV0g
PSAmZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgM10gPSBlbnRyeS5hZGRyZXNzT2ZJc1dhdGNoZWQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyAwXSA9IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShv
cF9pbml0X2dsb2JhbF9jb25zdCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDFdID0g
Jmdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBpICs9IG9wTGVuZ3RoOworICAgIH0KKyAgICBtX2luc3RydWN0
aW9ucyA9IFdURjo6UmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPihpbnN0cnVjdGlvbnMpOwor
CisgICAgaWYgKEJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKKyAgICAg
ICAgZHVtcChtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKKyAgICBtX2dsb2JhbERhdGEt
PmZpbmlzaGVkQ29tcGlsaW5nKHRoaXMpOwogfQogCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQpA
QCAtMTcwNCwxNSArMTg5Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXROdW1QYXJhbWV0ZXJzKGlu
dCBuZXdWYWx1ZSkKICNlbmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6YWRkUGFyYW1ldGVyKCkK
LXsKLSAgICBtX251bVBhcmFtZXRlcnMrKzsKLQotI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
LSAgICBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5hcHBlbmQoVmFsdWVQcm9maWxlKCkpOwotI2Vu
ZGlmCi19Ci0KIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFN0cnVjdHVyZXMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIEluc3RydWN0aW9uKiB2UEMpCiB7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVy
ID0gbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlcjsKQEAgLTE3OTUsNiArMTk3OSw4IEBAIHZvaWQg
Q29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBpZiAo
ISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVybmF0aXZlLT52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKIAorICAgIHZpc2l0b3IuYXBwZW5kKCZtX3VubGlua2VkQ29kZSk7CisKICAgICAv
LyBUaGVyZSBhcmUgdGhyZWUgdGhpbmdzIHRoYXQgbWF5IHVzZSB1bmNvbmRpdGlvbmFsIGZpbmFs
aXplcnM6IGxhenkgYnl0ZWNvZGUgZnJlZWluZywKICAgICAvLyBpbmxpbmUgY2FjaGUgY2xlYXJp
bmcsIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcgdG8gZG8g
YXQKICAgICAvLyBsZWFzdCBvbmUgb2YgdGhvc2UgdGhpbmdzIGlzIHByb2JhYmx5IHF1aXRlIGNs
b3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQKQEAgLTE5MDksOCArMjA5NSw5
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCiAjaWYgRU5BQkxF
KExMSU5UKQogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0YS0+aW50
ZXJwcmV0ZXI7CiAgICAgaWYgKCEhbnVtYmVyT2ZJbnN0cnVjdGlvbnMoKSkgewotICAgICAgICBm
b3IgKHNpemVfdCBzaXplID0gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBJbnN0cnVjdGlvbiogY3VySW5zdHJ1
Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV07
CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IHNpemUgPSBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCks
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBJbnN0cnVjdGlvbiogY3VySW5z
dHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV1d
OwogICAgICAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VySW5zdHJ1
Y3Rpb25bMF0udS5vcGNvZGUpKSB7CiAgICAgICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKICAg
ICAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgpAQCAtMjA2MiwxNCArMjI0
OSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxPYmplY3Qp
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX293bmVyRXhlY3V0YWJsZSk7Ci0gICAgdmlzaXRvci5h
cHBlbmQoJm1fc3ltYm9sVGFibGUpOwotICAgIGlmIChtX3JhcmVEYXRhKSB7CisgICAgdmlzaXRv
ci5hcHBlbmQoJm1fdW5saW5rZWRDb2RlKTsKKyAgICBpZiAobV9yYXJlRGF0YSkKICAgICAgICAg
bV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwotICAg
ICAgICBzaXplX3QgcmVnRXhwQ291bnQgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOwot
ICAgICAgICBXcml0ZUJhcnJpZXI8UmVnRXhwPiogcmVnZXhwcyA9IG1fcmFyZURhdGEtPm1fcmVn
ZXhwcy5kYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnRXhwQ291bnQ7
IGkrKykKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHJlZ2V4cHMgKyBpKTsKLSAgICB9CiAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMobV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVu
Y3Rpb25FeHBycy5zaXplKCk7ICsraSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rp
b25FeHByc1tpXSk7CkBAIC0yMTk2LDY0ICsyMzc4LDE3IEBAIEhhbmRsZXJJbmZvKiBDb2RlQmxv
Y2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIGlu
dCBDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCkKIHsKICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5z
aXplKCkpOwotCi0gICAgVmVjdG9yPExpbmVJbmZvPiYgbGluZUluZm8gPSBtX2xpbmVJbmZvOwot
Ci0gICAgaW50IGxvdyA9IDA7Ci0gICAgaW50IGhpZ2ggPSBsaW5lSW5mby5zaXplKCk7Ci0gICAg
d2hpbGUgKGxvdyA8IGhpZ2gpIHsKLSAgICAgICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93
KSAvIDI7Ci0gICAgICAgIGlmIChsaW5lSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5
dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgaGlnaCA9IG1pZDsKLSAgICB9Ci0KLSAgICBpZiAoIWxvdykKLSAgICAgICAg
cmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKS5maXJzdExpbmUoKTsKLSAgICByZXR1
cm4gbGluZUluZm9bbG93IC0gMV0ubGluZU51bWJlcjsKKyAgICByZXR1cm4gbV9vd25lckV4ZWN1
dGFibGUtPmxpbmVObygpICsgbV91bmxpbmtlZENvZGUtPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpleHByZXNzaW9uUmFu
Z2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwg
aW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKGJ5dGVjb2Rl
T2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAgIGlmICghbV9yYXJlRGF0YSkg
ewotICAgICAgICBzdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIGVuZE9mZnNldCA9IDA7Ci0gICAg
ICAgIGRpdm90ID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxFeHBy
ZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX3JhcmVEYXRhLT5tX2V4cHJlc3Np
b25JbmZvOwotCi0gICAgaW50IGxvdyA9IDA7Ci0gICAgaW50IGhpZ2ggPSBleHByZXNzaW9uSW5m
by5zaXplKCk7Ci0gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHsKLSAgICAgICAgaW50IG1pZCA9IGxv
dyArIChoaWdoIC0gbG93KSAvIDI7Ci0gICAgICAgIGlmIChleHByZXNzaW9uSW5mb1ttaWRdLmlu
c3RydWN0aW9uT2Zmc2V0IDw9IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgbG93ID0gbWlk
ICsgMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaGlnaCA9IG1pZDsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQobG93KTsKLSAgICBpZiAoIWxvdykgewotICAgICAgICBzdGFydE9mZnNldCA9IDA7
Ci0gICAgICAgIGVuZE9mZnNldCA9IDA7Ci0gICAgICAgIGRpdm90ID0gMDsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHN0YXJ0T2Zmc2V0ID0gZXhwcmVzc2lvbkluZm9bbG93IC0gMV0u
c3RhcnRPZmZzZXQ7Ci0gICAgZW5kT2Zmc2V0ID0gZXhwcmVzc2lvbkluZm9bbG93IC0gMV0uZW5k
T2Zmc2V0OwotICAgIGRpdm90ID0gZXhwcmVzc2lvbkluZm9bbG93IC0gMV0uZGl2b3RQb2ludCAr
IG1fc291cmNlT2Zmc2V0OwotICAgIHJldHVybjsKKyAgICBtX3VubGlua2VkQ29kZS0+ZXhwcmVz
c2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKKyAgICBkaXZvdCArPSBtX3NvdXJjZU9mZnNldDsKIH0KIAogdm9p
ZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkKIHsKLSAgICBt
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNocmlua1RvRml0KCk7CiAjaWYgRU5BQkxFKExM
SU5UKQogICAgIG1fbGxpbnRDYWxsTGlua0luZm9zLnNocmlua1RvRml0KCk7CiAjZW5kaWYKQEAg
LTIyNjQsNyArMjM5OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2Rl
IHNocmlua01vZGUpCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIGlmIChzaHJpbmtN
b2RlID09IEVhcmx5U2hyaW5rKQogICAgICAgICBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaHJp
bmtUb0ZpdCgpOwotICAgIG1fdmFsdWVQcm9maWxlcy5zaHJpbmtUb0ZpdCgpOwogICAgIG1fcmFy
ZUNhc2VQcm9maWxlcy5zaHJpbmtUb0ZpdCgpOwogICAgIG1fc3BlY2lhbEZhc3RDYXNlUHJvZmls
ZXMuc2hyaW5rVG9GaXQoKTsKICNlbmRpZgpAQCAtMjI3NiwxNSArMjQxMCwxMSBAQCB2b2lkIENv
ZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQogICAgICAgICBtX2Nv
bnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7CiAgICAgfSAvLyBlbHNlIGRvbid0IHNocmlu
ayB0aGVzZSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgcG9pbnRlZCBwb2ludGVycyBp
bnRvIHRoZXNlIHRhYmxlcy4KIAotICAgIG1fcmVzb2x2ZU9wZXJhdGlvbnMuc2hyaW5rVG9GaXQo
KTsKLSAgICBtX2xpbmVJbmZvLnNocmlua1RvRml0KCk7CiAgICAgaWYgKG1fcmFyZURhdGEpIHsK
ICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaHJpbmtUb0ZpdCgpOwot
ICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9y
YXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CiAgICAg
ICAgIG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgp
OwogICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9G
aXQoKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mby5zaHJpbmtUb0ZpdCgp
OwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIG1fcmFyZURhdGEtPm1fY2FsbFJldHVybkluZGV4
VmVjdG9yLnNocmlua1RvRml0KCk7CiAjZW5kaWYKQEAgLTIzMTIsNyArMjQ0Miw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIEFT
U0VSVChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7CiAgICAgQVNTRVJUKG5lZWRzRnVsbFNj
b3BlQ2hhaW4oKSk7CiAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYWN0aXZhdGlv
blJlZ2lzdGVyKCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0g
SlNBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSwg
c3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpKTsKKyAg
ICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZShjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLCB0aGlzKTsKICAgICBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoYWN0aXZhdGlvblJlZ2lzdGVyKCkpID0gSlNWYWx1ZShhY3RpdmF0aW9uKTsKICAgICBj
YWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOwogfQpAQCAtMjgwNyw4ICsyOTM3LDggQEAg
Ym9vbCBDb2RlQmxvY2s6OnVzZXNPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCiAKIFN0cmluZyBD
b2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihpbnQgcmVnaXN0ZXJOdW1iZXIpCiB7Ci0gICAgU3lt
Ym9sVGFibGU6Oml0ZXJhdG9yIGVuZCA9IG1fc3ltYm9sVGFibGUtPmVuZCgpOwotICAgIGZvciAo
U3ltYm9sVGFibGU6Oml0ZXJhdG9yIHB0ciA9IG1fc3ltYm9sVGFibGUtPmJlZ2luKCk7IHB0ciAh
PSBlbmQ7ICsrcHRyKSB7CisgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGVuZCA9IHN5bWJvbFRh
YmxlKCktPmVuZCgpOworICAgIGZvciAoU3ltYm9sVGFibGU6Oml0ZXJhdG9yIHB0ciA9IHN5bWJv
bFRhYmxlKCktPmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7CiAgICAgICAgIGlmIChwdHIt
PnZhbHVlLmdldEluZGV4KCkgPT0gcmVnaXN0ZXJOdW1iZXIpCiAgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKHB0ci0+a2V5KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKaW5kZXggZDQxOTMyM2EwY2Q0MTAwNThiYTYwODRmYzgzMTc1ODc4NGYzMjkz
Ni4uYTI4MDY0OTQwYWVjZDY5YzgxYjFkOTEyMzkxMDlkYmM2Zjk4MzNjOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtMTIwLDcgKzEyMCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgQ29kZUJsb2NrKENvcHlQYXJz
ZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7CiAgICAgICAgIAotICAgICAgICBDb2RlQmxv
Y2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSwgSlNHbG9iYWxP
YmplY3QqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0
LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSk7
CisgICAgICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkQ29kZUJsb2NrKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBiYXNlU2NvcGVEZXB0
aCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFz
c093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKTsKIAogICAgICAgICBXcml0ZUJhcnJpZXI8
SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgICAgICBIZWFwKiBtX2hlYXA7CkBA
IC0xMzAsNyArMTMwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBpbnQg
bnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQogICAgICAg
ICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKTsKLSAgICAgICAgdm9pZCBhZGRQ
YXJhbWV0ZXIoKTsKICAgICAgICAgCiAgICAgICAgIGludCogYWRkcmVzc09mTnVtUGFyYW1ldGVy
cygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CkBAIC00MzQsOCArNDMzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPihyZXR1cm5B
ZGRyZXNzKSAtIGluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgICAgIH0KIAotICAgICAgICB2
b2lkIHNldElzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbihib29sIGlzTnVtZXJpY0NvbXBhcmVGdW5j
dGlvbikgeyBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbiA9IGlzTnVtZXJpY0NvbXBhcmVGdW5j
dGlvbjsgfQotICAgICAgICBib29sIGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbigpIHsgcmV0dXJu
IG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uOyB9CisgICAgICAgIGJvb2wgaXNOdW1lcmljQ29t
cGFyZUZ1bmN0aW9uKCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmlzTnVtZXJpY0NvbXBhcmVG
dW5jdGlvbigpOyB9CiAKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnN0cnVjdGlvbnMoKSBj
b25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0KICAgICAgICAgUmVmQ291bnRl
ZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlv
bnM7IH0KQEAgLTUyNCwxMCArNTIyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
c2V0VGhpc1JlZ2lzdGVyKGludCB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlz
UmVnaXN0ZXI7IH0KICAgICAgICAgaW50IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1f
dGhpc1JlZ2lzdGVyOyB9CiAKLSAgICAgICAgdm9pZCBzZXROZWVkc0Z1bGxTY29wZUNoYWluKGJv
b2wgbmVlZHNGdWxsU2NvcGVDaGFpbikgeyBtX25lZWRzRnVsbFNjb3BlQ2hhaW4gPSBuZWVkc0Z1
bGxTY29wZUNoYWluOyB9Ci0gICAgICAgIGJvb2wgbmVlZHNGdWxsU2NvcGVDaGFpbigpIGNvbnN0
IHsgcmV0dXJuIG1fbmVlZHNGdWxsU2NvcGVDaGFpbjsgfQotICAgICAgICB2b2lkIHNldFVzZXNF
dmFsKGJvb2wgdXNlc0V2YWwpIHsgbV91c2VzRXZhbCA9IHVzZXNFdmFsOyB9Ci0gICAgICAgIGJv
b2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFdmFsOyB9CisgICAgICAgIGJvb2wg
bmVlZHNGdWxsU2NvcGVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5uZWVk
c0Z1bGxTY29wZUNoYWluKCk7IH0KKyAgICAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT51c2VzRXZhbCgpOyB9CiAgICAgICAgIAogICAgICAgICB2b2lk
IHNldEFyZ3VtZW50c1JlZ2lzdGVyKGludCBhcmd1bWVudHNSZWdpc3RlcikKICAgICAgICAgewpA
QCAtNTg5LDM3ICs1ODUsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAodXNl
c0FyZ3VtZW50cygpICYmIG9wZXJhbmQgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFy
Z3VtZW50c1JlZ2lzdGVyKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
ICAgICAgICByZXR1cm4gb3BlcmFuZCA+PSBtX3N5bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQoKSAK
LSAgICAgICAgICAgICAgICAmJiBvcGVyYW5kIDwgbV9zeW1ib2xUYWJsZS0+Y2FwdHVyZUVuZCgp
OworICAgICAgICAgICAgLy8gV2UncmUgaW4gZ2xvYmFsIGNvZGUgc28gdGhlcmUgYXJlIG5vIGxv
Y2FscyB0byBjYXB0dXJlCisgICAgICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZCA+PSBz
eW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKQorICAgICAgICAgICAgICAgICYmIG9wZXJhbmQg
PCBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CiAgICAgICAgIH0KIAotICAgICAgICBDb2Rl
VHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVR5cGU7IH0KKyAgICAgICAgQ29k
ZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29kZVR5cGUo
KTsgfQogCiAgICAgICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZS5nZXQoKTsgfQogICAgICAgICB1bnNpZ25lZCBzb3VyY2VPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX3NvdXJjZU9mZnNldDsgfQogCi0gICAgICAgIHNpemVfdCBudW1iZXJPZkp1bXBU
YXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KLSAgICAgICAg
dm9pZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1bXBUYXJnZXQpIHsgbV9qdW1wVGFyZ2V0cy5h
cHBlbmQoanVtcFRhcmdldCk7IH0KLSAgICAgICAgdW5zaWduZWQganVtcFRhcmdldChpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHNbaW5kZXhdOyB9Ci0gICAgICAgIHVuc2ln
bmVkIGxhc3RKdW1wVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5sYXN0KCk7
IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkQ29kZS0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpOyB9CisgICAgICAgIHVuc2lnbmVk
IGp1bXBUYXJnZXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+anVt
cFRhcmdldChpbmRleCk7IH0KIAogICAgICAgICB2b2lkIGNyZWF0ZUFjdGl2YXRpb24oQ2FsbEZy
YW1lKik7CiAKICAgICAgICAgdm9pZCBjbGVhckV2YWxDYWNoZSgpOwogICAgICAgICAKICAgICAg
ICAgU3RyaW5nIG5hbWVGb3JSZWdpc3RlcihpbnQgcmVnaXN0ZXJOdW1iZXIpOwotICAgICAgICAK
LSAgICAgICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKHVuc2lnbmVkIHByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMuYXBwZW5kKHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pOwotICAg
ICAgICB9Ci0jaWYgRU5BQkxFKExMSU5UKQotICAgICAgICBMTEludENhbGxMaW5rSW5mbyogYWRk
TExJbnRDYWxsTGlua0luZm8oKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2xsaW50Q2FsbExp
bmtJbmZvcy5hcHBlbmQoTExJbnRDYWxsTGlua0luZm8oKSk7Ci0gICAgICAgICAgICByZXR1cm4g
Jm1fbGxpbnRDYWxsTGlua0luZm9zLmxhc3QoKTsKLSAgICAgICAgfQotI2VuZGlmCisKICNpZiBF
TkFCTEUoSklUKQogICAgICAgICB2b2lkIHNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNp
emVfdCBzaXplKSB7IG1fc3RydWN0dXJlU3R1YkluZm9zLmdyb3coc2l6ZSk7IH0KICAgICAgICAg
c2l6ZV90IG51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmVTdHViSW5mb3Muc2l6ZSgpOyB9CkBAIC02NDcsMTQgKzYzNCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBWYWx1ZVByb2ZpbGUqIGFkZFZhbHVlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCAhPSAtMSk7Ci0gICAgICAg
ICAgICBBU1NFUlQobV92YWx1ZVByb2ZpbGVzLmlzRW1wdHkoKSB8fCBtX3ZhbHVlUHJvZmlsZXMu
bGFzdCgpLm1fYnl0ZWNvZGVPZmZzZXQgPCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgICAgICBt
X3ZhbHVlUHJvZmlsZXMuYXBwZW5kKFZhbHVlUHJvZmlsZShieXRlY29kZU9mZnNldCkpOwotICAg
ICAgICAgICAgcmV0dXJuICZtX3ZhbHVlUHJvZmlsZXMubGFzdCgpOwotICAgICAgICB9CisKICAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92YWx1ZVBy
b2ZpbGVzLnNpemUoKTsgfQogICAgICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZShpbnQg
aW5kZXgpCiAgICAgICAgIHsKQEAgLTc4MCwyNSArNzYwLDI0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyBFeGNlcHRpb24gaGFuZGxpbmcgc3VwcG9ydAogCiAgICAgICAgIHNpemVfdCBu
dW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1f
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpIDogMDsgfQotICAgICAgICB2b2lk
IGFkZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgSGFuZGxlckluZm8mIGhhbmxlcikgeyBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRs
ZXJzLmFwcGVuZChoYW5sZXIpOyB9Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5k
bGVyKGludCBpbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5t
X2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQotCi0gICAgICAgIHZvaWQgYWRkRXhwcmVzc2lv
bkluZm8oY29uc3QgRXhwcmVzc2lvblJhbmdlSW5mbyYgZXhwcmVzc2lvbkluZm8pCisgICAgICAg
IHZvaWQgYWxsb2NhdGVIYW5kbGVycyhjb25zdCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4m
IHVubGlua2VkSGFuZGxlcnMpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBjb3VudCA9
IHVubGlua2VkSGFuZGxlcnMuc2l6ZSgpOworICAgICAgICAgICAgaWYgKCFjb3VudCkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5
KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvLmFwcGVuZChleHBy
ZXNzaW9uSW5mbyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFkZExpbmVJbmZvKHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQgbGluZU5vKQotICAgICAgICB7Ci0gICAgICAgICAgICBW
ZWN0b3I8TGluZUluZm8+JiBsaW5lSW5mbyA9IG1fbGluZUluZm87Ci0gICAgICAgICAgICBpZiAo
IWxpbmVJbmZvLnNpemUoKSB8fCBsaW5lSW5mby5sYXN0KCkubGluZU51bWJlciAhPSBsaW5lTm8p
IHsKLSAgICAgICAgICAgICAgICBMaW5lSW5mbyBpbmZvID0geyBieXRlY29kZU9mZnNldCwgbGlu
ZU5vIH07Ci0gICAgICAgICAgICAgICAgbGluZUluZm8uYXBwZW5kKGluZm8pOworICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5yZXNpemUoY291bnQpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXS5zdGFydCA9IHVubGlua2VkSGFu
ZGxlcnNbaV0uc3RhcnQ7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25I
YW5kbGVyc1tpXS5lbmQgPSB1bmxpbmtlZEhhbmRsZXJzW2ldLmVuZDsKKyAgICAgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldLnRhcmdldCA9IHVubGlua2VkSGFu
ZGxlcnNbaV0udGFyZ2V0OworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9u
SGFuZGxlcnNbaV0uc2NvcGVEZXB0aCA9IHVubGlua2VkSGFuZGxlcnNbaV0uc2NvcGVEZXB0aDsK
ICAgICAgICAgICAgIH0KKwogICAgICAgICB9CisgICAgICAgIEhhbmRsZXJJbmZvJiBleGNlcHRp
b25IYW5kbGVyKGludCBpbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVE
YXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQogCi0gICAgICAgIGJvb2wgaGFzRXhw
cmVzc2lvbkluZm8oKSB7IHJldHVybiBtX3JhcmVEYXRhICYmIG1fcmFyZURhdGEtPm1fZXhwcmVz
c2lvbkluZm8uc2l6ZSgpOyB9CisgICAgICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJl
dHVybiBtX3VubGlua2VkQ29kZS0+aGFzRXhwcmVzc2lvbkluZm8oKTsgfQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICAgICAgVmVjdG9yPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0PiYg
Y2FsbFJldHVybkluZGV4VmVjdG9yKCkKQEAgLTg3Myw2ICs4NTIsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgdik7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CisKKwogICAgICAgICB1bnNpZ25lZCBhZGRP
ckZpbmRDb25zdGFudChKU1ZhbHVlKTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tp
bmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQogICAgICAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQpAQCAtODk2LDIwICs4Nzcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uRXhwcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHByc1tpbmRl
eF0uZ2V0KCk7IH0KIAotICAgICAgICB1bnNpZ25lZCBhZGRSZWdFeHAoUmVnRXhwKiByKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsKLSAgICAg
ICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5hcHBlbmQoV3JpdGVCYXJyaWVyPFJlZ0V4cD4o
Km1fZ2xvYmFsRGF0YSwgb3duZXJFeGVjdXRhYmxlKCksIHIpKTsKLSAgICAgICAgICAgIHJldHVy
biBzaXplOwotICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnRXhwcygpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9yYXJlRGF0YSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMu
c2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29u
c3QgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaW5k
ZXhdLmdldCgpOyB9CisgICAgICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPnJlZ2V4cChpbmRleCk7IH0KIAogICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkNvbnN0YW50QnVmZmVycygpIGNvbnN0CiAgICAgICAgIHsKQEAgLTkyNCwxMCAr
ODkyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50QnVmZmVycy5hcHBlbmQoYnVmZmVyKTsKICAgICAgICAgICAgIHJldHVybiBzaXplOwogICAg
ICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGFkZENvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGxlbmd0
aCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkZENvbnN0YW50QnVmZmVyKFZlY3Rv
cjxKU1ZhbHVlPihsZW5ndGgpKTsKLSAgICAgICAgfQogCiAgICAgICAgIFZlY3RvcjxKU1ZhbHVl
PiYgY29uc3RhbnRCdWZmZXJBc1ZlY3Rvcih1bnNpZ25lZCBpbmRleCkKICAgICAgICAgewpAQCAt
OTY0LDcgKzkyOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJpbmdKdW1wVGFibGUm
IHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0
YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07IH0KIAogCi0gICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpIHsgcmV0
dXJuIG1fc3ltYm9sVGFibGUuZ2V0KCk7IH0KKyAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnN5bWJvbFRhYmxlKCk7
IH0KIAogICAgICAgICBFdmFsQ29kZUNhY2hlJiBldmFsQ29kZUNhY2hlKCkgeyBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGU7IH0K
IApAQCAtMTIwOCw2ICsxMTcyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwogCisgICAgICAgIFVubGlua2VkQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLmdl
dCgpOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgREZHQ29kZUJsb2Nr
czsKICAgICAgICAgCkBAIC0xMjE5LDcgKzExODUsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYg
RU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25z
QW5kQ291bnRMaXZlbmVzcyhPcGVyYXRpb25JblByb2dyZXNzLCB1bnNpZ25lZCYgbnVtYmVyT2ZM
aXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Q
cm9maWxlcyk7CiAjZW5kaWYKLSAgICAgICAgCisKKyAgICAgICAgdm9pZCBzZXRJZGVudGlmaWVy
cyhjb25zdCBWZWN0b3I8SWRlbnRpZmllcj4mIGlkZW50aWZpZXJzKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQobV9pZGVudGlmaWVycy5pc0VtcHR5KCkpOworICAgICAgICAgICAgbV9p
ZGVudGlmaWVycy5hcHBlbmRWZWN0b3IoaWRlbnRpZmllcnMpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVu
a25vd24+ID4mIGNvbnN0YW50cykKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZV90IGNvdW50
ID0gY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMucmVz
aXplKGNvdW50KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICAgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV9nbG9iYWxE
YXRhLCBvd25lckV4ZWN1dGFibGUoKSwgY29uc3RhbnRzW2ldLmdldCgpKTsKKyAgICAgICAgfQor
CiAgICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+
Ojpjb25zdF9pdGVyYXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJh
dG9yJik7CiAKICAgICAgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoRXhlY1N0YXRlKiwgaW50IHIp
IGNvbnN0OwpAQCAtMTI2OSwyOSArMTI0OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFC
TEUoSklUKQogICAgICAgICB2b2lkIHJlc2V0U3R1YkludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOwogI2VuZGlmCi0gICAgICAgIAorICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5saW5rZWRDb2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlOwogICAgICAgICBpbnQgbV9udW1Q
YXJhbWV0ZXJzOwotCiAgICAgICAgIFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293
bmVyRXhlY3V0YWJsZTsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAKICAg
ICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiBtX2luc3RydWN0aW9uczsKLQogICAg
ICAgICBpbnQgbV90aGlzUmVnaXN0ZXI7CiAgICAgICAgIGludCBtX2FyZ3VtZW50c1JlZ2lzdGVy
OwogICAgICAgICBpbnQgbV9hY3RpdmF0aW9uUmVnaXN0ZXI7CiAKLSAgICAgICAgYm9vbCBtX25l
ZWRzRnVsbFNjb3BlQ2hhaW47Ci0gICAgICAgIGJvb2wgbV91c2VzRXZhbDsKLSAgICAgICAgYm9v
bCBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsKICAgICAgICAgYm9vbCBtX2lzU3RyaWN0TW9k
ZTsKIAotICAgICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwotCiAgICAgICAgIFJlZlB0cjxTb3Vy
Y2VQcm92aWRlcj4gbV9zb3VyY2U7CiAgICAgICAgIHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0Owog
Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsK
ICNpZiBFTkFCTEUoTExJTlQpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxMTEludENhbGxMaW5r
SW5mbywgOD4gbV9sbGludENhbGxMaW5rSW5mb3M7CiAgICAgICAgIFNlbnRpbmVsTGlua2VkTGlz
dDxMTEludENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0lu
Zm8+ID4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CkBAIC0xMzYyLDE4ICsxMzM0LDE1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBtX2V4ZWN1dGlvbkVudHJ5Q291bnQ7CiAjZW5k
aWYKIAotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fanVtcFRhcmdldHM7Ci0gICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gbV9sb29wVGFyZ2V0czsKLQogICAgICAgICAvLyBDb25zdGFudCBQb29s
CiAgICAgICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOwogICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoUmVnaXN0ZXIpID09IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pLCBSZWdpc3Rlcl9tdXN0X2JlX3NhbWVfc2l6ZV9hc19Xcml0ZUJhcnJpZXJfVW5rbm93bik7
CisgICAgICAgIC8vIFRPRE86IFRoaXMgY291bGQganVzdCBiZSBhIHBvaW50ZXIgdG8gbV91bmxp
bmtlZENvZGVCbG9jaydzIGRhdGEsIGJ1dCB0aGUgREZHIG11dGF0ZXMKKyAgICAgICAgLy8gaXQs
IHNvIHdlJ3JlIHN0dWNrIHdpdGggaXQgZm9yIG5vdy4KICAgICAgICAgVmVjdG9yPFdyaXRlQmFy
cmllcjxVbmtub3duPiA+IG1fY29uc3RhbnRSZWdpc3RlcnM7CiAgICAgICAgIFZlY3RvcjxXcml0
ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPiA+IG1fZnVuY3Rpb25EZWNsczsKICAgICAgICAg
VmVjdG9yPFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+ID4gbV9mdW5jdGlvbkV4cHJz
OwogCi0gICAgICAgIFdyaXRlQmFycmllcjxTaGFyZWRTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJs
ZTsKLQogICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgICAgICAK
ICAgICAgICAgRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CkBAIC0xMzg0
LDExICsxMzUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVpbnQxNl90IG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyOwogICAgICAgICB1aW50MTZfdCBtX3Jlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyOwogCi0gICAgICAgIFZlY3RvcjxMaW5lSW5mbz4gbV9saW5lSW5mbzsKLSNpZiBF
TkFCTEUoQllURUNPREVfQ09NTUVOVFMpCi0gICAgICAgIFZlY3RvcjxDb21tZW50PiAgbV9ieXRl
Y29kZUNvbW1lbnRzOwotICAgICAgICBzaXplX3QgbV9ieXRlY29kZUNvbW1lbnRJdGVyYXRvcjsK
LSNlbmRpZgogICAgICAgICBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbnM+IG1fcmVzb2x2ZU9wZXJh
dGlvbnM7CiAgICAgICAgIFZlY3RvcjxQdXRUb0Jhc2VPcGVyYXRpb24sIDE+IG1fcHV0VG9CYXNl
T3BlcmF0aW9uczsKIApAQCAtMTM5Nyw5ICsxMzYxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgIFZlY3RvcjxIYW5kbGVySW5mbz4gbV9leGNlcHRpb25I
YW5kbGVyczsKIAotICAgICAgICAgICAgLy8gUmFyZSBDb25zdGFudHMKLSAgICAgICAgICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8UmVnRXhwPiA+IG1fcmVnZXhwczsKLQogICAgICAgICAgICAgLy8g
QnVmZmVycyB1c2VkIGZvciBsYXJnZSBhcnJheSBsaXRlcmFscwogICAgICAgICAgICAgVmVjdG9y
PFZlY3RvcjxKU1ZhbHVlPiA+IG1fY29uc3RhbnRCdWZmZXJzOwogICAgICAgICAgICAgCkBAIC0x
NDEwLDkgKzEzNzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAgICAgRXZhbENvZGVD
YWNoZSBtX2V2YWxDb2RlQ2FjaGU7CiAKLSAgICAgICAgICAgIC8vIEV4cHJlc3Npb24gaW5mbyAt
IHByZXNlbnQgaWYgZGVidWdnaW5nLgotICAgICAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5n
ZUluZm8+IG1fZXhwcmVzc2lvbkluZm87Ci0gICAgICAgICAgICAvLyBMaW5lIGluZm8gLSBwcmVz
ZW50IGlmIHByb2ZpbGluZyBvciBkZWJ1Z2dpbmcuCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAg
ICAgIFZlY3RvcjxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldD4gbV9jYWxsUmV0dXJu
SW5kZXhWZWN0b3I7CiAjZW5kaWYKQEAgLTE0NDAsOCArMTM5OCw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEdsb2JhbENvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQYXNzT3duUHRyPENvZGVCbG9j
az4gYWx0ZXJuYXRpdmUpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUs
IGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGZh
bHNlLCBhbHRlcm5hdGl2ZSkKKyAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBiYXNlU2NvcGVEZXB0aCwg
UGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJj
ZU9mZnNldCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAg
OiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBiYXNlU2NvcGVEZXB0aCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgYWx0ZXJu
YXRpdmUpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgIH07CkBAIC0xNDUzLDExICsxNDExLDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBQcm9n
cmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0
aXZlKQotICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2Rl
VHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCisgICAg
ICAgIFByb2dyYW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogR2xv
YmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9i
amVjdCwgMCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQogICAgICAgICB7CiAgICAg
ICAgIH0KLSAgICAgICAgCisKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3Bl
KiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CkBAIC0xNDcyLDI2ICsxNDMwLDE2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgRXZhbENvZGVCbG9jayhDb3B5UGFyc2Vk
QmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQogICAgICAgICAgICAgOiBHbG9iYWxDb2Rl
QmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKLSAgICAgICAgICAgICwgbV9iYXNlU2NvcGVE
ZXB0aChvdGhlci5tX2Jhc2VTY29wZURlcHRoKQotICAgICAgICAgICAgLCBtX3ZhcmlhYmxlcyhv
dGhlci5tX3ZhcmlhYmxlcykKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5h
dGl2ZSkKLSAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgRXZh
bENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQotICAg
ICAgICAgICAgLCBtX2Jhc2VTY29wZURlcHRoKGJhc2VTY29wZURlcHRoKQorICAgICAgICBFdmFs
Q29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRXZhbENv
ZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3Bl
RGVwdGgsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDog
R2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2Jh
bE9iamVjdCwgYmFzZVNjb3BlRGVwdGgsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkK
ICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgaW50IGJhc2VTY29wZURlcHRoKCkgY29u
c3QgeyByZXR1cm4gbV9iYXNlU2NvcGVEZXB0aDsgfQotCi0gICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleF07
IH0KLSAgICAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gbV92YXJpYWJsZXMu
c2l6ZSgpOyB9Ci0gICAgICAgIHZvaWQgYWRvcHRWYXJpYWJsZXMoVmVjdG9yPElkZW50aWZpZXI+
JiB2YXJpYWJsZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5p
c0VtcHR5KCkpOwotICAgICAgICAgICAgbV92YXJpYWJsZXMuc3dhcCh2YXJpYWJsZXMpOwotICAg
ICAgICB9CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4
KSB7IHJldHVybiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKS0+dmFyaWFibGUoaW5kZXgpOyB9Cisg
ICAgICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIHVubGlua2VkRXZhbENvZGVC
bG9jaygpLT5udW1WYXJpYWJsZXMoKTsgfQogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAg
IHByb3RlY3RlZDoKQEAgLTE1MDMsOCArMTQ1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
CiAKICAgICBwcml2YXRlOgotICAgICAgICBpbnQgbV9iYXNlU2NvcGVEZXB0aDsKLSAgICAgICAg
VmVjdG9yPElkZW50aWZpZXI+IG1fdmFyaWFibGVzOworICAgICAgICBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2sqIHVubGlua2VkRXZhbENvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGpzQ2FzdDxVbmxp
bmtlZEV2YWxDb2RlQmxvY2sqPih1bmxpbmtlZENvZGVCbG9jaygpKTsgfQogICAgIH07CiAKICAg
ICBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewpAQCAtMTUxNCw4
ICsxNDYxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAg
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNl
dCwgYm9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUg
PSBudWxscHRyKQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2Rl
VHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBpc0NvbnN0
cnVjdG9yLCBhbHRlcm5hdGl2ZSkKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2soRnVuY3Rpb25F
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVu
bGlua2VkQ29kZUJsb2NrLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQ
YXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUgPSBudWxscHRyKQorICAgICAgICAgICAg
OiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCAwLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBhbHRlcm5hdGl2ZSkKICAgICAg
ICAgewogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
Y29kZS5oCmluZGV4IDE3YjljNjc4MmVjM2ZlNWM5N2MwZGUzMWJlM2FhNTYzZDE3M2YxZDEuLjg5
NzlkMGI3YjJkOTU0OWUyOGIwZDZiNmExNzE5MjcxNGQ3OGJkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTExOCw3ICsxMTgsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgbWFjcm8ob3BfcHV0X3RvX2Jhc2UsIDUpIFwKICAgICAgICAgbWFjcm8ob3Bf
cHV0X3RvX2Jhc2VfdmFyaWFibGUsIDUpIFwKICAgICAgICAgXAotICAgICAgICBtYWNybyhvcF9p
bml0X2dsb2JhbF9jb25zdCwgMykgXAorICAgICAgICBtYWNybyhvcF9pbml0X2dsb2JhbF9jb25z
dF9ub3AsIDUpIFwKKyAgICAgICAgbWFjcm8ob3BfaW5pdF9nbG9iYWxfY29uc3QsIDUpIFwKICAg
ICAgICAgbWFjcm8ob3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2ssIDUpIFwKICAgICAgICAgbWFj
cm8ob3BfZ2V0X2J5X2lkLCA5KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKICAgICAgICAg
bWFjcm8ob3BfZ2V0X2J5X2lkX291dF9vZl9saW5lLCA5KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5n
ICovIFwKQEAgLTIwNCw3ICsyMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgXAogICAg
ICAgICBtYWNybyhvcF9jYXRjaCwgMikgXAogICAgICAgICBtYWNybyhvcF90aHJvdywgMikgXAot
ICAgICAgICBtYWNybyhvcF90aHJvd19yZWZlcmVuY2VfZXJyb3IsIDIpIFwKKyAgICAgICAgbWFj
cm8ob3BfdGhyb3dfc3RhdGljX2Vycm9yLCAzKSBcCiAgICAgICAgIFwKICAgICAgICAgbWFjcm8o
b3BfZGVidWcsIDUpIFwKICAgICAgICAgbWFjcm8ob3BfcHJvZmlsZV93aWxsX2NhbGwsIDIpIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjhhYTQ4NDA0YWNhYzdhZjFmNGUwMjQxYTllMzU0ZDA4ZjhhMDZh
ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKKworI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgi
CisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCisjaW5jbHVk
ZSAiRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiU291cmNl
UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJTeW1ib2xUYWJs
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSIsIDAs
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpIH07
Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2Vk
Q29kZUJsb2NrIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZENvZGVCbG9j
aykgfTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jazo6c19pbmZvID0g
eyAiVW5saW5rZWRHbG9iYWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKSB9OworY29uc3QgQ2xhc3NJbmZv
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2spIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRFdmFsQ29kZUJs
b2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEV2YWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRXZhbENvZGVCbG9jaykgfTsKK2NvbnN0
IENsYXNzSW5mbyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKSB9OworCit1bnNpZ25lZCBVbmxpbmtlZENv
ZGVCbG9jazo6YWRkT3JGaW5kQ29uc3RhbnQoSlNWYWx1ZSB2KQoreworICAgIHVuc2lnbmVkIG51
bWJlck9mQ29uc3RhbnRzID0gbnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbnN0YW50czsgKytpKSB7CisgICAgICAgIGlm
IChnZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGkpID09IHYpCisgICAg
ICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIGFkZENvbnN0YW50KHYpOworfQor
CitVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQorICAgIDogQmFzZSgqZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKQorICAgICwgbV9udW1DYXB0dXJlZFZhcmlhYmxlcyhub2RlLT5j
YXB0dXJlZFZhcmlhYmxlQ291bnQoKSkKKyAgICAsIG1fZm9yY2VVc2VzQXJndW1lbnRzKG5vZGUt
PnVzZXNBcmd1bWVudHMoKSkKKyAgICAsIG1faXNJblN0cmljdENvbnRleHQobm9kZS0+aXNTdHJp
Y3RNb2RlKCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKG5vZGUtPmhhc0NhcHR1cmVk
VmFyaWFibGVzKCkpCisgICAgLCBtX25hbWUobm9kZS0+aWRlbnQoKSkKKyAgICAsIG1faW5mZXJy
ZWROYW1lKG5vZGUtPmluZmVycmVkTmFtZSgpKQorICAgICwgbV9wYXJhbWV0ZXJzKG5vZGUtPnBh
cmFtZXRlcnMoKSkKKyAgICAsIG1fZmlyc3RMaW5lT2Zmc2V0KG5vZGUtPmZpcnN0TGluZSgpIC0g
c291cmNlLmZpcnN0TGluZSgpKQorICAgICwgbV9saW5lQ291bnQobm9kZS0+bGFzdExpbmUoKSAt
IG5vZGUtPmZpcnN0TGluZSgpKQorICAgICwgbV9zdGFydE9mZnNldChub2RlLT5zb3VyY2UoKS5z
dGFydE9mZnNldCgpIC0gc291cmNlLnN0YXJ0T2Zmc2V0KCkpCisgICAgLCBtX3NvdXJjZUxlbmd0
aChub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSkKKyAgICAsIG1fZmVhdHVyZXMobm9kZS0+ZmVhdHVy
ZXMoKSkKKyAgICAsIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlKG5vZGUtPmZ1bmN0aW9u
TmFtZUlzSW5TY29wZVRvZ2dsZSgpKQoreworfQorCit2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIENPTVBJTEVfQVNTRVJUKFN0cnVj
dHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
bldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX25hbWVWYWx1ZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3lt
Ym9sVGFibGVGb3JDYWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zeW1i
b2xUYWJsZUZvckNvbnN0cnVjdCk7Cit9CisKK0Z1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmxpbmsoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIHNpemVfdCBsaW5lT2Zmc2V0LCBzaXplX3Qgc291cmNlT2Zmc2V0
KQoreworICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IGxpbmVPZmZzZXQgKyBtX2ZpcnN0TGluZU9m
ZnNldDsKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJjZU9mZnNldCArIG1fc3RhcnRP
ZmZzZXQ7CisgICAgU291cmNlQ29kZSBjb2RlKHNvdXJjZS5wcm92aWRlcigpLCBzdGFydE9mZnNl
dCwgc3RhcnRPZmZzZXQgKyBtX3NvdXJjZUxlbmd0aCwgZmlyc3RMaW5lKTsKKyAgICByZXR1cm4g
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgY29kZSwgdGhpcywgZmlyc3RM
aW5lLCBmaXJzdExpbmUgKyBtX2xpbmVDb3VudCk7Cit9CisKK1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgRXhlY1N0YXRlKiBleGVjLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCit7CisgICAgUGFyc2VyRXJyb3Ig
ZXJyb3I7CisgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUgPSBleGVjLT5nbG9iYWxEYXRhKCkuY29k
ZUNhY2hlKCk7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBj
b2RlQ2FjaGUtPmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbmFtZSwgc291cmNlLCBlcnJvcik7CisgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQ
YXJzZXJFcnJvcjo6RXJyb3JOb25lKSB7CisgICAgICAgICpleGNlcHRpb24gPSBlcnJvci50b0Vy
cm9yT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNlKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKK1VubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2sqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjb2RlQmxvY2tG
b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCBEZWJ1Z2dlck1vZGUgZGVi
dWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3Ip
Cit7CisgICAgc3dpdGNoIChzcGVjaWFsaXphdGlvbktpbmQpIHsKKyAgICBjYXNlIENvZGVGb3JD
YWxsOgorICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsKQorICAgICAgICAgICAgcmV0dXJu
IG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2Rl
Rm9yQ29uc3RydWN0OgorICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCisgICAg
ICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IGds
b2JhbERhdGEuY29kZUNhY2hlKCktPmdldEZ1bmN0aW9uQ29kZUJsb2NrKGdsb2JhbERhdGEsIHRo
aXMsIHNvdXJjZSwgc3BlY2lhbGl6YXRpb25LaW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9k
ZSwgZXJyb3IpOworICAgIAorICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVy
cm9yTm9uZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzd2l0Y2ggKHNwZWNpYWxpemF0aW9u
S2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIG1fY29kZUJsb2NrRm9yQ2Fs
bC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0KTsKKyAgICAgICAgbV9zeW1ib2xUYWJsZUZv
ckNhbGwuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlc3VsdC0+c3ltYm9sVGFibGUoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlc3VsdCk7CisgICAgICAgIG1f
c3ltYm9sVGFibGVGb3JDb25zdHJ1Y3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlc3VsdC0+c3lt
Ym9sVGFibGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitTdHJpbmcgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtU3RyaW5nKCkgY29u
c3QKK3sKKyAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqbV9wYXJhbWV0ZXJz
OworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKHNpemVfdCBwb3MgPSAwOyBw
b3MgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytwb3MpIHsKKyAgICAgICAgaWYgKCFidWlsZGVyLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQocGFyYW1ldGVyc1twb3NdLnN0cmluZygpKTsKKyAgICB9CisgICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworVW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICA6
IEJhc2UoKmdsb2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICAsIG1fbnVtVmFycygwKQorICAgICwg
bV9udW1DYWxsZWVSZWdpc3RlcnMoMCkKKyAgICAsIG1fbnVtUGFyYW1ldGVycygwKQorICAgICwg
bV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKC0xKQor
ICAgICwgbV9uZWVkc0Z1bGxTY29wZUNoYWluKGluZm8ubV9uZWVkc0FjdGl2YXRpb24pCisgICAg
LCBtX3VzZXNFdmFsKGluZm8ubV91c2VzRXZhbCkKKyAgICAsIG1faXNOdW1lcmljQ29tcGFyZUZ1
bmN0aW9uKGZhbHNlKQorICAgICwgbV9pc1N0cmljdE1vZGUoaW5mby5tX2lzU3RyaWN0TW9kZSkK
KyAgICAsIG1faXNDb25zdHJ1Y3RvcihpbmZvLm1faXNDb25zdHJ1Y3RvcikKKyAgICAsIG1faGFz
Q2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCisgICAgLCBtX2ZpcnN0TGluZSgwKQorICAgICwgbV9s
aW5lQ291bnQoMCkKKyAgICAsIG1fZmVhdHVyZXMoMCkKKyAgICAsIG1fY29kZVR5cGUoY29kZVR5
cGUpCisgICAgLCBtX3Jlc29sdmVPcGVyYXRpb25Db3VudCgwKQorICAgICwgbV9wdXRUb0Jhc2VP
cGVyYXRpb25Db3VudCgxKQorICAgICwgbV9hcnJheVByb2ZpbGVDb3VudCgwKQorICAgICwgbV92
YWx1ZVByb2ZpbGVDb3VudCgwKQorICAgICwgbV9sbGludENhbGxMaW5rSW5mb0NvdW50KDApCisj
aWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQorICAgICwgbV9ieXRlY29kZUNvbW1lbnRJdGVy
YXRvcigwKQorI2VuZGlmCit7CisKK30KKwordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVubGlu
a2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsK
KyAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VS
VCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxk
cmVuKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cisg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOworICAgIGZvciAo
RnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1
bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmVu
ZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKKyAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAg
ICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVj
dC0+bV9mdW5jdGlvbkV4cHJzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25F
eHBycy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0
cik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lz
dGVycy5kYXRhKCksIHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAg
ICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MCwgZW5kID0gdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsgaSAhPSBl
bmQ7IGkrKykKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JhcmVE
YXRhLT5tX3JlZ2V4cHNbaV0pOworICAgIH0KK30KKworaW50IFVubGlua2VkQ29kZUJsb2NrOjps
aW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7Cisg
ICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICBW
ZWN0b3I8TGluZUluZm8+JiBsaW5lSW5mbyA9IG1fbGluZUluZm87CisgICAgCisgICAgaW50IGxv
dyA9IDA7CisgICAgaW50IGhpZ2ggPSBsaW5lSW5mby5zaXplKCk7CisgICAgd2hpbGUgKGxvdyA8
IGhpZ2gpIHsKKyAgICAgICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDI7CisgICAg
ICAgIGlmIChsaW5lSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5dGVjb2RlT2Zmc2V0
KQorICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aGlnaCA9IG1pZDsKKyAgICB9CisgICAgCisgICAgaWYgKCFsb3cpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBsaW5lSW5mb1tsb3cgLSAxXS5saW5lTnVtYmVyOworfQorCit2b2lkIFVu
bGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRP
ZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKKworICAgIGlmICghbV9leHByZXNzaW9uSW5mby5zaXplKCkpIHsKKyAgICAgICAgc3Rh
cnRPZmZzZXQgPSAwOworICAgICAgICBlbmRPZmZzZXQgPSAwOworICAgICAgICBkaXZvdCA9IDA7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5m
bz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHByZXNzaW9uSW5mbzsKKworICAgIGludCBsb3cgPSAw
OworICAgIGludCBoaWdoID0gZXhwcmVzc2lvbkluZm8uc2l6ZSgpOworICAgIHdoaWxlIChsb3cg
PCBoaWdoKSB7CisgICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxvdykgLyAyOworICAg
ICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNldCA8PSBieXRlY29k
ZU9mZnNldCkKKyAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGhpZ2ggPSBtaWQ7CisgICAgfQorCisgICAgQVNTRVJUKGxvdyk7CisgICAgaWYgKCFs
b3cpIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSAwOworICAgICAgICBlbmRPZmZzZXQgPSAwOwor
ICAgICAgICBkaXZvdCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGFydE9m
ZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLnN0YXJ0T2Zmc2V0OworICAgIGVuZE9mZnNl
dCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmVuZE9mZnNldDsKKyAgICBkaXZvdCA9IGV4cHJl
c3Npb25JbmZvW2xvdyAtIDFdLmRpdm90UG9pbnQ7Cit9CisKK3ZvaWQgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0
dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVu
V2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCkt
PnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIGZvciAoc2l6ZV90IGkgPSAwLCBlbmQg
PSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbGFyYXRpb25zLnNpemUoKTsgaSAhPSBlbmQ7IGkr
KykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNsYXJh
dGlvbnNbaV0uc2Vjb25kKTsKK30KKworVW5saW5rZWRDb2RlQmxvY2s6On5VbmxpbmtlZENvZGVC
bG9jaygpCit7Cit9CisKK3ZvaWQgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2Vs
bCktPn5VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soKTsKK30KKwordm9pZCBVbmxpbmtlZEV2YWxD
b2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxVbmxpbmtlZEV2
YWxDb2RlQmxvY2sqPihjZWxsKS0+flVubGlua2VkRXZhbENvZGVCbG9jaygpOworfQorCit2b2lk
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAg
IGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrKCk7Cit9CisKK3ZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGNlbGwpLT5+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoKTsKK30KKworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJmM2Y1ZmRmZmZiYzU4NTVmOTg1MjllMTI0M2M3YTZiZDc2MjA1ODYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaApAQCAtMCwwICsxLDcwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVW5saW5rZWRDb2RlQmxvY2tfaAorI2RlZmluZSBV
bmxpbmtlZENvZGVCbG9ja19oCisKKyNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisj
aW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1ZGUgIkNvZGVUeXBlLmgi
CisjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgorI2luY2x1ZGUgIklkZW50aWZpZXIu
aCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJMaW5lSW5mby5oIgorI2luY2x1ZGUg
Ik5vZGVzLmgiCisjaW5jbHVkZSAiUmVnRXhwLmgiCisjaW5jbHVkZSAiU3BlY2lhbFBvaW50ZXIu
aCIKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBEZWJ1Z2dlcjsKK2NsYXNzIEZ1bmN0
aW9uQm9keU5vZGU7CitjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBGdW5jdGlvblBh
cmFtZXRlcnM7CitzdHJ1Y3QgUGFyc2VyRXJyb3I7CitjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwor
Y2xhc3MgU291cmNlQ29kZTsKK2NsYXNzIFNvdXJjZVByb3ZpZGVyOworY2xhc3MgU2hhcmVkU3lt
Ym9sVGFibGU7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKK2NsYXNzIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s7CisKK3R5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRWYWx1ZVByb2ZpbGU7Cit0
eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlQcm9maWxlOwordHlwZWRlZiB1bnNpZ25lZCBV
bmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOworCitzdHJ1Y3QgRXhlY3V0YWJsZUluZm8geworICAg
IEV4ZWN1dGFibGVJbmZvKGJvb2wgbmVlZHNBY3RpdmF0aW9uLCBib29sIHVzZXNFdmFsLCBib29s
IGlzU3RyaWN0TW9kZSwgYm9vbCBpc0NvbnN0cnVjdG9yKQorICAgICAgICA6IG1fbmVlZHNBY3Rp
dmF0aW9uKG5lZWRzQWN0aXZhdGlvbikKKyAgICAgICAgLCBtX3VzZXNFdmFsKHVzZXNFdmFsKQor
ICAgICAgICAsIG1faXNTdHJpY3RNb2RlKGlzU3RyaWN0TW9kZSkKKyAgICAgICAgLCBtX2lzQ29u
c3RydWN0b3IoaXNDb25zdHJ1Y3RvcikKKyAgICB7CisgICAgfQorICAgIGJvb2wgbV9uZWVkc0Fj
dGl2YXRpb247CisgICAgYm9vbCBtX3VzZXNFdmFsOworICAgIGJvb2wgbV9pc1N0cmljdE1vZGU7
CisgICAgYm9vbCBtX2lzQ29uc3RydWN0b3I7Cit9OworCitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBD
b2RlQ2FjaGU7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0aWMgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLT5oZWFw
KSkgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgbm9kZSk7Cisg
ICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xvYmFsRGF0YSk7CisgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3QgSWRlbnRpZmllciYgaW5mZXJyZWROYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0KKyAgICBKU1N0cmluZyogbmFtZVZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lVmFsdWUuZ2V0KCk7IH0KKyAgICBTaGFyZWRTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIChraW5kID09IENvZGVGb3JDYWxsKSA/IG1fc3ltYm9sVGFibGVGb3JD
YWxsLmdldCgpIDogbV9zeW1ib2xUYWJsZUZvckNvbnN0cnVjdC5nZXQoKTsKKyAgICB9CisgICAg
c2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXpl
KCk7IH0KKyAgICBib29sIGlzSW5TdHJpY3RDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0lu
U3RyaWN0Q29udGV4dDsgfQorICAgIEZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSBmdW5jdGlv
bk5hbWVJc0luU2NvcGVUb2dnbGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZUlzSW5T
Y29wZVRvZ2dsZTsgfQorCisgICAgdW5zaWduZWQgZmlyc3RMaW5lT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9maXJzdExpbmVPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCgp
IHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9CisKKyAgICBTdHJpbmcgcGFyYW1TdHJpbmcoKSBj
b25zdDsKKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9ja0ZvcihKU0ds
b2JhbERhdGEmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgRGVi
dWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CisKKyAgICBzdGF0aWMgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXIm
LCBFeGVjU3RhdGUqLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCoqIGV4
Y2VwdGlvbik7CisKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGxpbmsoSlNHbG9iYWxEYXRhJiwg
Y29uc3QgU291cmNlQ29kZSYsIHNpemVfdCBsaW5lT2Zmc2V0LCBzaXplX3Qgc291cmNlT2Zmc2V0
KTsKKworICAgIHZvaWQgY2xlYXJDb2RlKCkKKyAgICB7CisgICAgICAgIG1fc3ltYm9sVGFibGVG
b3JDYWxsLmNsZWFyKCk7CisgICAgICAgIG1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3QuY2xlYXIo
KTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7CisgICAgICAgIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LmNsZWFyKCk7CisgICAgfQorCisgICAgRnVuY3Rpb25QYXJhbWV0ZXJz
KiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9CisKKyAgICB2b2lk
IHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlh
YmxlcywgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQorICAgIHsKKyAgICAgICAgbV9mZWF0
dXJlcyA9IGZlYXR1cmVzOworICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2Fw
dHVyZWRWYXJpYWJsZXM7CisgICAgICAgIG1fbGluZUNvdW50ID0gbGFzdExpbmUgLSBmaXJzdExp
bmU7CisgICAgfQorCisgICAgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVy
biBtX2ZvcmNlVXNlc0FyZ3VtZW50czsgfQorCisgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzKCkg
Y29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAgIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJs
ZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOyB9CisKKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKKworcHJpdmF0ZToKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShK
U0dsb2JhbERhdGEqLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25Cb2R5
Tm9kZSopOworICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2Nv
ZGVCbG9ja0ZvckNhbGw7CisgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OworCisgICAgdW5zaWduZWQgbV9udW1DYXB0dXJl
ZFZhcmlhYmxlcyA6IDI5OworICAgIGJvb2wgbV9mb3JjZVVzZXNBcmd1bWVudHMgOiAxOworICAg
IGJvb2wgbV9pc0luU3RyaWN0Q29udGV4dCA6IDE7CisgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFy
aWFibGVzIDogMTsKKworICAgIElkZW50aWZpZXIgbV9uYW1lOworICAgIElkZW50aWZpZXIgbV9p
bmZlcnJlZE5hbWU7CisgICAgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiBtX25hbWVWYWx1ZTsKKyAg
ICBXcml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGVGb3JDYWxsOwor
ICAgIFdyaXRlQmFycmllcjxTaGFyZWRTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZUZvckNvbnN0
cnVjdDsKKyAgICBSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CisgICAg
dW5zaWduZWQgbV9maXJzdExpbmVPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7Cisg
ICAgdW5zaWduZWQgbV9zdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsK
KworICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworCisgICAgRnVuY3Rpb25OYW1lSXNJblNj
b3BlVG9nZ2xlIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlOworCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgewor
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgbV9uYW1l
VmFsdWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBuYW1lKCku
c3RyaW5nKCkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBpbnQzMl90PiBT
dHJpbmdPZmZzZXRUYWJsZTsKKyAgICBTdHJpbmdPZmZzZXRUYWJsZSBvZmZzZXRUYWJsZTsKKwor
ICAgIGlubGluZSBpbnQzMl90IG9mZnNldEZvclZhbHVlKFN0cmluZ0ltcGwqIHZhbHVlLCBpbnQz
Ml90IGRlZmF1bHRPZmZzZXQpCisgICAgeworICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gb2Zmc2V0VGFibGUuZW5kKCk7CisgICAgICAgIFN0cmluZ09mZnNl
dFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKKyAg
ICAgICAgaWYgKGxvYyA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9mZnNldDsK
KyAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWU7CisgICAgfQorCit9OworCitzdHJ1Y3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUgeworICAgIFZlY3RvcjxpbnQzMl90PiBicmFuY2hPZmZzZXRzOwor
ICAgIGludDMyX3QgbWluOworCisgICAgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90IHZh
bHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpOworICAgIHZvaWQgYWRkKGludDMyX3Qga2V5LCBp
bnQzMl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghYnJhbmNoT2Zmc2V0c1trZXldKQor
ICAgICAgICAgICAgYnJhbmNoT2Zmc2V0c1trZXldID0gb2Zmc2V0OworICAgIH0KK307CisKK3N0
cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZvIHsKKyAgICB1aW50MzJfdCBzdGFydDsKKyAgICB1aW50
MzJfdCBlbmQ7CisgICAgdWludDMyX3QgdGFyZ2V0OworICAgIHVpbnQzMl90IHNjb3BlRGVwdGg7
Cit9OworCitzdHJ1Y3QgVW5saW5rZWRJbnN0cnVjdGlvbiB7CisgICAgVW5saW5rZWRJbnN0cnVj
dGlvbigpIHsgdS5vcGVyYW5kID0gMDsgfQorICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oT3Bjb2Rl
SUQgb3Bjb2RlKSB7IHUub3Bjb2RlID0gb3Bjb2RlOyB9CisgICAgVW5saW5rZWRJbnN0cnVjdGlv
bihpbnQgb3BlcmFuZCkgeyB1Lm9wZXJhbmQgPSBvcGVyYW5kOyB9CisgICAgdW5pb24geworICAg
ICAgICBPcGNvZGVJRCBvcGNvZGU7CisgICAgICAgIGludDMyX3Qgb3BlcmFuZDsKKyAgICB9IHU7
Cit9OworCitjbGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgeworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1
Y3R1cmUgPSB0cnVlOworCisgICAgZW51bSB7IENhbGxGdW5jdGlvbiwgQXBwbHlGdW5jdGlvbiB9
OworCisgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnN0cnVj
dG9yOyB9CisgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2lzU3RyaWN0
TW9kZTsgfQorICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFdmFsOyB9
CisKKyAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX25lZWRz
RnVsbFNjb3BlQ2hhaW47IH0KKyAgICB2b2lkIHNldE5lZWRzRnVsbFNjb3BlQ2hhaW4oYm9vbCBu
ZWVkc0Z1bGxTY29wZUNoYWluKSB7IG1fbmVlZHNGdWxsU2NvcGVDaGFpbiA9IG5lZWRzRnVsbFNj
b3BlQ2hhaW47IH0KKworICAgIHZvaWQgYWRkRXhwcmVzc2lvbkluZm8oY29uc3QgRXhwcmVzc2lv
blJhbmdlSW5mbyYgZXhwcmVzc2lvbkluZm8pCisgICAgeworICAgICAgICBtX2V4cHJlc3Npb25J
bmZvLmFwcGVuZChleHByZXNzaW9uSW5mbyk7CisgICAgfQorCisgICAgdm9pZCBhZGRMaW5lSW5m
byh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50IGxpbmVObykKKyAgICB7CisgICAgICAgIFZl
Y3RvcjxMaW5lSW5mbz4mIGxpbmVJbmZvID0gbV9saW5lSW5mbzsKKyAgICAgICAgaWYgKCFsaW5l
SW5mby5zaXplKCkgfHwgbGluZUluZm8ubGFzdCgpLmxpbmVOdW1iZXIgIT0gbGluZU5vKSB7Cisg
ICAgICAgICAgICBMaW5lSW5mbyBpbmZvID0geyBieXRlY29kZU9mZnNldCwgbGluZU5vIH07Cisg
ICAgICAgICAgICBsaW5lSW5mby5hcHBlbmQoaW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXpl
KCk7IH0KKworICAgIC8vIFNwZWNpYWwgcmVnaXN0ZXJzCisgICAgdm9pZCBzZXRUaGlzUmVnaXN0
ZXIoaW50IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQor
ICAgIHZvaWQgc2V0QWN0aXZhdGlvblJlZ2lzdGVyKGludCBhY3RpdmF0aW9uUmVnaXN0ZXIpIHsg
bV9hY3RpdmF0aW9uUmVnaXN0ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7IH0KKworICAgIHZvaWQg
c2V0QXJndW1lbnRzUmVnaXN0ZXIoaW50IGFyZ3VtZW50c1JlZ2lzdGVyKSB7IG1fYXJndW1lbnRz
UmVnaXN0ZXIgPSBhcmd1bWVudHNSZWdpc3RlcjsgfQorICAgIGJvb2wgdXNlc0FyZ3VtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0ZXIgIT0gLTE7IH0KKyAgICBpbnQgYXJn
dW1lbnRzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyOyB9CisK
KyAgICAvLyBQYXJhbWV0ZXIgaW5mb3JtYXRpb24KKyAgICB2b2lkIHNldE51bVBhcmFtZXRlcnMo
aW50IG5ld1ZhbHVlKSB7IG1fbnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOyB9CisgICAgdm9pZCBh
ZGRQYXJhbWV0ZXIoKSB7IG1fbnVtUGFyYW1ldGVycysrOyB9CisgICAgdW5zaWduZWQgbnVtUGFy
YW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorCisgICAgdW5zaWdu
ZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikKKyAgICB7CisgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZO
ZWNlc3NhcnkoKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fcmVnZXhw
cy5zaXplKCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5hcHBlbmQoV3JpdGVCYXJy
aWVyPFJlZ0V4cD4oKm1fZ2xvYmFsRGF0YSwgdGhpcywgcikpOworICAgICAgICByZXR1cm4gc2l6
ZTsKKyAgICB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdFeHBzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsKKyAgICB9CisgICAgUmVnRXhwKiBy
ZWdleHAoaW50IGluZGV4KSBjb25zdCB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fcmVnZXhwc1tpbmRleF0uZ2V0KCk7IH0KKworICAgIC8vIENvbnN0YW50IFBvb2xz
CisKKyAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnRpZmllcnMuc2l6ZSgpOyB9CisgICAgdm9pZCBhZGRJZGVudGlmaWVyKGNvbnN0IElkZW50aWZp
ZXImIGkpIHsgcmV0dXJuIG1faWRlbnRpZmllcnMuYXBwZW5kKGkpOyB9CisgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmll
cnNbaW5kZXhdOyB9CisgICAgY29uc3QgVmVjdG9yPElkZW50aWZpZXI+JiBpZGVudGlmaWVycygp
IGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnM7IH0KKworICAgIHNpemVfdCBudW1iZXJPZkNv
bnN0YW50UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVycy5zaXpl
KCk7IH0KKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKKyAgICAgICAg
bV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOworICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQoKm1fZ2xvYmFsRGF0YSwgdGhpcywg
dik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHVuc2lnbmVkIGFkZE9yRmlu
ZENvbnN0YW50KEpTVmFsdWUpOworICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93
bj4gPiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9
CisgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OyB9CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0
YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorCisgICAgLy8gSnVtcHMKKyAg
ICBzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdl
dHMuc2l6ZSgpOyB9CisgICAgdm9pZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1bXBUYXJnZXQp
IHsgbV9qdW1wVGFyZ2V0cy5hcHBlbmQoanVtcFRhcmdldCk7IH0KKyAgICB1bnNpZ25lZCBqdW1w
VGFyZ2V0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tpbmRleF07IH0K
KyAgICB1bnNpZ25lZCBsYXN0SnVtcFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdl
dHMubGFzdCgpOyB9CisKKyAgICB2b2lkIHNldElzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbihib29s
IGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbikgeyBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbiA9
IGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQorICAgIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb247IH0KKwor
ICAgIHZvaWQgc2hyaW5rVG9GaXQoKQorICAgIHsKKyAgICAgICAgbV9qdW1wVGFyZ2V0cy5zaHJp
bmtUb0ZpdCgpOworICAgICAgICBtX2lkZW50aWZpZXJzLnNocmlua1RvRml0KCk7CisgICAgICAg
IG1fY29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9mdW5jdGlvbkRl
Y2xzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5zaHJpbmtUb0ZpdCgp
OworICAgICAgICBtX2xpbmVJbmZvLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9leHByZXNzaW9uSW5m
by5zaHJpbmtUb0ZpdCgpOworCisjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQorICAgICAg
ICBtX2J5dGVjb2RlQ29tbWVudHMuc2hyaW5rVG9GaXQoKTsKKyNlbmRpZgorICAgICAgICBpZiAo
bV9yYXJlRGF0YSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVy
cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNocmlu
a1RvRml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaHJp
bmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1w
VGFibGVzLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NoYXJhY3Rl
clN3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkSW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQorICAgIFJlZkNvdW50ZWRBcnJheTxVbmxp
bmtlZEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV91bmxpbmtlZEluc3Ry
dWN0aW9uczsgfQorICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxVbmxpbmtlZEluc3RydWN0aW9u
PiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEluc3RydWN0aW9uczsg
fQorCisgICAgaW50IG1fbnVtVmFyczsKKyAgICBpbnQgbV9udW1DYXB0dXJlZFZhcnM7CisgICAg
aW50IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworCisgICAgLy8gSnVtcCBUYWJsZXMKKworICAgIHNp
emVfdCBudW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBt
X3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzLnNpemUo
KSA6IDA7IH0KKyAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgYWRkSW1tZWRpYXRlU3dpdGNo
SnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1f
aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTaW1wbGVKdW1wVGFibGUo
KSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMubGFzdCgp
OyB9CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRh
LT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KKworICAgIHNpemVf
dCBudW1iZXJPZkNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3Jh
cmVEYXRhID8gbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6
IDA7IH0KKyAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgYWRkQ2hhcmFjdGVyU3dpdGNoSnVt
cFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fY2hh
cmFjdGVyU3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTaW1wbGVKdW1wVGFibGUoKSk7
IHJldHVybiBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9
CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5t
X2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KKworICAgIHNpemVfdCBu
dW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRh
ID8gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KKyAg
ICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCkgeyBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTdHJpbmdKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9CisgICAgVW5saW5rZWRTdHJp
bmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBBU1NF
UlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07IH0KKworICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRGVjbChVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBt
X2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOworICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuYXBwZW5kKFdy
aXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7CisgICAgICAgIG1fZnVu
Y3Rpb25EZWNscy5sYXN0KCkuc2V0KCptX2dsb2JhbERhdGEsIHRoaXMsIG4pOworICAgICAgICBy
ZXR1cm4gc2l6ZTsKKyAgICB9CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7
IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlv
bkRlY2xzLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRXhwcihVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1
bmN0aW9uRXhwcnMuc2l6ZSgpOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuYXBwZW5kKFdyaXRl
QmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7CisgICAgICAgIG1fZnVuY3Rp
b25FeHBycy5sYXN0KCkuc2V0KCptX2dsb2JhbERhdGEsIHRoaXMsIG4pOworICAgICAgICByZXR1
cm4gc2l6ZTsKKyAgICB9CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RXhwcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHByc1tpbmRleF0uZ2V0KCk7IH0K
KyAgICBzaXplX3QgbnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4
cHJzLnNpemUoKTsgfQorCisgICAgLy8gRXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKKyAgICBz
aXplX3QgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURh
dGEgPyBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0KKyAgICB2
b2lkIGFkZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFubGVy
KSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmxlcik7IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZv
JiBleGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVy
biBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQorCisgICAgU2hhcmVk
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1ib2xUYWJsZS5n
ZXQoKTsgfQorCisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9nbG9iYWxEYXRhOyB9CisKKyAgICB1bnNpZ25lZCBhZGRSZXNvbHZlKCkgeyByZXR1cm4gbV9y
ZXNvbHZlT3BlcmF0aW9uQ291bnQrKzsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mUmVzb2x2ZU9w
ZXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVPcGVyYXRpb25Db3VudDsgfQorICAg
IHVuc2lnbmVkIGFkZFB1dFRvQmFzZSgpIHsgcmV0dXJuIG1fcHV0VG9CYXNlT3BlcmF0aW9uQ291
bnQrKzsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mUHV0VG9CYXNlT3BlcmF0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1fcHV0VG9CYXNlT3BlcmF0aW9uQ291bnQ7IH0KKworICAgIFVubGlua2VkQXJy
YXlQcm9maWxlIGFkZEFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlQ291bnQr
KzsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9maWxlcygpIHsgcmV0dXJuIG1fYXJy
YXlQcm9maWxlQ291bnQ7IH0KKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBhZGRWYWx1ZVByb2Zp
bGUoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZUNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZUNvdW50OyB9CisKKyAg
ICBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvIGFkZExMSW50Q2FsbExpbmtJbmZvKCkgeyByZXR1
cm4gbV9sbGludENhbGxMaW5rSW5mb0NvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkxM
aW50Q2FsbExpbmtJbmZvcygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsgfQor
CisgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CisK
KyAgICBpbnQgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0K
KyAgICBpbnQgYWN0aXZhdGlvblJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmF0aW9u
UmVnaXN0ZXI7IH0KKworCisgICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKHVu
c2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBtX3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmFwcGVuZChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKTsK
KyAgICB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpOyB9Cisg
ICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKSBj
b25zdCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOyB9CisKKyAgICB0eXBl
ZGVmIFZlY3RvcjxKU1ZhbHVlPiBDb25zdGFudEJ1ZmZlcjsKKworICAgIHNpemVfdCBjb25zdGFu
dEJ1ZmZlckNvdW50KCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5t
X2NvbnN0YW50QnVmZmVycy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudEJ1ZmZl
cih1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNz
YXJ5KCk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVm
ZmVycy5zaXplKCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLmFwcGVu
ZChWZWN0b3I8SlNWYWx1ZT4obGVuZ3RoKSk7CisgICAgICAgIHJldHVybiBzaXplOworICAgIH0K
KworICAgIGNvbnN0IENvbnN0YW50QnVmZmVyJiBjb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBpbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0
dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKKyAgICB9CisKKyAgICBD
b25zdGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2Nv
bnN0YW50QnVmZmVyc1tpbmRleF07CisgICAgfQorCisgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmFyZURhdGE7IH0KKworICAgIGludCBsaW5lTnVtYmVyRm9yQnl0ZWNv
ZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworCisgICAgdm9pZCBleHByZXNzaW9u
UmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZv
dCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpOworCisgICAgdm9pZCByZWNvcmRQ
YXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIHVu
c2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGluZUNvdW50KQorICAgIHsKKyAgICAgICAgbV9m
ZWF0dXJlcyA9IGZlYXR1cmVzOworICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFz
Q2FwdHVyZWRWYXJpYWJsZXM7CisgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOworICAg
ICAgICBtX2xpbmVDb3VudCA9IGxpbmVDb3VudDsKKyAgICB9CisKKyAgICBDb2RlRmVhdHVyZXMg
Y29kZUZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAgIGJvb2wgaGFz
Q2FwdHVyZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVz
OyB9CisgICAgdW5zaWduZWQgZmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmU7
IH0KKyAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsg
fQorCitwcm90ZWN0ZWQ6CisgICAgVW5saW5rZWRDb2RlQmxvY2soSlNHbG9iYWxEYXRhKiwgU3Ry
dWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJik7CisgICAgflVubGlua2Vk
Q29kZUJsb2NrKCk7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBHbG9iYWxDb2RlKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX3N5bWJvbFRhYmxlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBTaGFyZWRT
eW1ib2xUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEpKTsKKyAgICB9CisKK3ByaXZhdGU6CisKKyAg
ICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X3JhcmVEYXRhKQorICAgICAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSYXJlRGF0
YSk7CisgICAgfQorCisgICAgUmVmQ291bnRlZEFycmF5PFVubGlua2VkSW5zdHJ1Y3Rpb24+IG1f
dW5saW5rZWRJbnN0cnVjdGlvbnM7CisKKyAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOworICAgIEpT
R2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworCisgICAgaW50IG1fdGhpc1JlZ2lzdGVyOworICAg
IGludCBtX2FyZ3VtZW50c1JlZ2lzdGVyOworICAgIGludCBtX2FjdGl2YXRpb25SZWdpc3RlcjsK
KworICAgIGJvb2wgbV9uZWVkc0Z1bGxTY29wZUNoYWluIDogMTsKKyAgICBib29sIG1fdXNlc0V2
YWwgOiAxOworICAgIGJvb2wgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24gOiAxOworICAgIGJv
b2wgbV9pc1N0cmljdE1vZGUgOiAxOworICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsKKyAg
ICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOworICAgIHVuc2lnbmVkIG1fZmlyc3RM
aW5lOworICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OworCisgICAgQ29kZUZlYXR1cmVzIG1fZmVh
dHVyZXM7CisgICAgQ29kZVR5cGUgbV9jb2RlVHlwZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4g
bV9qdW1wVGFyZ2V0czsKKworICAgIC8vIENvbnN0YW50IFBvb2xzCisgICAgVmVjdG9yPElkZW50
aWZpZXI+IG1faWRlbnRpZmllcnM7CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPiA+
IG1fY29uc3RhbnRSZWdpc3RlcnM7CisgICAgdHlwZWRlZiBWZWN0b3I8V3JpdGVCYXJyaWVyPFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPiA+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKKyAg
ICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOworICAgIEZ1bmN0aW9u
RXhwcmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRXhwcnM7CisKKyAgICBXcml0ZUJhcnJpZXI8U2hh
cmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CisKKyAgICBWZWN0b3I8TGluZUluZm8+IG1f
bGluZUluZm87CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnM7CisKKyNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCisgICAgVmVjdG9yPENvbW1l
bnQ+ICBtX2J5dGVjb2RlQ29tbWVudHM7CisgICAgc2l6ZV90IG1fYnl0ZWNvZGVDb21tZW50SXRl
cmF0b3I7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50Owor
ICAgIHVuc2lnbmVkIG1fcHV0VG9CYXNlT3BlcmF0aW9uQ291bnQ7CisgICAgdW5zaWduZWQgbV9h
cnJheVByb2ZpbGVDb3VudDsKKyAgICB1bnNpZ25lZCBtX3ZhbHVlUHJvZmlsZUNvdW50OworICAg
IHVuc2lnbmVkIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsKKworcHVibGljOgorICAgIHN0cnVj
dCBSYXJlRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1Ymxp
YzoKKyAgICAgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxl
cnM7CisKKyAgICAgICAgLy8gUmFyZSBDb25zdGFudHMKKyAgICAgICAgVmVjdG9yPFdyaXRlQmFy
cmllcjxSZWdFeHA+ID4gbV9yZWdleHBzOworCisgICAgICAgIC8vIEJ1ZmZlcnMgdXNlZCBmb3Ig
bGFyZ2UgYXJyYXkgbGl0ZXJhbHMKKyAgICAgICAgVmVjdG9yPENvbnN0YW50QnVmZmVyPiBtX2Nv
bnN0YW50QnVmZmVyczsKKworICAgICAgICAvLyBKdW1wIFRhYmxlcworICAgICAgICBWZWN0b3I8
VW5saW5rZWRTaW1wbGVKdW1wVGFibGU+IG1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlczsKKyAg
ICAgICAgVmVjdG9yPFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPiBtX2NoYXJhY3RlclN3aXRjaEp1
bXBUYWJsZXM7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIC8vIEV4cHJlc3Npb24gaW5mbyAtIHByZXNl
bnQgaWYgZGVidWdnaW5nLgorICAgIH07CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFJhcmVEYXRh
PiBtX3JhcmVEYXRhOworICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Np
b25JbmZvOworCitwcm90ZWN0ZWQ6CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFz
cyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOworCitwcm90ZWN0ZWQ6
CisgICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJiBpbmZvKQorICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBjb2RlVHlw
ZSwgaW5mbykKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdz
OworCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFzcyBVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOworICAgIHN0YXRpYyBVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0
IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jaz4oZ2xvYmFsRGF0YS0+aGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayhnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1
cmUuZ2V0KCksIGluZm8pOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKmdsb2Jh
bERhdGEpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCitwdWJsaWM6CisgICAg
dHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOworICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CisKKyAgICB2b2lkIGFkZEZ1bmN0aW9uRGVjbGFyYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgbV9mdW5j
dGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobmFtZSwgV3JpdGVCYXJyaWVy
PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLCB0aGlzLCBmdW5jdGlvbkV4
ZWN1dGFibGUpKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRWYXJpYWJsZURlY2xhcmF0aW9uKGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIGJvb2wgaXNDb25zdGFudCkKKyAgICB7CisgICAgICAgIG1f
dmFyRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lLCBpc0NvbnN0YW50KSk7
CisgICAgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIGJvb2w+
ID4gVmFyaWFibGVEZWNsYXRpb25zOworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6cGFpcjxJZGVu
dGlmaWVyLCBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+ID4gPiBGdW5j
dGlvbkRlY2xhdGlvbnM7CisKKyAgICBjb25zdCBWYXJpYWJsZURlY2xhdGlvbnMmIHZhcmlhYmxl
RGVjbGFyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV92YXJEZWNsYXJhdGlvbnM7IH0KKyAgICBj
b25zdCBGdW5jdGlvbkRlY2xhdGlvbnMmIGZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICAgICAgOiBCYXNlKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5mbykKKyAgICB7CisgICAgfQorCisgICAg
VmFyaWFibGVEZWNsYXRpb25zIG1fdmFyRGVjbGFyYXRpb25zOworICAgIEZ1bmN0aW9uRGVjbGF0
aW9ucyBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOworCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBl
SW5mbyhVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworY2xhc3MgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKKworICAgIHN0YXRpYyBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEV4ZWN1dGFibGVJbmZv
JiBpbmZvKQorICAgIHsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRXZhbENvZGVCbG9jaz4oZ2xvYmFs
RGF0YS0+aGVhcCkpIFVubGlua2VkRXZhbENvZGVCbG9jayhnbG9iYWxEYXRhLCBnbG9iYWxEYXRh
LT51bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8pOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKmdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gaW5z
dGFuY2U7CisgICAgfQorCitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVC
bG9jayBCYXNlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBjb25z
dCBJZGVudGlmaWVyJiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YXJpYWJs
ZXNbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gbV92YXJp
YWJsZXMuc2l6ZSgpOyB9CisgICAgdm9pZCBhZG9wdFZhcmlhYmxlcyhWZWN0b3I8SWRlbnRpZmll
cj4mIHZhcmlhYmxlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5pc0VtcHR5
KCkpOworICAgICAgICBtX3ZhcmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7CisgICAgfQorCitwcml2
YXRlOgorICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICAg
ICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8pCisgICAgewor
ICAgIH0KKworICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX3ZhcmlhYmxlczsKKworcHVibGljOgor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAg
eworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRFdmFsQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CisKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK2NsYXNzIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgeworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOworCisgICAgc3RhdGljIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVU
eXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAg
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4oZ2xvYmFsRGF0YS0+aGVhcCkpIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY29kZVR5cGUsIGluZm8pOworICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKmdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CisgICAgfQorCitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9j
ayBCYXNlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKK3ByaXZhdGU6Cisg
ICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mIGluZm8pCisgICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGNvZGVUeXBl
LCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5m
byhVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK30KKworI2VuZGlmIC8vIFVubGlua2Vk
Q29kZUJsb2NrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggNjEzMzU0ZDkyMjBmNmQ4NzE3ODE4YjM5
YWYyYWMxYWIxYmM4YjNiMi4uYjExODcyNTUxODlmYzc1ODE5M2Y2MTI0N2I2ZjlhMzM4YzJjNzFh
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBib29sIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKQogICAgIHJldHVybiBzX2R1bXBzR2VuZXJhdGVk
Q29kZTsKIH0KIAotSlNPYmplY3QqIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCitQYXJz
ZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQogewogICAgIFNhbXBsaW5nUmVn
aW9uIHNhbXBsaW5nUmVnaW9uKCJCeXRlY29kZSBHZW5lcmF0aW9uIik7CiAgICAgCkBAIC0xNjks
MzYgKzE2OSwyMSBAQCBKU09iamVjdCogQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90cnlSYW5nZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgVHJ5UmFuZ2UmIHJhbmdlID0gbV90cnlSYW5nZXNbaV07CiAgICAgICAgIEFTU0VSVChy
YW5nZS50cnlEYXRhLT50YXJnZXRTY29wZURlcHRoICE9IFVJTlRfTUFYKTsKLSAgICAgICAgSGFu
ZGxlckluZm8gaW5mbyA9IHsKKyAgICAgICAgVW5saW5rZWRIYW5kbGVySW5mbyBpbmZvID0gewog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLnN0YXJ0LT5iaW5kKDAsIDAp
KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLmVuZC0+YmluZCgwLCAwKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmFuZ2UudHJ5RGF0YS0+dGFyZ2V0LT5iaW5kKDAs
IDApKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLnRyeURhdGEtPnRhcmdldFNjb3BlRGVw
dGgpCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgICAgICwKLSNpZiBFTkFCTEUoTExJTlQpCi0g
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhMTEludDo6Z2V0Q29kZVB0cihsbGludF9vcF9jYXRjaCkp
KQotI2Vsc2UKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKCkKLSNlbmRpZgotI2VuZGlm
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmFuZ2UudHJ5RGF0YS0+dGFyZ2V0
LT5iaW5kKDAsIDApKSwKKyAgICAgICAgICAgIHJhbmdlLnRyeURhdGEtPnRhcmdldFNjb3BlRGVw
dGgKICAgICAgICAgfTsKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZEV4Y2VwdGlvbkhhbmRsZXIo
aW5mbyk7CiAgICAgfQogICAgIAotICAgIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSA9IFJl
ZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4obV9pbnN0cnVjdGlvbnMpOwotCi0gICAgaWYgKHNf
ZHVtcHNHZW5lcmF0ZWRDb2RlKQotICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChtX3Njb3BlLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkgPSBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRJbnN0cnVjdGlvbj4obV9pbnN0cnVjdGlv
bnMpOwogCi0jaWZkZWYgTkRFQlVHCi0gICAgaWYgKChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29k
ZSAmJiAhbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSAmJiAhbV9jb2RlQmxvY2st
PnVzZXNBcmd1bWVudHMoKSkgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSkKLSAgICAgICAgc3lt
Ym9sVGFibGUoKS5jbGVhcigpOwotI2VuZGlmCi0KLSAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9G
aXQoQ29kZUJsb2NrOjpFYXJseVNocmluayk7CisgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0
KCk7CiAKICAgICBpZiAobV9leHByZXNzaW9uVG9vRGVlcCkKLSAgICAgICAgcmV0dXJuIGNyZWF0
ZU91dE9mTWVtb3J5RXJyb3IobV9zY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwotICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gUGFyc2VyRXJyb3I6Ok91dE9mTWVtb3J5OworICAgIHJldHVybiBQ
YXJzZXJFcnJvcjo6RXJyb3JOb25lOwogfQogCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRW
YXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZXJJRCom
IHIwKQpAQCAtMjE2LDUxICsyMDEsMzIgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFy
KGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJlZ2lzdGUKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotaW50IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRHbG9iYWxWYXIoCi0g
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIEZ1
bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uTW9k
ZSk7Ci0gICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUoKS5zaXplKCk7Ci0gICAgU3ltYm9sVGFi
bGVFbnRyeSBuZXdFbnRyeShpbmRleCwgKGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50KSA/IFJl
YWRPbmx5IDogMCk7Ci0gICAgaWYgKGZ1bmN0aW9uTW9kZSA9PSBJc0Z1bmN0aW9uVG9TcGVjaWFs
aXplKQotICAgICAgICBuZXdFbnRyeS5hdHRlbXB0VG9XYXRjaCgpOwotICAgIFN5bWJvbFRhYmxl
OjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLm5vdGlmeVdyaXRlKCk7Ci0gICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5nZXRJbmRleCgpOwotICAgIH0KLSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnByZXNlcnZlTGFzdFZhcigpCiB7CiAgICAgaWYgKChtX2Zp
cnN0Q29uc3RhbnRJbmRleCA9IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkgIT0gMCkKICAgICAg
ICAgbV9sYXN0VmFyID0gJm1fY2FsbGVlUmVnaXN0ZXJzLmxhc3QoKTsKIH0KIAotQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgSlNT
Y29wZSogc2NvcGUsIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgUHJvZ3JhbUNvZGVC
bG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5kKQotICAgIDog
bV9zaG91bGRFbWl0RGVidWdIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkp
Ci0gICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1Byb2ZpbGluZyhzY29wZS0+Z2xvYmFs
T2JqZWN0KCkpKQotICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGUtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1JpY2hTb3VyY2VJ
bmZvKHNjb3BlLT5nbG9iYWxPYmplY3QoKSkpCi0gICAgLCBtX3Njb3BlKCpzY29wZS0+Z2xvYmFs
RGF0YSgpLCBzY29wZSkKLSAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCitCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQ
cm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY29kZUJs
b2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2Rl
KQorICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJP
bikKKyAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhwcm9maWxlck1vZGUgPT0gUHJvZmls
ZXJPbikKICNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCiAgICAgLCBtX2N1cnJlbnRDb21t
ZW50U3RyaW5nKDApCiAjZW5kaWYKKyAgICAsIG1fc3ltYm9sVGFibGUoMCkKICAgICAsIG1fc2Nv
cGVOb2RlKHByb2dyYW1Ob2RlKQotICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwg
bV9jb2RlQmxvY2soZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQogICAgICwgbV90aGlzUmVnaXN0ZXIo
Q2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKICAgICAsIG1fZW1wdHlWYWx1ZVJlZ2lz
dGVyKDApCiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWljU2NvcGVEZXB0
aCgwKQotICAgICwgbV9iYXNlU2NvcGVEZXB0aCgwKQogICAgICwgbV9jb2RlVHlwZShHbG9iYWxD
b2RlKQogICAgICwgbV9uZXh0Q29uc3RhbnRPZmZzZXQoMCkKICAgICAsIG1fZ2xvYmFsQ29uc3Rh
bnRJbmRleCgwKQogICAgICwgbV9oYXNDcmVhdGVkQWN0aXZhdGlvbih0cnVlKQogICAgICwgbV9m
aXJzdExhenlGdW5jdGlvbigwKQogICAgICwgbV9sYXN0TGF6eUZ1bmN0aW9uKDApCi0gICAgLCBt
X2dsb2JhbERhdGEoc2NvcGUtPmdsb2JhbERhdGEoKSkKKyAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xv
YmFsRGF0YSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5kZWYgTkRFQlVHCiAg
ICAgLCBtX2xhc3RPcGNvZGVQb3NpdGlvbigwKQpAQCAtMjY5LDgxICsyMzUsNDggQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwg
SlNTY29wZSogc2NvcGUsIFMKICAgICAsIG1fdXNlc0V4Y2VwdGlvbnMoZmFsc2UpCiAgICAgLCBt
X2V4cHJlc3Npb25Ub29EZWVwKGZhbHNlKQogewotICAgIG1fZ2xvYmFsRGF0YS0+c3RhcnRlZENv
bXBpbGluZyhtX2NvZGVCbG9jayk7Ci0gICAgCiAgICAgaWYgKG1fc2hvdWxkRW1pdERlYnVnSG9v
a3MpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOwog
Ci0gICAgY29kZUJsb2NrLT5zZXRHbG9iYWxEYXRhKG1fZ2xvYmFsRGF0YSk7Ci0gICAgc3ltYm9s
VGFibGUtPnNldFVzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhY29k
ZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7ICAgIAogICAgIG1fY29kZUJsb2NrLT5zZXROdW1QYXJh
bWV0ZXJzKDEpOyAvLyBBbGxvY2F0ZSBzcGFjZSBmb3IgInRoaXMiCiAKICAgICBwcmVwZW5kQ29t
bWVudCgiZW50ZXJpbmcgUHJvZ3JhbSBibG9jayIpOwogICAgIGVtaXRPcGNvZGUob3BfZW50ZXIp
OwogCi0gICAgLy8gRklYTUU6IE1vdmUgY29kZSB0aGF0IG1vZGlmaWVzIHRoZSBnbG9iYWwgb2Jq
ZWN0IHRvIEludGVycHJldGVyOjpleGVjdXRlLgotICAgIAotICAgIGlmIChjb21waWxhdGlvbktp
bmQgPT0gT3B0aW1pemluZ0NvbXBpbGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwotICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIAotICAgIEJh
dGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyIG9wdGltaXplcigqbV9nbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QpOwotCiAgICAgY29uc3QgVmFyU3RhY2smIHZhclN0YWNrID0gcHJvZ3JhbU5vZGUtPnZh
clN0YWNrKCk7CiAgICAgY29uc3QgRnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjayA9IHByb2dy
YW1Ob2RlLT5mdW5jdGlvblN0YWNrKCk7CiAKLSAgICBzaXplX3QgbmV3R2xvYmFscyA9IHZhclN0
YWNrLnNpemUoKSArIGZ1bmN0aW9uU3RhY2suc2l6ZSgpOwotICAgIGlmICghbmV3R2xvYmFscykK
LSAgICAgICAgcmV0dXJuOwotICAgIGdsb2JhbE9iamVjdC0+YWRkUmVnaXN0ZXJzKG5ld0dsb2Jh
bHMpOwotCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rpb25TdGFj
a1tpXTsKLSAgICAgICAgYm9vbCBwcm9wZXJ0eURpZEV4aXN0ID0gCi0gICAgICAgICAgICBnbG9i
YWxPYmplY3QtPnJlbW92ZURpcmVjdCgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbi0+aWRlbnQoKSk7
IC8vIE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3RpbmcgcHJvcGVydGll
cy4KLQotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSwgc2NvcGUp
OwotICAgICAgICBpbnQgaW5kZXggPSBhZGRHbG9iYWxWYXIoCi0gICAgICAgICAgICBmdW5jdGlv
bi0+aWRlbnQoKSwgSXNWYXJpYWJsZSwKLSAgICAgICAgICAgICFwcm9wZXJ0eURpZEV4aXN0ID8g
SXNGdW5jdGlvblRvU3BlY2lhbGl6ZSA6IE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlKTsK
LSAgICAgICAgZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGluZGV4KS5zZXQoKm1fZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiB1bmxpbmtlZEZ1bmN0aW9uID0gbWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKTsKKyAgICAgICAg
Y29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2xhcmF0aW9uKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9u
LT5pZGVudCgpLCB1bmxpbmtlZEZ1bmN0aW9uKTsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChnbG9iYWxPYmpl
Y3QtPmhhc1Byb3BlcnR5KGV4ZWMsICp2YXJTdGFja1tpXS5maXJzdCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgYWRkR2xvYmFsVmFyKAotICAgICAgICAgICAgKnZhclN0YWNrW2ld
LmZpcnN0LAotICAgICAgICAgICAgKHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9uU3Rh
Y2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQgOiBJc1ZhcmlhYmxlLAotICAgICAgICAgICAg
Tm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUpOwotICAgIH0KKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKQorICAgICAgICBjb2RlQmxvY2stPmFkZFZh
cmlhYmxlRGVjbGFyYXRpb24oKnZhclN0YWNrW2ldLmZpcnN0LCAhISh2YXJTdGFja1tpXS5zZWNv
bmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkpOworCiB9CiAKLUJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHks
IEpTU2NvcGUqIHNjb3BlLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCi0gICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hv
b2tzKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKLSAgICAsIG1fc2hvdWxkRW1p
dFByb2ZpbGVIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKCktPnN1cHBvcnRzUHJvZmlsaW5nKHNjb3BlLT5nbG9iYWxPYmplY3QoKSkpCi0gICAgLCBt
X3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oc2NvcGUtPmdsb2JhbE9i
amVjdCgpKSkKLSAgICAsIG1fc2NvcGUoKnNjb3BlLT5nbG9iYWxEYXRhKCksIHNjb3BlKQotICAg
ICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEZ1bmN0aW9uQm9keU5vZGUqIGZ1
bmN0aW9uQm9keSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1Z2dl
ck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQorICAgIDogbV9z
aG91bGRFbWl0RGVidWdIb29rcyhkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPbikKKyAgICAsIG1f
c2hvdWxkRW1pdFByb2ZpbGVIb29rcyhwcm9maWxlck1vZGUgPT0gUHJvZmlsZXJPbikKKyAgICAs
IG1fc3ltYm9sVGFibGUoY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQogI2lmIEVOQUJMRShCWVRF
Q09ERV9DT01NRU5UUykKICAgICAsIG1fY3VycmVudENvbW1lbnRTdHJpbmcoMCkKICNlbmRpZgog
ICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5KQotICAgICwgbV9jb2RlQmxvY2soY29kZUJs
b2NrKQorICAgICwgbV9jb2RlQmxvY2soZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQogICAgICwgbV9h
Y3RpdmF0aW9uUmVnaXN0ZXIoMCkKICAgICAsIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyKDApCiAgICAg
LCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWljU2NvcGVEZXB0aCgwKQotICAgICwg
bV9iYXNlU2NvcGVEZXB0aCgwKQogICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCiAgICAg
LCBtX25leHRDb25zdGFudE9mZnNldCgwKQogICAgICwgbV9nbG9iYWxDb25zdGFudEluZGV4KDAp
CiAgICAgLCBtX2hhc0NyZWF0ZWRBY3RpdmF0aW9uKGZhbHNlKQogICAgICwgbV9maXJzdExhenlG
dW5jdGlvbigwKQogICAgICwgbV9sYXN0TGF6eUZ1bmN0aW9uKDApCi0gICAgLCBtX2dsb2JhbERh
dGEoc2NvcGUtPmdsb2JhbERhdGEoKSkKKyAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkK
ICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2xh
c3RPcGNvZGVQb3NpdGlvbigwKQpAQCAtMzUyLDE0ICsyODUsMTEgQEAgQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgSlNT
Y29wZSogc2MKICAgICAsIG1fdXNlc0V4Y2VwdGlvbnMoZmFsc2UpCiAgICAgLCBtX2V4cHJlc3Np
b25Ub29EZWVwKGZhbHNlKQogewotICAgIG1fZ2xvYmFsRGF0YS0+c3RhcnRlZENvbXBpbGluZyht
X2NvZGVCbG9jayk7Ci0KICAgICBpZiAobV9zaG91bGRFbWl0RGVidWdIb29rcykKICAgICAgICAg
bV9jb2RlQmxvY2stPnNldE5lZWRzRnVsbFNjb3BlQ2hhaW4odHJ1ZSk7CiAKLSAgICBjb2RlQmxv
Y2stPnNldEdsb2JhbERhdGEobV9nbG9iYWxEYXRhKTsKLSAgICBzeW1ib2xUYWJsZS0+c2V0VXNl
c05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2RlQmxvY2stPmlzU3Ry
aWN0TW9kZSgpKTsKLSAgICBzeW1ib2xUYWJsZS0+c2V0UGFyYW1ldGVyQ291bnRJbmNsdWRpbmdU
aGlzKGZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpLT5zaXplKCkgKyAxKTsKKyAgICBtX3N5bWJv
bFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIWNv
ZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOworICAgIG1fc3ltYm9sVGFibGUtPnNldFBhcmFtZXRl
ckNvdW50SW5jbHVkaW5nVGhpcyhmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKS0+c2l6ZSgpICsg
MSk7CiAKICAgICBwcmVwZW5kQ29tbWVudCgiZW50ZXJpbmcgRnVuY3Rpb24gYmxvY2siKTsKICAg
ICBlbWl0T3Bjb2RlKG9wX2VudGVyKTsKQEAgLTM3MCw3ICszMDAsNyBAQCBCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBK
U1Njb3BlKiBzYwogICAgICAgICBtX2NvZGVCbG9jay0+c2V0QWN0aXZhdGlvblJlZ2lzdGVyKG1f
YWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICB9CiAKLSAgICBzeW1ib2xUYWJsZS0+
c2V0Q2FwdHVyZVN0YXJ0KG1fY29kZUJsb2NrLT5tX251bVZhcnMpOworICAgIG1fc3ltYm9sVGFi
bGUtPnNldENhcHR1cmVTdGFydChtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKIAogICAgIGlmIChm
dW5jdGlvbkJvZHktPnVzZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkgfHwg
bV9zaG91bGRFbWl0RGVidWdIb29rcykgeyAvLyBNYXkgcmVpZnkgYXJndW1lbnRzIG9iamVjdC4K
ICAgICAgICAgUmVnaXN0ZXJJRCogdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyID0gYWRkVmFy
KCk7IC8vIEFub255bW91cywgc28gaXQgY2FuJ3QgYmUgbW9kaWZpZWQgYnkgdXNlciBjb2RlLgpA
QCAtNDIwLDcgKzM1MCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihG
dW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIEpTU2NvcGUqIHNjCiAgICAgfQogCiAgICAg
aWYgKGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2Rl
KCkpIHsKLSAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50ID0gc3ltYm9sVGFibGUtPnBhcmFt
ZXRlckNvdW50KCk7CisgICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCA9IG1fc3ltYm9sVGFi
bGUtPnBhcmFtZXRlckNvdW50KCk7CiAgICAgICAgIE93bkFycmF5UHRyPFNsb3dBcmd1bWVudD4g
c2xvd0FyZ3VtZW50cyA9IGFkb3B0QXJyYXlQdHIobmV3IFNsb3dBcmd1bWVudFtwYXJhbWV0ZXJD
b3VudF0pOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50OyAr
K2kpIHsKICAgICAgICAgICAgIGlmICghY2FwdHVyZWRBcmd1bWVudHNbaV0pIHsKQEAgLTQzMSw3
ICszNjEsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25C
b2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgICAgICAgICAgc2xvd0FyZ3Vt
ZW50c1tpXS5zdGF0dXMgPSBTbG93QXJndW1lbnQ6OkNhcHR1cmVkOwogICAgICAgICAgICAgc2xv
d0FyZ3VtZW50c1tpXS5pbmRleCA9IGNhcHR1cmVkQXJndW1lbnRzW2ldLT5pbmRleCgpOwogICAg
ICAgICB9Ci0gICAgICAgIHN5bWJvbFRhYmxlLT5zZXRTbG93QXJndW1lbnRzKHNsb3dBcmd1bWVu
dHMucmVsZWFzZSgpKTsKKyAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0U2xvd0FyZ3VtZW50cyhz
bG93QXJndW1lbnRzLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgUmVnaXN0ZXJJRCogY2FsbGVl
UmVnaXN0ZXIgPSByZXNvbHZlQ2FsbGVlKGZ1bmN0aW9uQm9keSk7IC8vIE1heSBwdXNoIHRvIHRo
ZSBzY29wZSBjaGFpbiBhbmQvb3IgYWRkIGEgY2FwdHVyZWQgdmFyLgpAQCAtNDcyLDcgKzQwMiw3
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2Rl
KiBmdW5jdGlvbkJvZHksIEpTU2NvcGUqIHNjCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChtX2FjdGl2YXRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgfQogCi0gICAgc3ltYm9sVGFi
bGUtPnNldENhcHR1cmVFbmQoY29kZUJsb2NrLT5tX251bVZhcnMpOworICAgIG1fc3ltYm9sVGFi
bGUtPnNldENhcHR1cmVFbmQoY29kZUJsb2NrLT5tX251bVZhcnMpOwogCiAgICAgbV9maXJzdExh
enlGdW5jdGlvbiA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkgewpAQCAtNTAwLDcgKzQzMCw3IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5j
dGlvbkJvZHksIEpTU2NvcGUqIHNjCiAgICAgfQogCiAgICAgaWYgKHNob3VsZENhcHR1cmVBbGxU
aGVUaGluZ3MpCi0gICAgICAgIHN5bWJvbFRhYmxlLT5zZXRDYXB0dXJlRW5kKGNvZGVCbG9jay0+
bV9udW1WYXJzKTsKKyAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZUVuZChjb2RlQmxv
Y2stPm1fbnVtVmFycyk7CiAKICAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAq
ZnVuY3Rpb25Cb2R5LT5wYXJhbWV0ZXJzKCk7CiAgICAgbV9wYXJhbWV0ZXJzLmdyb3cocGFyYW1l
dGVycy5zaXplKCkgKyAxKTsgLy8gcmVzZXJ2ZSBzcGFjZSBmb3IgInRoaXMiCkBAIC01MzAsMzUg
KzQ2MCwzMiBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25C
b2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgICAgICBlbWl0T3Bjb2RlKG9w
X2NyZWF0ZV90aGlzKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fdGhpc1JlZ2lz
dGVyLmluZGV4KCkpOwogICAgIH0gZWxzZSBpZiAoIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkg
JiYgKGZ1bmN0aW9uQm9keS0+dXNlc1RoaXMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkgfHwg
bV9zaG91bGRFbWl0RGVidWdIb29rcykpIHsKLSAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxl
ID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NvbnZlcnRfdGhpcyk7CisgICAgICAgIFVubGlua2Vk
VmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY29udmVydF90aGlz
KTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkp
OwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgfQogfQogCi1C
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBK
U1Njb3BlKiBzY29wZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFsQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCkKLSAgICA6IG1fc2hvdWxkRW1pdERlYnVn
SG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQotICAgICwgbV9zaG91bGRF
bWl0UHJvZmlsZUhvb2tzKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUoKS0+c3VwcG9ydHNQcm9maWxpbmcoc2NvcGUtPmdsb2JhbE9iamVjdCgpKSkKLSAgICAs
IG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNSaWNoU291cmNlSW5mbyhzY29wZS0+Z2xvYmFs
T2JqZWN0KCkpKQotICAgICwgbV9zY29wZSgqc2NvcGUtPmdsb2JhbERhdGEoKSwgc2NvcGUpCi0g
ICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXZhbE5vZGUqIGV2YWxOb2Rl
LCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2Vy
TW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKKyAgICA6IG1fc2hvdWxkRW1pdERlYnVn
SG9va3MoZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT24pCisgICAgLCBtX3Nob3VsZEVtaXRQcm9m
aWxlSG9va3MocHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24pCisgICAgLCBtX3N5bWJvbFRhYmxl
KGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKICNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMp
CiAgICAgLCBtX2N1cnJlbnRDb21tZW50U3RyaW5nKDApCiAjZW5kaWYKICAgICAsIG1fc2NvcGVO
b2RlKGV2YWxOb2RlKQotICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgbV9jb2Rl
QmxvY2soZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZy
YW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKICAgICAsIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyKDAp
CiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWljU2NvcGVEZXB0aCgwKQot
ICAgICwgbV9iYXNlU2NvcGVEZXB0aChjb2RlQmxvY2stPmJhc2VTY29wZURlcHRoKCkpCiAgICAg
LCBtX2NvZGVUeXBlKEV2YWxDb2RlKQogICAgICwgbV9uZXh0Q29uc3RhbnRPZmZzZXQoMCkKICAg
ICAsIG1fZ2xvYmFsQ29uc3RhbnRJbmRleCgwKQogICAgICwgbV9oYXNDcmVhdGVkQWN0aXZhdGlv
bih0cnVlKQogICAgICwgbV9maXJzdExhenlGdW5jdGlvbigwKQogICAgICwgbV9sYXN0TGF6eUZ1
bmN0aW9uKDApCi0gICAgLCBtX2dsb2JhbERhdGEoc2NvcGUtPmdsb2JhbERhdGEoKSkKKyAgICAs
IG1fZ2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2xhc3RPcGNvZGVQb3NpdGlvbigwKQpAQCAtNTY3LDEz
ICs0OTQsOSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUq
IGV2YWxOb2RlLCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkUwogICAgICwgbV91c2VzRXhjZXB0aW9u
cyhmYWxzZSkKICAgICAsIG1fZXhwcmVzc2lvblRvb0RlZXAoZmFsc2UpCiB7Ci0gICAgbV9nbG9i
YWxEYXRhLT5zdGFydGVkQ29tcGlsaW5nKG1fY29kZUJsb2NrKTsKLQotICAgIGlmIChtX3Nob3Vs
ZEVtaXREZWJ1Z0hvb2tzIHx8IG1fYmFzZVNjb3BlRGVwdGgpCi0gICAgICAgIG1fY29kZUJsb2Nr
LT5zZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOworICAgIG1fY29kZUJsb2NrLT5zZXROZWVk
c0Z1bGxTY29wZUNoYWluKHRydWUpOwogCi0gICAgY29kZUJsb2NrLT5zZXRHbG9iYWxEYXRhKG1f
Z2xvYmFsRGF0YSk7Ci0gICAgc3ltYm9sVGFibGUtPnNldFVzZXNOb25TdHJpY3RFdmFsKGNvZGVC
bG9jay0+dXNlc0V2YWwoKSAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7ICAgIAorICAg
IG1fc3ltYm9sVGFibGUtPnNldFVzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2YWwo
KSAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgbV9jb2RlQmxvY2stPnNldE51
bVBhcmFtZXRlcnMoMSk7CiAKICAgICBwcmVwZW5kQ29tbWVudCgiZW50ZXJpbmcgRXZhbCBibG9j
ayIpOwpAQCAtNTgxLDcgKzUwNCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihFdmFsTm9kZSogZXZhbE5vZGUsIEpTU2NvcGUqIHNjb3BlLCBTaGFyZWRTCiAKICAgICBj
b25zdCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjayA9IGV2
YWxOb2RlLT5mdW5jdGlvblN0YWNrKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5j
dGlvblN0YWNrLnNpemUoKTsgKytpKQotICAgICAgICBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25E
ZWNsKEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uU3Rh
Y2tbaV0pKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rp
b24oZnVuY3Rpb25TdGFja1tpXSkpOwogCiAgICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OlZh
clN0YWNrJiB2YXJTdGFjayA9IGV2YWxOb2RlLT52YXJTdGFjaygpOwogICAgIHVuc2lnbmVkIG51
bVZhcmlhYmxlcyA9IHZhclN0YWNrLnNpemUoKTsKQEAgLTU5NSw3ICs1MTgsNiBAQCBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBKU1Njb3Bl
KiBzY29wZSwgU2hhcmVkUwogCiBCeXRlY29kZUdlbmVyYXRvcjo6fkJ5dGVjb2RlR2VuZXJhdG9y
KCkKIHsKLSAgICBtX2dsb2JhbERhdGEtPmZpbmlzaGVkQ29tcGlsaW5nKG1fY29kZUJsb2NrKTsK
IH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbml0TGF6eVJlZ2lzdGVy
KFJlZ2lzdGVySUQqIHJlZykKQEAgLTYxOCwxNyArNTQwLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OnJlc29sdmVDYWxsZWUoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5
Tm9kZSkKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGZ1bmN0aW9u
Qm9keU5vZGUtPmlkZW50KCkpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY2Fs
bGVlUmVnaXN0ZXIuaW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZWFk
T25seSB8IERvbnREZWxldGUpOwotCi0gICAgICAgIC8vIFB1dCBhIG1pcnJvciBvYmplY3QgaW4g
Y29tcGlsYXRpb24gc2NvcGUsIHNvIGNvbXBpbGUtdGltZSB2YXJpYWJsZSByZXNvbHV0aW9uIHNl
ZXMgdGhlIHByb3BlcnR5IG5hbWUgd2UnbGwgc2VlIGF0IHJ1bnRpbWUuCi0gICAgICAgIG1fc2Nv
cGUuc2V0KCpnbG9iYWxEYXRhKCksCi0gICAgICAgICAgICBKU05hbWVTY29wZTo6Y3JlYXRlKAot
ICAgICAgICAgICAgICAgIG1fc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksCi0g
ICAgICAgICAgICAgICAgZnVuY3Rpb25Cb2R5Tm9kZS0+aWRlbnQoKSwKLSAgICAgICAgICAgICAg
ICBqc1VuZGVmaW5lZCgpLAotICAgICAgICAgICAgICAgIFJlYWRPbmx5IHwgRG9udERlbGV0ZSwK
LSAgICAgICAgICAgICAgICBtX3Njb3BlLmdldCgpCi0gICAgICAgICAgICApCi0gICAgICAgICk7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtNzcyLDcgKzY4Myw3IEBAIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCiAgICAgbV9sYXN0
T3Bjb2RlUG9zaXRpb24gPSBvcGNvZGVQb3NpdGlvbjsKICNlbmRpZgogICAgIGVtaXRDb21tZW50
KCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXIt
PmdldE9wY29kZShvcGNvZGVJRCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChvcGNvZGVJ
RCk7CiAgICAgbV9sYXN0T3Bjb2RlSUQgPSBvcGNvZGVJRDsKIH0KIApAQCAtNzk2LDIxICs3MDcs
MjEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlcGVuZENvbW1lbnQoY29uc3QgY2hhciog
c3RyaW5nKQogfQogI2VuZGlmCiAKLUFycmF5UHJvZmlsZSogQnl0ZWNvZGVHZW5lcmF0b3I6Om5l
d0FycmF5UHJvZmlsZSgpCitVbmxpbmtlZEFycmF5UHJvZmlsZSBCeXRlY29kZUdlbmVyYXRvcjo6
bmV3QXJyYXlQcm9maWxlKCkKIHsKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAgcmV0
dXJuIG1fY29kZUJsb2NrLT5hZGRBcnJheVByb2ZpbGUoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsK
KyAgICByZXR1cm4gbV9jb2RlQmxvY2stPmFkZEFycmF5UHJvZmlsZSgpOwogI2Vsc2UKICAgICBy
ZXR1cm4gMDsKICNlbmRpZgogfQogCi1WYWx1ZVByb2ZpbGUqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0UHJvZmlsZWRPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCitVbmxpbmtlZFZhbHVlUHJvZmls
ZSBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlE
KQogewogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBWYWx1ZVByb2ZpbGUqIHJlc3Vs
dCA9IG1fY29kZUJsb2NrLT5hZGRWYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsK
KyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSByZXN1bHQgPSBtX2NvZGVCbG9jay0+YWRkVmFsdWVQ
cm9maWxlKCk7CiAjZWxzZQotICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gMDsKKyAgICBVbmxp
bmtlZFZhbHVlUHJvZmlsZSByZXN1bHQgPSAwOwogI2VuZGlmCiAgICAgZW1pdE9wY29kZShvcGNv
ZGVJRCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg0MCwxNCArNzUxLDYgQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6cmV0cmlldmVMYXN0VW5hcnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNy
Y0luZGV4KQogICAgIHNyY0luZGV4ID0gaW5zdHJ1Y3Rpb25zKCkuYXQoc2l6ZSAtIDEpLnUub3Bl
cmFuZDsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cmV0cmlldmVMYXN0VW5hcnlPcChX
cml0ZUJhcnJpZXI8VW5rbm93bj4qJiBkc3RQb2ludGVyLCBpbnQmIHNyY0luZGV4KQotewotICAg
IEFTU0VSVChpbnN0cnVjdGlvbnMoKS5zaXplKCkgPj0gMyk7Ci0gICAgc2l6ZV90IHNpemUgPSBp
bnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgZHN0UG9pbnRlciA9IGluc3RydWN0aW9ucygpLmF0
KHNpemUgLSAyKS51LnJlZ2lzdGVyUG9pbnRlcjsKLSAgICBzcmNJbmRleCA9IGluc3RydWN0aW9u
cygpLmF0KHNpemUgLSAxKS51Lm9wZXJhbmQ7Ci19Ci0KIHZvaWQgQUxXQVlTX0lOTElORSBCeXRl
Y29kZUdlbmVyYXRvcjo6cmV3aW5kQmluYXJ5T3AoKQogewogICAgIEFTU0VSVChpbnN0cnVjdGlv
bnMoKS5zaXplKCkgPj0gNCk7CkBAIC0xMzM2LDcgKzEyMzksNyBAQCBSZXNvbHZlUmVzdWx0IEJ5
dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQogICAg
ICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJSZXNvbHZlKHRoaXNSZWdpc3Rlcigp
LCBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUZsYWcpOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHBy
b3BlcnR5IHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gYSByZWdpc3Rlci4KLSAgICBpZiAobV9jb2Rl
VHlwZSAhPSBHbG9iYWxDb2RlICYmIHNob3VsZE9wdGltaXplTG9jYWxzKCkpIHsKKyAgICBpZiAo
bV9jb2RlVHlwZSAhPSBHbG9iYWxDb2RlICYmIHNob3VsZE9wdGltaXplTG9jYWxzKCkgJiYgbV9z
eW1ib2xUYWJsZSkgewogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFi
bGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKICAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkg
ewogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMp
CkBAIC0xMzUyLDcgKzEyNTUsNyBAQCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZXNvbHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQogUmVzb2x2ZVJlc3VsdCBCeXRlY29k
ZUdlbmVyYXRvcjo6cmVzb2x2ZUNvbnN0RGVjbChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkK
IHsKICAgICAvLyBSZWdpc3Rlci1hbGxvY2F0ZWQgY29uc3QgZGVjbGFyYXRpb25zLgotICAgIGlm
IChtX2NvZGVUeXBlICE9IEV2YWxDb2RlICYmIG1fY29kZVR5cGUgIT0gR2xvYmFsQ29kZSkgewor
ICAgIGlmIChtX2NvZGVUeXBlICE9IEV2YWxDb2RlICYmIG1fY29kZVR5cGUgIT0gR2xvYmFsQ29k
ZSAmJiBtX3N5bWJvbFRhYmxlKSB7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBz
eW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwogICAgICAgICBpZiAoIWVudHJ5Lmlz
TnVsbCgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBmbGFncyA9IGVudHJ5LmlzUmVhZE9ubHko
KSA/IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZyA6IDA7CkBAIC0xMzk0LDcgKzEyOTcsNyBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmUoUmVnaXN0ZXJJRCog
ZHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0JgogICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzUmVnaXN0
ZXIoKSkKICAgICAgICAgcmV0dXJuIGVtaXRHZXRMb2NhbFZhcihkc3QsIHJlc29sdmVSZXN1bHQs
IHByb3BlcnR5KTsKIAotICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9w
Y29kZShvcF9yZXNvbHZlKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1p
dFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmUpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9w
ZXJ0eSkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChnZXRSZXNvbHZlT3BlcmF0aW9ucyhw
cm9wZXJ0eSkpOwpAQCAtMTQwNiw3ICsxMzA5LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXNvbHZlQmFzZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXMK
IHsKICAgICBBU1NFUlRfVU5VU0VEKHJlc29sdmVSZXN1bHQsICFyZXNvbHZlUmVzdWx0LmlzUmVn
aXN0ZXIoKSk7CiAgICAgLy8gV2UgY2FuJ3Qgb3B0aW1pc2UgYXQgYWxsIDotKAotICAgIFZhbHVl
UHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZlX2Jhc2UpOwor
ICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3Bf
cmVzb2x2ZV9iYXNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOwpAQCAtMTQyMCw3ICsxMzIzLDcgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZUZvclB1dChSZWdpc3RlcklE
KiBkc3QsIGNvbnN0IFJlc28KIHsKICAgICBBU1NFUlRfVU5VU0VEKHJlc29sdmVSZXN1bHQsICFy
ZXNvbHZlUmVzdWx0LmlzUmVnaXN0ZXIoKSk7CiAgICAgLy8gV2UgY2FuJ3Qgb3B0aW1pc2UgYXQg
YWxsIDotKAotICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShv
cF9yZXNvbHZlX2Jhc2UpOworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0
UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV9iYXNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQo
cHJvcGVydHkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2stPmlzU3Ry
aWN0TW9kZSgpKTsKQEAgLTE0MzUsNyArMTMzOCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2VGb3JQdXQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBSZXNv
CiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVXaXRoQmFzZUZvclB1
dChSZWdpc3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcklEKiBwcm9wRHN0LCBjb25zdCBSZXNvbHZl
UmVzdWx0JiByZXNvbHZlUmVzdWx0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgTm9ubG9j
YWxSZXNvbHZlSW5mbyYgdmVyaWZpZXIpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlUmVz
dWx0LCAhcmVzb2x2ZVJlc3VsdC5pc1JlZ2lzdGVyKCkpOwotICAgIFZhbHVlUHJvZmlsZSogcHJv
ZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZlX3dpdGhfYmFzZSk7CisgICAgVW5s
aW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZl
X3dpdGhfYmFzZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2VEc3QtPmluZGV4KCkp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wRHN0LT5pbmRleCgpKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKQEAgLTE0NTUsNyArMTM1
OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhUaGlz
KFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVyCiAgICAgICAgIHJldHVybiBiYXNlRHN0Owog
ICAgIH0KIAotICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShv
cF9yZXNvbHZlX3dpdGhfdGhpcyk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZlX3dpdGhfdGhpcyk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGJhc2VEc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChwcm9wRHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3Rh
bnQocHJvcGVydHkpKTsKQEAgLTE0ODIsMjMgKzEzODUsMTEgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRHZXRMb2NhbFZhcihSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29s
dmVSZXMKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5pdEdsb2JhbENvbnN0
KGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVySUQqIHZhbHVlKQogewogICAg
IEFTU0VSVChtX2NvZGVUeXBlID09IEdsb2JhbENvZGUpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgU3ltYm9sVGFi
bGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGlkZW50aWZp
ZXIuaW1wbCgpKTsKLSAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIAotICAgIGlmIChlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7Ci0gICAgICAgIGVtaXRPcGNv
ZGUob3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2spOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoJmdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKSk7Ci0gICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChlbnRyeS5hZGRyZXNzT2ZJc1dhdGNoZWQoKSk7Ci0gICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgZW1pdE9wY29kZShvcF9pbml0X2dsb2JhbF9j
b25zdCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKCZnbG9iYWxPYmplY3QtPnJlZ2lzdGVy
QXQoZW50cnkuZ2V0SW5kZXgoKSkpOworICAgIGVtaXRPcGNvZGUob3BfaW5pdF9nbG9iYWxfY29u
c3Rfbm9wKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTE1MDYsNyArMTM5Nyw3IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlJZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGJhc2UsIGNvCiB7CiAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAotICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYnlfaWQpOworICAgIFVubGlua2VkVmFsdWVQcm9m
aWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2J5X2lkKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50
KHByb3BlcnR5KSk7CkBAIC0xNTkyLDggKzE0ODMsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdERlbGV0ZUJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNl
LAogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEFyZ3VtZW50QnlWYWwo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSkK
IHsKLSAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwot
ICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYXJn
dW1lbnRfYnlfdmFsKTsKKyAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBu
ZXdBcnJheVByb2ZpbGUoKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1p
dFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9hcmd1bWVudF9ieV92YWwpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIEFTU0VSVChiYXNlLT5pbmRleCgpID09IG1f
Y29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYmFzZS0+aW5kZXgoKSk7CkBAIC0xNjE4LDggKzE1MDksOCBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwgUgogICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAgfQogICAgIH0KLSAgICBB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwotICAgIFZhbHVl
UHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYnlfdmFsKTsKKyAg
ICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsK
KyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9w
X2dldF9ieV92YWwpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOwpAQCAtMTYzMCw3ICsxNTIxLDcgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UsIFIKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRQdXRCeVZhbChSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVnaXN0
ZXJJRCogdmFsdWUpCiB7Ci0gICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBuZXdBcnJh
eVByb2ZpbGUoKTsKKyAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdB
cnJheVByb2ZpbGUoKTsKICAgICBlbWl0T3Bjb2RlKG9wX3B1dF9ieV92YWwpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQocHJvcGVydHktPmluZGV4KCkpOwpAQCAtMTcwMCw3ICsxNTkxLDcgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdBcnJheShSZWdpc3RlcklEKiBkc3QsIEVsZW1lbnRO
b2RlKiBlbGVtZW4KICAgICAgICAgaWYgKCFoYWRWYXJpYWJsZUV4cHJlc3Npb24pIHsKICAgICAg
ICAgICAgIEFTU0VSVChsZW5ndGggPT0gY2hlY2tMZW5ndGgpOwogICAgICAgICAgICAgdW5zaWdu
ZWQgY29uc3RhbnRCdWZmZXJJbmRleCA9IGFkZENvbnN0YW50QnVmZmVyKGxlbmd0aCk7Ci0gICAg
ICAgICAgICBKU1ZhbHVlKiBjb25zdGFudEJ1ZmZlciA9IG1fY29kZUJsb2NrLT5jb25zdGFudEJ1
ZmZlcihjb25zdGFudEJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAgIEpTVmFsdWUqIGNvbnN0YW50
QnVmZmVyID0gbV9jb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKGNvbnN0YW50QnVmZmVySW5kZXgp
LmRhdGEoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgICAgIGZv
ciAoRWxlbWVudE5vZGUqIG4gPSBlbGVtZW50czsgaW5kZXggPCBsZW5ndGg7IG4gPSBuLT5uZXh0
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAobi0+dmFsdWUoKS0+aXNOdW1iZXIoKSkKQEAgLTE3
MzYsMTQgKzE2MjcsMTQgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdB
cnJheShSZWdpc3RlcklEKiBkc3QsIEVsZW1lbnROb2RlKiBlbGVtZW4KIAogUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0
aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQogewotICAgIHJldHVybiBlbWl0TmV3RnVuY3Rpb25JbnRl
cm5hbChkc3QsIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2woRnVuY3Rpb25FeGVjdXRhYmxl
OjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKSwgZmFsc2UpOworICAgIHJldHVybiBl
bWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wo
bWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSksIGZhbHNlKTsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRMYXp5TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlv
bkJvZHlOb2RlKiBmdW5jdGlvbikKIHsKICAgICBGdW5jdGlvbk9mZnNldE1hcDo6QWRkUmVzdWx0
IHB0ciA9IG1fZnVuY3Rpb25PZmZzZXRzLmFkZChmdW5jdGlvbiwgMCk7CiAgICAgaWYgKHB0ci5p
c05ld0VudHJ5KQotICAgICAgICBwdHIuaXRlcmF0b3ItPnZhbHVlID0gbV9jb2RlQmxvY2stPmFk
ZEZ1bmN0aW9uRGVjbChGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBm
dW5jdGlvbikpOworICAgICAgICBwdHIuaXRlcmF0b3ItPnZhbHVlID0gbV9jb2RlQmxvY2stPmFk
ZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24oZnVuY3Rpb24pKTsKICAgICByZXR1cm4gZW1pdE5l
d0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBwdHIuaXRlcmF0b3ItPnZhbHVlLCB0cnVlKTsKIH0KIApA
QCAtMTc2OCw3ICsxNjU5LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRO
ZXdSZWdFeHAoUmVnaXN0ZXJJRCogZHN0LCBSZWdFeHAqIHJlZ0V4cCkKIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKFJlZ2lzdGVySUQqIHIw
LCBGdW5jRXhwck5vZGUqIG4pCiB7CiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBu
LT5ib2R5KCk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25F
eHByKEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSk7
CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25FeHByKG1ha2VG
dW5jdGlvbihmdW5jdGlvbikpOwogICAgIAogICAgIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2Fy
eSgpOwogICAgIGVtaXRPcGNvZGUob3BfbmV3X2Z1bmNfZXhwKTsKQEAgLTE5MTksNyArMTgxMCw3
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvZGVJRCBvcGNv
ZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpCiAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IGVtaXRF
eHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxB
cmd1bWVudHMsIGRvbmUuZ2V0KCkpOwogICAgIAogICAgIC8vIEVtaXQgY2FsbC4KLSAgICBBcnJh
eVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOworICAgIFVubGlua2Vk
QXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwogICAgIGVtaXRP
cGNvZGUob3Bjb2RlSUQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgp
KTsgLy8gZnVuYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjYWxsQXJndW1lbnRzLmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOyAvLyBhcmdDb3VudApAQCAtMTkzMSw3ICsxODIyLDcg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE9wY29kZUlEIG9wY29k
ZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2kKICNlbmRpZgogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChhcnJheVByb2ZpbGUpOwogICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7Ci0g
ICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9jYWxs
X3B1dF9yZXN1bHQpOworICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1p
dFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CiAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChkc3QtPmluZGV4KCkpOyAvLyBkc3QKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHByb2ZpbGUpOwogICAgIH0KQEAgLTE5NjQsNyArMTg1NSw3IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBmdW5jCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3VtZW50cy0+aW5kZXgo
KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZpcnN0RnJlZVJlZ2lzdGVyLT5pbmRleCgp
KTsKICAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSkgewotICAgICAgICBWYWx1ZVByb2Zp
bGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKKyAg
ICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShv
cF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIH0K
QEAgLTIwNDcsNyArMTkzOCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywKICNlbmRpZgogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQo
KSkgewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUo
b3BfY2FsbF9wdXRfcmVzdWx0KTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmls
ZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsgLy8gZHN0CiAgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAgICB9CkBAIC0yNDI2LDcgKzIzMTcsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kRW1pdENhdGNoKFRyeURhdGEqIHRy
eURhdGEsIFJlZ2lzdGVySUQqCiAgICAgbV90cnlDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwog
ICAgIAogICAgIGVtaXRMYWJlbCh0cnlSYW5nZS50cnlEYXRhLT50YXJnZXQuZ2V0KCkpOwotICAg
IHRyeVJhbmdlLnRyeURhdGEtPnRhcmdldFNjb3BlRGVwdGggPSBtX2R5bmFtaWNTY29wZURlcHRo
ICsgbV9iYXNlU2NvcGVEZXB0aDsKKyAgICB0cnlSYW5nZS50cnlEYXRhLT50YXJnZXRTY29wZURl
cHRoID0gbV9keW5hbWljU2NvcGVEZXB0aDsKIAogICAgIGVtaXRPcGNvZGUob3BfY2F0Y2gpOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXRSZWdpc3Rlci0+aW5kZXgoKSk7CkBAIC0y
NDM1LDggKzIzMjYsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5k
RW1pdENhdGNoKFRyeURhdGEqIHRyeURhdGEsIFJlZ2lzdGVySUQqCiAKIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IHsKLSAgICBlbWl0T3Bjb2RlKG9wX3Rocm93X3JlZmVyZW5jZV9lcnJvcik7CisgICAgZW1pdE9w
Y29kZShvcF90aHJvd19zdGF0aWNfZXJyb3IpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChh
ZGRDb25zdGFudFZhbHVlKGpzU3RyaW5nKGdsb2JhbERhdGEoKSwgbWVzc2FnZSkpLT5pbmRleCgp
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodHJ1ZSk7CiB9CiAKIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRQdXNoTmFtZVNjb3BlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBS
ZWdpc3RlcklEKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAgLTI0ODcsNyArMjM3OSw3
IEBAIHN0YXRpYyBpbnQzMl90IGtleUZvckltbWVkaWF0ZVN3aXRjaChFeHByZXNzaW9uTm9kZSog
bm9kZSwgaW50MzJfdCBtaW4sIGludDMyX3QKICAgICByZXR1cm4ga2V5IC0gbWluOwogfQogCi1z
dGF0aWMgdm9pZCBwcmVwYXJlSnVtcFRhYmxlRm9ySW1tZWRpYXRlU3dpdGNoKFNpbXBsZUp1bXBU
YWJsZSYganVtcFRhYmxlLCBpbnQzMl90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNsYXVzZUNv
dW50LCBSZWZQdHI8TGFiZWw+KiBsYWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMsIGludDMy
X3QgbWluLCBpbnQzMl90IG1heCkKK3N0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JJbW1l
ZGlhdGVTd2l0Y2goVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50MzJfdCBz
d2l0Y2hBZGRyZXNzLCB1aW50MzJfdCBjbGF1c2VDb3VudCwgUmVmUHRyPExhYmVsPiogbGFiZWxz
LCBFeHByZXNzaW9uTm9kZSoqIG5vZGVzLCBpbnQzMl90IG1pbiwgaW50MzJfdCBtYXgpCiB7CiAg
ICAganVtcFRhYmxlLm1pbiA9IG1pbjsKICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNp
emUobWF4IC0gbWluICsgMSk7CkBAIC0yNTEzLDcgKzI0MDUsNyBAQCBzdGF0aWMgaW50MzJfdCBr
ZXlGb3JDaGFyYWN0ZXJTd2l0Y2goRXhwcmVzc2lvbk5vZGUqIG5vZGUsIGludDMyX3QgbWluLCBp
bnQzMl90CiAgICAgcmV0dXJuIGtleSAtIG1pbjsKIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZUp1
bXBUYWJsZUZvckNoYXJhY3RlclN3aXRjaChTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50
MzJfdCBzd2l0Y2hBZGRyZXNzLCB1aW50MzJfdCBjbGF1c2VDb3VudCwgUmVmUHRyPExhYmVsPiog
bGFiZWxzLCBFeHByZXNzaW9uTm9kZSoqIG5vZGVzLCBpbnQzMl90IG1pbiwgaW50MzJfdCBtYXgp
CitzdGF0aWMgdm9pZCBwcmVwYXJlSnVtcFRhYmxlRm9yQ2hhcmFjdGVyU3dpdGNoKFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUsIGludDMyX3Qgc3dpdGNoQWRkcmVzcywgdWludDMy
X3QgY2xhdXNlQ291bnQsIFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRXhwcmVzc2lvbk5vZGUqKiBu
b2RlcywgaW50MzJfdCBtaW4sIGludDMyX3QgbWF4KQogewogICAgIGp1bXBUYWJsZS5taW4gPSBt
aW47CiAgICAganVtcFRhYmxlLmJyYW5jaE9mZnNldHMucmVzaXplKG1heCAtIG1pbiArIDEpOwpA
QCAtMjUyNiw3ICsyNDE4LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZvckNoYXJh
Y3RlclN3aXRjaChTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50MzIKICAgICB9CiB9CiAK
LXN0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0Y2goU3RyaW5nSnVtcFRh
YmxlJiBqdW1wVGFibGUsIGludDMyX3Qgc3dpdGNoQWRkcmVzcywgdWludDMyX3QgY2xhdXNlQ291
bnQsIFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRXhwcmVzc2lvbk5vZGUqKiBub2RlcykKK3N0YXRp
YyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0Y2goVW5saW5rZWRTdHJpbmdKdW1w
VGFibGUmIGp1bXBUYWJsZSwgaW50MzJfdCBzd2l0Y2hBZGRyZXNzLCB1aW50MzJfdCBjbGF1c2VD
b3VudCwgUmVmUHRyPExhYmVsPiogbGFiZWxzLCBFeHByZXNzaW9uTm9kZSoqIG5vZGVzKQogewog
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjbGF1c2VDb3VudDsgKytpKSB7CiAgICAgICAg
IC8vIFdlJ3JlIGVtaXR0aW5nIHRoaXMgYWZ0ZXIgdGhlIGNsYXVzZSBsYWJlbHMgc2hvdWxkIGhh
dmUgYmVlbiBmaXhlZCwgc28gCkBAIC0yNTM1LDkgKzI0MjcsNyBAQCBzdGF0aWMgdm9pZCBwcmVw
YXJlSnVtcFRhYmxlRm9yU3RyaW5nU3dpdGNoKFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlLCBp
bnQzMl90CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobm9kZXNbaV0tPmlzU3RyaW5nKCkpOwog
ICAgICAgICBTdHJpbmdJbXBsKiBjbGF1c2UgPSBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obm9k
ZXNbaV0pLT52YWx1ZSgpLmltcGwoKTsKLSAgICAgICAgT2Zmc2V0TG9jYXRpb24gbG9jYXRpb247
Ci0gICAgICAgIGxvY2F0aW9uLmJyYW5jaE9mZnNldCA9IGxhYmVsc1tpXS0+YmluZChzd2l0Y2hB
ZGRyZXNzLCBzd2l0Y2hBZGRyZXNzICsgMyk7Ci0gICAgICAgIGp1bXBUYWJsZS5vZmZzZXRUYWJs
ZS5hZGQoY2xhdXNlLCBsb2NhdGlvbik7CisgICAgICAgIGp1bXBUYWJsZS5vZmZzZXRUYWJsZS5h
ZGQoY2xhdXNlLCBsYWJlbHNbaV0tPmJpbmQoc3dpdGNoQWRkcmVzcywgc3dpdGNoQWRkcmVzcyAr
IDMpKTsKICAgICB9CiB9CiAKQEAgLTI1NDksMjAgKzI0MzksMjAgQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW5kU3dpdGNoKHVpbnQzMl90IGNsYXVzZUNvdW50LCBSZWZQdHI8TGFiZWw+KiBs
YWJlbHMsIEUKICAgICAgICAgaW5zdHJ1Y3Rpb25zKClbc3dpdGNoSW5mby5ieXRlY29kZU9mZnNl
dCArIDFdID0gbV9jb2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygp
OwogICAgICAgICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMl0g
PSBkZWZhdWx0TGFiZWwtPmJpbmQoc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgc3dpdGNoSW5m
by5ieXRlY29kZU9mZnNldCArIDMpOwogCi0gICAgICAgIFNpbXBsZUp1bXBUYWJsZSYganVtcFRh
YmxlID0gbV9jb2RlQmxvY2stPmFkZEltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSgpOworICAgICAg
ICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPmFkZElt
bWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSgpOwogICAgICAgICBwcmVwYXJlSnVtcFRhYmxlRm9ySW1t
ZWRpYXRlU3dpdGNoKGp1bXBUYWJsZSwgc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgY2xhdXNl
Q291bnQsIGxhYmVscywgbm9kZXMsIG1pbiwgbWF4KTsKICAgICB9IGVsc2UgaWYgKHN3aXRjaElu
Zm8uc3dpdGNoVHlwZSA9PSBTd2l0Y2hJbmZvOjpTd2l0Y2hDaGFyYWN0ZXIpIHsKICAgICAgICAg
aW5zdHJ1Y3Rpb25zKClbc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCArIDFdID0gbV9jb2RlQmxv
Y2stPm51bWJlck9mQ2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcygpOwogICAgICAgICBpbnN0cnVj
dGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMl0gPSBkZWZhdWx0TGFiZWwtPmJp
bmQoc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCAr
IDMpOwogICAgICAgICAKLSAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2Nv
ZGVCbG9jay0+YWRkQ2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKCk7CisgICAgICAgIFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkQ2hhcmFjdGVyU3dp
dGNoSnVtcFRhYmxlKCk7CiAgICAgICAgIHByZXBhcmVKdW1wVGFibGVGb3JDaGFyYWN0ZXJTd2l0
Y2goanVtcFRhYmxlLCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBjbGF1c2VDb3VudCwgbGFi
ZWxzLCBub2RlcywgbWluLCBtYXgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChzd2l0
Y2hJbmZvLnN3aXRjaFR5cGUgPT0gU3dpdGNoSW5mbzo6U3dpdGNoU3RyaW5nKTsKICAgICAgICAg
aW5zdHJ1Y3Rpb25zKClbc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCArIDFdID0gbV9jb2RlQmxv
Y2stPm51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOwogICAgICAgICBpbnN0cnVjdGlv
bnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMl0gPSBkZWZhdWx0TGFiZWwtPmJpbmQo
c3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCArIDMp
OwogCi0gICAgICAgIFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPmFk
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSgpOworICAgICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPmFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSgpOwog
ICAgICAgICBwcmVwYXJlSnVtcFRhYmxlRm9yU3RyaW5nU3dpdGNoKGp1bXBUYWJsZSwgc3dpdGNo
SW5mby5ieXRlY29kZU9mZnNldCwgY2xhdXNlQ291bnQsIGxhYmVscywgbm9kZXMpOwogICAgIH0K
IH0KQEAgLTI1OTQsOSArMjQ4NCw5IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZWFk
T25seUV4Y2VwdGlvbklmTmVlZGVkKCkKIHsKICAgICBpZiAoIWlzU3RyaWN0TW9kZSgpKQogICAg
ICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXJyb3IgPSBlbWl0TG9hZChu
ZXdUZW1wb3JhcnkoKSwgSlNWYWx1ZShjcmVhdGVUeXBlRXJyb3Ioc2NvcGUoKS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KSkpOwotICAgIGVtaXRUaHJvdyhlcnJvci5nZXQoKSk7CisgICAgZW1pdE9wY29kZShvcF90aHJv
d19zdGF0aWNfZXJyb3IpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudFZh
bHVlKGpzU3RyaW5nKGdsb2JhbERhdGEoKSwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKSktPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmYWxzZSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDFmY2NkZWJlZmVjZmEzNzY5
ZTNhOWQwYjM4NmExMTNiYjhjNjRlYzMuLjgyODcyNmRlZTMyMjYwNjA0NzlmNWJlMTQ3NTExMGYz
Zjc3MTNjMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJTeW1i
b2xUYWJsZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKKyNp
bmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KQEAgLTIxMSwxOCArMjEyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXREdW1wc0dlbmVyYXRlZENvZGUoYm9vbCBkdW1wc0dl
bmVyYXRlZENvZGUpOwogICAgICAgICBzdGF0aWMgYm9vbCBkdW1wc0dlbmVyYXRlZENvZGUoKTsK
IAotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIEpTU2NvcGUqLCBTaGFy
ZWRTeW1ib2xUYWJsZSosIFByb2dyYW1Db2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOwotICAg
ICAgICBCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiwgSlNTY29wZSosIFNoYXJl
ZFN5bWJvbFRhYmxlKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKLSAgICAgICAgQnl0
ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBKU1Njb3BlKiwgU2hhcmVkU3ltYm9sVGFibGUqLCBF
dmFsQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhJiwgUHJvZ3JhbU5vZGUqLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sq
LCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7CisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSYsIEZ1bmN0aW9uQm9keU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOworICAgICAgICBCeXRlY29kZUdlbmVy
YXRvcihKU0dsb2JhbERhdGEmLCBFdmFsTm9kZSosIFVubGlua2VkRXZhbENvZGVCbG9jayosIERl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKIAogICAgICAgICB+Qnl0ZWNvZGVHZW5lcmF0b3Io
KTsKICAgICAgICAgCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYg
cHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX2dsb2JhbERhdGEtPnByb3BlcnR5TmFt
ZXM7IH0KIAotICAgICAgICBib29sIGlzQ29uc3RydWN0b3IoKSB7IHJldHVybiBtX2NvZGVCbG9j
ay0+bV9pc0NvbnN0cnVjdG9yOyB9CisgICAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIHsgcmV0
dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCk7IH0KIAotICAgICAgICBKU09iamVjdCog
Z2VuZXJhdGUoKTsKKyAgICAgICAgUGFyc2VyRXJyb3IgZ2VuZXJhdGUoKTsKIAogICAgICAgICBi
b29sIGlzQXJndW1lbnROdW1iZXIoY29uc3QgSWRlbnRpZmllciYsIGludCk7CiAKQEAgLTMzMiwx
MCArMzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0RXhwcmVzc2lv
bkluZm8odW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9zaG91bGRFbWl0UmljaFNvdXJj
ZUluZm8pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBkaXZvdCAtPSBt
X2NvZGVCbG9jay0+c291cmNlT2Zmc2V0KCk7CisgICAgICAgICAgICBkaXZvdCAtPSBtX3Njb3Bl
Tm9kZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKICAgICAgICAgICAgIGlmIChkaXZvdCA+IEV4
cHJlc3Npb25SYW5nZUluZm86Ok1heERpdm90KSB7CiAgICAgICAgICAgICAgICAgLy8gT3ZlcmZs
b3cgaGFzIG9jY3VycmVkLCB3ZSBjYW4gb25seSBnaXZlIGxpbmUgbnVtYmVyIGluZm8gZm9yIGVy
cm9ycyBmb3IgdGhpcyByZWdpb24KICAgICAgICAgICAgICAgICBkaXZvdCA9IDA7CkBAIC01MDgs
OCArNTA2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2Zp
bGVIb29rcygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rczsgfQogICAgICAgICAK
ICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+
aXNTdHJpY3RNb2RlKCk7IH0KLSAgICAgICAgCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlKCkgY29u
c3QgeyByZXR1cm4gbV9zY29wZS5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJp
ZW5kIGNsYXNzIExhYmVsOwpAQCAtNTI3LDExICs1MjMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
ZW5kaWYKIAogICAgICAgICB2b2lkIGVtaXRPcGNvZGUoT3Bjb2RlSUQpOwotICAgICAgICBBcnJh
eVByb2ZpbGUqIG5ld0FycmF5UHJvZmlsZSgpOwotICAgICAgICBWYWx1ZVByb2ZpbGUqIGVtaXRQ
cm9maWxlZE9wY29kZShPcGNvZGVJRCk7CisgICAgICAgIFVubGlua2VkQXJyYXlQcm9maWxlIG5l
d0FycmF5UHJvZmlsZSgpOworICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBlbWl0UHJvZmls
ZWRPcGNvZGUoT3Bjb2RlSUQpOwogICAgICAgICB2b2lkIHJldHJpZXZlTGFzdEJpbmFyeU9wKGlu
dCYgZHN0SW5kZXgsIGludCYgc3JjMUluZGV4LCBpbnQmIHNyYzJJbmRleCk7CiAgICAgICAgIHZv
aWQgcmV0cmlldmVMYXN0VW5hcnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyY0luZGV4KTsKLSAg
ICAgICAgdm9pZCByZXRyaWV2ZUxhc3RVbmFyeU9wKFdyaXRlQmFycmllcjxVbmtub3duPiomIGRz
dFBvaW50ZXIsIGludCYgc3JjSW5kZXgpOwogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3
aW5kQmluYXJ5T3AoKTsKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJld2luZFVuYXJ5T3Ao
KTsKIApAQCAtNTc0LDEwICs1NjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBhZGRlZCB2YXIuCi0gICAgICAgIGVu
dW0gQ29uc3RhbnRNb2RlIHsgSXNDb25zdGFudCwgSXNWYXJpYWJsZSB9OwotICAgICAgICBlbnVt
IEZ1bmN0aW9uTW9kZSB7IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUsIE5vdEZ1bmN0aW9uT3JOb3RT
cGVjaWFsaXphYmxlIH07Ci0gICAgICAgIGludCBhZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmll
ciYsIENvbnN0YW50TW9kZSwgRnVuY3Rpb25Nb2RlKTsKLQogICAgICAgICB2b2lkIGFkZFBhcmFt
ZXRlcihjb25zdCBJZGVudGlmaWVyJiwgaW50IHBhcmFtZXRlckluZGV4KTsKICAgICAgICAgUmVn
aXN0ZXJJRCogcmVzb2x2ZUNhbGxlZShGdW5jdGlvbkJvZHlOb2RlKik7CiAgICAgICAgIHZvaWQg
YWRkQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqLCBSZWdpc3RlcklEKik7CkBAIC02MDQsMTcgKzU5
NSwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB1bnNpZ25lZCBhZGRDb25zdGFudEJ1
ZmZlcih1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICAKKyAgICAgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIG1ha2VGdW5jdGlvbihGdW5jdGlvbkJvZHlOb2RlKiBib2R5KQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0
ZShtX2dsb2JhbERhdGEsIG1fc2NvcGVOb2RlLT5zb3VyY2UoKSwgYm9keSk7CisgICAgICAgIH0K
KwogICAgICAgICBKU1N0cmluZyogYWRkU3RyaW5nQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYp
OwogCiAgICAgICAgIHZvaWQgYWRkTGluZUluZm8odW5zaWduZWQgbGluZU5vKQogICAgICAgICB7
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkTGluZUluZm8oaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpLCBsaW5lTm8pOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFkZExpbmVJbmZvKGluc3Ry
dWN0aW9ucygpLnNpemUoKSwgbGluZU5vIC0gbV9zY29wZU5vZGUtPmZpcnN0TGluZSgpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJbml0TGF6eVJlZ2lzdGVyKFJlZ2lz
dGVySUQqKTsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5z
dHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KKyAgICAgICAgVmVjdG9yPFVu
bGlua2VkSW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9u
czsgfQogCiAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIHsgcmV0dXJu
ICptX3N5bWJvbFRhYmxlOyB9CiAjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQpAQCAtNjUy
LDEzICs2NDgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY3JlYXRlQWN0aXZh
dGlvbklmTmVjZXNzYXJ5KCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3Rl
cklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqKTsKICAgICAgICAgCi0gICAgICAgIFZlY3RvcjxJbnN0
cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZEluc3RydWN0
aW9uPiBtX2luc3RydWN0aW9uczsKIAogICAgICAgICBib29sIG1fc2hvdWxkRW1pdERlYnVnSG9v
a3M7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzOwotICAgICAgICBib29s
IG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvOwogCi0gICAgICAgIFN0cm9uZzxKU1Njb3BlPiBt
X3Njb3BlOwogICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKIAogI2lm
IEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKQEAgLTY2Nyw3ICs2NjEsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNlbmRpZgogCiAgICAgICAgIFNjb3BlTm9kZSogbV9zY29wZU5vZGU7Ci0gICAgICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgICAgIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9j
az4gbV9jb2RlQmxvY2s7CiAKICAgICAgICAgLy8gU29tZSBvZiB0aGVzZSBvYmplY3RzIGtlZXAg
cG9pbnRlcnMgdG8gb25lIGFub3RoZXIuIFRoZXkgYXJlIGFycmFuZ2VkCiAgICAgICAgIC8vIHRv
IGVuc3VyZSBhIHNhbmUgZGVzdHJ1Y3Rpb24gb3JkZXIgdGhhdCBhdm9pZHMgcmVmZXJlbmNlcyB0
byBmcmVlZCBtZW1vcnkuCkBAIC02ODUsNyArNjc5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2xhc3RWYXI7CiAgICAgICAgIGludCBtX2ZpbmFsbHlE
ZXB0aDsKICAgICAgICAgaW50IG1fZHluYW1pY1Njb3BlRGVwdGg7Ci0gICAgICAgIGludCBtX2Jh
c2VTY29wZURlcHRoOwogICAgICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwogCiAgICAgICAgIFZl
Y3RvcjxDb250cm9sRmxvd0NvbnRleHQ+IG1fc2NvcGVDb250ZXh0U3RhY2s7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAppbmRleCAzNzMxYjA0NzMwMmRhMzkx
MmU1Nzg4YTYwYWRkMTJjYjY0YzhiNGU5Li5iMTQ3MjkxNDY4YTJiMDUwOTg0MjFiOGQyYjcwZWVm
MDk0NTY2ZmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5j
cHAKQEAgLTgwLDYgKzgwLDcgQEAgaW5saW5lIHZvaWQgUmVjb21waWxlcjo6b3BlcmF0b3IoKShK
U0NlbGwqIGNlbGwpCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmdW5jdGlvbi0+c2NvcGUoKS0+
Z2xvYmFsT2JqZWN0KCktPkpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAgICAgZXhlY3V0
YWJsZS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKKyAgICBleGVjdXRhYmxlLT5jbGVhclVu
bGlua2VkQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgaWYgKG1fZGVidWdnZXIgPT0gZnVuY3Rp
b24tPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQogICAgICAgICBtX3NvdXJj
ZVByb3ZpZGVycy5hZGQoZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlYyk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCmluZGV4IDZi
OTA1NmU1NGExOGM2YmZkMDAxMzAzYjhmNGU0ZWU2NWFkMDY0YzcuLmUxODM3YjA0MWQ3MjkwNjU5
YzE1MDk2ZTRmNWVhNTg2NThiNGZjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVDYWNoZS5oCkBAIC0xNTgsNyArMTU4LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgLy8gTm9wZSwgc28gdHJ5IHRvIHBhcnNlIG9uZS4KICAgICAgICAgICAgIEpTT2JqZWN0KiBl
eGNlcHRpb247CiAgICAgICAgICAgICB2YWx1ZS5vd25lZCA9IHRydWU7Ci0gICAgICAgICAgICB2
YWx1ZS5jb2RlQmxvY2sgPSBrZXkuZXhlY3V0YWJsZSgpLT5wcm9kdWNlQ29kZUJsb2NrRm9yKHNj
b3BlLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24sIGtleS5raW5kKCksIGV4Y2VwdGlvbikubGVha1B0
cigpOworICAgICAgICAgICAgdmFsdWUuY29kZUJsb2NrID0ga2V5LmV4ZWN1dGFibGUoKS0+cHJv
ZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwga2V5LmtpbmQoKSwgZXhjZXB0aW9uKS5sZWFrUHRyKCk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSBy
ZWFzb24gdG8gcmVqZWN0IHRoaXMgZnJvbSBvdXIgY2FjaGUuIElmIHNvLCB0aGVuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDlhNDEw
MzNlOWM4MGExYjA3ZGM5NTkyYzIwMWZlMDU0ZGQ4NTQxMTEuLjcwYWEyYjYzNzg2MzIwZGU5M2Zl
NjliOWUzYTQ0ODNjYWNiM2ZkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0yNjE0LDYgKzI2MTQsMTAgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIG9wX2luaXRfZ2xv
YmFsX2NvbnN0X25vcDogeworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9nbG9iYWxf
Y29uc3Rfbm9wKTsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29u
c3Q6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoCkBAIC0yODUxLDEwICsy
ODU1LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFRocm93LCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfdGhyb3cpOwogICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2Ugb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yOgorICAgICAgICBj
YXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKICAgICAgICAgICAgIGZsdXNoQXJndW1lbnRzQW5k
Q2FwdHVyZWRWYXJpYWJsZXMoKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3dSZWZlcmVu
Y2VFcnJvcik7Ci0gICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvd19yZWZlcmVuY2VfZXJy
b3IpOworICAgICAgICAgICAgTEFTVF9PUENPREUob3BfdGhyb3dfc3RhdGljX2Vycm9yKTsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NhbGw6CiAgICAgICAgICAgICBoYW5kbGVDYWxs
KGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENvZGVGb3JDYWxsKTsKQEAg
LTM1OTcsNyArMzYwMSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkK
ICAgICBkYXRhTG9nKCJQYXJzaW5nIGNvZGUgYmxvY2sgJXAuIGNvZGVUeXBlID0gJXMsIGNhcHR1
cmVDb3VudCA9ICV1LCBuZWVkc0Z1bGxTY29wZUNoYWluID0gJXMsIG5lZWRzQWN0aXZhdGlvbiA9
ICVzLCBpc1N0cmljdE1vZGUgPSAlc1xuIiwKICAgICAgICAgICAgIGNvZGVCbG9jaywKICAgICAg
ICAgICAgIGNvZGVUeXBlVG9TdHJpbmcoY29kZUJsb2NrLT5jb2RlVHlwZSgpKSwKLSAgICAgICAg
ICAgIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCksCisgICAgICAgICAg
ICBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkgPyBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNh
cHR1cmVDb3VudCgpIDogMCwKICAgICAgICAgICAgIGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVD
aGFpbigpPyJ0cnVlIjoiZmFsc2UiLAogICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk/InRydWUiOiJmYWxzZSIsCiAgICAgICAgICAgICBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKT8idHJ1ZSI6ImZhbHNl
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAppbmRleCA5
NTI2OWU4YTA4MmE2MTIzNzAzYjM1YmIwYTYyZGY4ZWJmZjVkZWIwLi4xZjk3NzhlZmVmMjNkMzM0
OTIyNDZkMGIyMjU0NmViMTg3MzRkOTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmgKQEAgLTE2Niw2ICsxNjYsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayosIEluc3Ry
dWN0aQogICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5l
OgogICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfaW5p
dF9nbG9iYWxfY29uc3Rfbm9wOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CiAgICAg
Y2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazoKICAgICBjYXNlIG9wX2ptcDoKQEAgLTE5
OSw3ICsyMDAsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVPcGNvZGUoT3Bj
b2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayosIEluc3RydWN0aQogICAgIGNhc2Ugb3Bfc3RyY2F0
OgogICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgogICAgIGNhc2Ugb3BfdGhyb3c6Ci0gICAgY2Fz
ZSBvcF90aHJvd19yZWZlcmVuY2VfZXJyb3I6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJy
b3I6CiAgICAgY2FzZSBvcF9jYWxsOgogICAgIGNhc2Ugb3BfY29uc3RydWN0OgogICAgIGNhc2Ug
b3BfbmV3X3JlZ2V4cDogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAppbmRleCAxM2UwNDM4OGNkNmE4NTZkNmVhMzdiYmM0ZjhlZjBmNjZlYmRlYWI0Li4wZTQ1
ZTIzMGMzOTljY2E4MWM2NGM2MmFlOWQ2M2FlMTgzZTZmMzYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTExNTcsOCArMTE1Nyw3IEBAIEpTQ2Vs
bCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7Ci0g
ICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoCi0gICAg
ICAgIGdsb2JhbERhdGEsIGV4ZWMsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpTQWN0aXZhdGlvbiog
YWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGdsb2JhbERhdGEsIGV4ZWMsIGV4ZWMt
PmNvZGVCbG9jaygpKTsKICAgICBleGVjLT5zZXRTY29wZShhY3RpdmF0aW9uKTsKICAgICByZXR1
cm4gYWN0aXZhdGlvbjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggY2Qz
MzkzYWEyMGMxNTY2NGIyYTQ0Y2ZjNjI5MzljNGUyYjJjYjRiYS4uYzQ1NWZjMmIxODliNmZmNjdh
ODljZDllNTY0MTdkMTM0NmNhN2Q4NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU09OT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiVHJhY2luZy5oIgorI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KQEAgLTQ4NCwxMyArNDg1LDEzIEBAIHZvaWQgSGVhcDo6
bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5kaWYK
LSAgICAKKwogICAgICAgICBpZiAobV9nbG9iYWxEYXRhLT5jb2RlQmxvY2tzQmVpbmdDb21waWxl
ZC5zaXplKCkpIHsKICAgICAgICAgICAgIEdDUEhBU0UoVmlzaXRBY3RpdmVDb2RlQmxvY2spOwog
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dsb2JhbERhdGEtPmNvZGVCbG9j
a3NCZWluZ0NvbXBpbGVkLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgICAgIG1fZ2xvYmFsRGF0
YS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWRbaV0tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwog
ICAgICAgICB9Ci0gICAgCisKICAgICAgICAgewogICAgICAgICAgICAgR0NQSEFTRShWaXNpdE1h
Y2hpbmVSb290cyk7CiAgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJDKysgU3Rh
Y2siKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKaW5k
ZXggMTNiZDhlNDkzZDBkN2IzZjM4ZTk4M2IzNTU5NDY3YzIzM2Q1Yjg1Yy4uODY3NDgxZmUzMzI5
NjEzZWM3YTI3ZGYzMzMwN2JlYWE1NTA4ODNkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKQEAgLTc0LDEwICs3NCwxOCBAQCBpbmxpbmUgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogaGVhcCwgTWFya2VkU3BhY2UqIG1hcmtlZFNwYWNl
LCBzaXplX3QgYwogaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90
IGJ5dGVzKQogewogICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3Qu
aGVhZDsKLSAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gYWxsb2NhdGVT
bG93Q2FzZShieXRlcyk7CisgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgeworICAgICAgICB2b2lk
KiByZXN1bHQgPSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
ICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KICAgICAKICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0Owor
I2lmbmRlZiBOREVCVUcKKyAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOworI2VuZGlmCiAg
ICAgcmV0dXJuIGhlYWQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAppbmRleCA3YTMwZGViZGE0ZmNkZjg4Y2Q1M2VhN2ZmNzYxY2E3ZjM4Y2I1YWMzLi4z
OTE5NzA1ZDAwZWExMjlhNmNhMmI4NGNjMDRmYzU2ZmFkY2U5M2FhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCkBAIC0yOTQsNiArMjk0LDggQEAgQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZChKU1ZhbHVlKiBzbG90KQog
ICAgIGlmICghY2VsbCkKICAgICAgICAgcmV0dXJuOwogCisgICAgdmFsaWRhdGUoY2VsbCk7CisK
ICAgICBpZiAobV9zaG91bGRIYXNoQ29uc3QgJiYgY2VsbC0+aXNTdHJpbmcoKSkgewogICAgICAg
ICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4oY2VsbCk7CiAgICAgICAgIGlm
IChzdHJpbmctPnNob3VsZFRyeUhhc2hDb25zdCgpICYmIHN0cmluZy0+dHJ5SGFzaENvbnN0TG9j
aygpKSB7CkBAIC0zNTUsNiArMzU3LDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OnZhbGlkYXRlKEpT
Q2VsbCogY2VsbCkKICAgICAgICAgICAgICAgICBjZWxsLT5zdHJ1Y3R1cmUoKS0+c3RydWN0dXJl
KCksIHBhcmVudENsYXNzTmFtZSwgY2VsbCwgY2VsbC0+c3RydWN0dXJlKCksIG91ckNsYXNzTmFt
ZSk7CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHdlIGNhbiB3
YWxrIHRoZSBDbGFzc0luZm8gY2hhaW4KKyAgICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBjZWxs
LT5jbGFzc0luZm8oKTsKKyAgICBkbyB7IH0gd2hpbGUgKChpbmZvID0gaW5mby0+cGFyZW50Q2xh
c3MpKTsKIH0KICNlbHNlCiB2b2lkIFNsb3RWaXNpdG9yOjp2YWxpZGF0ZShKU0NlbGwqKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5k
ZXggM2U2NDcxYjBmZjdmNTA5NzMyZDllYTg3NThiMDNjOGVlMjdkMzZlMi4uMzk3YWM4NDc0ODQx
Y2NlYjA0MTI4Y2IwYTk4ZDY4ZjhhYjhlNWIyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC05NDgsMTAgKzk0OCwxMyBAQCBm
YWlsZWRKU09OUDoKICAgICAvLyBvYmplY3QuCiAKICAgICAvLyBDb21waWxlIHNvdXJjZSB0byBi
eXRlY29kZSBpZiBuZWNlc3Nhcnk6Ci0gICAgSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+Y29t
cGlsZShjYWxsRnJhbWUsIHNjb3BlKTsKLSAgICBpZiAoZXJyb3IpCisgICAgaWYgKEpTT2JqZWN0
KiBlcnJvciA9IHByb2dyYW0tPmluaXRhbGl6ZUdsb2JhbFByb3BlcnRpZXMoZ2xvYmFsRGF0YSwg
Y2FsbEZyYW1lLCBzY29wZSkpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93RXJy
b3IoY2FsbEZyYW1lLCBlcnJvcikpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJnByb2dy
YW0tPmdlbmVyYXRlZEJ5dGVjb2RlKCk7CisKKyAgICBpZiAoSlNPYmplY3QqIGVycm9yID0gcHJv
Z3JhbS0+Y29tcGlsZShjYWxsRnJhbWUsIHNjb3BlKSkKKyAgICAgICAgcmV0dXJuIGNoZWNrZWRS
ZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGVycm9yKSk7CisKKyAgICBQcm9ncmFtQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSAmcHJvZ3JhbS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsKIAogICAgIC8v
IFB1c2ggdGhlIGNhbGwgZnJhbWUgZm9yIHRoaXMgaW52b2NhdGlvbjoKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZvciAndGhpcycu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggOWY5MTAxNGM4ZjI5NzQyMmQ3ZjAwODU0
ZjRiMzUzYzIzNjRkYWE4ZC4uMzEwMmM3NjkzMDExZTFmMzk0NjI0YTg2ZjNlNmRlZWE2NzMwY2Q4
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMzM1LDYgKzMzNSw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX3B1dF9i
eV9pbmRleCkKICAgICAgICAgREVGSU5FX09QKG9wX3B1dF9ieV92YWwpCiAgICAgICAgIERFRklO
RV9PUChvcF9wdXRfZ2V0dGVyX3NldHRlcikKKyAgICAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9j
b25zdF9ub3A6CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbml0X2dsb2JhbF9jb25zdF9u
b3ApOwogICAgICAgICBERUZJTkVfT1Aob3BfaW5pdF9nbG9iYWxfY29uc3QpCiAgICAgICAgIERF
RklORV9PUChvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjaykKIApAQCAtMzcxLDcgKzM3Myw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9w
X3RlYXJfb2ZmX2FjdGl2YXRpb24pCiAgICAgICAgIERFRklORV9PUChvcF90ZWFyX29mZl9hcmd1
bWVudHMpCiAgICAgICAgIERFRklORV9PUChvcF90aHJvdykKLSAgICAgICAgREVGSU5FX09QKG9w
X3Rocm93X3JlZmVyZW5jZV9lcnJvcikKKyAgICAgICAgREVGSU5FX09QKG9wX3Rocm93X3N0YXRp
Y19lcnJvcikKICAgICAgICAgREVGSU5FX09QKG9wX3RvX2pzbnVtYmVyKQogICAgICAgICBERUZJ
TkVfT1Aob3BfdG9fcHJpbWl0aXZlKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCBkMjU5
NWM3MjNmMDcxYmEzNjE4ZTY4OGZhZTcyYWMxMzY2YzY0OTYxLi5kY2Y4N2QzNTI2YTY4NjYxZjU3
MjRjMzc4N2U1MDUyNTJjMjJjMDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTczMSw3
ICs3MzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3RlYXJfb2Zm
X2FjdGl2YXRpb24oSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RlYXJfb2Zm
X2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdGhyb3coSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX3Rocm93X3JlZmVyZW5jZV9lcnJvcihJ
bnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfdGhyb3dfc3RhdGljX2Vycm9yKElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19qc251bWJlcihJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJpbWl0aXZlKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF91bmV4cGVjdGVkX2xvYWQoSW5zdHJ1Y3Rpb24qKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCmluZGV4IDMxOGI0ZTdhYWViOGFiOTUzMjZhYzI2
ZjJjMmU2NDEwMGZmMmIyOGYuLjY0NWM2NWIyODFlOGM2MjM1N2ZhZjkwZWEzMGUyN2Y0NmY2OTZj
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaApAQCAtNzUsNyArNzUsNyBA
QCBpbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4ZWMsIE93
blB0cjxDb2RlQmxvY2tUeXBlPiYgY29kZQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUg
Ym9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywgT3du
UHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgV3JpdGVCYXJyaWVyPFNo
YXJlZFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFibGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQoraW5s
aW5lIGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkpJ
VFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKICAgICAKQEAgLTk5LDcgKzk5LDYgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUZ1
bmN0aW9uSWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxGdW5jdGlvbkNvZGUK
ICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSB7CiAg
ICAgICAgICAgICBjb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29kZUJs
b2NrPihjb2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgIHN5bWJv
bFRhYmxlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSk7CiAgICAgICAgICAgICBqaXRDb2RlID0gb2xk
SklUQ29kZTsKICAgICAgICAgICAgIGppdENvZGVXaXRoQXJpdHlDaGVjayA9IG9sZEpJVENvZGVX
aXRoQXJpdHlDaGVjazsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDA3YzhhY2UyYTM1Mzk1ZWRhZjhhNTc2NTNl
ZTFkMWUxMDFjYmVhMDAuLjI0OWRjYmFjOTE1OWIxOGUyZTI3ZjBlZjBhNmExMjRiNTg3ZTM1MjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTA2OSwxMyAr
MTA2OSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAganVtcChyZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
X29wX3Rocm93X3JlZmVyZW5jZV9lcnJvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3dfc3RhdGljX2Vycm9yKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29w
X3Rocm93X3JlZmVyZW5jZV9lcnJvcik7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX3Rocm93X3N0YXRpY19lcnJvcik7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkuaXNOdW1iZXIoKSkKICAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKSk7
CiAgICAgZWxzZQogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW02NChKU1ZhbHVlOjpl
bmNvZGUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKSkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgc3R1YkNhbGwuY2FsbCgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggNDQx
MjNiZTE5ODE3OWUxYjc2Yjc1MTI4MjRkM2E4YzkzZjBlZTk0Ny4uOWM1ZDI2MGFiNmVjOGRkOTk5
YTk5OThlNDM5M2IyMDJmNjA2YzhhZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTQwMSwxMiArMTQwMSwxMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
anVtcChyZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Rocm93X3JlZmVyZW5jZV9lcnJv
cihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdGhy
b3dfc3RhdGljX2Vycm9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
dW5zaWduZWQgbWVzc2FnZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAKLSAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9y
KTsKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGhyb3dfc3RhdGljX2Vy
cm9yKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
bWVzc2FnZSkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgc3R1YkNhbGwuY2FsbCgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCmluZGV4IDUxNTM5NWI0OWRhNGQ1YTg3
YzQ5ODlhYTBkZmVjNTQ5MjFmYTJkMGQuLjVkZGI5OGRlZTUwMDYxYTExZWZmODk4NWIzZDE4MTdl
YmM1YmFkOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCkBAIC0yMTQ0
LDcgKzIxNDQsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfYWN0
aXZhdGlvbikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAg
ICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZShzdGFja0Zy
YW1lLmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5vd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9
IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCkp
OwogICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZShhY3RpdmF0aW9uKTsKICAgICBy
ZXR1cm4gYWN0aXZhdGlvbjsKIH0KQEAgLTMzMzYsMTMgKzMzMzYsMTYgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfcHV0X2dldHRlcl9zZXR0ZXIpCiAgICAgYmFzZU9iai0+cHV0RGly
ZWN0QWNjZXNzb3IoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBh
Y2Nlc3NvciwgQWNjZXNzb3IpOwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90
aHJvd19yZWZlcmVuY2VfZXJyb3IpCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90aHJv
d19zdGF0aWNfZXJyb3IpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUp
OwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAg
ICBTdHJpbmcgbWVzc2FnZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkudG9TdHJpbmco
Y2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKTsKLSAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEt
PmV4Y2VwdGlvbiA9IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGNhbGxGcmFtZSwgbWVzc2FnZSk7Cisg
ICAgaWYgKHN0YWNrRnJhbWUuYXJnc1sxXS5hc0ludDMyKQorICAgICAgICBzdGFja0ZyYW1lLmds
b2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGNhbGxGcmFtZSwgbWVz
c2FnZSk7CisgICAgZWxzZQorICAgICAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlv
biA9IGNyZWF0ZVR5cGVFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpOwogICAgIFZNX1RIUk9XX0VY
Q0VQVElPTl9BVF9FTkQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCmlu
ZGV4IDNkMGVhODNkZjNiMDM2MmNjNzkzYzViMTc2ZjBlMWMxNDU5YmIxMTMuLjU3NjEyMzZiMTRi
M2ZmYTk4OTg5NzI5OTdiMTc5MDVjOGFjMDQxZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmgKQEAgLTQ1Miw3ICs0NTIsNyBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkIEpJVF9T
VFVCIGN0aV9vcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0
aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NU
VUIgY3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKLSAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJvd19yZWZlcmVuY2VfZXJyb3Io
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CisgICAgdm9pZCBKSVRfU1RVQiBj
dGlfb3BfdGhyb3dfc3RhdGljX2Vycm9yKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVS
TkFMOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wdGltaXpl
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4IDhlMmRhY2Y0ZDRhMzMwMWJhNzU4
OGU4YTU4YTkxMDc4YzRmOTY3YTMuLmVlYzM3NmIzNzlhZTg2M2RlNjUxNmNjODdkYjM2ZGFiYzRm
MzkxZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCkBAIC0x
MDMsNyArMTAzLDcgQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCiAgICAgQVNTRVJUKFZhbHVlTnVsbCA9PSBUYWdCaXRUeXBlT3RoZXIpOwog
I2VuZGlmCiAgICAgQVNTRVJUKFN0cmluZ1R5cGUgPT0gNSk7Ci0gICAgQVNTRVJUKE9iamVjdFR5
cGUgPT0gMTMpOworICAgIEFTU0VSVChPYmplY3RUeXBlID09IDE3KTsKICAgICBBU1NFUlQoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9PSAxKTsKICAgICBBU1NFUlQoSW1wbGVtZW50c0hhc0luc3Rh
bmNlID09IDIpOwogICAgIEFTU0VSVChJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlID09IDgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5k
ZXggYTQxNTdkM2Q3Y2MzZTc1Y2IzNGYxMjdhZjgyY2E4YzY2ZWE2ZDMwYy4uYmE0NGJmNDA0MTQ4
ZDE5ZGRmN2U0ZGZlODQ4YzA0MDJkYWU1OGE2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC00NjAsNyArNDYwLDcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9hY3RpdmF0aW9uKQogI2lmIExMSU5UX1NMT1df
UEFUSF9UUkFDSU5HCiAgICAgZGF0YUxvZygiQ3JlYXRpbmcgYW4gYWN0aXZhdGlvbiwgZXhlYyA9
ICVwIVxuIiwgZXhlYyk7CiAjZW5kaWYKLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBK
U0FjdGl2YXRpb246OmNyZWF0ZShnbG9iYWxEYXRhLCBleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCkpKTsKKyAg
ICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZShnbG9iYWxE
YXRhLCBleGVjLCBleGVjLT5jb2RlQmxvY2soKSk7CiAgICAgZXhlYy0+c2V0U2NvcGUoYWN0aXZh
dGlvbik7CiAgICAgTExJTlRfUkVUVVJOKEpTVmFsdWUoYWN0aXZhdGlvbikpOwogfQpAQCAtMTYy
MiwxMCArMTYyMiwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGhyb3cpCiAg
ICAgTExJTlRfVEhST1coTExJTlRfT1BfQygxKS5qc1ZhbHVlKCkpOwogfQogCi1MTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKQorTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3Rocm93X3N0YXRpY19lcnJvcikKIHsKICAgICBMTElOVF9CRUdJ
TigpOwotICAgIExMSU5UX1RIUk9XKGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsIExMSU5UX09Q
X0MoMSkuanNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOworICAgIGlmIChw
Y1syXS51Lm9wZXJhbmQpCisgICAgICAgIExMSU5UX1RIUk9XKGNyZWF0ZVJlZmVyZW5jZUVycm9y
KGV4ZWMsIExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSkpOworICAgIGVsc2UKKyAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVHlwZUVycm9yKGV4ZWMs
IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwog
fQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVidWcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCmluZGV4IGY3ODQ3Njg0MTAwYzY1Yzc5
ZTNmMmQ3OThkYTg5ODlhNjZiNjdmMDIuLjk5ZmJhY2NmYTI4MjMxYmQwYzk1ZTIxNmQ4N2JiNzQ0
YjZlMTRhODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5oCkBAIC0yMDQsNyArMjA0LDcgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9wdXNoX3dpdGhfc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9wb3Bfc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9w
dXNoX25hbWVfc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90
aHJvdyk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Rocm93X3JlZmVy
ZW5jZV9lcnJvcik7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Rocm93
X3N0YXRpY19lcnJvcik7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2Rl
YnVnKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHJvZmlsZV93aWxs
X2NhbGwpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX2Rp
ZF9jYWxsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQppbmRleCBmNDAzYjBiNmNiM2JkM2ZhMDBhNWMzYjVmZWU4MGY2YTY4MDJh
MzBkLi5iYTViNjdkZjRjODc5YTM5N2M0N2Q0MzgwOWI0OWU1ZTA1ZDljNzA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBA
IC05Niw3ICs5Niw3IEBAIGNvbnN0IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDMwCiAKICMg
VHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQotY29uc3QgT2JqZWN0VHlwZSA9
IDEzCitjb25zdCBPYmplY3RUeXBlID0gMTcKIAogIyBUeXBlIGZsYWdzIGNvbnN0YW50cy4KIGNv
bnN0IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAxCkBAIC0xMjM0LDEwICsxMjM0LDEwIEBAIF9s
bGludF9vcF90aHJvdzoKICAgICBkaXNwYXRjaCgyKQogCiAKLV9sbGludF9vcF90aHJvd19yZWZl
cmVuY2VfZXJyb3I6CitfbGxpbnRfb3BfdGhyb3dfc3RhdGljX2Vycm9yOgogICAgIHRyYWNlRXhl
Y3V0aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF90aHJvd19yZWZlcmVu
Y2VfZXJyb3IpCi0gICAgZGlzcGF0Y2goMikKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3df
cGF0aF90aHJvd19zdGF0aWNfZXJyb3IpCisgICAgZGlzcGF0Y2goMykKIAogCiBfbGxpbnRfb3Bf
cHJvZmlsZV93aWxsX2NhbGw6CkBAIC0xMzI2LDYgKzEzMjYsOCBAQCBfbGxpbnRfb3BfcHV0X2J5
X2lkX3JlcGxhY2U6CiBfbGxpbnRfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb246CiAgICAgbm90U3Vw
cG9ydGVkKCkKIAorX2xsaW50X29wX2luaXRfZ2xvYmFsX2NvbnN0X25vcDoKKyAgICBkaXNwYXRj
aCg1KQogCiAjIEluZGljYXRlIHRoZSBlbmQgb2YgTExJbnQuCiBfbGxpbnRfZW5kOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQppbmRleCA4OTFiNjNkNjRiOWEyZDU0ZmYxNmE1YmM3YzlkOGFjMjU4ZDE2ZWU4Li5m
ZmIxNDYyNDdmYjU3MGEzOGJhZjQ2MTViYThjYWMzYjViZWY0NzNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQpAQCAtOTg0LDcgKzk4NCw3IEBAIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICB3
cml0ZUJhcnJpZXIodDIsIHQzKQogICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W3QwXQogICAgIHN0
b3JlaSB0MywgUGF5bG9hZE9mZnNldFt0MF0KLSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3BhdGNo
KDUpCiAKIAogX2xsaW50X29wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRl
eCA1YmIwZDcwYWU2ZTYwMGRhOTFjOGY2MGVlNTc4M2ZjNGY2M2ZhMzA4Li5jOTkwMGIzNDM3ZTUy
NjA0NWExNjUxYmEwMjE2NTQzYWIyM2M2ODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtODMwLDcgKzgzMCw3
IEBAIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHQxLCB0MikKICAgICB3cml0ZUJhcnJpZXIodDIpCiAgICAgc3RvcmVxIHQyLCBbdDBdCi0g
ICAgZGlzcGF0Y2goMykKKyAgICBkaXNwYXRjaCg1KQogCiAKIF9sbGludF9vcF9pbml0X2dsb2Jh
bF9jb25zdF9jaGVjazoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDNi
MDMxNmY4MTY1YTA4NTZhMzI5NzU5NWNlNTIxMjVkYzBmYTYzMmYuLjYxNWQwOWViNzVkODNhNzli
MWJhYTA5NWRiOGEyOTgyYmVjNjU0ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaApAQCAtNzYsNiArNzYsNDkgQEAgQ09NUElMRV9BU1NFUlQoTGFzdFVudGFnZ2VkVG9rZW4g
PCA2NCwgTGVzc1RoYW42NFVudGFnZ2VkVG9rZW5zKTsKIGVudW0gU291cmNlRWxlbWVudHNNb2Rl
IHsgQ2hlY2tGb3JTdHJpY3RNb2RlLCBEb250Q2hlY2tGb3JTdHJpY3RNb2RlIH07CiBlbnVtIEZ1
bmN0aW9uUmVxdWlyZW1lbnRzIHsgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25OZWVk
c05hbWUgfTsKIAorc3RydWN0IFBhcnNlckVycm9yIHsKKyAgICBlbnVtIEVycm9yVHlwZSB7IEVy
cm9yTm9uZSwgU3RhY2tPdmVyZmxvdywgU3ludGF4RXJyb3IsIEV2YWxFcnJvciwgT3V0T2ZNZW1v
cnkgfSBtX3R5cGU7CisgICAgU3RyaW5nIG1fbWVzc2FnZTsKKyAgICBpbnQgbV9saW5lOworICAg
IFBhcnNlckVycm9yKCkKKyAgICAgICAgOiBtX3R5cGUoRXJyb3JOb25lKQorICAgICAgICAsIG1f
bGluZSgtMSkKKyAgICB7CisgICAgfQorCisgICAgUGFyc2VyRXJyb3IoRXJyb3JUeXBlIHR5cGUp
CisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9saW5lKC0xKQorICAgIHsKKyAg
ICB9CisKKyAgICBQYXJzZXJFcnJvcihFcnJvclR5cGUgdHlwZSwgU3RyaW5nIG1zZywgaW50IGxp
bmUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9tZXNzYWdlKG1zZykKKyAg
ICAgICAgLCBtX2xpbmUobGluZSkKKyAgICB7CisgICAgfQorCisgICAgSlNPYmplY3QqIHRvRXJy
b3JPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBF
cnJvck5vbmU6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBTeW50YXhFcnJv
cjoKKyAgICAgICAgICAgIHJldHVybiBhZGRFcnJvckluZm8oZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgbV9tZXNzYWdlKSwgbV9saW5l
LCBzb3VyY2UpOworICAgICAgICBjYXNlIEV2YWxFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBj
cmVhdGVTeW50YXhFcnJvcihnbG9iYWxPYmplY3QsIG1fbWVzc2FnZSk7CisgICAgICAgIGNhc2Ug
U3RhY2tPdmVyZmxvdzoKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVTdGFja092ZXJmbG93RXJy
b3IoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgY2FzZSBPdXRPZk1lbW9yeToKKyAgICAgICAgICAg
IHJldHVybiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCk7CisgICAgICAgIH0K
KyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Io
Z2xvYmFsT2JqZWN0KTsgLy8gQXBwZWFzZSBRdCBib3QKKyAgICB9CisKK307CisKIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBpc0V2YWxOb2RlKCkgeyByZXR1cm4gZmFsc2U7IH0K
IHRlbXBsYXRlIDw+IGlubGluZSBib29sIGlzRXZhbE5vZGU8RXZhbE5vZGU+KCkgeyByZXR1cm4g
dHJ1ZTsgfQogCkBAIC0zNzAsNyArNDEzLDcgQEAgcHVibGljOgogICAgIH5QYXJzZXIoKTsKIAog
ICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgotICAgIFBhc3NSZWZQdHI8UGFyc2VkTm9k
ZT4gcGFyc2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIERlYnVnZ2VyKiwg
RXhlY1N0YXRlKiwgSlNPYmplY3QqKik7CisgICAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJz
ZShQYXJzZXJFcnJvciYpOwogCiBwcml2YXRlOgogICAgIHN0cnVjdCBBbGxvd0luT3ZlcnJpZGUg
ewpAQCAtODkwLDcgKzkzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX2xhc3RUb2tl
bkVuZDsKICAgICB9CiAKLSAgICBtdXRhYmxlIGNvbnN0IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxE
YXRhOworICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIGNvbnN0IFNvdXJjZUNv
ZGUqIG1fc291cmNlOwogICAgIFBhcnNlckFyZW5hKiBtX2FyZW5hOwogICAgIE93blB0cjxMZXhl
clR5cGU+IG1fbGV4ZXI7CkBAIC05MzUsMTIgKzk3OCwxMSBAQCBwcml2YXRlOgogICAgIH07CiB9
OwogCisKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgUGFy
c2VkTm9kZT4KLVBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciogZGVidWdnZXIs
IEV4ZWNTdGF0ZSogZGVidWdnZXJFeGVjU3RhdGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQorUGFz
c1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UoUGFyc2VyRXJyb3Im
IGVycm9yKQogewotICAgIEFTU0VSVChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBBU1NFUlQo
ZXhjZXB0aW9uICYmICEqZXhjZXB0aW9uKTsKICAgICBpbnQgZXJyTGluZTsKICAgICBTdHJpbmcg
ZXJyTXNnOwogCkBAIC05NzEsNyArMTAxMyw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFy
c2VyPExleGVyVHlwZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqCiAg
ICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbjsKICAgICAgICAgbG9jYXRpb24ubGluZSA9
IG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCk7CiAgICAgICAgIGxvY2F0aW9uLmNvbHVtbiA9IG1f
bGV4ZXItPmN1cnJlbnRDb2x1bW5OdW1iZXIoKTsKLSAgICAgICAgcmVzdWx0ID0gUGFyc2VkTm9k
ZTo6Y3JlYXRlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksCisgICAgICAgIHJl
c3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0ZShtX2dsb2JhbERhdGEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc291cmNlRWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucyA/ICZtX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YSA6IDAs
CkBAIC05ODEsNyArMTAyMyw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9udW1Db25zdGFudHMpOwogICAgICAgICByZXN1bHQtPnNldExv
YyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCksIG1fbGFzdExpbmUsIG1fbGV4ZXItPmN1cnJlbnRDb2x1
bW5OdW1iZXIoKSk7Ci0gICAgfSBlbHNlIGlmIChsZXhpY2FsR2xvYmFsT2JqZWN0KSB7CisgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gV2UgY2FuIG5ldmVyIHNlZSBhIHN5bnRheCBlcnJvciB3aGVu
IHJlcGFyc2luZyBhIGZ1bmN0aW9uLCBzaW5jZSB3ZSBzaG91bGQgaGF2ZQogICAgICAgICAvLyBy
ZXBvcnRlZCB0aGUgZXJyb3Igd2hlbiBwYXJzaW5nIHRoZSBjb250YWluaW5nIHByb2dyYW0gb3Ig
ZXZhbCBjb2RlLiBTbyBpZiB3ZSdyZQogICAgICAgICAvLyBwYXJzaW5nIGEgZnVuY3Rpb24gYm9k
eSBub2RlLCB3ZSBhc3N1bWUgdGhhdCB3aGF0IGFjdHVhbGx5IGhhcHBlbmVkIGhlcmUgaXMgdGhh
dApAQCAtOTg5LDM1ICsxMDMxLDMxIEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqCiAgICAgICAg
IC8vIGNvZGUgd2UgYXNzdW1lIHRoYXQgaXQgd2FzIGEgc3ludGF4IGVycm9yIHNpbmNlIHJ1bm5p
bmcgb3V0IG9mIHN0YWNrIGlzIG11Y2ggbGVzcwogICAgICAgICAvLyBsaWtlbHksIGFuZCB3ZSBh
cmUgY3VycmVudGx5IHVuYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSB0d28gY2FzZXMu
CiAgICAgICAgIGlmIChpc0Z1bmN0aW9uQm9keU5vZGUoc3RhdGljX2Nhc3Q8UGFyc2VkTm9kZSo+
KDApKSB8fCBtX2hhc1N0YWNrT3ZlcmZsb3cpCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlU3RhY2tPdmVyZmxvd0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICAgICAg
ZXJyb3IgPSBQYXJzZXJFcnJvcjo6U3RhY2tPdmVyZmxvdzsKICAgICAgICAgZWxzZSBpZiAoaXNF
dmFsTm9kZTxQYXJzZWROb2RlPigpKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN5
bnRheEVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIGVyck1zZyk7CisgICAgICAgICAgICBlcnJv
ciA9IFBhcnNlckVycm9yKFBhcnNlckVycm9yOjpFdmFsRXJyb3IsIGVyck1zZywgZXJyTGluZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBhZGRFcnJvckluZm8obGV4
aWNhbEdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBjcmVhdGVTeW50YXhFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBlcnJNc2cpLCBlcnJMaW5lLCAqbV9zb3VyY2UpOworICAgICAgICAgICAg
ZXJyb3IgPSBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3IsIGVyck1zZywgZXJy
TGluZSk7CiAgICAgfQogCi0gICAgaWYgKGRlYnVnZ2VyICYmICFQYXJzZWROb2RlOjpzY29wZUlz
RnVuY3Rpb24pCi0gICAgICAgIGRlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoZGVidWdnZXJFeGVjU3Rh
dGUsIG1fc291cmNlLT5wcm92aWRlcigpLCBlcnJMaW5lLCBlcnJNc2cpOwotCiAgICAgbV9hcmVu
YS0+cmVzZXQoKTsKIAogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCiB0ZW1wbGF0
ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KLVBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2UoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMs
IGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBK
U1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgRGVidWdnZXIqIGRlYnVnZ2VyLCBFeGVjU3RhdGUqIGV4
ZWNTdGF0ZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCitQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBh
cnNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBG
dW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpT
UGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgUGFy
c2VyRXJyb3ImIGVycm9yKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJQ
YXJzaW5nIik7CiAKICAgICBBU1NFUlQoIXNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2UoKS5pc051
bGwoKSk7Ci0KICAgICBpZiAoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlzOEJpdCgpKSB7
CiAgICAgICAgIFBhcnNlcjwgTGV4ZXI8TENoYXI+ID4gcGFyc2VyKGdsb2JhbERhdGEsIHNvdXJj
ZSwgcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7Ci0gICAgICAgIHJl
dHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgZGVidWdn
ZXIsIGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQ
YXJzZWROb2RlPihlcnJvcik7CiAgICAgfQogICAgIFBhcnNlcjwgTGV4ZXI8VUNoYXI+ID4gcGFy
c2VyKGdsb2JhbERhdGEsIHNvdXJjZSwgcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0bmVzcywgcGFy
c2VyTW9kZSk7Ci0gICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBkZWJ1Z2dlciwgZXhlY1N0YXRlLCBleGNlcHRpb24pOworICAgIHJldHVybiBw
YXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IpOwogfQogCi19IC8vIG5hbWVzcGFjZSAKK30g
Ly8gbmFtZXNwYWNlCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyTW9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
TW9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40MWZiN2ZkZjkwZGE1ZDVkYzUwYjk1Y2QzZjJjNjRkNDE2MmMy
MGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXJNb2Rlcy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgUGFyc2Vy
TW9kZXNfaAorI2RlZmluZSBQYXJzZXJNb2Rlc19oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVt
IEpTUGFyc2VyU3RyaWN0bmVzcyB7IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VTdHJpY3QgfTsKK2Vu
dW0gSlNQYXJzZXJNb2RlIHsgSlNQYXJzZVByb2dyYW1Db2RlLCBKU1BhcnNlRnVuY3Rpb25Db2Rl
IH07CisKK2VudW0gUHJvZmlsZXJNb2RlIHsgUHJvZmlsZXJPZmYsIFByb2ZpbGVyT24gfTsKK2Vu
dW0gRGVidWdnZXJNb2RlIHsgRGVidWdnZXJPZmYsIERlYnVnZ2VyT24gfTsKKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5z
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCmluZGV4IDZl
NmNlYzExNGQ0NDVlMzc4NjVmZWM4YzM5MWRmNWI1MWRlYzUxN2EuLjE0MTkxYjk1ZDdkM2I1YmNj
MDQxYjExOTc1ZWI1NTE1NmNkZGM3ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXJUb2tlbnMuaApAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBQYXJzZXJUb2tlbnNf
aAogI2RlZmluZSBQYXJzZXJUb2tlbnNfaAogCisjaW5jbHVkZSAiUGFyc2VyTW9kZXMuaCIKKwog
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIElkZW50aWZpZXI7CkBAIC0xNjEsOSArMTYzLDYgQEAg
c3RydWN0IEpTVG9rZW4gewogICAgIEpTVG9rZW5Mb2NhdGlvbiBtX2xvY2F0aW9uOwogfTsKIAot
ZW51bSBKU1BhcnNlclN0cmljdG5lc3MgeyBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlU3RyaWN0IH07
Ci1lbnVtIEpTUGFyc2VyTW9kZSB7IEpTUGFyc2VQcm9ncmFtQ29kZSwgSlNQYXJzZUZ1bmN0aW9u
Q29kZSB9OwotICAgIAogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmgKaW5kZXggN2M4YjY5YmQxMjQ1MWFjMWI2Njc2MGZmZGM2YjcxZmRiZmU1NWMyZi4uNzk2
MWQ0YmM4MzJkYjEzZDNlYmY4ZjhjZDJiZTBhMzZhMzk5YzY1NSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKQEAgLTI2Nyw4ICsyNjcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgbV9vdmVycm9kZUNhbGxlZSA9IGZhbHNlOwogICAgICAgICBtX292ZXJy
b2RlQ2FsbGVyID0gZmFsc2U7CiAgICAgICAgIG1faXNTdHJpY3RNb2RlID0ganNDYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmlzU3Ry
aWN0TW9kZSgpOwotCi0gICAgICAgIEFTU0VSVCghanNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPnN5bWJvbFRhYmxlKCktPnNsb3dB
cmd1bWVudHMoKSk7CisgICAgICAgIEFTU0VSVCghanNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPnN5bWJvbFRhYmxlKGlubGluZUNh
bGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0KS0+c2xvd0Fy
Z3VtZW50cygpKTsKIAogICAgICAgICAvLyBUaGUgYnl0ZWNvZGUgZ2VuZXJhdG9yIG9taXRzIG9w
X3RlYXJfb2ZmX2FjdGl2YXRpb24gaW4gY2FzZXMgb2Ygbm8KICAgICAgICAgLy8gZGVjbGFyZWQg
cGFyYW1ldGVycywgc28gd2UgbmVlZCB0byB0ZWFyIG9mZiBpbW1lZGlhdGVseS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkZTc2MGU0
OWRjMDhlY2E4ZmNkZTFiNDRmYTA3NjE1OGI5YzM3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCkBAIC0wLDAgKzEsMTg2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCisKKyNpbmNsdWRlICJCeXRlY29k
ZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKKyNpbmNs
dWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiVW5s
aW5rZWRDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0NvZGVDYWNoZTo6Q29kZUNh
Y2hlKCkKKyAgICA6IG1fcmFuZG9tR2VuZXJhdG9yKHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5k
b21OdW1iZXIoKSAqIFVJTlQzMl9NQVgpKQoreworfQorCitDb2RlQ2FjaGU6On5Db2RlQ2FjaGUo
KQoreworfQorCitDb2RlQ2FjaGU6OkNvZGVCbG9ja0tleSBDb2RlQ2FjaGU6Om1ha2VDb2RlQmxv
Y2tLZXkoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlQ2FjaGU6OkNvZGVUeXBlIHR5cGUs
IEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzKQoreworICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihzb3VyY2UudG9TdHJpbmcoKSwgKHR5cGUgPDwgMSkgfCBzdHJpY3RuZXNzKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBDYWNoZVR5cGVzIHsgfTsKKwordGVtcGxhdGUg
PD4gc3RydWN0IENhY2hlVHlwZXM8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAgdHlw
ZWRlZiBKU0M6OlByb2dyYW1Ob2RlIFJvb3ROb2RlOworICAgIHN0YXRpYyBjb25zdCBDb2RlQ2Fj
aGU6OkNvZGVUeXBlIGNvZGVUeXBlID0gQ29kZUNhY2hlOjpQcm9ncmFtVHlwZTsKK307CisKK3Rl
bXBsYXRlIDw+IHN0cnVjdCBDYWNoZVR5cGVzPFVubGlua2VkRXZhbENvZGVCbG9jaz4geworICAg
IHR5cGVkZWYgSlNDOjpFdmFsTm9kZSBSb290Tm9kZTsKKyAgICBzdGF0aWMgY29uc3QgQ29kZUNh
Y2hlOjpDb2RlVHlwZSBjb2RlVHlwZSA9IENvZGVDYWNoZTo6RXZhbFR5cGU7Cit9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4K
K1VubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2RlQmxvY2soSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2Rl
IGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVy
cm9yKQoreworICAgIENvZGVCbG9ja0tleSBrZXkgPSBtYWtlQ29kZUJsb2NrS2V5KHNvdXJjZSwg
Q2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojpjb2RlVHlwZSwgc3RyaWN0bmVzcyk7
CisgICAgYm9vbCBzdG9yZUluQ2FjaGUgPSBmYWxzZTsKKyAgICBpZiAoZGVidWdnZXJNb2RlID09
IERlYnVnZ2VyT2ZmICYmIHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9mZikgeworICAgICAgICBD
b2RlQmxvY2tJbmRpY2VzTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX2NhY2hlZENvZGVCbG9ja0lu
ZGljZXMuZmluZChrZXkpOworICAgICAgICBpZiAocmVzdWx0ICE9IG1fY2FjaGVkQ29kZUJsb2Nr
SW5kaWNlcy5lbmQoKSkgeworICAgICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxp
bmtlZENvZGUgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4obV9jYWNoZWRDb2RlQmxv
Y2tzW3Jlc3VsdC0+dmFsdWVdLnNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBm
aXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZENvZGUtPmZpcnN0TGluZSgp
OworICAgICAgICAgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2UodW5saW5rZWRDb2RlLT5jb2Rl
RmVhdHVyZXMoKSwgdW5saW5rZWRDb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBmaXJzdExp
bmUsIGZpcnN0TGluZSArIHVubGlua2VkQ29kZS0+bGluZUNvdW50KCkpOworICAgICAgICAgICAg
cmV0dXJuIHVubGlua2VkQ29kZTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZUluQ2FjaGUgPSB0
cnVlOworICAgIH0KKworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ2FjaGVUeXBlczxVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+OjpSb290Tm9kZSBSb290Tm9kZTsKKyAgICBSZWZQdHI8Um9vdE5vZGU+IHJv
b3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+KCZnbG9iYWxEYXRhLCBzb3VyY2UsIDAsIElkZW50aWZp
ZXIoKSwgc3RyaWN0bmVzcywgSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CisgICAgaWYgKCFy
b290Tm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2Uo
cm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBy
b290Tm9kZS0+bGluZU5vKCksIHJvb3ROb2RlLT5sYXN0TGluZSgpKTsKKworICAgIFVubGlua2Vk
Q29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlID0gVW5saW5rZWRDb2RlQmxvY2tUeXBlOjpjcmVh
dGUoJmdsb2JhbERhdGEsIGV4ZWN1dGFibGUtPmV4ZWN1dGFibGVJbmZvKCkpOworICAgIHVubGlu
a2VkQ29kZS0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2RlLT5oYXND
YXB0dXJlZFZhcmlhYmxlcygpLCByb290Tm9kZS0+bGluZU5vKCkgLSBzb3VyY2UuZmlyc3RMaW5l
KCksIHJvb3ROb2RlLT5sYXN0TGluZSgpIC0gcm9vdE5vZGUtPmxpbmVObygpKTsKKyAgICBPd25Q
dHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5l
cmF0b3IoZ2xvYmFsRGF0YSwgcm9vdE5vZGUuZ2V0KCksIHVubGlua2VkQ29kZSwgZGVidWdnZXJN
b2RlLCBwcm9maWxlck1vZGUpKSk7CisgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7
CisgICAgcm9vdE5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQ
YXJzZXJFcnJvcjo6RXJyb3JOb25lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChzdG9y
ZUluQ2FjaGUpIHsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9yYW5kb21HZW5lcmF0b3IuZ2V0
VWludDMyKCkgJSBrTWF4Q29kZUJsb2NrRW50cmllczsKKyAgICAgICAgaWYgKG1fY2FjaGVkQ29k
ZUJsb2Nrc1tpbmRleF0uc2Vjb25kKQorICAgICAgICAgICAgbV9jYWNoZWRDb2RlQmxvY2tJbmRp
Y2VzLnJlbW92ZShtX2NhY2hlZENvZGVCbG9ja3NbaW5kZXhdLmZpcnN0KTsKKyAgICAgICAgbV9j
YWNoZWRDb2RlQmxvY2tJbmRpY2VzLnNldChrZXksIGluZGV4KTsKKyAgICAgICAgbV9jYWNoZWRD
b2RlQmxvY2tzW2luZGV4XS5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHVubGlua2VkQ29kZSk7Cisg
ICAgICAgIG1fY2FjaGVkQ29kZUJsb2Nrc1tpbmRleF0uZmlyc3QgPSBrZXk7CisgICAgfQorCisg
ICAgcmV0dXJuIHVubGlua2VkQ29kZTsKK30KKworVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBD
b2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQ
cm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBK
U1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwg
UHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQoreworICAgIHJl
dHVybiBnZXRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihnbG9iYWxEYXRhLCBl
eGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2Rl
LCBlcnJvcik7Cit9CisKK1VubGlua2VkRXZhbENvZGVCbG9jayogQ29kZUNhY2hlOjpnZXRFdmFs
Q29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmlj
dG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1v
ZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICByZXR1cm4gZ2V0Q29kZUJsb2NrPFVubGlu
a2VkRXZhbENvZGVCbG9jaz4oZ2xvYmFsRGF0YSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3Ru
ZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworfQorCitVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2soSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUs
IFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9k
eSA9IHBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KCZnbG9iYWxEYXRhLCBzb3VyY2UsIGV4ZWN1dGFi
bGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5pc0luU3Ry
aWN0Q29udGV4dCgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VGdW5j
dGlvbkNvZGUsIGVycm9yKTsKKworICAgIGlmICghYm9keSkgeworICAgICAgICBBU1NFUlQoZXJy
b3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBpZiAoZXhlY3V0YWJsZS0+Zm9yY2VVc2VzQXJndW1lbnRzKCkpCisgICAg
ICAgIGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsKKyAgICBib2R5LT5maW5pc2hQYXJzaW5nKGV4
ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5m
dW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUoKSk7CisgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFy
c2UoYm9keS0+ZmVhdHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+
bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOworICAgIAorICAgIFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSgmZ2xv
YmFsRGF0YSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhib2R5LT5uZWVkc0FjdGl2YXRp
b24oKSwgYm9keS0+dXNlc0V2YWwoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGtpbmQgPT0gQ29k
ZUZvckNvbnN0cnVjdCkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9y
KGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihnbG9iYWxEYXRhLCBib2R5LmdldCgpLCBy
ZXN1bHQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlKSkpOworICAgIGVycm9yID0gZ2VuZXJh
dG9yLT5nZW5lcmF0ZSgpOworICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CisgICAgaWYgKGVycm9y
Lm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBDb2RlQ2Fj
aGU6OmdldEZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2Rl
LCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCit7CisgICAg
cmV0dXJuIGdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgZXhlY3V0YWJsZSwg
c291cmNlLCBraW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworfQorCitD
b2RlQ2FjaGU6Okdsb2JhbEZ1bmN0aW9uS2V5IENvZGVDYWNoZTo6bWFrZUdsb2JhbEZ1bmN0aW9u
S2V5KGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IHJldHVybiBHbG9iYWxGdW5jdGlvbktleShzb3VyY2UudG9TdHJpbmcoKSwgbmFtZSk7Cit9CisK
K1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9uRXhlY3V0
YWJsZUZyb21HbG9iYWxDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3Ip
Cit7CisgICAgR2xvYmFsRnVuY3Rpb25LZXkga2V5ID0gbWFrZUdsb2JhbEZ1bmN0aW9uS2V5KHNv
dXJjZSwgbmFtZS5zdHJpbmcoKSk7CisgICAgR2xvYmFsRnVuY3Rpb25JbmRpY2VzTWFwOjppdGVy
YXRvciByZXN1bHQgPSBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5maW5kKGtleSk7Cisg
ICAgaWYgKHJlc3VsdCAhPSBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25zW3Jlc3VsdC0+dmFsdWVdLnNlY29u
ZC5nZXQoKTsKKworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9IHBhcnNlPFByb2dy
YW1Ob2RlPigmZ2xvYmFsRGF0YSwgc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3Jt
YWwsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOworICAgIGlmICghcHJvZ3JhbSkgeworICAg
ICAgICBBU1NFUlQoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgYW4g
aW5wdXQgc3RyaW5nIHRoYXQgd291bGQgcmVzdWx0IGluIGEgc2luZ2xlIGFub255bW91cyBmdW5j
dGlvbiBleHByZXNzaW9uLgorICAgIFN0YXRlbWVudE5vZGUqIGV4cHJTdGF0ZW1lbnQgPSBwcm9n
cmFtLT5zaW5nbGVTdGF0ZW1lbnQoKTsKKyAgICBBU1NFUlQoZXhwclN0YXRlbWVudCk7CisgICAg
QVNTRVJUKGV4cHJTdGF0ZW1lbnQtPmlzRXhwclN0YXRlbWVudCgpKTsKKyAgICBFeHByZXNzaW9u
Tm9kZSogZnVuY0V4cHIgPSBzdGF0aWNfY2FzdDxFeHByU3RhdGVtZW50Tm9kZSo+KGV4cHJTdGF0
ZW1lbnQpLT5leHByKCk7CisgICAgQVNTRVJUKGZ1bmNFeHByKTsKKyAgICBBU1NFUlQoZnVuY0V4
cHItPmlzRnVuY0V4cHJOb2RlKCkpOworICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkgPSBzdGF0
aWNfY2FzdDxGdW5jRXhwck5vZGUqPihmdW5jRXhwciktPmJvZHkoKTsKKyAgICBBU1NFUlQoYm9k
eSk7CisgICAgQVNTRVJUKGJvZHktPmlkZW50KCkuaXNOdWxsKCkpOworCisgICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpjcmVhdGUoJmdsb2JhbERhdGEsIHNvdXJjZSwgYm9keSk7CisgICAgZnVuY3Rp
b25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQoZ2xvYmFsRGF0YSwgZnVuY3Rpb25FeGVjdXRh
YmxlLCBqc1N0cmluZygmZ2xvYmFsRGF0YSwgbmFtZS5zdHJpbmcoKSkpOworCisgICAgc2l6ZV90
IGluZGV4ID0gbV9yYW5kb21HZW5lcmF0b3IuZ2V0VWludDMyKCkgJSBrTWF4R2xvYmFsRnVuY3Rp
b25FbnRyaWVzOworICAgIGlmIChtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uc1tpbmRleF0uc2Vjb25k
KQorICAgICAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5yZW1vdmUobV9jYWNoZWRH
bG9iYWxGdW5jdGlvbnNbaW5kZXhdLmZpcnN0KTsKKyAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9u
SW5kaWNlcy5zZXQoa2V5LCBpbmRleCk7CisgICAgbV9jYWNoZWRHbG9iYWxGdW5jdGlvbnNbaW5k
ZXhdLnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgZnVuY3Rpb25FeGVjdXRhYmxlKTsKKyAgICBtX2Nh
Y2hlZEdsb2JhbEZ1bmN0aW9uc1tpbmRleF0uZmlyc3QgPSBrZXk7CisKKyAgICByZXR1cm4gZnVu
Y3Rpb25FeGVjdXRhYmxlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
ZGVDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkNDYxNzE4OWVjNGU2ODk0NzYxNzEyMWUyYTg2ZjA5M2M5
ZmRjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2RlQ2FjaGUuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb2RlQ2FjaGVfaAorI2RlZmluZSBDb2RlQ2FjaGVf
aAorCisjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1ZGUgIlBhcnNl
ck1vZGVzLmgiCisjaW5jbHVkZSAiU3Ryb25nLmgiCisjaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgor
CisjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFdmFsRXhlY3V0YWJsZTsKK2NsYXNzIElk
ZW50aWZpZXI7CitjbGFzcyBQcm9ncmFtRXhlY3V0YWJsZTsKK2NsYXNzIFVubGlua2VkQ29kZUJs
b2NrOworY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jazsKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrOworY2xhc3MgSlNHbG9iYWxEYXRhOworc3RydWN0IFBhcnNl
ckVycm9yOworY2xhc3MgU291cmNlQ29kZTsKK2NsYXNzIFNvdXJjZVByb3ZpZGVyOworCitjbGFz
cyBDb2RlQ2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENvZGVDYWNoZT4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENvZGVDYWNoZSk7IH0KKworICAgIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayogZ2V0UHJvZ3JhbUNvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBQ
cm9ncmFtRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3Ms
IERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAgIFVubGlua2Vk
RXZhbENvZGVCbG9jayogZ2V0RXZhbENvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBFdmFsRXhlY3V0
YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9k
ZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAgIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqIGdldEZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQs
IERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBnZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShK
U0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNl
ckVycm9yJik7CisgICAgfkNvZGVDYWNoZSgpOworCisgICAgZW51bSBDb2RlVHlwZSB7IEV2YWxU
eXBlLCBQcm9ncmFtVHlwZSwgRnVuY3Rpb25UeXBlIH07CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8
U3RyaW5nLCB1bnNpZ25lZD4gQ29kZUJsb2NrS2V5OworICAgIHR5cGVkZWYgSGFzaE1hcDxDb2Rl
QmxvY2tLZXksIHVuc2lnbmVkPiBDb2RlQmxvY2tJbmRpY2VzTWFwOworICAgIHR5cGVkZWYgc3Rk
OjpwYWlyPFN0cmluZywgU3RyaW5nPiBHbG9iYWxGdW5jdGlvbktleTsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8R2xvYmFsRnVuY3Rpb25LZXksIHVuc2lnbmVkPiBHbG9iYWxGdW5jdGlvbkluZGljZXNN
YXA7CisKK3ByaXZhdGU6CisgICAgQ29kZUNhY2hlKCk7CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworCisg
ICAgdGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3MgRXhlY3V0YWJs
ZVR5cGU+IGlubGluZSBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdldENvZGVCbG9jayhKU0dsb2Jh
bERhdGEmLCBFeGVjdXRhYmxlVHlwZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmlj
dG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAgIENv
ZGVCbG9ja0tleSBtYWtlQ29kZUJsb2NrS2V5KGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlVHlwZSwg
SlNQYXJzZXJTdHJpY3RuZXNzKTsKKyAgICBDb2RlQmxvY2tJbmRpY2VzTWFwIG1fY2FjaGVkQ29k
ZUJsb2NrSW5kaWNlczsKKyAgICBHbG9iYWxGdW5jdGlvbktleSBtYWtlR2xvYmFsRnVuY3Rpb25L
ZXkoY29uc3QgU291cmNlQ29kZSYsIGNvbnN0IFN0cmluZyYpOworICAgIEdsb2JhbEZ1bmN0aW9u
SW5kaWNlc01hcCBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlczsKKworICAgIGVudW0gewor
ICAgICAgICBrTWF4Q29kZUJsb2NrRW50cmllcyA9IDEwMjQsCisgICAgICAgIGtNYXhHbG9iYWxG
dW5jdGlvbkVudHJpZXMgPSAxMDI0CisgICAgfTsKKworICAgIEZpeGVkQXJyYXk8c3RkOjpwYWly
PENvZGVCbG9ja0tleSwgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPiA+LCBrTWF4Q29kZUJsb2Nr
RW50cmllcz4gbV9jYWNoZWRDb2RlQmxvY2tzOworICAgIEZpeGVkQXJyYXk8c3RkOjpwYWlyPEds
b2JhbEZ1bmN0aW9uS2V5LCBTdHJvbmc8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+ID4sIGtN
YXhHbG9iYWxGdW5jdGlvbkVudHJpZXM+IG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25zOworICAgIFdl
YWtSYW5kb20gbV9yYW5kb21HZW5lcmF0b3I7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAppbmRleCAwYTQ1M2VlYTA1NjY4
NDBmZTk5ZmJjNTJkNTFkZjBiMjI5YzdmYmQzLi4wYzRjYWJkODRkOTEyYWI5MDNhYzI3ZTc4ODlj
YzljNjZhNzA1NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkV4ZWN1dGFibGUuaCIKIAorI2luY2x1ZGUgIkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmgi
CiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
ICNpbmNsdWRlICJERkdEcml2ZXIuaCIKQEAgLTEzMywxNiArMTM0LDE0IEBAIHZvaWQgUHJvZ3Jh
bUV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogCiBjb25zdCBDbGFzc0luZm8gRnVu
Y3Rpb25FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJGdW5jdGlvbkV4ZWN1dGFibGUiLCAmU2NyaXB0
RXhlY3V0YWJsZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uRXhl
Y3V0YWJsZSkgfTsKIAotRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQotICAgIDogU2Ny
aXB0RXhlY3V0YWJsZShnbG9iYWxEYXRhLmZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQo
KSwgZ2xvYmFsRGF0YSwgbm9kZS0+c291cmNlKCksIG5vZGUtPmlzU3RyaWN0TW9kZSgpKQotICAg
ICwgbV9mb3JjZVVzZXNBcmd1bWVudHMobm9kZS0+dXNlc0FyZ3VtZW50cygpKQotICAgICwgbV9w
YXJhbWV0ZXJzKG5vZGUtPnBhcmFtZXRlcnMoKSkKLSAgICAsIG1fbmFtZShub2RlLT5pZGVudCgp
KQotICAgICwgbV9pbmZlcnJlZE5hbWUobm9kZS0+aW5mZXJyZWROYW1lKCkuaXNOdWxsKCkgPyBn
bG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllciA6IG5vZGUtPmluZmVycmVk
TmFtZSgpKQotICAgICwgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUobm9kZS0+ZnVuY3Rp
b25OYW1lSXNJblNjb3BlVG9nZ2xlKCkpCitGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhl
Y3V0YWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgdW5zaWdu
ZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSkKKyAgICA6IFNjcmlwdEV4ZWN1dGFibGUo
Z2xvYmFsRGF0YS5mdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGdsb2JhbERhdGEs
IHNvdXJjZSwgdW5saW5rZWRFeGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgpKQorICAgICwg
bV91bmxpbmtlZEV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxl
KQogewotICAgIG1fZmlyc3RMaW5lID0gbm9kZS0+bGluZU5vKCk7Ci0gICAgbV9sYXN0TGluZSA9
IG5vZGUtPmxhc3RMaW5lKCk7CisgICAgQVNTRVJUKCFzb3VyY2UuaXNOdWxsKCkpOworICAgIEFT
U0VSVChzb3VyY2UubGVuZ3RoKCkpOworICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOworICAg
IG1fbGFzdExpbmUgPSBsYXN0TGluZTsKIH0KIAogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtMTkxLDcgKzE5MCw2IEBAIEpTT2JqZWN0KiBFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUs
IEpJVENvCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogICAgIFVOVVNFRF9QQVJBTShieXRl
Y29kZUluZGV4KTsKICNlbmRpZgotICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CiAgICAgCkBAIC0yMDAsMjggKzE5OCwyMSBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6
OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDbwog
ICAgICAgICBuZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8
Q29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpKSk7CiAgICAgICAgIG1fZXZhbENv
ZGVCbG9jayA9IG5ld0NvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAg
VU5VU0VEX1BBUkFNKHNjb3BlKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbERhdGEpOwor
ICAgICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGlmICgh
bGV4aWNhbEdsb2JhbE9iamVjdC0+ZXZhbEVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCBsZXhpY2FsR2xvYmFsT2JqZWN0
LT5ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwotICAgICAgICBSZWZQdHI8RXZhbE5vZGU+
IGV2YWxOb2RlID0gcGFyc2U8RXZhbE5vZGU+KGdsb2JhbERhdGEsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIG1fc291cmNlLCAwLCBJZGVudGlmaWVyKCksIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0
cmljdCA6IEpTUGFyc2VOb3JtYWwsIEV2YWxOb2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VG
dW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxPYmplY3QtPmRl
YnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOwotICAgICAgICBpZiAoIWV2YWxOb2RlKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKKworICAgICAgICBKU09iamVjdCogZXhjZXB0
aW9uID0gMDsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZEV2YWxDb2Rl
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+Y3JlYXRlRXZhbENvZGVCbG9jayhleGVjLCB0aGlzLCAm
ZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKCF1bmxpbmtlZEV2YWxDb2RlKQogICAgICAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbjsKLSAgICAgICAgfQotICAgICAgICByZWNvcmRQYXJzZShldmFsTm9k
ZS0+ZmVhdHVyZXMoKSwgZXZhbE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGV2YWxOb2Rl
LT5saW5lTm8oKSwgZXZhbE5vZGUtPmxhc3RMaW5lKCkpOwotICAgICAgICAKLSAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKLSAgICAg
ICAgCisKICAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2V2
YWxDb2RlQmxvY2sucmVsZWFzZSgpOwogICAgICAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29k
ZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOwotICAgICAgICBtX2V2
YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxPYmpl
Y3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNjb3BlLT5sb2NhbERlcHRoKCksIHByZXZpb3VzQ29k
ZUJsb2NrLnJlbGVhc2UoKSkpOwotICAgICAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdl
bmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIHNj
b3BlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZhbENvZGVCbG9jay5nZXQo
KSwgISFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBPcHRpbWl6aW5nQ29tcGlsYXRp
b24gOiBGaXJzdENvbXBpbGF0aW9uKSkpOwotICAgICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVy
YXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IHN0YXRp
Y19wb2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLT5yZWxlYXNlQWx0
ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKLSAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGV2
YWxOb2RlLT5kZXN0cm95RGF0YSgpOworICAgICAgICBtX3VubGlua2VkRXZhbENvZGVCbG9jay5z
ZXQoKmdsb2JhbERhdGEsIHRoaXMsIHVubGlua2VkRXZhbENvZGUpOworICAgICAgICBtX2V2YWxD
b2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCB1bmxpbmtlZEV2YWxD
b2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZS0+bG9j
YWxEZXB0aCgpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKICAgICAgICAgbV9ldmFs
Q29kZUJsb2NrLT5jb3B5UG9zdFBhcnNlRGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogICAgIH0KIApA
QCAtMjU3LDYgKzI0OCw3IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBTY3JpcHRFeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIGlmICh0aGlzT2JqZWN0LT5t
X2V2YWxDb2RlQmxvY2spCiAgICAgICAgIHRoaXNPYmplY3QtPm1fZXZhbENvZGVCbG9jay0+dmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
dW5saW5rZWRFdmFsQ29kZUJsb2NrKTsKIH0KIAogdm9pZCBFdmFsRXhlY3V0YWJsZTo6dW5saW5r
Q2FsbHMoKQpAQCAtMjcyLDE5ICsyNjQsMjAgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6dW5saW5r
Q2FsbHMoKQogdm9pZCBFdmFsRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKIHsKICAgICBtX2V2YWxD
b2RlQmxvY2suY2xlYXIoKTsKKyAgICBtX3VubGlua2VkRXZhbENvZGVCbG9jay5jbGVhcigpOwog
ICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6
OmNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU09iamVjdCogZXhjZXB0aW9u
ID0gMDsKKyAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFJlZlB0cjxQcm9n
cmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4oZ2xvYmFsRGF0YSwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5vcm1h
bCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpT
UGFyc2VQcm9ncmFtQ29kZSwgbGV4aWNhbEdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgZXhlYywg
JmV4Y2VwdGlvbik7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNl
PFByb2dyYW1Ob2RlPihnbG9iYWxEYXRhLCBtX3NvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBKU1Bh
cnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25D
b2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CiAgICAgaWYgKHByb2dyYW1Ob2RlKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQoZXhjZXB0aW9uKTsKLSAgICByZXR1cm4gZXhj
ZXB0aW9uOworICAgIEFTU0VSVChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9u
ZSk7CisgICAgcmV0dXJuIGVycm9yLnRvRXJyb3JPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwg
bV9zb3VyY2UpOwogfQogCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKQEAgLTMxMywzNSArMzA2LDEzIEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6
Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpJCiAgICAg
VU5VU0VEX1BBUkFNKGppdFR5cGUpOwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
ICNlbmRpZgotICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwotICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgCiAg
ICAgaWYgKCEhbV9wcm9ncmFtQ29kZUJsb2NrKSB7CiAgICAgICAgIE93blB0cjxQcm9ncmFtQ29k
ZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayhDb2Rl
QmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKm1fcHJvZ3JhbUNvZGVCbG9jaykpOwogICAgICAgICBu
ZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2Nr
PihtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpKSk7CiAgICAgICAgIG1fcHJvZ3JhbUNvZGVC
bG9jayA9IG5ld0NvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUmVm
UHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9iYWxE
YXRhLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBpc1N0
cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6
aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2Rl
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhjZXB0aW9uKTsKLSAg
ICAgICAgaWYgKCFwcm9ncmFtTm9kZSkgewotICAgICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7
Ci0gICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgICAgICB9Ci0gICAgICAgIHJlY29y
ZFBhcnNlKHByb2dyYW1Ob2RlLT5mZWF0dXJlcygpLCBwcm9ncmFtTm9kZS0+aGFzQ2FwdHVyZWRW
YXJpYWJsZXMoKSwgcHJvZ3JhbU5vZGUtPmxpbmVObygpLCBwcm9ncmFtTm9kZS0+bGFzdExpbmUo
KSk7Ci0KICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9i
YWxPYmplY3QoKTsKLSAgICAKLSAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2Rl
QmxvY2sgPSBtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpOwotICAgICAgICBBU1NFUlQoKGpp
dFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2sp
OwotICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVC
bG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCks
IHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwotICAgICAgICBPd25QdHI8Qnl0ZWNvZGVH
ZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3Jh
bU5vZGUuZ2V0KCksIHNjb3BlLCBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3Jh
bUNvZGVCbG9jay5nZXQoKSwgISFtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBP
cHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uKSkpOwotICAgICAgICBpZiAo
KGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgICAgIG1fcHJv
Z3JhbUNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9w
cm9ncmFtQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAgICBwcm9n
cmFtTm9kZS0+ZGVzdHJveURhdGEoKTsKLSAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247Ci0g
ICAgICAgIH0KLQotICAgICAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURhdGEoKTsKKyAgICAgICAg
bV9wcm9ncmFtQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1Db2RlQmxvY2sodGhpcywg
bV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suZ2V0KCksIGdsb2JhbE9iamVjdCwgc291cmNlKCku
cHJvdmlkZXIoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwogICAgICAgICBtX3By
b2dyYW1Db2RlQmxvY2stPmNvcHlQb3N0UGFyc2VEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAgICAg
fQogCkBAIC0zNzgsNiArMzQ5LDY3IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnVubGlua0Nh
bGxzKCkKICNlbmRpZgogfQogCitpbnQgUHJvZ3JhbUV4ZWN1dGFibGU6OmFkZEdsb2JhbFZhcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29u
c3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgRnVuY3Rpb25Nb2RlIGZ1bmN0aW9uTW9kZSkKK3sKKyAg
ICAvLyBUcnkgdG8gc2hhcmUgdGhlIHN5bWJvbFRhYmxlIGlmIHBvc3NpYmxlCisgICAgU2hhcmVk
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpOwor
ICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk1vZGUpOworICAgIGludCBpbmRleCA9IHN5bWJvbFRh
YmxlLT5zaXplKCk7CisgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgKGNvbnN0
YW50TW9kZSA9PSBJc0NvbnN0YW50KSA/IFJlYWRPbmx5IDogMCk7CisgICAgaWYgKGZ1bmN0aW9u
TW9kZSA9PSBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplKQorICAgICAgICBuZXdFbnRyeS5hdHRlbXB0
VG9XYXRjaCgpOworICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFi
bGUtPmFkZChpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KSB7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKKyAg
ICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCk7CisgICAgfQor
ICAgIHJldHVybiBpbmRleDsKK30KKworSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0
YWxpemVHbG9iYWxQcm9wZXJ0aWVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTU2NvcGUqIHNjb3BlKQoreworICAgIEFTU0VSVChzY29wZSk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoJmdsb2JhbE9iamVjdC0+Z2xvYmFs
RGF0YSgpID09ICZnbG9iYWxEYXRhKTsKKworICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwor
ICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlID0gZ2xvYmFsT2JqZWN0
LT5jcmVhdGVQcm9ncmFtQ29kZUJsb2NrKGNhbGxGcmFtZSwgdGhpcywgJmV4Y2VwdGlvbik7Cisg
ICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKworICAgIG1fdW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxEYXRhLCB0aGlzLCB1bmxpbmtlZENvZGUp
OworCisgICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCk7CisKKyAgICBjb25zdCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OlZh
cmlhYmxlRGVjbGF0aW9ucyYgdmFyaWFibGVEZWNsYXJhdGlvbnMgPSB1bmxpbmtlZENvZGUtPnZh
cmlhYmxlRGVjbGFyYXRpb25zKCk7CisgICAgY29uc3QgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
OjpGdW5jdGlvbkRlY2xhdGlvbnMmIGZ1bmN0aW9uRGVjbGFyYXRpb25zID0gdW5saW5rZWRDb2Rl
LT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpOworCisgICAgc2l6ZV90IG5ld0dsb2JhbHMgPSB2YXJp
YWJsZURlY2xhcmF0aW9ucy5zaXplKCkgKyBmdW5jdGlvbkRlY2xhcmF0aW9ucy5zaXplKCk7Cisg
ICAgaWYgKCFuZXdHbG9iYWxzKQorICAgICAgICByZXR1cm4gMDsKKyAgICBnbG9iYWxPYmplY3Qt
PmFkZFJlZ2lzdGVycyhuZXdHbG9iYWxzKTsKKyAgICBDYWxsRnJhbWUqIGdsb2JhbEV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnVuY3Rpb25EZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9vbCBwcm9wZXJ0
eURpZEV4aXN0ID0gZ2xvYmFsT2JqZWN0LT5yZW1vdmVEaXJlY3QoZ2xvYmFsRGF0YSwgZnVuY3Rp
b25EZWNsYXJhdGlvbnNbaV0uZmlyc3QpOyAvLyBOZXdseSBkZWNsYXJlZCBmdW5jdGlvbnMgb3Zl
cndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSA9IGZ1bmN0aW9uRGVjbGFyYXRpb25z
W2ldLnNlY29uZC5nZXQoKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTRnVuY3Rpb246OmNy
ZWF0ZShnbG9iYWxFeGVjLCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+bGluayhnbG9iYWxE
YXRhLCBtX3NvdXJjZSwgbGluZU5vKCksIDApLCBzY29wZSk7CisgICAgICAgIGludCBpbmRleCA9
IGFkZEdsb2JhbFZhcihnbG9iYWxPYmplY3QsIGZ1bmN0aW9uRGVjbGFyYXRpb25zW2ldLmZpcnN0
LCBJc1ZhcmlhYmxlLAorICAgICAgICAgICAgIXByb3BlcnR5RGlkRXhpc3QgPyBJc0Z1bmN0aW9u
VG9TcGVjaWFsaXplIDogTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUpOworICAgICAgICBn
bG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoaW5kZXgpLnNldChnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhcmlhYmxl
RGVjbGFyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChnbG9iYWxPYmplY3QtPmhh
c1Byb3BlcnR5KGdsb2JhbEV4ZWMsIHZhcmlhYmxlRGVjbGFyYXRpb25zW2ldLmZpcnN0KSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhZGRHbG9iYWxWYXIoZ2xvYmFsT2JqZWN0LCB2
YXJpYWJsZURlY2xhcmF0aW9uc1tpXS5maXJzdCwKKyAgICAgICAgICAgICh2YXJpYWJsZURlY2xh
cmF0aW9uc1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJc0Nv
bnN0YW50IDogSXNWYXJpYWJsZSwKKyAgICAgICAgICAgIE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFs
aXphYmxlKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgUHJvZ3JhbUV4ZWN1dGFi
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0
YWJsZSo+KGNlbGwpOwpAQCAtMzg1LDYgKzQxNyw3IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBD
T01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkp
OwogICAgIFNjcmlwdEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9wcm9ncmFtQ29kZUJsb2NrKQogICAgICAg
ICB0aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2RlQmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogfQpAQCAtMzkyLDYgKzQyNSw3IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHZvaWQgUHJvZ3JhbUV4
ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiB7CiAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLmNsZWFyKCk7
CisgICAgbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKICAgICBCYXNlOjpjbGVh
ckNvZGUoKTsKIH0KIApAQCAtNDM4LDEyICs0NzIsMTIgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIEpT
U2MKICNpZiBFTkFCTEUoSklUKQogYm9vbCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVG
b3JDYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9u
SWZBcHByb3ByaWF0ZShleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwsIG1faml0Q29kZUZvckNhbGws
IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgbV9zeW1ib2xUYWJsZSwgSklUQ29kZTo6
Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBy
ZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBtX2NvZGVCbG9ja0Zv
ckNhbGwsIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywg
SklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKIH0KIAogYm9vbCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDb25zdHJ1Y3Qo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJv
cHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1
Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBK
SVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OworICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJTlRfTUFY
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogfQogI2VuZGlmCiAKQEAgLTQ1Miw0OSArNDg2LDMw
IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvZGVCbG9ja1dpdGhC
eXRlY29kZUZvcihDb2RlU3BlY2lhbGl6YXRpCiAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGtpbmQpOwogfQogCi1QYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4
ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9u
S2luZCBjb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRp
b25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbikKK1Bhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihKU1Njb3BlKiBzY29w
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYg
ZXhjZXB0aW9uKQogewogICAgIGlmICghIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQp
KQogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKENvZGVCbG9j
azo6Q29weVBhcnNlZEJsb2NrLCAqY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpKTsK
LSAgICAKLSAgICBleGNlcHRpb24gPSAwOworCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gc2NvcGUtPmdsb2JhbERhdGEoKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBi
b2R5ID0gcGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oCi0gICAgICAgIGdsb2JhbERhdGEsCi0gICAg
ICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgbV9zb3VyY2UsCi0gICAgICAgIG1fcGFyYW1ldGVy
cy5nZXQoKSwKLSAgICAgICAgbmFtZSgpLAotICAgICAgICBpc1N0cmljdE1vZGUoKSA/IEpTUGFy
c2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLAotICAgICAgICBGdW5jdGlvbkJvZHlOb2RlOjppc0Z1
bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsCi0g
ICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgICZleGNlcHRpb24KLSAgICApOwotCi0gICAg
aWYgKCFib2R5KSB7Ci0gICAgICAgIEFTU0VSVChleGNlcHRpb24pOworICAgIFBhcnNlckVycm9y
IGVycm9yOworICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhh
c0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CisgICAgUHJvZmlsZXJNb2Rl
IHByb2ZpbGVyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24g
OiBQcm9maWxlck9mZjsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jayA9IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3IoKmdsb2JhbERhdGEs
IG1fc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2Rl
LCBlcnJvcik7CisgICAgcmVjb3JkUGFyc2UobV91bmxpbmtlZEV4ZWN1dGFibGUtPmZlYXR1cmVz
KCksIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBsaW5lTm8o
KSwgbGFzdExpbmUoKSk7CisKKyAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKSB7CisgICAgICAg
IGV4Y2VwdGlvbiA9IGVycm9yLnRvRXJyb3JPYmplY3QoZ2xvYmFsT2JqZWN0LCBtX3NvdXJjZSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBpZiAobV9mb3JjZVVzZXNBcmd1
bWVudHMpCi0gICAgICAgIGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsKLSAgICBib2R5LT5maW5p
c2hQYXJzaW5nKG1fcGFyYW1ldGVycywgbV9uYW1lLCBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRv
Z2dsZSk7Ci0gICAgcmVjb3JkUGFyc2UoYm9keS0+ZmVhdHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOwotCi0gICAg
T3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQ7Ci0gICAgQVNTRVJUKChjb21waWxhdGlv
bktpbmQgPT0gRmlyc3RDb21waWxhdGlvbikgPT0gIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlv
bktpbmQpKTsKLSAgICByZXN1bHQgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhp
cywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJj
ZSgpLnN0YXJ0T2Zmc2V0KCksIHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ29uc3RydWN0
KSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3
IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlLCByZXN1bHQtPnN5bWJvbFRhYmxl
KCksIHJlc3VsdC5nZXQoKSwgY29tcGlsYXRpb25LaW5kKSkpOwotICAgIGV4Y2VwdGlvbiA9IGdl
bmVyYXRvci0+Z2VuZXJhdGUoKTsKLSAgICBib2R5LT5kZXN0cm95RGF0YSgpOwotICAgIGlmIChl
eGNlcHRpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgT3duUHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywg
dW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291
cmNlKCkuc3RhcnRPZmZzZXQoKSkpOwogICAgIHJlc3VsdC0+Y29weVBvc3RQYXJzZURhdGFGcm9t
KGNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpLmdldCgpKTsKICAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKIH0KIAorCiBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21w
aWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpJVENv
ZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihzYW1wbGluZ0Rlc2NyaXB0aW9uKGppdFR5cGUpKTsK
QEAgLTUwNyw3ICs1MjIsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
Rm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogcwogI2VuZGlmCiAgICAg
QVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1fY29kZUJs
b2NrRm9yQ2FsbCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25QdHI8RnVuY3Rp
b25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsICEh
bV9jb2RlQmxvY2tGb3JDYWxsID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxh
dGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CisgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJsb2NrRm9yKHNjb3BlLCBDb2RlRm9yQ2Fs
bCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbjsKIApAQCAtNTE2LDEwICs1MzEsOSBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogcwog
ICAgIAogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPm51
bVBhcmFtZXRlcnMoKTsKICAgICBBU1NFUlQobV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCk7Ci0gICAg
bV9zeW1ib2xUYWJsZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2NvZGVCbG9ja0Zv
ckNhbGwtPnN5bWJvbFRhYmxlKCkpOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoIXByZXBh
cmVGdW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwsIG1faml0Q29k
ZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgbV9zeW1ib2xUYWJsZSwg
aml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNhbGwpKQorICAgIGlmICghcHJlcGFyZUZ1
bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9qaXRDb2RlRm9y
Q2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBieXRlY29kZUlu
ZGV4LCBDb2RlRm9yQ2FsbCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAKQEAgLTU0NCw3
ICs1NTgsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3Ry
dWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1NjbwogICAgIAogICAgIEFTU0VSVCgoaml0
VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25QdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsICEhbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0
aW9uLCBDb2RlRm9yQ29uc3RydWN0LCBleGNlcHRpb24pOworICAgIE93blB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwgQ29kZUZv
ckNvbnN0cnVjdCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbjsKIApAQCAtNTUzLDEwICs1NjcsOSBAQCBKU09iamVjdCogRnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVj
LCBKU1NjbwogICAgIAogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgQVNTRVJUKG1fbnVtUGFyYW1l
dGVyc0ZvckNvbnN0cnVjdCk7Ci0gICAgbV9zeW1ib2xUYWJsZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFibGUoKSk7CiAKICNp
ZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMs
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBqaXRUeXBlLCBieXRl
Y29kZUluZGV4LCBDb2RlRm9yQ29uc3RydWN0KSkKKyAgICBpZiAoIXByZXBhcmVGdW5jdGlvbkZv
ckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCwgbV9qaXRDb2RlRm9yQ29u
c3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgaml0VHlwZSwgYnl0
ZWNvZGVJbmRleCwgQ29kZUZvckNvbnN0cnVjdCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlm
CiAKQEAgLTU5MiwxMiArNjA1LDExIEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgQ09NUElMRV9B
U1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+
c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBT
Y3JpcHRFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25hbWVWYWx1ZSk7Ci0gICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogICAgIGlmICh0aGlzT2JqZWN0LT5t
X2NvZGVCbG9ja0ZvckNhbGwpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ2Fs
bC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJs
b2NrRm9yQ29uc3RydWN0KQogICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fdW5saW5rZWRFeGVjdXRhYmxlKTsKIH0KIAogdm9pZCBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCkKQEAgLTYwNyw2ICs2MTksMTMgQEAgdm9pZCBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCkKICAgICBjbGVhckNv
ZGUoKTsKIH0KIAordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyVW5saW5rZWRDb2RlSWZO
b3RDb21waWxpbmcoKQoreworICAgIGlmIChpc0NvbXBpbGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNsZWFyQ29kZSgpOworfQorCiB2b2lkIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKIHsKICAgICBtX2NvZGVCbG9ja0ZvckNhbGwuY2xl
YXIoKTsKQEAgLTYzMCwzOSArNjQ5LDE5IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxp
bmtDYWxscygpCiAKIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9t
R2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeGVjU3RhdGUqIGV4ZWMsIERlYnVn
Z2VyKiBkZWJ1Z2dlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCoqIGV4Y2Vw
dGlvbikKIHsKLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW0g
PSBwYXJzZTxQcm9ncmFtTm9kZT4oJmV4ZWMtPmdsb2JhbERhdGEoKSwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2Rl
Ojppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNv
ZGUsIGRlYnVnZ2VyLCBleGVjLCBleGNlcHRpb24pOwotICAgIGlmICghcHJvZ3JhbSkgewotICAg
ICAgICBBU1NFUlQoKmV4Y2VwdGlvbik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IHVubGlua2VkRnVuY3Rpb24gPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2Jh
bENvZGUobmFtZSwgZXhlYywgZGVidWdnZXIsIHNvdXJjZSwgZXhjZXB0aW9uKTsKKyAgICBpZiAo
IXVubGlua2VkRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFRo
aXMgZnVuY3Rpb24gYXNzdW1lcyBhbiBpbnB1dCBzdHJpbmcgdGhhdCB3b3VsZCByZXN1bHQgaW4g
YSBzaW5nbGUgYW5vbnltb3VzIGZ1bmN0aW9uIGV4cHJlc3Npb24uCi0gICAgU3RhdGVtZW50Tm9k
ZSogZXhwclN0YXRlbWVudCA9IHByb2dyYW0tPnNpbmdsZVN0YXRlbWVudCgpOwotICAgIEFTU0VS
VChleHByU3RhdGVtZW50KTsKLSAgICBBU1NFUlQoZXhwclN0YXRlbWVudC0+aXNFeHByU3RhdGVt
ZW50KCkpOwotICAgIEV4cHJlc3Npb25Ob2RlKiBmdW5jRXhwciA9IHN0YXRpY19jYXN0PEV4cHJT
dGF0ZW1lbnROb2RlKj4oZXhwclN0YXRlbWVudCktPmV4cHIoKTsKLSAgICBBU1NFUlQoZnVuY0V4
cHIpOwotICAgIEFTU0VSVChmdW5jRXhwci0+aXNGdW5jRXhwck5vZGUoKSk7Ci0gICAgRnVuY3Rp
b25Cb2R5Tm9kZSogYm9keSA9IHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGZ1bmNFeHByKS0+
Ym9keSgpOwotICAgIEFTU0VSVChib2R5KTsKLSAgICBBU1NFUlQoYm9keS0+aWRlbnQoKS5pc051
bGwoKSk7Ci0KLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYm9keSk7Ci0gICAg
ZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBm
dW5jdGlvbkV4ZWN1dGFibGUsIGpzU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUuc3Ry
aW5nKCkpKTsKLSAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOworICAgIHVuc2lnbmVkIGZp
cnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlua2VkRnVuY3Rpb24tPmZpcnN0TGlu
ZU9mZnNldCgpOworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0
KCkgKyB1bmxpbmtlZEZ1bmN0aW9uLT5zdGFydE9mZnNldCgpOworICAgIHVuc2lnbmVkIHNvdXJj
ZUxlbmd0aCA9IHVubGlua2VkRnVuY3Rpb24tPnNvdXJjZUxlbmd0aCgpOworICAgIFNvdXJjZUNv
ZGUgZnVuY3Rpb25Tb3VyY2Uoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9m
ZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lKTsKKyAgICByZXR1cm4gRnVuY3Rpb25FeGVj
dXRhYmxlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvblNvdXJjZSwgdW5saW5r
ZWRGdW5jdGlvbiwgZmlyc3RMaW5lLCB1bmxpbmtlZEZ1bmN0aW9uLT5saW5lQ291bnQoKSk7CiB9
CiAKIFN0cmluZyBGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtU3RyaW5nKCkgY29uc3QKIHsKLSAg
ICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqbV9wYXJhbWV0ZXJzOwotICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3IgKHNpemVfdCBwb3MgPSAwOyBwb3MgPCBwYXJh
bWV0ZXJzLnNpemUoKTsgKytwb3MpIHsKLSAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQocGFyYW1ldGVyc1twb3NdLnN0cmluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnBhcmFt
U3RyaW5nKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAppbmRleCA3NmE1MzdkYTMyNGFhYzkyMDNjZDg0ZDA5MWNjOGM5MzJmMmZmMDM2Li43NGI0
YWRkNzVjMzJmMzg2ZDQ0Y2FlMjQ4OGIxOTI0ZGUyYzgwYzc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
TExJbnRDTG9vcC5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29s
LmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM2NCw5ICszNjUsMTkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0
dXJlcyAmIFN0cmljdE1vZGVGZWF0dXJlOyB9CiAKICAgICAgICAgdm9pZCB1bmxpbmtDYWxscygp
OworCisgICAgICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZXM7IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OwogCisgICAgICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29s
IGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJlczsKKyAgICAgICAgICAgIG1f
aGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAgICAgICAgICAg
IG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOworICAgICAgICAgICAgbV9sYXN0TGluZSA9IGxhc3RM
aW5lOworICAgICAgICB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CkBAIC0zNzksMTQgKzM5
MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIH0KIAotICAgICAgICB2b2lk
IHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlh
YmxlcywgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0gICAgICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFi
bGVzID0gaGFzQ2FwdHVyZWRWYXJpYWJsZXM7Ci0gICAgICAgICAgICBtX2ZpcnN0TGluZSA9IGZp
cnN0TGluZTsKLSAgICAgICAgICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKLSAgICAgICAgfQot
CiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAgICAgICAgIENvZGVGZWF0dXJlcyBtX2Zl
YXR1cmVzOwogICAgICAgICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7CkBAIC00NDgsNiAr
NDUxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAor
ICAgICAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4
ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUo
KSwgZmFsc2UpOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0
YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSos
IGNvbnN0IFNvdXJjZUNvZGUmLCBib29sKTsKQEAgLTQ1Niw2ICs0NjEsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCiAgICAgICAgIE93blB0cjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxvY2s7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IG1fdW5saW5rZWRF
dmFsQ29kZUJsb2NrOwogICAgIH07CiAKICAgICBjbGFzcyBQcm9ncmFtRXhlY3V0YWJsZSA6IHB1
YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAgLTQ3MCw2ICs0NzYsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAKKworICAgICAg
ICBKU09iamVjdCogaW5pdGFsaXplR2xvYmFsUHJvcGVydGllcyhKU0dsb2JhbERhdGEmLCBDYWxs
RnJhbWUqLCBKU1Njb3BlKik7CisKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUq
IHNjb3BlKQpAQCAtNTE1LDEzICs1MjQsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBjbGVhckNvZGUoKTsKIAorICAgICAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5m
bygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2Vz
RXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UpOyB9CisKICAgICBwcml2YXRlOgogICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CisKICAgICAgICAgUHJv
Z3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYpOwogCisgICAgICAg
IGVudW0gQ29uc3RhbnRNb2RlIHsgSXNDb25zdGFudCwgSXNWYXJpYWJsZSB9OworICAgICAgICBl
bnVtIEZ1bmN0aW9uTW9kZSB7IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUsIE5vdEZ1bmN0aW9uT3JO
b3RTcGVjaWFsaXphYmxlIH07CisgICAgICAgIGludCBhZGRHbG9iYWxWYXIoSlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBGdW5jdGlvbk1vZGUpOworCiAg
ICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJ
VENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jazsKICAgICAgICAgT3duUHRyPFByb2dyYW1Db2RlQmxvY2s+IG1fcHJv
Z3JhbUNvZGVCbG9jazsKICAgICB9OwogCkBAIC01MzEsOSArNTQ4LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIFNjcmlwdEV4ZWN1dGFibGUgQmFzZTsK
IAotICAgICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQorICAgICAgICBzdGF0aWMgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4
ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkg
RnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERhdGEsIG5vZGUpOworICAgICAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVu
Y3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBGdW5jdGlvbkV4ZWN1dGFibGUoZ2xv
YmFsRGF0YSwgc291cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgbGFzdExpbmUp
OwogICAgICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAg
ICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQpAQCAtNTU0LDcgKzU3MSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sq
IGNvZGVCbG9ja1dpdGhCeXRlY29kZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAg
ICAgCi0gICAgICAgIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VDb2RlQmxv
Y2tGb3IoSlNTY29wZSosIENvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwg
SlNPYmplY3QqJiBleGNlcHRpb24pOworICAgICAgICBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiBwcm9kdWNlQ29kZUJsb2NrRm9yKEpTU2NvcGUqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
LCBKU09iamVjdComIGV4Y2VwdGlvbik7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JD
YWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCiAgICAgICAgIHsKQEAgLTY3OSwx
NCArNjk2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5l
Q29kZUJsb2NrRm9yKGtpbmQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgICAgIGNvbnN0IElkZW50
aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJuIG1faW5mZXJyZWROYW1lOyB9Ci0gICAgICAg
IEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25hbWVWYWx1ZS5nZXQoKTsg
fQotICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmFt
ZXRlcnMtPnNpemUoKTsgfSAvLyBFeGNsdWRpbmcgJ3RoaXMnIQorICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWUoKTsgfQor
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSB7IHJldHVybiBtX3VubGlu
a2VkRXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCk7IH0KKyAgICAgICAgSlNTdHJpbmcqIG5hbWVW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5uYW1lVmFsdWUoKTsg
fQorICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3VubGlu
a2VkRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKTsgfSAvLyBFeGNsdWRpbmcgJ3RoaXMnIQog
ICAgICAgICBTdHJpbmcgcGFyYW1TdHJpbmcoKSBjb25zdDsKLSAgICAgICAgU2hhcmVkU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1ib2xUYWJsZS5nZXQoKTsg
fQorICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+c3ltYm9s
VGFibGUoa2luZCk7IH0KIAogICAgICAgICB2b2lkIGNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7
CisgICAgICAgIHZvaWQgY2xlYXJVbmxpbmtlZENvZGVJZk5vdENvbXBpbGluZygpOwogICAgICAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAg
ICAgIHsKQEAgLTY5OSwxNSArNzE3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9p
ZCBjbGVhckNvZGUoKTsKIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbV9uYW1lVmFsdWUu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBuYW1lKCkuc3RyaW5n
KCkpKTsKLSAgICAgICAgfQotCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKEpTR2xvYmFsRGF0YSYsIEZ1bmN0aW9uQm9keU5vZGUqKTsKKyAgICAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUpOwog
CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIEpT
U2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9N
QVgpOwogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNT
dGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
ID0gVUlOVF9NQVgpOwpAQCAtNzMyLDE2ICs3NDMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsK
LSAgICAgICAgYm9vbCBtX2ZvcmNlVXNlc0FyZ3VtZW50czsKLQotICAgICAgICBSZWZQdHI8RnVu
Y3Rpb25QYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gbV91bmxpbmtlZEV4ZWN1dGFibGU7CiAgICAgICAgIE93
blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOwogICAgICAgICBPd25Q
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwotICAgICAgICBJ
ZGVudGlmaWVyIG1fbmFtZTsKLSAgICAgICAgSWRlbnRpZmllciBtX2luZmVycmVkTmFtZTsKLSAg
ICAgICAgRnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlIG1fZnVuY3Rpb25OYW1lSXNJblNjb3Bl
VG9nZ2xlOwotICAgICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fbmFtZVZhbHVlOwotICAg
ICAgICBXcml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CiAgICAg
fTsKIAogICAgIGlubGluZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5l
c3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaApp
bmRleCAwNjU3ODhhZWUxYmUyNWYzMGRmNjViYzk5YTEzMTA1OGVlMTljNjU2Li5iNzFiNjAyMTdm
YTVlNGMzMTQ0MTRhOTkwZTYxMGM5ZjU5NDZjMThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCkBAIC00OSw3ICs0OSw3IEBAIGlubGlu
ZSBib29sIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8Q29kZUJs
b2NrVHlwZT4mIGNvZGVCbG9jCiAgICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4
ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKIH0KIAotaW5saW5lIGJvb2wgcHJlcGFyZUZ1bmN0aW9uRm9y
RXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29k
ZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVX
aXRoQXJpdHlDaGVjaywgV3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFi
bGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5saW5lIGJvb2wgcHJlcGFyZUZ1bmN0aW9uRm9y
RXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29k
ZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVX
aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKExMSU5U
KQogICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewpAQCAtNjEsNyAr
NjEsNyBAQCBpbmxpbmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oRXhlY1N0YXRl
KiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvYwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
a2luZCk7CiAjZW5kaWYgLy8gRU5BQkxFKExMSU5UKQotICAgIHJldHVybiBqaXRDb21waWxlRnVu
Y3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhB
cml0eUNoZWNrLCBzeW1ib2xUYWJsZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHBy
b3ByaWF0ZShleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywg
aml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkg
PyBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FjdGl2YXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5oCmluZGV4IGZhMjI5MTgxM2Y5YmFhYmUwZDZmMGM2OWJlNjc3ODRjZDQzNGQx
MWQuLmZjNjMzNjQ2MzE2ODU4YmRmNjlkZmRmNDFiMmE3MjBiOGMwMTRlYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCkBAIC00NiwxNSArNDYsMTYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTVmFyaWFi
bGVPYmplY3QgQmFzZTsKIAotICAgICAgICBzdGF0aWMgSlNBY3RpdmF0aW9uKiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUpCisgICAgICAgIHN0YXRpYyBKU0FjdGl2YXRpb24q
IGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgeworICAgICAgICAgICAgU2hhcmVkU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwogICAgICAgICAg
ICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3ICgKICAgICAgICAgICAgICAgICBOb3RO
dWxsLAogICAgICAgICAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRpb24+KAogICAgICAg
ICAgICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAsCi0gICAgICAgICAgICAgICAgICAgIGFsbG9j
YXRpb25TaXplKGZ1bmN0aW9uRXhlY3V0YWJsZS0+c3ltYm9sVGFibGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpCiAgICAgICAgICAgICAgICAgKQot
ICAgICAgICAgICAgKSBKU0FjdGl2YXRpb24oZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLCBmdW5jdGlv
bkV4ZWN1dGFibGUtPnN5bWJvbFRhYmxlKCkpOworICAgICAgICAgICAgKSBKU0FjdGl2YXRpb24o
Z2xvYmFsRGF0YSwgY2FsbEZyYW1lLCBzeW1ib2xUYWJsZSk7CiAgICAgICAgICAgICBhY3RpdmF0
aW9uLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIHJldHVybiBhY3Rp
dmF0aW9uOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcAppbmRleCAxMmEyOGUzNDFmYjAyYWI5ODczMmZlMjBkNWU2MzU2NTg4NGEw
MWVkLi40ZGNhNWIwZjZmZTdhYTE1ZjcwYjg5MTRhNmUzNjJhNTkwZGY5NzViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIK
KyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgog
I2luY2x1ZGUgIkRlYnVnZ2VyQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3Ry
dWN0b3IuaCIKQEAgLTU3LDYgKzU4LDcgQEAKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNp
bmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMu
aCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVh
ZERhdGEuaD4KQEAgLTE5Niw2ICsxOTgsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShH
bG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBt
X2luaXRpYWxpemluZ09iamVjdENsYXNzKDApCiAjZW5kaWYKICAgICAsIG1faW5EZWZpbmVPd25Q
cm9wZXJ0eShmYWxzZSkKKyAgICAsIG1fY29kZUNhY2hlKENvZGVDYWNoZTo6Y3JlYXRlKCkpCiB7
CiAgICAgaW50ZXJwcmV0ZXIgPSBuZXcgSW50ZXJwcmV0ZXIoKnRoaXMpOwogCkBAIC0yMjEsNiAr
MjI0LDExIEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2Jh
bERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBzaGFyZWRTeW1ib2xUYWJsZVN0cnVj
dHVyZS5zZXQoKnRoaXMsIFNoYXJlZFN5bWJvbFRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAgICAgc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBT
dHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAg
IHNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTcGFyc2VBcnJheVZhbHVl
TWFwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgd2l0aFNjb3Bl
U3RydWN0dXJlLnNldCgqdGhpcywgSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJl
LnNldCgqdGhpcywgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLnNl
dCgqdGhpcywgVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQo
KnRoaXMsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmll
clRhYmxlKGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCmluZGV4IGU5N2MwYTAxNWQ0ODU0NDU0NzA3
NzczZjE3MTY2ZTIwMDZjMDQzZGUuLjBmZmFjY2I2YWQxMjVmNzY0ZjRiNWQ1YjEyOTdlZWM1M2Ey
NmE5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
CkBAIC02Myw2ICs2Myw3IEBAIHN0cnVjdCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE7CiBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENvZGVCbG9jazsKKyAgICBjbGFzcyBDb2RlQ2FjaGU7
CiAgICAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiAgICAgY2xhc3MgSGFuZGxlU3RhY2s7CiAg
ICAgY2xhc3MgSWRlbnRpZmllclRhYmxlOwpAQCAtODAsNiArODEsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIGNsYXNzIFJlZ0V4cDsKICNlbmRp
ZgorICAgIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOworICAgIGNsYXNzIFVubGlua2VkRXZhbENv
ZGVCbG9jazsKKyAgICBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKKyAgICBjbGFz
cyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7CiAKICAgICBzdHJ1Y3QgSGFzaFRhYmxlOwogICAg
IHN0cnVjdCBJbnN0cnVjdGlvbjsKQEAgLTIyMyw2ICsyMjgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNoYXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlOwog
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZTsKICAgICAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZTsKKyAgICAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gd2l0aFNjb3BlU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAgICAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlOworICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7Cisg
ICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1
cmU7CiAKICAgICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGU7CiAgICAgICAg
IENvbW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0eU5hbWVzOwpAQCAtNDM2LDYgKzQ0Niw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgSlNMb2NrJiBhcGlMb2NrKCkgeyBy
ZXR1cm4gbV9hcGlMb2NrOyB9CisgICAgICAgIENvZGVDYWNoZSogY29kZUNhY2hlKCkgeyByZXR1
cm4gbV9jb2RlQ2FjaGUuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC00NTYsNiArNDY3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9pbml0aWFsaXppbmdPYmplY3RDbGFz
czsKICNlbmRpZgogICAgICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsKKyAgICAgICAg
T3duUHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAKICAgICAgICAgVHlwZWRBcnJheURlc2Ny
aXB0b3IgbV9pbnQ4QXJyYXlEZXNjcmlwdG9yOwogICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRv
ciBtX2ludDE2QXJyYXlEZXNjcmlwdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDAzMjUyZmFkMWNhNzEyODRjNmEwY2MyMGRi
ZTYxN2FlYzc3ODdiY2IuLmM0NjZhMmIwNGEyZDYxZWEzODljMTFiYTcyZmI1Y2JmOWM0YjgwYmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJCb29sZWFuQ29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJCb29sZWFuUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5j
bHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCkBAIC01ODAsNCArNTgx
LDU4IEBAIHZvaWQgc2xvd1ZhbGlkYXRlQ2VsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoZ2xvYmFsT2JqZWN0LCAmSlNHbG9iYWxP
YmplY3Q6OnNfaW5mbyk7CiB9CiAKK1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogSlNHbG9iYWxP
YmplY3Q6OmNyZWF0ZVByb2dyYW1Db2RlQmxvY2soQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFByb2dy
YW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikKK3sKKyAgICBQ
YXJzZXJFcnJvciBlcnJvcjsKKyAgICBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcyA9IGV4
ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWw7
CisgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSA9IGhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dl
ck9uIDogRGVidWdnZXJPZmY7CisgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGhhc1By
b2ZpbGVyKCkgPyBQcm9maWxlck9uIDogUHJvZmlsZXJPZmY7CisgICAgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKiB1bmxpbmtlZENvZGUgPSBnbG9iYWxEYXRhKCkuY29kZUNhY2hlKCktPmdldFBy
b2dyYW1Db2RlQmxvY2soZ2xvYmFsRGF0YSgpLCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5zb3Vy
Y2UoKSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKKwor
ICAgIGlmIChoYXNEZWJ1Z2dlcigpKQorICAgICAgICBkZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQo
Y2FsbEZyYW1lLCBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBlcnJvci5tX2xpbmUs
IGVycm9yLm1fbWVzc2FnZSk7CisKKyAgICBpZiAoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9y
OjpFcnJvck5vbmUpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGVycm9yLnRvRXJyb3JPYmplY3Qo
dGhpcywgZXhlY3V0YWJsZS0+c291cmNlKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKK30KKworVW5saW5rZWRFdmFsQ29kZUJsb2Nr
KiBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlRXZhbENvZGVCbG9jayhDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQorewor
ICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNz
ID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5v
cm1hbDsKKyAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gaGFzRGVidWdnZXIoKSA/IERl
YnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKKyAgICBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlID0g
aGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKKyAgICBVbmxpbmtlZEV2
YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZSA9IGdsb2JhbERhdGEoKS5jb2RlQ2FjaGUoKS0+Z2V0
RXZhbENvZGVCbG9jayhnbG9iYWxEYXRhKCksIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJj
ZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworCisg
ICAgaWYgKGhhc0RlYnVnZ2VyKCkpCisgICAgICAgIGRlYnVnZ2VyKCktPnNvdXJjZVBhcnNlZChj
YWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGVycm9yLm1fbGluZSwg
ZXJyb3IubV9tZXNzYWdlKTsKKworICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6
OkVycm9yTm9uZSkgeworICAgICAgICAqZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdCh0
aGlzLCBleGVjdXRhYmxlLT5zb3VyY2UoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIHJldHVybiB1bmxpbmtlZENvZGU7Cit9CisKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlRnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJj
ZUNvZGUmIGNvZGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQoreworICAgIFBhcnNlckVycm9yIGVy
cm9yOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZ2xvYmFs
RGF0YSgpLmNvZGVDYWNoZSgpLT5nZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShn
bG9iYWxEYXRhKCksIG5hbWUsIGNvZGUsIGVycm9yKTsKKyAgICBpZiAoaGFzRGVidWdnZXIoKSkK
KyAgICAgICAgZGVidWdnZXIoKS0+c291cmNlUGFyc2VkKGNhbGxGcmFtZSwgY29kZS5wcm92aWRl
cigpLCBlcnJvci5tX2xpbmUsIGVycm9yLm1fbWVzc2FnZSk7CisKKyAgICBpZiAoZXJyb3IubV90
eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGVy
cm9yLnRvRXJyb3JPYmplY3QodGhpcywgY29kZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIHJldHVybiBleGVjdXRhYmxlOworfQorCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggNjVm
ZGE0OWQ4NDg4NDgyMDIyMzI2OGY1YTNiMWE1NTA1NWZlN2QyMi4uMzIxMjM2M2FiNGU3MTNhZmI0
YTE2NDI5OTNjMDM1NjQ0NDdmZmFkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC00Myw2ICs0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBEZWJ1Z2dlcjsKICAgICBjbGFzcyBFcnJvckNvbnN0cnVjdG9yOwogICAgIGNs
YXNzIEVycm9yUHJvdG90eXBlOworICAgIGNsYXNzIEV2YWxDb2RlQmxvY2s7CisgICAgY2xhc3Mg
RXZhbEV4ZWN1dGFibGU7CisgICAgY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CisgICAgY2xhc3Mg
RnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwogICAgIGNs
YXNzIEdldHRlclNldHRlcjsKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2s7CkBAIC01MCw5ICs1
NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiAgICAgY2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcjsKICAgICBjbGFzcyBQcm9ncmFtQ29k
ZUJsb2NrOworICAgIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlOwogICAgIGNsYXNzIFJlZ0V4cENv
bnN0cnVjdG9yOwogICAgIGNsYXNzIFJlZ0V4cFByb3RvdHlwZTsKLQorICAgIGNsYXNzIFNvdXJj
ZUNvZGU7CiAgICAgc3RydWN0IEFjdGl2YXRpb25TdGFja05vZGU7CiAgICAgc3RydWN0IEhhc2hU
YWJsZTsKIApAQCAtMTg1LDYgKzE5MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0
YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKKyAgICAgICAgYm9v
bCBoYXNEZWJ1Z2dlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KKyAgICAgICAgYm9v
bCBoYXNQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCkt
PnN1cHBvcnRzUHJvZmlsaW5nKHRoaXMpOyB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0
cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDApOwogCkBAIC0zNjYs
NiArMzc0LDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGRvdWJsZSB3ZWFrUmFuZG9t
TnVtYmVyKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9tLmdldCgpOyB9CiAgICAgICAgIHVuc2lnbmVk
IHdlYWtSYW5kb21JbnRlZ2VyKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9tLmdldFVpbnQzMigpOyB9
CisKKyAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGVQcm9ncmFtQ29kZUJs
b2NrKENhbGxGcmFtZSosIFByb2dyYW1FeGVjdXRhYmxlKiwgSlNPYmplY3QqKiBleGNlcHRpb24p
OworICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNyZWF0ZUV2YWxDb2RlQmxvY2soQ2Fs
bEZyYW1lKiwgRXZhbEV4ZWN1dGFibGUqLCBKU09iamVjdCoqIGV4Y2VwdGlvbik7CisgICAgICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGVGdW5jdGlvbkV4ZWN1dGFibGVGcm9t
R2xvYmFsQ29kZShDYWxsRnJhbWUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKKwogICAgIHByb3RlY3RlZDoKIAogICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGUuaAppbmRleCAwM2Y0YTc3OTA5MDc3ZTZhNmM1ZGFhMzhiNWIzMjllMDA2MWM2MjhiLi4x
MGQ5OGQyYmQyNWE2ZDFlMjI3NDdiNzAwM2E4MTYwZDgzMWIzMTZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGUuaApAQCAtNDEsNiArNDEsMTEgQEAgZW51bSBKU1R5cGUgewog
ICAgIFByb2dyYW1FeGVjdXRhYmxlVHlwZSwKICAgICBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLAog
CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLAorICAgIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9ja1R5cGUsCisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrVHlwZSwKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrVHlwZSwKKwogICAgIC8vIFRoZSBPYmplY3RUeXBlIHZhbHVl
IG11c3QgY29tZSBiZWZvcmUgYW55IEpTVHlwZSB0aGF0IGlzIGEgc3ViY2xhc3Mgb2YgSlNPYmpl
Y3QuCiAgICAgT2JqZWN0VHlwZSwKICAgICBGaW5hbE9iamVjdFR5cGUsCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172646</attachid>
            <date>2012-11-06 14:09:04 -0800</date>
            <delta_ts>2012-11-16 14:53:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101127-20121106140716.patch</filename>
            <type>text/plain</type>
            <size>230142</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
NjA4MDgwYmY4ZmFkYjRmNTQ2ODUyZTJkNjJkMjU3NjJkZjZjY2U0Li4yMjc0MGQ2NTc5MWFiMGUx
NjBkZWUxZDEzN2EzYWZmOWY0MjBlMDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw5NCBAQAogMjAxMi0xMS0wNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgog
CisgICAgICAgIFJlZHVjZSBwYXJzZXIgb3ZlcmhlYWQgaW4gSlNDCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExMjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbiBleGNpdGluZyBqb3VybmV5IGludG8g
dGhlIHdvcmxkIG9mIGFyY2hpdGVjdHVyZSBpbiB3aGljaCBvdXIgaGVybworICAgICAgICBhZGRz
IHlldCBhbm90aGVyIGxheWVyIHRvIEpTQyBjb2RlZ2VuZXJhdGlvbi4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgYSBtYXJnaW5hbGx5IG1vcmUgY29tcGFjdCBmb3JtIG9mIGJ5dGVjb2RlIHRo
YXQgaXMKKyAgICAgICAgZnJlZSBmcm9tIGFueSBkYXRhIHNwZWNpZmljIHRvIGEgZ2l2ZW4gZXhl
Y3V0aW9uIGNvbnRleHQsIGFuZCB0aGF0CisgICAgICAgIGRvZXMgc3RvcmUgYW55IGRhdGEgc3Ry
dWN0dXJlcyBuZWNlc3NhcnkgZm9yIGV4ZWN1dGlvbi4gIFRvIGFjdHVhbGx5CisgICAgICAgIGV4
ZWN1dGUgdGhpcyBVbmxpbmtlZEJ5dGVjb2RlIHdlIHN0aWxsIG5lZWQgdG8gaW5zdGFudGlhdGUg
YSByZWFsCisgICAgICAgIENvZGVCbG9jaywgYnV0IHRoaXMgaXMgYSBtdWNoIGZhc3RlciBsaW5l
YXIgdGltZSBvcGVyYXRpb24gdGhhbiBhbnkKKyAgICAgICAgb2YgdGhlIGVhcmxpZXIgcGFyc2lu
ZyBvciBjb2RlIGdlbmVyYXRpb24gcGFzc2VzLgorCisgICAgICAgIEFzIHRoZSB1bmxpbmtlZCBj
b2RlIGlzIGNvbnRleHQgZnJlZSB3ZSBjYW4gdGhlbiBzaW1wbHkgdXNlIGEgY2FjaGUKKyAgICAg
ICAgZnJvbSBzb3VyY2UgdG8gdW5saW5rZWQgY29kZSBtYXBwaW5nIHRvIGNvbXBsZXRlbHkgYXZv
aWQgYWxsIG9mIHRoZQorICAgICAgICBvbGQgcGFyc2VyIG92ZXJoZWFkLiAgVGhlIGNhY2hlIGlz
IGN1cnJlbnRseSB2ZXJ5IHNpbXBsZSBhbmQgbWVtb3J5CisgICAgICAgIGhlYXZ5LCB1c2luZyB0
aGUgY29tcGxldGUgc291cmNlIHRleHQgYXMgYSBrZXkgKHJhdGhlciB0aGFuIFNvdXJjZUNvZGUK
KyAgICAgICAgb3IgZXF1aXZhbGVudCksIGFuZCBhIHJhbmRvbSBldmljdGlvbiBwb2xpY3kuCisK
KyAgICAgICAgVGhpcyBzZWVtcyB0byBwcm9kdWNlIGEgc3Vic3RhbnRpYWwgd2luIHdoZW4gbG9h
ZGluZyBpZGVudGljYWwgY29udGVudAorICAgICAgICBpbiBkaWZmZXJlbnQgY29udGV4dHMuCisK
KyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgICAgIE1vdmVkIGEgbnVtYmVyIG9mIGZpZWxkcywgYW5k
IGEgYnVuY2ggb2YgbG9naWMgdG8gVW5saW5rZWRDb2RlQmxvY2suaC9jcHAKKyAgICAgICAgKiBi
eXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgICAgIEFkZGVkIGEgZ2xvYmFsIGNvbnN0IGluaXQg
bm8gb3AgaW5zdHJ1Y3Rpb24gbmVlZGVkIHRvIGdldCBjb3JyZWN0CisgICAgICAgICAgICBiZWhh
dmlvdXIgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBzZW1hbnRpY3MuCisgICAgICAgICogYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgICAgIEEgZmFpcmx5IHNoYWxsb3csIEdD
IGFsbG9jYXRlZCB2ZXJzaW9uIG9mIHRoZSBvbGQgQ29kZUJsb2NrCisgICAgICAgICAgICBjbGFz
c2VzIHdpdGggYSAzMmJpdCBpbnN0cnVjdGlvbiBzaXplLCBhbmQganVzdCBtZXRhZGF0YQorICAg
ICAgICAgICAgc2l6ZSB0cmFja2luZy4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
OgorICAgICAgICAgICAgUmVwbGFjZSBkaXJlY3QgYWNjZXNzIHRvIG1fc3ltYm9sVGFibGUgd2l0
aCBhY2Nlc3MgdGhyb3VnaAorICAgICAgICAgICAgc3ltYm9sVGFibGUoKS4gIFByb2dyYW1Db2Rl
IG5vIGxvbmdlciBoYXMgYSBzeW1ib2wgdGFibGUgYXQKKyAgICAgICAgICAgIGFsbCBzbyBzb21l
IHByZXZpb3VzbHkgdW5jb25kaXRpb25hbCAoYW5kIHBvaW50bGVzcykgdXNlcworICAgICAgICAg
ICAgb2Ygc3ltYm9sVGFibGUgZ2V0IG51bGwgY2hlY2tzLgorICAgICAgICAgICAgQSBmZXcgb3Ro
ZXIgY2hhbmdlcyB0byBkZWFsIHdpdGggdHlwZSBjaGFuZ2VzIGR1ZSB0byB1cyBnZW5lcmF0aW5n
CisgICAgICAgICAgICB1bmxpbmtlZCBjb2RlIChlZy4gcG9pbnRlciBmcmVlLCBzbyBwcm9maWxl
IGluZGljZXMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIHBvaW50ZXJzKS4KKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMu
aDoKKyAgICAgICAgICAgIFN1cHBvcnQgZ2xvYmFsX2luaXRfbm9wICAgICAgICAKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgICAgICBOb3cgZ2V0IHRoZSBQ
cm9ncmFtRXhlY3V0YWJsZSB0byBpbml0aWFsaXNlIG5ldyBnbG9iYWwgcHJvcGVydGllcworICAg
ICAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIGV4ZWN1dGlvbi4gICAgICAgIAorICAgICAgICAqIGpp
dC9KSVQuY3BwOgorICAgICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKiBqaXQvSklU
U3R1YnMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgICAgIEFk
ZGluZyBpbml0X2dsb2JhbF9jb25zdF9ub3AgZXZlcnl3aGVyZSBlbHNlCisgICAgICAgICogcGFy
c2VyL1BhcnNlci5oOgorICAgICAgICAqIHBhcnNlci9QYXJzZXJNb2Rlcy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyVG9rZW5zLmg6CisgICAgICAgICAgICBQYXJzZXIgbm8gbG9u
Z2VyIG5lZWRzIGEgZ2xvYmFsIG9iamVjdCBvciBjYWxsZnJhbWUgdG8gZnVuY3Rpb24gICAgICAg
IAorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9Db2RlQ2FjaGUuaDogQWRkZWQuCisgICAgICAgICAgICBBIHNpbXBsZSwgcmFuZG9tIGV2
aWN0aW9uLCBTb3VyY2UtPlVubGlua2VkQ29kZSBjYWNoZSAgICAgICAgCisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAg
ICAgICAgICAgIEV4ZWN1dGFibGVzIG5vdyByZWZlcmVuY2UgdGhlaXIgdW5saW5rZWQgY291bnRl
cnBhcnRzLCBhbmQKKyAgICAgICAgICAgIHJlcXVlc3QgY29kZSBzcGVjaWZpY2FsbHkgZm9yIHRo
ZSB0YXJnZXQgZ2xvYmFsIG9iamVjdC4gICAgICAgIAorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAg
ICAgR2xvYmFsRGF0YSBub3cgb3ducyBhIENvZGVDYWNoZSBhbmQgYSBzZXQgb2YgbmV3IHN0cnVj
dHVyZXMKKyAgICAgICAgICAgIGZvciB0aGUgdW5saW5rZWQgY29kZSB0eXBlcy4gIAorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgICAgIFV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgZXhlY3V0
YWJsZXMgdG8gcGVyZm9ybSBjb21waWxhdGlvbgorIAorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBl
Lmg6CisgICAgICAgICAgQWRkIG5ldyBKU1R5cGVzIGZvciB1bmxpbmtlZCBjb2RlCisKKzIwMTIt
MTEtMDYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKwogICAgICAgICBSZWR1Y2Ug
ZGlyZWN0IG1fc3ltYm9sVGFibGUgdXNhZ2UgaW4gQ29kZUJsb2NrCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEzOTEKIApAQCAtMjAwMyw3ICsyMDky
LDcgQEAKICAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25leHRfcG5hbWUpOgogICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKICAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2NhdGNoKToKLSAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93X3JlZmVyZW5jZV9lcnJv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvd19zdGF0aWNfZXJyb3IpOgogICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CiAgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXFfbnVsbCk6CiAgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfYWN0aXZh
dGlvbik6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNzU0ZjMwNDY2OGUz
MTFkNDdkMDllYTRlNzk0MGI3ODQ5YWEwM2IwZC4uMzkzZGI2N2MzYjIxODgzZTU0NzI5M2ZjZWI0
YjA5NzlkMzg2NjRiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTks
NiArNTksNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2RlL1NwZWNp
YWxQb2ludGVyLmNwcAogICAgIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQuY3BwCiAgICAgYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCisgICAgYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCiAgICAgYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAKIAogICAg
IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTE3NCw2ICsxNzUsNyBAQCBT
RVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAK
ICAgICBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9DYWxsRGF0YS5j
cHAKKyAgICBydW50aW1lL0NvZGVDYWNoZS5jcHAKICAgICBydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmNwcAogICAgIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHAKICAgICBydW50aW1lL0NvbnN0cnVj
dERhdGEuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IDQ1N2NjZThkODUyMmRmMDBmNWY2YzgxY2U4ZTNlMGI5ZjcxOGUxNTkuLmQ2OGEyMmI5ZjcxNGE0
MWMyNzZhNDgwZGVmN2I3ZjlhYzRhYWM3OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC0xMzgsNiArMTM4LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYWx1ZVByb2ZpbGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUmVjb3ZlcnkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxS
ZWdpc3Rlci5oIFwKQEAgLTQ0NCw2ICs0NDYsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyTW9kZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9SZXN1bHRUeXBlLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmggXApAQCAtNDg0LDYgKzQ4Nyw4
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhbGxEYXRhLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fs
bERhdGEuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmggXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAgXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2RlU3BlY2lhbGl6YXRpb25LaW5kLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCmluZGV4IDA0ODFlMWJkNTJh
ZWE4NjllYzQ4MjM5Y2I2NzJlYmE5OTA0MzRhMjEuLmM2MzIzMWMyYzdiMjVlMjBmZDY2ZmM5YmFk
ZmQ3ZTJkN2FiNDJlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCkBAIC02MzgsNiArNjM4LDE0IEBACiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQ29kZUNh
Y2hlLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5ccnVudGltZVxDb2RlQ2FjaGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxDb21tb25JZGVudGlmaWVycy5jcHAiCiAJ
CQkJPgogCQkJPC9GaWxlPgpAQCAtMTc0Niw2ICsxNzU0LDE0IEBACiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXFVubGlua2VkQ29k
ZUJsb2NrLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cYnl0ZWNvZGVcVW5saW5rZWRDb2RlQmxvY2suaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcVmFsdWVQcm9maWxl
LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMjIzMCw2ICsyMjQ2LDEwIEBACiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBhcnNlclxQYXJzZXJN
b2Rlcy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxwYXJzZXJcUGFyc2VyQXJlbmEuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTM5ZWZlMjhjY2VhYzg2MDllOGU3NDFkMTNiOGEwMDIz
MmQ3ZmQ4Yi4uM2NhZGExY2Q3Y2VmZmI5MjdhY2RiN2E4MzgwNTFlMGIxNTc4YWY0NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU4MCwxMiArNTgwLDE3IEBACiAJCUE3NTcwNkRF
MTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1NzA2REQxMThBMkJDRjAwNTdGODhG
IC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgKi87IH07CiAJCUE3NjZCNDRGMEVFOERDRDEwMDk1
MThDQSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE3NkM1MTc2MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2QzUxNzQxMTgyNzQ4
RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTc2RjI3OTQxNUYxM0M5NjAwNTE3RDY3IC8qIFVubGlu
a2VkQ29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3OUU3ODFFMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAg
Ki87IH07CiAJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NkY1NEEyMTNC
MjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLzsgfTsKKwkJQTc3RjE4MjExNjQw
ODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzdGMTgxRjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hl
LmNwcCAqLzsgfTsKKwkJQTc3RjE4MjIxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3RjE4MjAxNjQw
ODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQYXJzZXJN
b2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3
RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFD
IC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi87IH07CiAJ
CUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NzExQjk4QjhEMDA2NUEx
NEYgLyogU3ludGF4Q2hlY2tlci5oICovOyB9OwogCQlBN0FGQzE3OTE1RjdFRkUzMDA0OEY1N0Ig
LyogUmVzb2x2ZU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdBRkMxNzcxNUY3RUZFMzAwNDhGNTdCIC8qIFJlc29sdmVPcGVyYXRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0I0
OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0OERCNjBFRTc0Q0ZDMDBE
Q0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi87IH07CiAJCUE3QjRBQ0FGMTQ4NEM5
Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNEFDQUUxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0
TWFjcm9zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQTdCNjAxODIxNjM5RkQyQTAwMzcyQkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzlFNzgxRjE1RUVDQkE4
MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0MxRThFNDExMkU3MkVGMDBBMzdGOTggLyogSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAgKi87IH07CiAJCUE3RENCOTczMTJFNTE5M0YwMDkxMTk0MCAvKiBXcml0ZUJh
cnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
RENCNzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0UyRUE2QjBGQjQ2MENGMDA2MDFG
MDYgLyogTGl0ZXJhbFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdFMkVBNjkwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCAq
LzsgfTsKQEAgLTEzNzgsNiArMTM4MywxMSBAQAogCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkg
LyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZD
NTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc3RjE4MUYxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVD
YWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlQ2FjaGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzdGMTgyMDE2NDA4OEIyMDA2NDBB
NDcgLyogQ29kZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVD
YWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzdGMTgyNDE2NDE5MjU0MDA2
NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyTW9kZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc5RTc4MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVu
bGlua2VkQ29kZUJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVubGlua2VkQ29kZUJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc5
RTc4MUYxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua2VkQ29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3OUVEQjA4MTE1MzFDRDYwMDE5RTkxMiAvKiBKU09iamVjdFJlZlBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPYmplY3RSZWZQcml2
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc0MTFCOThCOEQwMDY1
QTE0RiAvKiBBU1RCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFT
VEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBN0VFNzcxMUI5OEI4
RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3ludGF4Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA2
Myw2ICsyMDczLDcgQEAKIAkJCQlFNDlEQzE1MTEyRUYyNzIyMDAxODRBMUYgLyogU291cmNlUHJv
dmlkZXJDYWNoZS5oICovLAogCQkJCUU0OURDMTQ5MTJFRjI2MUEwMDE4NEExRiAvKiBTb3VyY2VQ
cm92aWRlckNhY2hlSXRlbS5oICovLAogCQkJCUE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBT
eW50YXhDaGVja2VyLmggKi8sCisJCQkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNl
ck1vZGVzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHBhcnNlcjsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC0yMjk3LDYgKzIzMDgsOCBAQAogCQkJCTE0MjBCRTdBMTBBQTZEREIwMEY0
NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAwOTExOTQwIC8q
IFdyaXRlQmFycmllci5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0Fj
dGl2aXR5Q2FsbGJhY2suY3BwICovLAorCQkJCUE3N0YxODFGMTY0MDg4QjIwMDY0MEE0NyAvKiBD
b2RlQ2FjaGUuY3BwICovLAorCQkJCUE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2Fj
aGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC0yNTY3LDYgKzI1ODAsOCBAQAogCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjND
NiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBT
dHJ1Y3R1cmVTZXQuaCAqLywKKwkJCQlBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5r
ZWRDb2RlQmxvY2suY3BwICovLAorCQkJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxp
bmtlZENvZGVCbG9jay5oICovLAogCQkJKTsKIAkJCXBhdGggPSBieXRlY29kZTsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yOTkzLDYgKzMwMDgsOSBAQAogCQkJCTBGRUIzRUNEMTYy
MzdGNEQwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQ
YXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxQjE2MjYyQkREMDA1QUM1
RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3QjYwMTgyMTYzOUZEMkEwMDM3
MkJBMyAvKiBVbmxpbmtlZENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTc3RjE4MjIx
NjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTc3RjE4
MjUxNjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM1
NjksNiArMzU4Nyw4IEBACiAJCQkJQzI0RDMxRTIxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAv
KiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjIzOUQxQTE2MjYyQkREMDA1
QUM1RkQgLyogR0NUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTc2RjI3OTQxNUYxM0M5
NjAwNTE3RDY3IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3
N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9UYXJnZXQucHJpCmluZGV4IDE4NmE1NGI0ZWU2MTk5ZThkNWY1ZTY5OGQ1Njkw
NTkxYWEwYzQ2MmYuLmIwZmNjMTZlN2M1YmY1NWJhNDc3ZGZmMTAzOTljYmMxMTRhNzY4MmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCkBAIC02OSw2ICs2OSw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcCBcCiAgICAgYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgXAogICAgIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcCBcCisgICAgYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIFwKICAgICBieXRl
Y29kZS9XYXRjaHBvaW50LmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXApAQCAtMTg0LDYgKzE4
NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAgXAogICAg
IHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAgXAogICAgIHJ1bnRpbWUvQ2FsbERhdGEuY3Bw
IFwKKyAgICBydW50aW1lL0NvZGVDYWNoZS5jcHAgXAogICAgIHJ1bnRpbWUvQ29tbW9uSWRlbnRp
ZmllcnMuY3BwIFwKICAgICBydW50aW1lL0NvbXBsZXRpb24uY3BwIFwKICAgICBydW50aW1lL0Nv
bnN0cnVjdERhdGEuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKaW5kZXggMjRmNzQ3YTljNzI5Y2YwY2FmNTgzYTZhN2MyY2ZjN2Q0M2MzZWJkZS4u
NTY2YzYyMzZkZDkyMThhNWFiZjU5MTM1YTI3N2ZjNWRmZmQwZGUwMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTUyNywxMyArNTI3LDEzIEBA
IHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgfSB3aGlsZSAo
aSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICB9CiAKLSAgICBpZiAobV9yYXJl
RGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9yZWdleHBzLmlzRW1wdHkoKSkgeworICAgIGlmIChzaXpl
X3QgY291bnQgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZSZWdFeHBzKCkpIHsKICAgICAgICAg
ZGF0YUxvZygiXG5tX3JlZ2V4cHM6XG4iKTsKICAgICAgICAgc2l6ZV90IGkgPSAwOwogICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgIHJlJXUgPSAlc1xuIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGkpLCByZWdleHBUb1NvdXJjZVN0cmluZyhtX3JhcmVEYXRhLT5tX3JlZ2V4cHNb
aV0uZ2V0KCkpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGF0YUxvZygiICByZSV1ID0g
JXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgcmVnZXhwVG9Tb3VyY2VTdHJpbmcobV91
bmxpbmtlZENvZGUtPnJlZ2V4cChpKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICArK2k7
Ci0gICAgICAgIH0gd2hpbGUgKGkgPCBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpKTsKKyAg
ICAgICAgfSB3aGlsZSAoaSA8IGNvdW50KTsKICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAt
NjY3LDcgKzY2Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImCiAgICAgICAgICAgICBpbnQg
ZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgYXJndiA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ2MgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGRhdGFMb2coIlslNGRdIG5ld19hcnJheV9idWZmZXIgJXMsICVkLCAlZCIsIGxv
Y2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgZHN0KS5kYXRhKCksIGFyZ3YsIGFyZ2MpOworICAg
ICAgICAgICAgZGF0YUxvZygiWyU0ZF0gbmV3X2FycmF5X2J1ZmZlclx0ICVzLCAlZCwgJWQiLCBs
b2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIGRzdCkuZGF0YSgpLCBhcmd2LCBhcmdjKTsKICAg
ICAgICAgICAgIGR1bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02NzUsNyArNjc1LDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25z
dF9pdGVyYXRvciYKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
ICAgICAgICAgaW50IHJlMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgZGF0YUxv
ZygiWyU0ZF0gbmV3X3JlZ2V4cFx0ICVzLCAiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMs
IHIwKS5kYXRhKCkpOwotICAgICAgICAgICAgaWYgKHIwID49MCAmJiByMCA8IChpbnQpbnVtYmVy
T2ZSZWdFeHBzKCkpCisgICAgICAgICAgICBpZiAocjAgPj0wICYmIHIwIDwgKGludCltX3VubGlu
a2VkQ29kZS0+bnVtYmVyT2ZSZWdFeHBzKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiJXMi
LCByZWdleHBOYW1lKHJlMCwgcmVnZXhwKHJlMCkpLmRhdGEoKSk7CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiYmFkX3JlZ2V4cCglZCkiLCByZTApOwpAQCAtODg1
LDExICs4ODUsMjIgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIGl0Kys7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2luaXRfZ2xv
YmFsX2NvbnN0X25vcDogeworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gaW5pdF9nbG9iYWxf
Y29uc3Rfbm9wXHQiLCBsb2NhdGlvbik7CisgICAgICAgICAgICBkdW1wQnl0ZWNvZGVDb21tZW50
QW5kTmV3TGluZShsb2NhdGlvbik7CisgICAgICAgICAgICBpdCsrOworICAgICAgICAgICAgaXQr
KzsKKyAgICAgICAgICAgIGl0Kys7CisgICAgICAgICAgICBpdCsrOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDogewogICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSAoKytpdCkt
PnUucmVnaXN0ZXJQb2ludGVyOwogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBpbml0X2dsb2JhbF9jb25zdFx0IGclZCgl
cCksICVzIiwgbG9jYXRpb24sIG1fZ2xvYmFsT2JqZWN0LT5maW5kUmVnaXN0ZXJJbmRleChyZWdp
c3RlclBvaW50ZXIpLCByZWdpc3RlclBvaW50ZXIsIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0
YSgpKTsKICAgICAgICAgICAgIGR1bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9u
KTsKKyAgICAgICAgICAgIGl0Kys7CisgICAgICAgICAgICBpdCsrOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazog
ewpAQCAtMTM5MSw5ICsxNDAyLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImCiAgICAgICAg
ICAgICBkdW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3TGluZShsb2NhdGlvbik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Rocm93X3JlZmVyZW5jZV9lcnJv
cjogeworICAgICAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjogewogICAgICAgICAgICAg
aW50IGswID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSB0
aHJvd19yZWZlcmVuY2VfZXJyb3JcdCAlcyIsIGxvY2F0aW9uLCBjb25zdGFudE5hbWUoZXhlYywg
azAsIGdldENvbnN0YW50KGswKSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGludCBrMSA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gdGhyb3dfc3RhdGljX2Vy
cm9yXHQgJXMsICVzIiwgbG9jYXRpb24sIGNvbnN0YW50TmFtZShleGVjLCBrMCwgZ2V0Q29uc3Rh
bnQoazApKS5kYXRhKCksIGsxID8gInRydWUiIDogImZhbHNlIik7CiAgICAgICAgICAgICBkdW1w
Qnl0ZWNvZGVDb21tZW50QW5kTmV3TGluZShsb2NhdGlvbik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMTQ5MSw5ICsxNTAzLDkgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0
aXN0aWNzKCkKICAgICAgICAgICAgIEZPUl9FQUNIX01FTUJFUl9WRUNUT1IoR0VUX1NUQVRTKQog
ICAgICAgICAjdW5kZWYgR0VUX1NUQVRTCiAKLSAgICAgICAgaWYgKCFjb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPnN5bWJvbFRhYmxl
KCkgJiYgIWNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBzeW1ib2xUYWJsZUlzTm90RW1wdHkrKzsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlVG90YWxT
aXplICs9IChjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkuY2FwYWNpdHkoKSAqIChzaXplb2YoU3lt
Ym9sVGFibGU6OktleVR5cGUpICsgc2l6ZW9mKFN5bWJvbFRhYmxlOjpNYXBwZWRUeXBlKSkpOwor
ICAgICAgICAgICAgc3ltYm9sVGFibGVUb3RhbFNpemUgKz0gKGNvZGVCbG9jay0+c3ltYm9sVGFi
bGUoKS0+Y2FwYWNpdHkoKSAqIChzaXplb2YoU3ltYm9sVGFibGU6OktleVR5cGUpICsgc2l6ZW9m
KFN5bWJvbFRhYmxlOjpNYXBwZWRUeXBlKSkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNv
ZGVCbG9jay0+bV9yYXJlRGF0YSkgewpAQCAtMTU2MSwzMyArMTU3MywyNiBAQCBDb2RlQmxvY2s6
OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCiAgICAgLCBt
X251bUNhbGxlZVJlZ2lzdGVycyhvdGhlci5tX251bUNhbGxlZVJlZ2lzdGVycykKICAgICAsIG1f
bnVtVmFycyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBtX2lzQ29uc3RydWN0b3Iob3RoZXIubV9p
c0NvbnN0cnVjdG9yKQorICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLm1fZ2xvYmFsRGF0YSwg
b3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgp
KQogICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fZ2xvYmFsRGF0YSwgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQogICAg
ICwgbV9nbG9iYWxEYXRhKG90aGVyLm1fZ2xvYmFsRGF0YSkKICAgICAsIG1faW5zdHJ1Y3Rpb25z
KG90aGVyLm1faW5zdHJ1Y3Rpb25zKQogICAgICwgbV90aGlzUmVnaXN0ZXIob3RoZXIubV90aGlz
UmVnaXN0ZXIpCiAgICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKG90aGVyLm1fYXJndW1lbnRzUmVn
aXN0ZXIpCiAgICAgLCBtX2FjdGl2YXRpb25SZWdpc3RlcihvdGhlci5tX2FjdGl2YXRpb25SZWdp
c3RlcikKLSAgICAsIG1fbmVlZHNGdWxsU2NvcGVDaGFpbihvdGhlci5tX25lZWRzRnVsbFNjb3Bl
Q2hhaW4pCi0gICAgLCBtX3VzZXNFdmFsKG90aGVyLm1fdXNlc0V2YWwpCi0gICAgLCBtX2lzTnVt
ZXJpY0NvbXBhcmVGdW5jdGlvbihvdGhlci5tX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbikKICAg
ICAsIG1faXNTdHJpY3RNb2RlKG90aGVyLm1faXNTdHJpY3RNb2RlKQotICAgICwgbV9jb2RlVHlw
ZShvdGhlci5tX2NvZGVUeXBlKQogICAgICwgbV9zb3VyY2Uob3RoZXIubV9zb3VyY2UpCiAgICAg
LCBtX3NvdXJjZU9mZnNldChvdGhlci5tX3NvdXJjZU9mZnNldCkKICNpZiBFTkFCTEUoVkFMVUVf
UFJPRklMRVIpCiAgICAgLCBtX2V4ZWN1dGlvbkVudHJ5Q291bnQoMCkKICNlbmRpZgotICAgICwg
bV9qdW1wVGFyZ2V0cyhvdGhlci5tX2p1bXBUYXJnZXRzKQotICAgICwgbV9sb29wVGFyZ2V0cyhv
dGhlci5tX2xvb3BUYXJnZXRzKQogICAgICwgbV9pZGVudGlmaWVycyhvdGhlci5tX2lkZW50aWZp
ZXJzKQogICAgICwgbV9jb25zdGFudFJlZ2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJz
KQogICAgICwgbV9mdW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKICAgICAsIG1f
ZnVuY3Rpb25FeHBycyhvdGhlci5tX2Z1bmN0aW9uRXhwcnMpCi0gICAgLCBtX3N5bWJvbFRhYmxl
KCpvdGhlci5tX2dsb2JhbERhdGEsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhl
ci5zeW1ib2xUYWJsZSgpKQogICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQogICAgICwgbV9vcHRp
bWl6YXRpb25EZWxheUNvdW50ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIoMCkKLSAgICAsIG1fbGluZUluZm8ob3RoZXIubV9saW5lSW5mbykKICAgICAsIG1fcmVzb2x2
ZU9wZXJhdGlvbnMob3RoZXIubV9yZXNvbHZlT3BlcmF0aW9ucykKICAgICAsIG1fcHV0VG9CYXNl
T3BlcmF0aW9ucyhvdGhlci5tX3B1dFRvQmFzZU9wZXJhdGlvbnMpCiAjaWYgRU5BQkxFKEJZVEVD
T0RFX0NPTU1FTlRTKQpAQCAtMTYwNSwzNiArMTYxMCwzMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCiAgICAgICAgIGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCiAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzOwot
ICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX3JlZ2V4
cHM7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzID0gb3RoZXIubV9yYXJl
RGF0YS0+bV9jb25zdGFudEJ1ZmZlcnM7CiAgICAgICAgIG1fcmFyZURhdGEtPm1faW1tZWRpYXRl
U3dpdGNoSnVtcFRhYmxlcyA9IG90aGVyLm1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVt
cFRhYmxlczsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVz
ID0gb3RoZXIubV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzOwogICAgICAg
ICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRh
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVz
c2lvbkluZm8gPSBvdGhlci5tX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvOwogICAgIH0KIH0K
IAotQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QgKmdsb2JhbE9iamVjdCwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNl
dCwgYm9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUp
CitDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdW5zaWduZWQgYmFzZVNjb3BlRGVwdGgsIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFBhc3NPd25QdHI8
Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1f
aGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKQotICAgICwgbV9udW1DYWxs
ZWVSZWdpc3RlcnMoMCkKLSAgICAsIG1fbnVtVmFycygwKQotICAgICwgbV9pc0NvbnN0cnVjdG9y
KGlzQ29uc3RydWN0b3IpCi0gICAgLCBtX251bVBhcmFtZXRlcnMoMCkKKyAgICAsIG1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycykKKyAg
ICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQorICAgICwgbV9pc0Nv
bnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCisgICAgLCBtX3Vu
bGlua2VkQ29kZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlLCB1
bmxpbmtlZENvZGVCbG9jaykKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKLSAgICAsIG1f
Z2xvYmFsRGF0YSgwKQotICAgICwgbV9hcmd1bWVudHNSZWdpc3RlcigtMSkKLSAgICAsIG1fbmVl
ZHNGdWxsU2NvcGVDaGFpbihvd25lckV4ZWN1dGFibGUtPm5lZWRzQWN0aXZhdGlvbigpKQotICAg
ICwgbV91c2VzRXZhbChvd25lckV4ZWN1dGFibGUtPnVzZXNFdmFsKCkpCi0gICAgLCBtX2lzTnVt
ZXJpY0NvbXBhcmVGdW5jdGlvbihmYWxzZSkKLSAgICAsIG1faXNTdHJpY3RNb2RlKG93bmVyRXhl
Y3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkpCi0gICAgLCBtX2NvZGVUeXBlKGNvZGVUeXBlKQorICAg
ICwgbV9nbG9iYWxEYXRhKHVubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxEYXRhKCkpCisgICAgLCBt
X3RoaXNSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpCisgICAgLCBt
X2FyZ3VtZW50c1JlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3Rlcigp
KQorICAgICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPmFjdGl2YXRp
b25SZWdpc3RlcigpKQorICAgICwgbV9pc1N0cmljdE1vZGUodW5saW5rZWRDb2RlQmxvY2stPmlz
U3RyaWN0TW9kZSgpKQogICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlkZXIpCiAgICAgLCBtX3Nv
dXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAg
ICwgbV9leGVjdXRpb25FbnRyeUNvdW50KDApCiAjZW5kaWYKLSAgICAsIG1fc3ltYm9sVGFibGUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSwgU2hhcmVkU3ltYm9s
VGFibGU6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSkpCiAgICAgLCBtX2FsdGVy
bmF0aXZlKGFsdGVybmF0aXZlKQogICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQogICAgICwgbV9v
cHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKQEAgLTE2NDMsNyArMTY0MywxMCBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsbwogICAgICwgbV9ieXRlY29kZUNvbW1lbnRJdGVyYXRvcigwKQogI2Vu
ZGlmCiB7CisgICAgbV9nbG9iYWxEYXRhLT5zdGFydGVkQ29tcGlsaW5nKHRoaXMpOworCiAgICAg
QVNTRVJUKG1fc291cmNlKTsKKyAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpOwogCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgIGpp
dEFmdGVyV2FybVVwKCk7CkBAIC0xNjUxLDkgKzE2NTQsMjA4IEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUs
IEpTR2xvCiAjaWYgRFVNUF9DT0RFX0JMT0NLX1NUQVRJU1RJQ1MKICAgICBsaXZlQ29kZUJsb2Nr
U2V0LmFkZCh0aGlzKTsKICNlbmRpZgotICAgIC8vIFdlIGhhdmUgYSBzdHViIHB1dFRvQmFzZSBv
cGVyYXRpb24gdG8gYWxsb3cgcmVzb2x2ZV9iYXNlIHRvCi0gICAgLy8gcmVtYWluIGJyYW5jaGxl
c3MKLSAgICBtX3B1dFRvQmFzZU9wZXJhdGlvbnMuYXBwZW5kKFB1dFRvQmFzZU9wZXJhdGlvbihp
c1N0cmljdE1vZGUoKSkpOworICAgIHNldElkZW50aWZpZXJzKHVubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVycygpKTsKKyAgICBzZXRDb25zdGFudFJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9j
ay0+Y29uc3RhbnRSZWdpc3RlcnMoKSk7CisKKyAgICBtX2Z1bmN0aW9uRGVjbHMuZ3Jvdyh1bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOworICAgIGZvciAoc2l6ZV90
IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7
CisgICAgICAgIHVuc2lnbmVkIGxpbmVDb3VudCA9IHVubGlua2VkRXhlY3V0YWJsZS0+bGluZUNv
dW50KCk7CisgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IG93bmVyRXhlY3V0YWJsZS0+bGlu
ZU5vKCkgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPmZpcnN0TGluZU9mZnNldCgpOworICAgICAgICB1
bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJjZU9mZnNldCArIHVubGlua2VkRXhlY3V0YWJsZS0+
c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoID0gdW5saW5rZWRF
eGVjdXRhYmxlLT5zb3VyY2VMZW5ndGgoKTsKKyAgICAgICAgU291cmNlQ29kZSBjb2RlKG1fc291
cmNlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBzb3VyY2VMZW5ndGgsIGZpcnN0TGluZSk7
CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwgZmly
c3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291bnQpOworICAgICAgICBtX2Z1bmN0aW9uRGVjbHNb
aV0uc2V0KCptX2dsb2JhbERhdGEsIG93bmVyRXhlY3V0YWJsZSwgZXhlY3V0YWJsZSk7CisgICAg
fQorCisgICAgbV9mdW5jdGlvbkV4cHJzLmdyb3codW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9m
RnVuY3Rpb25FeHBycygpKTsKKyAgICBmb3IgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Cisg
ICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1
bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkpOworICAgICAgICB1bnNpZ25lZCBsaW5l
Q291bnQgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmVDb3VudCgpOworICAgICAgICB1bnNpZ25l
ZCBmaXJzdExpbmUgPSBvd25lckV4ZWN1dGFibGUtPmxpbmVObygpICsgdW5saW5rZWRFeGVjdXRh
YmxlLT5maXJzdExpbmVPZmZzZXQoKTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBz
b3VyY2VPZmZzZXQgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPnN0YXJ0T2Zmc2V0KCk7CisgICAgICAg
IHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRXhlY3V0YWJsZS0+c291cmNlTGVuZ3Ro
KCk7CisgICAgICAgIFNvdXJjZUNvZGUgY29kZShtX3NvdXJjZSwgc3RhcnRPZmZzZXQsIHN0YXJ0
T2Zmc2V0ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUpOworICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxE
YXRhLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbGlu
ZUNvdW50KTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzW2ldLnNldCgqbV9nbG9iYWxEYXRhLCBv
d25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUpOworICAgIH0KKworICAgIGlmICh1bmxpbmtlZENv
ZGVCbG9jay0+aGFzUmFyZURhdGEoKSkgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNz
YXJ5KCk7CisgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRCdWZmZXJDb3VudCgpKSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50
QnVmZmVycy5ncm93KGNvdW50KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrOjpD
b25zdGFudEJ1ZmZlciYgYnVmZmVyID0gdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50QnVmZmVy
KGkpOworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2ldID0g
YnVmZmVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzaXplX3QgY291
bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Cisg
ICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmdyb3coY291bnQpOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlciA9IHVubGlua2VkQ29k
ZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEt
Pm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0uc3RhcnQgPSBoYW5kbGVyLnN0YXJ0OworICAgICAgICAg
ICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0uZW5kID0gaGFuZGxlci5l
bmQ7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXS50
YXJnZXQgPSBoYW5kbGVyLnRhcmdldDsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzW2ldLnNjb3BlRGVwdGggPSBoYW5kbGVyLnNjb3BlRGVwdGggKyBiYXNl
U2NvcGVEZXB0aDsKKyNpZiBFTkFCTEUoSklUKSAmJiBFTkFCTEUoTExJTlQpCisgICAgICAgICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXS5uYXRpdmVDb2RlID0gQ29k
ZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJs
ZUFkZHJlc3MoTExJbnQ6OmdldENvZGVQdHIobGxpbnRfb3BfY2F0Y2gpKSk7CisjZW5kaWYKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAg
ICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5ncm93KGNvdW50KTsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAg
ICAgICAgICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRl
cmF0b3IgcHRyID0gdW5saW5rZWRDb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShpKS5v
ZmZzZXRUYWJsZS5iZWdpbigpOworICAgICAgICAgICAgICAgIFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdW5saW5rZWRDb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZShpKS5vZmZzZXRUYWJsZS5lbmQoKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKDsgcHRyICE9IGVuZDsgKytwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgT2Zm
c2V0TG9jYXRpb24gb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBvZmZzZXQuYnJhbmNoT2Zm
c2V0ID0gcHRyLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmFkZChwdHItPmtleSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dp
dGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3
aXRjaEp1bXBUYWJsZXMuZ3Jvdyhjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYgc291cmNlVGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVt
cFRhYmxlKGkpOworICAgICAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgZGVzdFRhYmxlID0g
bV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzW2ldOworICAgICAgICAgICAg
ICAgIGRlc3RUYWJsZS5icmFuY2hPZmZzZXRzID0gc291cmNlVGFibGUuYnJhbmNoT2Zmc2V0czsK
KyAgICAgICAgICAgICAgICBkZXN0VGFibGUubWluID0gc291cmNlVGFibGUubWluOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZkNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLmdyb3coY291bnQp
OworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHNvdXJjZVRhYmxlID0gdW5saW5r
ZWRDb2RlQmxvY2stPmNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZShpKTsKKyAgICAgICAgICAgICAg
ICBTaW1wbGVKdW1wVGFibGUmIGRlc3RUYWJsZSA9IG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dp
dGNoSnVtcFRhYmxlc1tpXTsKKyAgICAgICAgICAgICAgICBkZXN0VGFibGUuYnJhbmNoT2Zmc2V0
cyA9IHNvdXJjZVRhYmxlLmJyYW5jaE9mZnNldHM7CisgICAgICAgICAgICAgICAgZGVzdFRhYmxl
Lm1pbiA9IHNvdXJjZVRhYmxlLm1pbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEFsbG9jYXRlIG1ldGFkYXRhIGJ1ZmZlcnMgZm9yIHRoZSBieXRlY29kZQorI2lm
IEVOQUJMRShMTElOVCkKKyAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3MoKSkKKyAgICAgICAgbV9sbGludENhbGxMaW5rSW5m
b3MuZ3JvdyhzaXplKTsKKyNlbmRpZgorI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKHNpemVfdCBz
aXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mQXJyYXlQcm9maWxlcygpKQorICAgICAg
ICBtX2FycmF5UHJvZmlsZXMuZ3JvdyhzaXplKTsKKyAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkpCisgICAgICAgIG1fdmFsdWVQ
cm9maWxlcy5ncm93KHNpemUpOworI2VuZGlmCisgICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mUmVzb2x2ZU9wZXJhdGlvbnMoKSkKKyAgICAgICAgbV9yZXNv
bHZlT3BlcmF0aW9ucy5ncm93KHNpemUpOworICAgIHNpemVfdCBwdXRUb0Jhc2VDb3VudCA9IHVu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlB1dFRvQmFzZU9wZXJhdGlvbnMoKTsKKyAgICBtX3B1
dFRvQmFzZU9wZXJhdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KHB1dFRvQmFzZUNvdW50KTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHB1dFRvQmFzZUNvdW50OyArK2kpCisgICAgICAgIG1fcHV0
VG9CYXNlT3BlcmF0aW9ucy5hcHBlbmQoUHV0VG9CYXNlT3BlcmF0aW9uKGlzU3RyaWN0TW9kZSgp
KSk7CisKKyAgICBBU1NFUlQobV9wdXRUb0Jhc2VPcGVyYXRpb25zLmNhcGFjaXR5KCkgPT0gcHV0
VG9CYXNlQ291bnQpOworCisgICAgLy8gQ29weSBhbmQgdHJhbnNsYXRlIHRoZSBVbmxpbmtlZElu
c3RydWN0aW9ucworICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50ID0gdW5saW5rZWRDb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBVbmxpbmtlZEluc3RydWN0aW9uKiBwYyA9
IHVubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5kYXRhKCk7CisgICAgVmVjdG9yPElu
c3RydWN0aW9uPiBpbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25Db3VudCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyAp
IHsKKyAgICAgICAgdW5zaWduZWQgb3BMZW5ndGggPSBvcGNvZGVMZW5ndGgocGNbaV0udS5vcGNv
ZGUpOworICAgICAgICBpbnN0cnVjdGlvbnNbaV0gPSBnbG9iYWxEYXRhKCktPmludGVycHJldGVy
LT5nZXRPcGNvZGUocGNbaV0udS5vcGNvZGUpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMTsg
aiA8IG9wTGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIGlmIChzaXplb2YoaW50MzJfdCkgIT0g
c2l6ZW9mKGludHB0cl90KSkKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUu
cG9pbnRlciA9IDA7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUub3BlcmFuZCA9
IHBjW2kgKyBqXS51Lm9wZXJhbmQ7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChwY1tpXS51
Lm9wY29kZSkgeworI2lmIEVOQUJMRShKSVQpCisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoK
KyAgICAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOiB7CisgICAgICAgICAgICBpbnQg
YXJyYXlQcm9maWxlSW5kZXggPSBwY1tpICsgb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxl
KGkpOworCisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMl0gPSAmbV9h
cnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIC8vIGZhbGx0aHJv
dWdoCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6CisgICAgICAgIGNh
c2Ugb3BfcmVzb2x2ZToKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6CisgICAgICAgIGNh
c2Ugb3BfcmVzb2x2ZV93aXRoX2Jhc2U6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV93aXRoX3Ro
aXM6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBjYXNlIG9wX2NhbGxfcHV0
X3Jlc3VsdDogeworICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gJm1fdmFsdWVQ
cm9maWxlc1twY1tpICsgb3BMZW5ndGggLSAxXS51Lm9wZXJhbmRdOworICAgICAgICAgICAgQVNT
RVJUKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOworICAgICAgICAgICAgcHJvZmls
ZS0+bV9ieXRlY29kZU9mZnNldCA9IGk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9w
TGVuZ3RoIC0gMV0gPSBwcm9maWxlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CisgICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxl
SW5kZXggPSBwY1tpICsgb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2Fy
cmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOworICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gJm1fYXJyYXlQcm9maWxlc1th
cnJheVByb2ZpbGVJbmRleF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKKyAgICAgICAg
ICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW2kgKyBvcExlbmd0aCAtIDFdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJh
eVByb2ZpbGUoaSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0g
PSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIC8vIGZh
bGx0aHJvdWdoCisgICAgICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShMTElOVCkKKyAgICAgICAg
Y2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdID0gJm1f
bGxpbnRDYWxsTGlua0luZm9zW3BjW2kgKyA0XS51Lm9wZXJhbmRdOworICAgICAgICAgICAgYnJl
YWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAg
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3By
b3RvOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFpbjoKKyAgICAgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfZ2V0dGVyX3NlbGY6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9w
cm90bzoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX2NoYWluOgorICAgICAgICBj
YXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRf
Y3VzdG9tX3Byb3RvOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fY2hhaW46Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2Fy
cmF5X2xlbmd0aDoKKyAgICAgICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xlbmd0aDoKKyAgICAgICAg
ICAgIENSQVNIKCk7CisKKyAgICAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6IHsK
KyAgICAgICAgICAgIEFTU0VSVChjb2RlVHlwZSgpID09IEdsb2JhbENvZGUpOworICAgICAgICAg
ICAgSWRlbnRpZmllciBpZGVudCA9IGlkZW50aWZpZXIocGNbaSArIDRdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xU
YWJsZSgpLT5nZXQoaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5pc051bGwo
KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKGVudHJ5LmNvdWxk
QmVXYXRjaGVkKCkpIHsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDBdID0gZ2xv
YmFsRGF0YSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2luaXRfZ2xvYmFsX2NvbnN0X2No
ZWNrKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDFdID0gJmdsb2JhbE9iamVj
dC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDNdID0gZW50cnkuYWRkcmVzc09mSXNXYXRjaGVkKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
MF0gPSBnbG9iYWxEYXRhKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUob3BfaW5pdF9nbG9iYWxf
Y29uc3QpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAxXSA9ICZnbG9iYWxPYmplY3Qt
PnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgaSArPSBvcExlbmd0aDsKKyAgICB9CisgICAgbV9pbnN0cnVjdGlvbnMgPSBXVEY6OlJl
ZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4oaW5zdHJ1Y3Rpb25zKTsKKworICAgIGlmIChCeXRl
Y29kZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCisgICAgICAgIGR1bXAobV9nbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CisgICAgbV9nbG9iYWxEYXRhLT5maW5pc2hlZENvbXBp
bGluZyh0aGlzKTsKIH0KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKQEAgLTE3MDQsMTUgKzE5
MDYsNiBAQCB2b2lkIENvZGVCbG9jazo6c2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpCiAj
ZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmFkZFBhcmFtZXRlcigpCi17Ci0gICAgbV9udW1Q
YXJhbWV0ZXJzKys7Ci0KLSNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAgbV9hcmd1bWVu
dFZhbHVlUHJvZmlsZXMuYXBwZW5kKFZhbHVlUHJvZmlsZSgpKTsKLSNlbmRpZgotfQotCiB2b2lk
IENvZGVCbG9jazo6dmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBJbnN0cnVj
dGlvbiogdlBDKQogewogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0
YS0+aW50ZXJwcmV0ZXI7CkBAIC0xNzk1LDYgKzE5ODgsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgaWYgKCEhbV9hbHRlcm5hdGl2
ZSkKICAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAKKyAg
ICB2aXNpdG9yLmFwcGVuZCgmbV91bmxpbmtlZENvZGUpOworCiAgICAgLy8gVGhlcmUgYXJlIHRo
cmVlIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzOiBsYXp5IGJ5
dGVjb2RlIGZyZWVpbmcsCiAgICAgLy8gaW5saW5lIGNhY2hlIGNsZWFyaW5nLCBhbmQgamV0dGlz
b25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0CiAgICAgLy8gbGVh
c3Qgb25lIG9mIHRob3NlIHRoaW5ncyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3
ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0CkBAIC0xOTA5LDggKzIxMDQsOSBAQCB2b2lkIENvZGVC
bG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQogI2lmIEVOQUJMRShMTElOVCkKICAgICBJ
bnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOwogICAg
IGlmICghIW51bWJlck9mSW5zdHJ1Y3Rpb25zKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3Qgc2l6
ZSA9IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3RydWN0aW9uID0gJmluc3Ry
dWN0aW9ucygpW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV1dOworICAgICAgICBjb25z
dCBWZWN0b3I8dW5zaWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyA9IG1fdW5saW5r
ZWRDb2RlLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpOworICAgICAgICBmb3IgKHNpemVf
dCBzaXplID0gcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3RydWN0aW9uID0gJmlu
c3RydWN0aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKICAgICAgICAgICAg
IHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1ckluc3RydWN0aW9uWzBdLnUub3Bj
b2RlKSkgewogICAgICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CiAgICAgICAgICAgICBjYXNl
IG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToKQEAgLTIwNjIsMTQgKzIyNTgsOSBAQCB2b2lkIENv
ZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fZ2xvYmFsT2JqZWN0KTsKICAgICB2aXNpdG9y
LmFwcGVuZCgmbV9vd25lckV4ZWN1dGFibGUpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZtX3N5bWJv
bFRhYmxlKTsKLSAgICBpZiAobV9yYXJlRGF0YSkgeworICAgIHZpc2l0b3IuYXBwZW5kKCZtX3Vu
bGlua2VkQ29kZSk7CisgICAgaWYgKG1fcmFyZURhdGEpCiAgICAgICAgIG1fcmFyZURhdGEtPm1f
ZXZhbENvZGVDYWNoZS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLSAgICAgICAgc2l6ZV90IHJl
Z0V4cENvdW50ID0gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsKLSAgICAgICAgV3JpdGVC
YXJyaWVyPFJlZ0V4cD4qIHJlZ2V4cHMgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuZGF0YSgpOwot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ0V4cENvdW50OyBpKyspCi0gICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZChyZWdleHBzICsgaSk7Ci0gICAgfQogICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzKG1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCBtX2NvbnN0YW50UmVnaXN0ZXJz
LnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRXhwcnMuc2l6
ZSgpOyArK2kpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2Z1bmN0aW9uRXhwcnNbaV0pOwpA
QCAtMjE5Niw2NCArMjM4NywxNyBAQCBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiBpbnQgQ29kZUJsb2NrOjps
aW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAg
ICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAg
IFZlY3RvcjxMaW5lSW5mbz4mIGxpbmVJbmZvID0gbV9saW5lSW5mbzsKLQotICAgIGludCBsb3cg
PSAwOwotICAgIGludCBoaWdoID0gbGluZUluZm8uc2l6ZSgpOwotICAgIHdoaWxlIChsb3cgPCBo
aWdoKSB7Ci0gICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxvdykgLyAyOwotICAgICAg
ICBpZiAobGluZUluZm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNldCA8PSBieXRlY29kZU9mZnNldCkK
LSAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhp
Z2ggPSBtaWQ7Ci0gICAgfQotCi0gICAgaWYgKCFsb3cpCi0gICAgICAgIHJldHVybiBtX293bmVy
RXhlY3V0YWJsZS0+c291cmNlKCkuZmlyc3RMaW5lKCk7Ci0gICAgcmV0dXJuIGxpbmVJbmZvW2xv
dyAtIDFdLmxpbmVOdW1iZXI7CisgICAgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLT5saW5lTm8o
KSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVP
ZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZz
ZXQsIGludCYgZW5kT2Zmc2V0KQogewotICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3Ry
dWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICBpZiAoIW1fcmFyZURhdGEpIHsKLSAgICAgICAgc3Rh
cnRPZmZzZXQgPSAwOwotICAgICAgICBlbmRPZmZzZXQgPSAwOwotICAgICAgICBkaXZvdCA9IDA7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5m
bz4mIGV4cHJlc3Npb25JbmZvID0gbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mbzsKLQotICAg
IGludCBsb3cgPSAwOwotICAgIGludCBoaWdoID0gZXhwcmVzc2lvbkluZm8uc2l6ZSgpOwotICAg
IHdoaWxlIChsb3cgPCBoaWdoKSB7Ci0gICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxv
dykgLyAyOwotICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNl
dCA8PSBieXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGhpZ2ggPSBtaWQ7Ci0gICAgfQotCi0gICAgQVNTRVJUKGxvdyk7
Ci0gICAgaWYgKCFsb3cpIHsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBlbmRP
ZmZzZXQgPSAwOwotICAgICAgICBkaXZvdCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBzdGFydE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLnN0YXJ0T2Zmc2V0Owot
ICAgIGVuZE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmVuZE9mZnNldDsKLSAgICBk
aXZvdCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmRpdm90UG9pbnQgKyBtX3NvdXJjZU9mZnNl
dDsKLSAgICByZXR1cm47CisgICAgbV91bmxpbmtlZENvZGUtPmV4cHJlc3Npb25SYW5nZUZvckJ5
dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCk7CisgICAgZGl2b3QgKz0gbV9zb3VyY2VPZmZzZXQ7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpz
aHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiB7Ci0gICAgbV9wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwogI2lmIEVOQUJMRShMTElOVCkKICAgICBtX2xs
aW50Q2FsbExpbmtJbmZvcy5zaHJpbmtUb0ZpdCgpOwogI2VuZGlmCkBAIC0yMjY0LDcgKzI0MDgs
NiBAQCB2b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQog
I2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBpZiAoc2hyaW5rTW9kZSA9PSBFYXJseVNo
cmluaykKICAgICAgICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKLSAg
ICBtX3ZhbHVlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKICAgICBtX3JhcmVDYXNlUHJvZmlsZXMu
c2hyaW5rVG9GaXQoKTsKICAgICBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLnNocmlua1RvRml0
KCk7CiAjZW5kaWYKQEAgLTIyNzYsMTUgKzI0MTksMTEgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlu
a1RvRml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVy
cy5zaHJpbmtUb0ZpdCgpOwogICAgIH0gLy8gZWxzZSBkb24ndCBzaHJpbmsgdGhlc2UsIGJlY2F1
c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgcG9pbnRlcnMgaW50byB0aGVzZSB0YWJs
ZXMuCiAKLSAgICBtX3Jlc29sdmVPcGVyYXRpb25zLnNocmlua1RvRml0KCk7Ci0gICAgbV9saW5l
SW5mby5zaHJpbmtUb0ZpdCgpOwogICAgIGlmIChtX3JhcmVEYXRhKSB7CiAgICAgICAgIG1fcmFy
ZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9yYXJl
RGF0YS0+bV9yZWdleHBzLnNocmlua1RvRml0KCk7CiAgICAgICAgIG1fcmFyZURhdGEtPm1faW1t
ZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwogICAgICAgICBtX3JhcmVEYXRh
LT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9y
YXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7Ci0gICAgICAg
IG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm8uc2hyaW5rVG9GaXQoKTsKICNpZiBFTkFCTEUo
SklUKQogICAgICAgICBtX3JhcmVEYXRhLT5tX2NhbGxSZXR1cm5JbmRleFZlY3Rvci5zaHJpbmtU
b0ZpdCgpOwogI2VuZGlmCkBAIC0yMzEyLDcgKzI0NTEsNyBAQCB2b2lkIENvZGVCbG9jazo6Y3Jl
YXRlQWN0aXZhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBBU1NFUlQoY29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUpOwogICAgIEFTU0VSVChuZWVkc0Z1bGxTY29wZUNoYWluKCkpOwog
ICAgIEFTU0VSVCghY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKS5q
c1ZhbHVlKCkpOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6
Y3JlYXRlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKSk7CisgICAgSlNBY3RpdmF0aW9u
KiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCksIGNhbGxGcmFtZSwgdGhpcyk7CiAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRp
b25SZWdpc3RlcigpKSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAgY2FsbEZyYW1lLT5zZXRT
Y29wZShhY3RpdmF0aW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAppbmRleCBmYTc0YTdkY2ZiMWNlZmZmYmFiMGY0ZDk1MjNiZWU3OGJjZGE4ZGVjLi5h
MjgwNjQ5NDBhZWNkNjljODFiMWQ5MTIzOTEwOWRiYzZmOTgzM2M5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0xMjAsNyArMTIwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBDb2RlQmxvY2soQ29weVBhcnNlZEJs
b2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKICAgICAgICAgCi0gICAgICAgIENvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2JhbE9iamVj
dCosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJv
b2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKTsKKyAg
ICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
ZWRDb2RlQmxvY2sqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIGJhc2VTY29wZURlcHRoLCBQ
YXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQYXNzT3du
UHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpOwogCiAgICAgICAgIFdyaXRlQmFycmllcjxKU0ds
b2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgICAgIEhlYXAqIG1faGVhcDsKQEAgLTEz
MCw3ICsxMzAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGludCBudW1Q
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgICAgIHZv
aWQgc2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpOwotICAgICAgICB2b2lkIGFkZFBhcmFt
ZXRlcigpOwogICAgICAgICAKICAgICAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkg
eyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fbnVtUGFyYW1ldGVycyk7IH0KQEAgLTQzNCw4ICs0MzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KHJldHVybkFkZHJl
c3MpIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQg
c2V0SXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9u
KSB7IG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uID0gaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9u
OyB9Ci0gICAgICAgIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKCkgeyByZXR1cm4gbV9p
c051bWVyaWNDb21wYXJlRnVuY3Rpb247IH0KKyAgICAgICAgYm9vbCBpc051bWVyaWNDb21wYXJl
RnVuY3Rpb24oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aXNOdW1lcmljQ29tcGFyZUZ1bmN0
aW9uKCk7IH0KIAogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQogICAgICAgICBSZWZDb3VudGVkQXJy
YXk8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsg
fQpAQCAtNTI0LDEwICs1MjIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRU
aGlzUmVnaXN0ZXIoaW50IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdp
c3RlcjsgfQogICAgICAgICBpbnQgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlz
UmVnaXN0ZXI7IH0KIAotICAgICAgICB2b2lkIHNldE5lZWRzRnVsbFNjb3BlQ2hhaW4oYm9vbCBu
ZWVkc0Z1bGxTY29wZUNoYWluKSB7IG1fbmVlZHNGdWxsU2NvcGVDaGFpbiA9IG5lZWRzRnVsbFNj
b3BlQ2hhaW47IH0KLSAgICAgICAgYm9vbCBuZWVkc0Z1bGxTY29wZUNoYWluKCkgY29uc3QgeyBy
ZXR1cm4gbV9uZWVkc0Z1bGxTY29wZUNoYWluOyB9Ci0gICAgICAgIHZvaWQgc2V0VXNlc0V2YWwo
Ym9vbCB1c2VzRXZhbCkgeyBtX3VzZXNFdmFsID0gdXNlc0V2YWw7IH0KLSAgICAgICAgYm9vbCB1
c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0V2YWw7IH0KKyAgICAgICAgYm9vbCBuZWVk
c0Z1bGxTY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm5lZWRzRnVs
bFNjb3BlQ2hhaW4oKTsgfQorICAgICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPnVzZXNFdmFsKCk7IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0
QXJndW1lbnRzUmVnaXN0ZXIoaW50IGFyZ3VtZW50c1JlZ2lzdGVyKQogICAgICAgICB7CkBAIC01
ODksMzcgKzU4NSwyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmICh1c2VzQXJn
dW1lbnRzKCkgJiYgb3BlcmFuZCA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1l
bnRzUmVnaXN0ZXIoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICAgICAg
ICAgIC8vIFdlJ3JlIGluIGdsb2JhbCBjb2RlIHNvIHRoZXJlIGFyZSBubyBsb2NhbHMgdG8gY2Fw
dHVyZQorICAgICAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQgPj0gc3ltYm9sVGFibGUo
KS0+Y2FwdHVyZVN0YXJ0KCkKICAgICAgICAgICAgICAgICAmJiBvcGVyYW5kIDwgc3ltYm9sVGFi
bGUoKS0+Y2FwdHVyZUVuZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgQ29kZVR5cGUgY29kZVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CisgICAgICAgIENvZGVUeXBlIGNvZGVU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvZGVUeXBlKCk7IH0KIAogICAg
ICAgICBTb3VyY2VQcm92aWRlciogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZ2V0
KCk7IH0KICAgICAgICAgdW5zaWduZWQgc291cmNlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2VPZmZzZXQ7IH0KIAotICAgICAgICBzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNv
bnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgpOyB9Ci0gICAgICAgIHZvaWQgYWRkSnVt
cFRhcmdldCh1bnNpZ25lZCBqdW1wVGFyZ2V0KSB7IG1fanVtcFRhcmdldHMuYXBwZW5kKGp1bXBU
YXJnZXQpOyB9Ci0gICAgICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX2p1bXBUYXJnZXRzW2luZGV4XTsgfQotICAgICAgICB1bnNpZ25lZCBsYXN0SnVt
cFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMubGFzdCgpOyB9CisgICAgICAg
IHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPm51bWJlck9mSnVtcFRhcmdldHMoKTsgfQorICAgICAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmp1bXBUYXJnZXQoaW5k
ZXgpOyB9CiAKICAgICAgICAgdm9pZCBjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmFtZSopOwogCiAg
ICAgICAgIHZvaWQgY2xlYXJFdmFsQ2FjaGUoKTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyBu
YW1lRm9yUmVnaXN0ZXIoaW50IHJlZ2lzdGVyTnVtYmVyKTsKLSAgICAgICAgCi0gICAgICAgIHZv
aWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbih1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb25zLmFwcGVuZChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKTsKLSAgICAgICAgfQotI2lm
IEVOQUJMRShMTElOVCkKLSAgICAgICAgTExJbnRDYWxsTGlua0luZm8qIGFkZExMSW50Q2FsbExp
bmtJbmZvKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9sbGludENhbGxMaW5rSW5mb3MuYXBw
ZW5kKExMSW50Q2FsbExpbmtJbmZvKCkpOwotICAgICAgICAgICAgcmV0dXJuICZtX2xsaW50Q2Fs
bExpbmtJbmZvcy5sYXN0KCk7Ci0gICAgICAgIH0KLSNlbmRpZgorCiAjaWYgRU5BQkxFKEpJVCkK
ICAgICAgICAgdm9pZCBzZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcyhzaXplX3Qgc2l6ZSkg
eyBtX3N0cnVjdHVyZVN0dWJJbmZvcy5ncm93KHNpemUpOyB9CiAgICAgICAgIHNpemVfdCBudW1i
ZXJPZlN0cnVjdHVyZVN0dWJJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1Yklu
Zm9zLnNpemUoKTsgfQpAQCAtNjQ3LDE0ICs2MzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOwogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVmFsdWVQcm9m
aWxlKiBhZGRWYWx1ZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgIT0gLTEpOwotICAgICAgICAgICAgQVNTRVJU
KG1fdmFsdWVQcm9maWxlcy5pc0VtcHR5KCkgfHwgbV92YWx1ZVByb2ZpbGVzLmxhc3QoKS5tX2J5
dGVjb2RlT2Zmc2V0IDwgYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICAgICAgbV92YWx1ZVByb2Zp
bGVzLmFwcGVuZChWYWx1ZVByb2ZpbGUoYnl0ZWNvZGVPZmZzZXQpKTsKLSAgICAgICAgICAgIHJl
dHVybiAmbV92YWx1ZVByb2ZpbGVzLmxhc3QoKTsKLSAgICAgICAgfQorCiAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlcy5zaXpl
KCk7IH0KICAgICAgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUoaW50IGluZGV4KQogICAg
ICAgICB7CkBAIC03ODAsMjUgKzc2MCwyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8g
RXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKIAogICAgICAgICBzaXplX3QgbnVtYmVyT2ZFeGNl
cHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5t
X2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0KLSAgICAgICAgdm9pZCBhZGRFeGNlcHRp
b25IYW5kbGVyKGNvbnN0IEhhbmRsZXJJbmZvJiBoYW5sZXIpIHsgY3JlYXRlUmFyZURhdGFJZk5l
Y2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQo
aGFubGVyKTsgfQotICAgICAgICBIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFuZGxlcihpbnQgaW5k
ZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25I
YW5kbGVyc1tpbmRleF07IH0KLQotICAgICAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKGNvbnN0
IEV4cHJlc3Npb25SYW5nZUluZm8mIGV4cHJlc3Npb25JbmZvKQorICAgICAgICB2b2lkIGFsbG9j
YXRlSGFuZGxlcnMoY29uc3QgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiB1bmxpbmtlZEhh
bmRsZXJzKQogICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgY291bnQgPSB1bmxpbmtlZEhh
bmRsZXJzLnNpemUoKTsKKyAgICAgICAgICAgIGlmICghY291bnQpCisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mby5hcHBlbmQoZXhwcmVzc2lvbkluZm8p
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGRMaW5lSW5mbyh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCwgaW50IGxpbmVObykKLSAgICAgICAgewotICAgICAgICAgICAgVmVjdG9yPExpbmVJ
bmZvPiYgbGluZUluZm8gPSBtX2xpbmVJbmZvOwotICAgICAgICAgICAgaWYgKCFsaW5lSW5mby5z
aXplKCkgfHwgbGluZUluZm8ubGFzdCgpLmxpbmVOdW1iZXIgIT0gbGluZU5vKSB7Ci0gICAgICAg
ICAgICAgICAgTGluZUluZm8gaW5mbyA9IHsgYnl0ZWNvZGVPZmZzZXQsIGxpbmVObyB9OwotICAg
ICAgICAgICAgICAgIGxpbmVJbmZvLmFwcGVuZChpbmZvKTsKKyAgICAgICAgICAgIG1fcmFyZURh
dGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMucmVzaXplKGNvdW50KTsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIG1fcmFyZURh
dGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0uc3RhcnQgPSB1bmxpbmtlZEhhbmRsZXJzW2ldLnN0
YXJ0OworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0u
ZW5kID0gdW5saW5rZWRIYW5kbGVyc1tpXS5lbmQ7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXS50YXJnZXQgPSB1bmxpbmtlZEhhbmRsZXJzW2ldLnRh
cmdldDsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ld
LnNjb3BlRGVwdGggPSB1bmxpbmtlZEhhbmRsZXJzW2ldLnNjb3BlRGVwdGg7CiAgICAgICAgICAg
ICB9CisKICAgICAgICAgfQorICAgICAgICBIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFuZGxlcihp
bnQgaW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNl
cHRpb25IYW5kbGVyc1tpbmRleF07IH0KIAotICAgICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZv
KCkgeyByZXR1cm4gbV9yYXJlRGF0YSAmJiBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvLnNp
emUoKTsgfQorICAgICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV91bmxp
bmtlZENvZGUtPmhhc0V4cHJlc3Npb25JbmZvKCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAg
ICAgIFZlY3RvcjxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldD4mIGNhbGxSZXR1cm5J
bmRleFZlY3RvcigpCkBAIC04NzMsNiArODUyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQobV9nbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHYpOwogICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgfQorCisKICAgICAgICAgdW5zaWduZWQgYWRkT3JGaW5kQ29uc3Rh
bnQoSlNWYWx1ZSk7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdp
c3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KICAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KQEAgLTg5NiwyMCArODc3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
bkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5kZXhdLmdldCgpOyB9
CiAKLSAgICAgICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikKLSAgICAgICAgewotICAg
ICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7Ci0gICAgICAgICAgICBtX3Jh
cmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKFdyaXRlQmFycmllcjxSZWdFeHA+KCptX2dsb2JhbERh
dGEsIG93bmVyRXhlY3V0YWJsZSgpLCByKSk7Ci0gICAgICAgICAgICByZXR1cm4gc2l6ZTsKLSAg
ICAgICAgfQotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ0V4cHMoKSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsKLSAg
ICAgICAgfQotICAgICAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgQVNTRVJU
KG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzW2luZGV4XS5nZXQoKTsg
fQorICAgICAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT5yZWdleHAoaW5kZXgpOyB9CiAKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZD
b25zdGFudEJ1ZmZlcnMoKSBjb25zdAogICAgICAgICB7CkBAIC05MjQsMTAgKzg5Miw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMu
YXBwZW5kKGJ1ZmZlcik7CiAgICAgICAgICAgICByZXR1cm4gc2l6ZTsKICAgICAgICAgfQotICAg
ICAgICB1bnNpZ25lZCBhZGRDb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBsZW5ndGgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBhZGRDb25zdGFudEJ1ZmZlcihWZWN0b3I8SlNWYWx1ZT4o
bGVuZ3RoKSk7Ci0gICAgICAgIH0KIAogICAgICAgICBWZWN0b3I8SlNWYWx1ZT4mIGNvbnN0YW50
QnVmZmVyQXNWZWN0b3IodW5zaWduZWQgaW5kZXgpCiAgICAgICAgIHsKQEAgLTk2NCw3ICs5Mjgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0
Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4g
bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CiAKIAot
ICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBt
X3N5bWJvbFRhYmxlLmdldCgpOyB9CisgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5zeW1ib2xUYWJsZSgpOyB9CiAK
ICAgICAgICAgRXZhbENvZGVDYWNoZSYgZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFyZURhdGFJ
Zk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9CiAKQEAg
LTEyMDgsNiArMTE3Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKIAorICAgICAgICBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS5nZXQoKTsg
fQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIERGR0NvZGVCbG9ja3M7CiAg
ICAgICAgIApAQCAtMTIxOSw3ICsxMTg1LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJM
RShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENv
dW50TGl2ZW5lc3MoT3BlcmF0aW9uSW5Qcm9ncmVzcywgdW5zaWduZWQmIG51bWJlck9mTGl2ZU5v
bkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmls
ZXMpOwogI2VuZGlmCi0gICAgICAgIAorCisgICAgICAgIHZvaWQgc2V0SWRlbnRpZmllcnMoY29u
c3QgVmVjdG9yPElkZW50aWZpZXI+JiBpZGVudGlmaWVycykKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG1faWRlbnRpZmllcnMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIG1faWRlbnRp
ZmllcnMuYXBwZW5kVmVjdG9yKGlkZW50aWZpZXJzKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3du
PiA+JiBjb25zdGFudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IGNv
bnN0YW50cy5zaXplKCk7CisgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnJlc2l6ZShj
b3VudCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisg
ICAgICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fZ2xvYmFsRGF0YSwg
b3duZXJFeGVjdXRhYmxlKCksIGNvbnN0YW50c1tpXS5nZXQoKSk7CisgICAgICAgIH0KKwogICAg
ICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29u
c3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYp
OwogCiAgICAgICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKEV4ZWNTdGF0ZSosIGludCByKSBjb25z
dDsKQEAgLTEyNjksMjkgKzEyNDksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJ
VCkKICAgICAgICAgdm9pZCByZXNldFN0dWJJbnRlcm5hbChSZXBhdGNoQnVmZmVyJiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKICNlbmRpZgotICAgICAgICAKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVu
bGlua2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICAgICAgaW50IG1fbnVtUGFyYW1l
dGVyczsKLQogICAgICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gbV9vd25lckV4
ZWN1dGFibGU7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogCiAgICAgICAg
IFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7Ci0KICAgICAgICAg
aW50IG1fdGhpc1JlZ2lzdGVyOwogICAgICAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3RlcjsKICAg
ICAgICAgaW50IG1fYWN0aXZhdGlvblJlZ2lzdGVyOwogCi0gICAgICAgIGJvb2wgbV9uZWVkc0Z1
bGxTY29wZUNoYWluOwotICAgICAgICBib29sIG1fdXNlc0V2YWw7Ci0gICAgICAgIGJvb2wgbV9p
c051bWVyaWNDb21wYXJlRnVuY3Rpb247CiAgICAgICAgIGJvb2wgbV9pc1N0cmljdE1vZGU7CiAK
LSAgICAgICAgQ29kZVR5cGUgbV9jb2RlVHlwZTsKLQogICAgICAgICBSZWZQdHI8U291cmNlUHJv
dmlkZXI+IG1fc291cmNlOwogICAgICAgICB1bnNpZ25lZCBtX3NvdXJjZU9mZnNldDsKIAotICAg
ICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7CiAjaWYg
RU5BQkxFKExMSU5UKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TExJbnRDYWxsTGlua0luZm8s
IDg+IG1fbGxpbnRDYWxsTGlua0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8TExJ
bnRDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPiA+
IG1faW5jb21pbmdMTEludENhbGxzOwpAQCAtMTM2MiwxOCArMTMzNCwxNSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9leGVjdXRpb25FbnRyeUNvdW50OwogI2VuZGlmCiAK
LSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2p1bXBUYXJnZXRzOwotICAgICAgICBWZWN0b3I8
dW5zaWduZWQ+IG1fbG9vcFRhcmdldHM7Ci0KICAgICAgICAgLy8gQ29uc3RhbnQgUG9vbAogICAg
ICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwg
UmVnaXN0ZXJfbXVzdF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyX1Vua25vd24pOworICAg
ICAgICAvLyBUT0RPOiBUaGlzIGNvdWxkIGp1c3QgYmUgYSBwb2ludGVyIHRvIG1fdW5saW5rZWRD
b2RlQmxvY2sncyBkYXRhLCBidXQgdGhlIERGRyBtdXRhdGVzCisgICAgICAgIC8vIGl0LCBzbyB3
ZSdyZSBzdHVjayB3aXRoIGl0IGZvciBub3cuCiAgICAgICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4gPiBtX2NvbnN0YW50UmVnaXN0ZXJzOwogICAgICAgICBWZWN0b3I8V3JpdGVCYXJy
aWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gPiBtX2Z1bmN0aW9uRGVjbHM7CiAgICAgICAgIFZlY3Rv
cjxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPiA+IG1fZnVuY3Rpb25FeHByczsKIAot
ICAgICAgICBXcml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7Ci0K
ICAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAgICAgCiAgICAg
ICAgIEV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwpAQCAtMTM4NCwxMSAr
MTM1Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1aW50MTZfdCBtX29wdGltaXphdGlv
bkRlbGF5Q291bnRlcjsKICAgICAgICAgdWludDE2X3QgbV9yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcjsKIAotICAgICAgICBWZWN0b3I8TGluZUluZm8+IG1fbGluZUluZm87Ci0jaWYgRU5BQkxF
KEJZVEVDT0RFX0NPTU1FTlRTKQotICAgICAgICBWZWN0b3I8Q29tbWVudD4gIG1fYnl0ZWNvZGVD
b21tZW50czsKLSAgICAgICAgc2l6ZV90IG1fYnl0ZWNvZGVDb21tZW50SXRlcmF0b3I7Ci0jZW5k
aWYKICAgICAgICAgVmVjdG9yPFJlc29sdmVPcGVyYXRpb25zPiBtX3Jlc29sdmVPcGVyYXRpb25z
OwogICAgICAgICBWZWN0b3I8UHV0VG9CYXNlT3BlcmF0aW9uLCAxPiBtX3B1dFRvQmFzZU9wZXJh
dGlvbnM7CiAKQEAgLTEzOTcsOSArMTM2MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBw
dWJsaWM6CiAgICAgICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxl
cnM7CiAKLSAgICAgICAgICAgIC8vIFJhcmUgQ29uc3RhbnRzCi0gICAgICAgICAgICBWZWN0b3I8
V3JpdGVCYXJyaWVyPFJlZ0V4cD4gPiBtX3JlZ2V4cHM7Ci0KICAgICAgICAgICAgIC8vIEJ1ZmZl
cnMgdXNlZCBmb3IgbGFyZ2UgYXJyYXkgbGl0ZXJhbHMKICAgICAgICAgICAgIFZlY3RvcjxWZWN0
b3I8SlNWYWx1ZT4gPiBtX2NvbnN0YW50QnVmZmVyczsKICAgICAgICAgICAgIApAQCAtMTQxMCw5
ICsxMzcxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgICAgIEV2YWxDb2RlQ2FjaGUg
bV9ldmFsQ29kZUNhY2hlOwogCi0gICAgICAgICAgICAvLyBFeHByZXNzaW9uIGluZm8gLSBwcmVz
ZW50IGlmIGRlYnVnZ2luZy4KLSAgICAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZv
PiBtX2V4cHJlc3Npb25JbmZvOwotICAgICAgICAgICAgLy8gTGluZSBpbmZvIC0gcHJlc2VudCBp
ZiBwcm9maWxpbmcgb3IgZGVidWdnaW5nLgogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICBW
ZWN0b3I8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQ+IG1fY2FsbFJldHVybkluZGV4
VmVjdG9yOwogI2VuZGlmCkBAIC0xNDQwLDggKzEzOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBHbG9iYWxDb2RlQmxvY2soU2Ny
aXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
UHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFs
dGVybmF0aXZlKQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2Rl
VHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBmYWxzZSwg
YWx0ZXJuYXRpdmUpCisgICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgYmFzZVNjb3BlRGVwdGgsIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogQ29k
ZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwg
YmFzZVNjb3BlRGVwdGgsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGFsdGVybmF0aXZl
KQogICAgICAgICB7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMTQ1MywxMSArMTQxMSwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgUHJvZ3JhbUNv
ZGVCbG9jayhQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2Rl
VHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92
aWRlcj4gc291cmNlUHJvdmlkZXIsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkK
LSAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUs
IGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQorICAgICAgICBQ
cm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBQ
YXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IEdsb2JhbENv
ZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9iYWxPYmplY3Qs
IDAsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9
Ci0gICAgICAgIAorCiAjaWYgRU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29wZSosIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwpAQCAtMTQ3MiwyNiArMTQzMCwxNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV2YWxDb2RlQmxvY2soQ29weVBhcnNlZEJsb2Nr
VGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKICAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2Nr
KENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgICAgICAgICAsIG1fYmFzZVNjb3BlRGVwdGgo
b3RoZXIubV9iYXNlU2NvcGVEZXB0aCkKLSAgICAgICAgICAgICwgbV92YXJpYWJsZXMob3RoZXIu
bV92YXJpYWJsZXMpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgRXZh
bENvZGVCbG9jayhFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRl
ciwgaW50IGJhc2VTY29wZURlcHRoLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUp
Ci0gICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2YWxDb2Rl
LCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKLSAgICAgICAg
ICAgICwgbV9iYXNlU2NvcGVEZXB0aChiYXNlU2NvcGVEZXB0aCkKKyAgICAgICAgRXZhbENvZGVC
bG9jayhFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgaW50IGJhc2VTY29wZURlcHRo
LCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IEdsb2Jh
bENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIGJhc2VTY29wZURlcHRoLCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAg
ICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIGludCBiYXNlU2NvcGVEZXB0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFzZVNjb3BlRGVwdGg7IH0KLQotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiB2
YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXhdOyB9Ci0g
ICAgICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdmFyaWFibGVzLnNpemUo
KTsgfQotICAgICAgICB2b2lkIGFkb3B0VmFyaWFibGVzKFZlY3RvcjxJZGVudGlmaWVyPiYgdmFy
aWFibGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV92YXJpYWJsZXMuaXNFbXB0
eSgpKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFibGVzKTsKLSAgICAgICAg
fQorICAgICAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPnZhcmlhYmxlKGluZGV4KTsgfQorICAgICAg
ICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiB1bmxpbmtlZEV2YWxDb2RlQmxvY2so
KS0+bnVtVmFyaWFibGVzKCk7IH0KICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICBwcm90
ZWN0ZWQ6CkBAIC0xNTAzLDggKzE0NTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgaW50IG1fYmFzZVNjb3BlRGVwdGg7Ci0gICAgICAgIFZlY3Rv
cjxJZGVudGlmaWVyPiBtX3ZhcmlhYmxlczsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2Nr
KiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8VW5saW5rZWRF
dmFsQ29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0KICAgICB9OwogCiAgICAgY2xh
c3MgRnVuY3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKQEAgLTE1MTQsOCArMTQ2
MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBG
dW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29k
ZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJv
b2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlID0gbnVs
bHB0cikKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUs
IGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgaXNDb25zdHJ1Y3Rv
ciwgYWx0ZXJuYXRpdmUpCisgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGVCbG9jaywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3Vy
Y2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093
blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogQ29k
ZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwg
MCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsK
ICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUu
aAppbmRleCAxN2I5YzY3ODJlYzNmZTVjOTdjMGRlMzFiZTNhYTU2M2QxNzNmMWQxLi44OTc5ZDBi
N2IyZDk1NDllMjhiMGQ2YjZhMTcxOTI3MTRkNzhiZDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wY29kZS5oCkBAIC0xMTgsNyArMTE4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIG1hY3JvKG9wX3B1dF90b19iYXNlLCA1KSBcCiAgICAgICAgIG1hY3JvKG9wX3B1dF90
b19iYXNlX3ZhcmlhYmxlLCA1KSBcCiAgICAgICAgIFwKLSAgICAgICAgbWFjcm8ob3BfaW5pdF9n
bG9iYWxfY29uc3QsIDMpIFwKKyAgICAgICAgbWFjcm8ob3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9w
LCA1KSBcCisgICAgICAgIG1hY3JvKG9wX2luaXRfZ2xvYmFsX2NvbnN0LCA1KSBcCiAgICAgICAg
IG1hY3JvKG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrLCA1KSBcCiAgICAgICAgIG1hY3JvKG9w
X2dldF9ieV9pZCwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAgICAgIG1hY3Jv
KG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZSwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBc
CkBAIC0yMDQsNyArMjA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFwKICAgICAgICAg
bWFjcm8ob3BfY2F0Y2gsIDIpIFwKICAgICAgICAgbWFjcm8ob3BfdGhyb3csIDIpIFwKLSAgICAg
ICAgbWFjcm8ob3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yLCAyKSBcCisgICAgICAgIG1hY3JvKG9w
X3Rocm93X3N0YXRpY19lcnJvciwgMykgXAogICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX2Rl
YnVnLCA1KSBcCiAgICAgICAgIG1hY3JvKG9wX3Byb2ZpbGVfd2lsbF9jYWxsLCAyKSBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44YWE0ODQwNGFjYWM3YWYxZjRlMDI0MWE5ZTM1NGQwOGY4YTA2YWY3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcApAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVu
bGlua2VkQ29kZUJsb2NrLmgiCisKKyNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2lu
Y2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkV4
ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIlNvdXJjZVByb3Zp
ZGVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6c19pbmZvID0geyAiVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUiLCAwLCAwLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKSB9OworY29u
c3QgQ2xhc3NJbmZvIFVubGlua2VkQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZENvZGVC
bG9jayIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRDb2RlQmxvY2spIH07
Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRHbG9iYWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVu
bGlua2VkR2xvYmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShVbmxpbmtlZEdsb2JhbENvZGVCbG9jaykgfTsKK2NvbnN0IENsYXNzSW5mbyBVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrKSB9OworY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkRXZhbENvZGVCbG9jazo6
c19pbmZvID0geyAiVW5saW5rZWRFdmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEV2YWxDb2RlQmxvY2spIH07Citjb25zdCBDbGFz
c0luZm8gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaykgfTsKKwordW5zaWduZWQgVW5saW5rZWRDb2RlQmxv
Y2s6OmFkZE9yRmluZENvbnN0YW50KEpTVmFsdWUgdikKK3sKKyAgICB1bnNpZ25lZCBudW1iZXJP
ZkNvbnN0YW50cyA9IG51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDb25zdGFudHM7ICsraSkgeworICAgICAgICBpZiAoZ2V0
Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBpKSA9PSB2KQorICAgICAgICAg
ICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiBhZGRDb25zdGFudCh2KTsKK30KKworVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSkKKyAgICA6IEJhc2UoKmdsb2JhbERh
dGEsIHN0cnVjdHVyZSkKKyAgICAsIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMobm9kZS0+Y2FwdHVy
ZWRWYXJpYWJsZUNvdW50KCkpCisgICAgLCBtX2ZvcmNlVXNlc0FyZ3VtZW50cyhub2RlLT51c2Vz
QXJndW1lbnRzKCkpCisgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KG5vZGUtPmlzU3RyaWN0TW9k
ZSgpKQorICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhub2RlLT5oYXNDYXB0dXJlZFZhcmlh
YmxlcygpKQorICAgICwgbV9uYW1lKG5vZGUtPmlkZW50KCkpCisgICAgLCBtX2luZmVycmVkTmFt
ZShub2RlLT5pbmZlcnJlZE5hbWUoKSkKKyAgICAsIG1fcGFyYW1ldGVycyhub2RlLT5wYXJhbWV0
ZXJzKCkpCisgICAgLCBtX2ZpcnN0TGluZU9mZnNldChub2RlLT5maXJzdExpbmUoKSAtIHNvdXJj
ZS5maXJzdExpbmUoKSkKKyAgICAsIG1fbGluZUNvdW50KG5vZGUtPmxhc3RMaW5lKCkgLSBub2Rl
LT5maXJzdExpbmUoKSkKKyAgICAsIG1fc3RhcnRPZmZzZXQobm9kZS0+c291cmNlKCkuc3RhcnRP
ZmZzZXQoKSAtIHNvdXJjZS5zdGFydE9mZnNldCgpKQorICAgICwgbV9zb3VyY2VMZW5ndGgobm9k
ZS0+c291cmNlKCkubGVuZ3RoKCkpCisgICAgLCBtX2ZlYXR1cmVzKG5vZGUtPmZlYXR1cmVzKCkp
CisgICAgLCBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZShub2RlLT5mdW5jdGlvbk5hbWVJ
c0luU2NvcGVUb2dnbGUoKSkKK3sKK30KKwordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVG
bGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRo
b3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9uYW1lVmFsdWUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N5bWJvbFRh
YmxlRm9yQ2FsbCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3ltYm9sVGFi
bGVGb3JDb25zdHJ1Y3QpOworfQorCitGdW5jdGlvbkV4ZWN1dGFibGUqIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpsaW5rKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBzaXplX3QgbGluZU9mZnNldCwgc2l6ZV90IHNvdXJjZU9mZnNldCkKK3sK
KyAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBsaW5lT2Zmc2V0ICsgbV9maXJzdExpbmVPZmZzZXQ7
CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2VPZmZzZXQgKyBtX3N0YXJ0T2Zmc2V0
OworICAgIFNvdXJjZUNvZGUgY29kZShzb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRPZmZzZXQsIHN0
YXJ0T2Zmc2V0ICsgbV9zb3VyY2VMZW5ndGgsIGZpcnN0TGluZSk7CisgICAgcmV0dXJuIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGNvZGUsIHRoaXMsIGZpcnN0TGluZSwg
Zmlyc3RMaW5lICsgbV9saW5lQ291bnQpOworfQorCitVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50
aWZpZXImIG5hbWUsIEV4ZWNTdGF0ZSogZXhlYywgRGVidWdnZXIqLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQoreworICAgIFBhcnNlckVycm9yIGVycm9y
OworICAgIENvZGVDYWNoZSogY29kZUNhY2hlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmNvZGVDYWNo
ZSgpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUNh
Y2hlLT5nZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShleGVjLT5nbG9iYWxEYXRh
KCksIG5hbWUsIHNvdXJjZSwgZXJyb3IpOworICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFyc2Vy
RXJyb3I6OkVycm9yTm9uZSkgeworICAgICAgICAqZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9i
amVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNvdXJjZSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIHJldHVybiBleGVjdXRhYmxlOworfQorCitVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29kZUJsb2NrRm9yKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgRGVidWdnZXJNb2RlIGRlYnVnZ2Vy
TW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQorewor
ICAgIHN3aXRjaCAoc3BlY2lhbGl6YXRpb25LaW5kKSB7CisgICAgY2FzZSBDb2RlRm9yQ2FsbDoK
KyAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbCkKKyAgICAgICAgICAgIHJldHVybiBtX2Nv
ZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNv
bnN0cnVjdDoKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQorICAgICAgICAg
ICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBnbG9iYWxE
YXRhLmNvZGVDYWNoZSgpLT5nZXRGdW5jdGlvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCB0aGlzLCBz
b3VyY2UsIHNwZWNpYWxpemF0aW9uS2luZCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVy
cm9yKTsKKyAgICAKKyAgICBpZiAoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5v
bmUpCisgICAgICAgIHJldHVybiAwOworCisgICAgc3dpdGNoIChzcGVjaWFsaXphdGlvbktpbmQp
IHsKKyAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwuc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHJlc3VsdCk7CisgICAgICAgIG1fc3ltYm9sVGFibGVGb3JDYWxs
LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1bHQtPnN5bWJvbFRhYmxlKCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1bHQpOworICAgICAgICBtX3N5bWJv
bFRhYmxlRm9yQ29uc3RydWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1bHQtPnN5bWJvbFRh
YmxlKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
U3RyaW5nIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbVN0cmluZygpIGNvbnN0Cit7
CisgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKm1fcGFyYW1ldGVyczsKKyAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChzaXplX3QgcG9zID0gMDsgcG9zIDwg
cGFyYW1ldGVycy5zaXplKCk7ICsrcG9zKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5
KCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHBhcmFtZXRlcnNbcG9zXS5zdHJpbmcoKSk7CisgICAgfQorICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK1VubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENv
ZGVCbG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgOiBCYXNl
KCpnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgLCBtX251bVZhcnMoMCkKKyAgICAsIG1fbnVt
Q2FsbGVlUmVnaXN0ZXJzKDApCisgICAgLCBtX251bVBhcmFtZXRlcnMoMCkKKyAgICAsIG1fZ2xv
YmFsRGF0YShnbG9iYWxEYXRhKQorICAgICwgbV9hcmd1bWVudHNSZWdpc3RlcigtMSkKKyAgICAs
IG1fbmVlZHNGdWxsU2NvcGVDaGFpbihpbmZvLm1fbmVlZHNBY3RpdmF0aW9uKQorICAgICwgbV91
c2VzRXZhbChpbmZvLm1fdXNlc0V2YWwpCisgICAgLCBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlv
bihmYWxzZSkKKyAgICAsIG1faXNTdHJpY3RNb2RlKGluZm8ubV9pc1N0cmljdE1vZGUpCisgICAg
LCBtX2lzQ29uc3RydWN0b3IoaW5mby5tX2lzQ29uc3RydWN0b3IpCisgICAgLCBtX2hhc0NhcHR1
cmVkVmFyaWFibGVzKGZhbHNlKQorICAgICwgbV9maXJzdExpbmUoMCkKKyAgICAsIG1fbGluZUNv
dW50KDApCisgICAgLCBtX2ZlYXR1cmVzKDApCisgICAgLCBtX2NvZGVUeXBlKGNvZGVUeXBlKQor
ICAgICwgbV9yZXNvbHZlT3BlcmF0aW9uQ291bnQoMCkKKyAgICAsIG1fcHV0VG9CYXNlT3BlcmF0
aW9uQ291bnQoMSkKKyAgICAsIG1fYXJyYXlQcm9maWxlQ291bnQoMCkKKyAgICAsIG1fdmFsdWVQ
cm9maWxlQ291bnQoMCkKKyAgICAsIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudCgwKQorI2lmIEVO
QUJMRShCWVRFQ09ERV9DT01NRU5UUykKKyAgICAsIG1fYnl0ZWNvZGVDb21tZW50SXRlcmF0b3Io
MCkKKyNlbmRpZgoreworCit9CisKK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBVbmxpbmtlZENv
ZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAg
Q09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQodGhp
c09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigp
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKKyAgICBmb3IgKEZ1bmN0
aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlv
bkRlY2xzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNscy5lbmQoKTsg
cHRyICE9IGVuZDsgKytwdHIpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgZm9y
IChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1f
ZnVuY3Rpb25FeHBycy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMu
ZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQorICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOwor
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMu
ZGF0YSgpLCB0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgaWYg
KHRoaXNPYmplY3QtPm1fcmFyZURhdGEpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGVu
ZCA9IHRoaXNPYmplY3QtPm1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7IGkgIT0gZW5kOyBp
KyspCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+
bV9yZWdleHBzW2ldKTsKKyAgICB9Cit9CisKK2ludCBVbmxpbmtlZENvZGVCbG9jazo6bGluZU51
bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIEFT
U0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgVmVjdG9y
PExpbmVJbmZvPiYgbGluZUluZm8gPSBtX2xpbmVJbmZvOworICAgIAorICAgIGludCBsb3cgPSAw
OworICAgIGludCBoaWdoID0gbGluZUluZm8uc2l6ZSgpOworICAgIHdoaWxlIChsb3cgPCBoaWdo
KSB7CisgICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxvdykgLyAyOworICAgICAgICBp
ZiAobGluZUluZm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNldCA8PSBieXRlY29kZU9mZnNldCkKKyAg
ICAgICAgICAgIGxvdyA9IG1pZCArIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhpZ2gg
PSBtaWQ7CisgICAgfQorICAgIAorICAgIGlmICghbG93KQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gbGluZUluZm9bbG93IC0gMV0ubGluZU51bWJlcjsKK30KKwordm9pZCBVbmxpbmtl
ZENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0
KQoreworICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7
CisKKyAgICBpZiAoIW1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpKSB7CisgICAgICAgIHN0YXJ0T2Zm
c2V0ID0gMDsKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICAgICAgZGl2b3QgPSAwOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBl
eHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lvbkluZm87CisKKyAgICBpbnQgbG93ID0gMDsKKyAg
ICBpbnQgaGlnaCA9IGV4cHJlc3Npb25JbmZvLnNpemUoKTsKKyAgICB3aGlsZSAobG93IDwgaGln
aCkgeworICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKKyAgICAgICAg
aWYgKGV4cHJlc3Npb25JbmZvW21pZF0uaW5zdHJ1Y3Rpb25PZmZzZXQgPD0gYnl0ZWNvZGVPZmZz
ZXQpCisgICAgICAgICAgICBsb3cgPSBtaWQgKyAxOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBoaWdoID0gbWlkOworICAgIH0KKworICAgIEFTU0VSVChsb3cpOworICAgIGlmICghbG93KSB7
CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICAg
ICAgZGl2b3QgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RhcnRPZmZzZXQg
PSBleHByZXNzaW9uSW5mb1tsb3cgLSAxXS5zdGFydE9mZnNldDsKKyAgICBlbmRPZmZzZXQgPSBl
eHByZXNzaW9uSW5mb1tsb3cgLSAxXS5lbmRPZmZzZXQ7CisgICAgZGl2b3QgPSBleHByZXNzaW9u
SW5mb1tsb3cgLSAxXS5kaXZvdFBvaW50OworfQorCit2b2lkIFVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZs
YWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhv
dXRTZXR0aW5nRmxhZyk7CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5kID0gdGhp
c09iamVjdC0+bV9mdW5jdGlvbkRlY2xhcmF0aW9ucy5zaXplKCk7IGkgIT0gZW5kOyBpKyspCisg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbGFyYXRpb25z
W2ldLnNlY29uZCk7Cit9CisKK1VubGlua2VkQ29kZUJsb2NrOjp+VW5saW5rZWRDb2RlQmxvY2so
KQoreworfQorCit2b2lkIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwq
IGNlbGwpCit7CisgICAganNDYXN0PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpLT5+
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKCk7Cit9CisKK3ZvaWQgVW5saW5rZWRFdmFsQ29kZUJs
b2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8VW5saW5rZWRFdmFsQ29k
ZUJsb2NrKj4oY2VsbCktPn5VbmxpbmtlZEV2YWxDb2RlQmxvY2soKTsKK30KKwordm9pZCBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nh
c3Q8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayo+KGNlbGwpLT5+VW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jaygpOworfQorCit2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
PihjZWxsKS0+flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7Cit9CisKK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iZjNmNWZkZmZmYmM1ODU1Zjk4NTI5ZTEyNDNjN2E2YmQ3NjIwNTg2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKQEAgLTAsMCArMSw3MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFVubGlua2VkQ29kZUJsb2NrX2gKKyNkZWZpbmUgVW5saW5r
ZWRDb2RlQmxvY2tfaAorCisjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgorI2luY2x1
ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKKyNpbmNsdWRlICJDb2RlVHlwZS5oIgorI2lu
Y2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKKyNpbmNsdWRlICJJZGVudGlmaWVyLmgiCisj
aW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiTGluZUluZm8uaCIKKyNpbmNsdWRlICJOb2Rl
cy5oIgorI2luY2x1ZGUgIlJlZ0V4cC5oIgorI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCisK
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRGVidWdnZXI7CitjbGFzcyBGdW5jdGlvbkJv
ZHlOb2RlOworY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgRnVuY3Rpb25QYXJhbWV0
ZXJzOworc3RydWN0IFBhcnNlckVycm9yOworY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKK2NsYXNz
IFNvdXJjZUNvZGU7CitjbGFzcyBTb3VyY2VQcm92aWRlcjsKK2NsYXNzIFNoYXJlZFN5bWJvbFRh
YmxlOworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrOworCit0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFsdWVQcm9maWxlOwordHlwZWRl
ZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKK3R5cGVkZWYgdW5zaWduZWQgVW5saW5r
ZWRMTEludENhbGxMaW5rSW5mbzsKKworc3RydWN0IEV4ZWN1dGFibGVJbmZvIHsKKyAgICBFeGVj
dXRhYmxlSW5mbyhib29sIG5lZWRzQWN0aXZhdGlvbiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBpc1N0
cmljdE1vZGUsIGJvb2wgaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgOiBtX25lZWRzQWN0aXZhdGlv
bihuZWVkc0FjdGl2YXRpb24pCisgICAgICAgICwgbV91c2VzRXZhbCh1c2VzRXZhbCkKKyAgICAg
ICAgLCBtX2lzU3RyaWN0TW9kZShpc1N0cmljdE1vZGUpCisgICAgICAgICwgbV9pc0NvbnN0cnVj
dG9yKGlzQ29uc3RydWN0b3IpCisgICAgeworICAgIH0KKyAgICBib29sIG1fbmVlZHNBY3RpdmF0
aW9uOworICAgIGJvb2wgbV91c2VzRXZhbDsKKyAgICBib29sIG1faXNTdHJpY3RNb2RlOworICAg
IGJvb2wgbV9pc0NvbnN0cnVjdG9yOworfTsKKworY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgQ29kZUNh
Y2hlOworICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgc3RhdGljIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS0+aGVhcCkpIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBzb3VyY2UsIG5vZGUpOworICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKmdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CisgICAgfQorCisgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW5mZXJyZWROYW1lOyB9CisgICAgSlNTdHJpbmcqIG5hbWVWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZVZhbHVlLmdldCgpOyB9CisgICAgU2hhcmVkU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgPyBtX3N5bWJvbFRhYmxlRm9yQ2FsbC5n
ZXQoKSA6IG1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3QuZ2V0KCk7CisgICAgfQorICAgIHNpemVf
dCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6ZSgpOyB9
CisgICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblN0cmlj
dENvbnRleHQ7IH0KKyAgICBGdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUgZnVuY3Rpb25OYW1l
SXNJblNjb3BlVG9nZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVU
b2dnbGU7IH0KKworICAgIHVuc2lnbmVkIGZpcnN0TGluZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fZmlyc3RMaW5lT2Zmc2V0OyB9CisgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9saW5lQ291bnQ7IH0KKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGgoKSB7IHJl
dHVybiBtX3NvdXJjZUxlbmd0aDsgfQorCisgICAgU3RyaW5nIHBhcmFtU3RyaW5nKCkgY29uc3Q7
CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3IoSlNHbG9iYWxE
YXRhJiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2Vy
TW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworCisgICAgc3RhdGljIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVyJiwgRXhl
Y1N0YXRlKiwgRGVidWdnZXIqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqKiBleGNlcHRp
b24pOworCisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBsaW5rKEpTR2xvYmFsRGF0YSYsIGNvbnN0
IFNvdXJjZUNvZGUmLCBzaXplX3QgbGluZU9mZnNldCwgc2l6ZV90IHNvdXJjZU9mZnNldCk7CisK
KyAgICB2b2lkIGNsZWFyQ29kZSgpCisgICAgeworICAgICAgICBtX3N5bWJvbFRhYmxlRm9yQ2Fs
bC5jbGVhcigpOworICAgICAgICBtX3N5bWJvbFRhYmxlRm9yQ29uc3RydWN0LmNsZWFyKCk7Cisg
ICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5jbGVhcigpOworICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC5jbGVhcigpOworICAgIH0KKworICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFy
YW1ldGVycygpIHsgcmV0dXJuIG1fcGFyYW1ldGVycy5nZXQoKTsgfQorCisgICAgdm9pZCByZWNv
cmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMs
IGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKKyAgICB7CisgICAgICAgIG1fZmVhdHVyZXMg
PSBmZWF0dXJlczsKKyAgICAgICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGhhc0NhcHR1cmVk
VmFyaWFibGVzOworICAgICAgICBtX2xpbmVDb3VudCA9IGxhc3RMaW5lIC0gZmlyc3RMaW5lOwor
ICAgIH0KKworICAgIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9m
b3JjZVVzZXNBcmd1bWVudHM7IH0KKworICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0
IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KKyAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsgfQorCisgICAgc3RhdGljIGNv
bnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CisKK3ByaXZhdGU6CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9i
YWxEYXRhKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uQm9keU5vZGUq
KTsKKyAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxv
Y2tGb3JDYWxsOworICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKKworICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJp
YWJsZXMgOiAyOTsKKyAgICBib29sIG1fZm9yY2VVc2VzQXJndW1lbnRzIDogMTsKKyAgICBib29s
IG1faXNJblN0cmljdENvbnRleHQgOiAxOworICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlhYmxl
cyA6IDE7CisKKyAgICBJZGVudGlmaWVyIG1fbmFtZTsKKyAgICBJZGVudGlmaWVyIG1faW5mZXJy
ZWROYW1lOworICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9uYW1lVmFsdWU7CisgICAgV3Jp
dGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlRm9yQ2FsbDsKKyAgICBX
cml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3Q7
CisgICAgUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOworICAgIHVuc2ln
bmVkIG1fZmlyc3RMaW5lT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OworICAgIHVu
c2lnbmVkIG1fc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9zb3VyY2VMZW5ndGg7CisKKyAg
ICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKKworICAgIEZ1bmN0aW9uTmFtZUlzSW5TY29wZVRv
Z2dsZSBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZTsKKworcHJvdGVjdGVkOgorICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHsKKyAgICAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIG1fbmFtZVZhbHVl
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBqc1N0cmluZygmZ2xvYmFsRGF0YSwgbmFtZSgpLnN0cmlu
ZygpKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQor
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKK307CisKK3N0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSB7
CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgaW50MzJfdD4gU3RyaW5n
T2Zmc2V0VGFibGU7CisgICAgU3RyaW5nT2Zmc2V0VGFibGUgb2Zmc2V0VGFibGU7CisKKyAgICBp
bmxpbmUgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShTdHJpbmdJbXBsKiB2YWx1ZSwgaW50MzJfdCBk
ZWZhdWx0T2Zmc2V0KQorICAgIHsKKyAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG9mZnNldFRhYmxlLmVuZCgpOworICAgICAgICBTdHJpbmdPZmZzZXRUYWJs
ZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7CisgICAgICAg
IGlmIChsb2MgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRPZmZzZXQ7CisgICAg
ICAgIHJldHVybiBsb2MtPnZhbHVlOworICAgIH0KKworfTsKKworc3RydWN0IFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlIHsKKyAgICBWZWN0b3I8aW50MzJfdD4gYnJhbmNoT2Zmc2V0czsKKyAgICBp
bnQzMl90IG1pbjsKKworICAgIGludDMyX3Qgb2Zmc2V0Rm9yVmFsdWUoaW50MzJfdCB2YWx1ZSwg
aW50MzJfdCBkZWZhdWx0T2Zmc2V0KTsKKyAgICB2b2lkIGFkZChpbnQzMl90IGtleSwgaW50MzJf
dCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIWJyYW5jaE9mZnNldHNba2V5XSkKKyAgICAg
ICAgICAgIGJyYW5jaE9mZnNldHNba2V5XSA9IG9mZnNldDsKKyAgICB9Cit9OworCitzdHJ1Y3Qg
VW5saW5rZWRIYW5kbGVySW5mbyB7CisgICAgdWludDMyX3Qgc3RhcnQ7CisgICAgdWludDMyX3Qg
ZW5kOworICAgIHVpbnQzMl90IHRhcmdldDsKKyAgICB1aW50MzJfdCBzY29wZURlcHRoOworfTsK
Kworc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rpb24geworICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24o
KSB7IHUub3BlcmFuZCA9IDA7IH0KKyAgICBVbmxpbmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9w
Y29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsgfQorICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50
IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3BlcmFuZDsgfQorICAgIHVuaW9uIHsKKyAgICAgICAg
T3Bjb2RlSUQgb3Bjb2RlOworICAgICAgICBpbnQzMl90IG9wZXJhbmQ7CisgICAgfSB1OworfTsK
KworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJl
ID0gdHJ1ZTsKKworICAgIGVudW0geyBDYWxsRnVuY3Rpb24sIEFwcGx5RnVuY3Rpb24gfTsKKwor
ICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faXNDb25zdHJ1Y3Rvcjsg
fQorICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmljdE1vZGU7
IH0KKyAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQorCisg
ICAgYm9vbCBuZWVkc0Z1bGxTY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0Z1bGxT
Y29wZUNoYWluOyB9CisgICAgdm9pZCBzZXROZWVkc0Z1bGxTY29wZUNoYWluKGJvb2wgbmVlZHNG
dWxsU2NvcGVDaGFpbikgeyBtX25lZWRzRnVsbFNjb3BlQ2hhaW4gPSBuZWVkc0Z1bGxTY29wZUNo
YWluOyB9CisKKyAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKGNvbnN0IEV4cHJlc3Npb25SYW5n
ZUluZm8mIGV4cHJlc3Npb25JbmZvKQorICAgIHsKKyAgICAgICAgbV9leHByZXNzaW9uSW5mby5h
cHBlbmQoZXhwcmVzc2lvbkluZm8pOworICAgIH0KKworICAgIHZvaWQgYWRkTGluZUluZm8odW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCBsaW5lTm8pCisgICAgeworICAgICAgICBWZWN0b3I8
TGluZUluZm8+JiBsaW5lSW5mbyA9IG1fbGluZUluZm87CisgICAgICAgIGlmICghbGluZUluZm8u
c2l6ZSgpIHx8IGxpbmVJbmZvLmxhc3QoKS5saW5lTnVtYmVyICE9IGxpbmVObykgeworICAgICAg
ICAgICAgTGluZUluZm8gaW5mbyA9IHsgYnl0ZWNvZGVPZmZzZXQsIGxpbmVObyB9OworICAgICAg
ICAgICAgbGluZUluZm8uYXBwZW5kKGluZm8pOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyB9
CisKKyAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycworICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKGlu
dCB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KKyAgICB2
b2lkIHNldEFjdGl2YXRpb25SZWdpc3RlcihpbnQgYWN0aXZhdGlvblJlZ2lzdGVyKSB7IG1fYWN0
aXZhdGlvblJlZ2lzdGVyID0gYWN0aXZhdGlvblJlZ2lzdGVyOyB9CisKKyAgICB2b2lkIHNldEFy
Z3VtZW50c1JlZ2lzdGVyKGludCBhcmd1bWVudHNSZWdpc3RlcikgeyBtX2FyZ3VtZW50c1JlZ2lz
dGVyID0gYXJndW1lbnRzUmVnaXN0ZXI7IH0KKyAgICBib29sIHVzZXNBcmd1bWVudHMoKSBjb25z
dCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyICE9IC0xOyB9CisgICAgaW50IGFyZ3VtZW50
c1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNSZWdpc3RlcjsgfQorCisgICAg
Ly8gUGFyYW1ldGVyIGluZm9ybWF0aW9uCisgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKGludCBu
ZXdWYWx1ZSkgeyBtX251bVBhcmFtZXRlcnMgPSBuZXdWYWx1ZTsgfQorICAgIHZvaWQgYWRkUGFy
YW1ldGVyKCkgeyBtX251bVBhcmFtZXRlcnMrKzsgfQorICAgIHVuc2lnbmVkIG51bVBhcmFtZXRl
cnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KKworICAgIHVuc2lnbmVkIGFk
ZFJlZ0V4cChSZWdFeHAqIHIpCisgICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNz
YXJ5KCk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6
ZSgpOworICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKFdyaXRlQmFycmllcjxS
ZWdFeHA+KCptX2dsb2JhbERhdGEsIHRoaXMsIHIpKTsKKyAgICAgICAgcmV0dXJuIHNpemU7Cisg
ICAgfQorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnRXhwcygpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7CisgICAgfQorICAgIFJlZ0V4cCogcmVnZXhw
KGludCBpbmRleCkgY29uc3QgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRh
LT5tX3JlZ2V4cHNbaW5kZXhdLmdldCgpOyB9CisKKyAgICAvLyBDb25zdGFudCBQb29scworCisg
ICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZp
ZXJzLnNpemUoKTsgfQorICAgIHZvaWQgYWRkSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJiBp
KSB7IHJldHVybiBtX2lkZW50aWZpZXJzLmFwcGVuZChpKTsgfQorICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzW2lu
ZGV4XTsgfQorICAgIGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRpZmllcnMoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXJzOyB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFu
dFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOyB9
CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2KQorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CisgICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKKyAgICAgICAg
bV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCptX2dsb2JhbERhdGEsIHRoaXMsIHYpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICB1bnNpZ25lZCBhZGRPckZpbmRDb25z
dGFudChKU1ZhbHVlKTsKKyAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+ID4m
IGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQorICAg
IGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleF07IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleDsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChp
bnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKworICAgIC8vIEp1bXBzCisgICAgc2l6
ZV90IG51bWJlck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLnNp
emUoKTsgfQorICAgIHZvaWQgYWRkSnVtcFRhcmdldCh1bnNpZ25lZCBqdW1wVGFyZ2V0KSB7IG1f
anVtcFRhcmdldHMuYXBwZW5kKGp1bXBUYXJnZXQpOyB9CisgICAgdW5zaWduZWQganVtcFRhcmdl
dChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHNbaW5kZXhdOyB9CisgICAg
dW5zaWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLmxh
c3QoKTsgfQorCisgICAgdm9pZCBzZXRJc051bWVyaWNDb21wYXJlRnVuY3Rpb24oYm9vbCBpc051
bWVyaWNDb21wYXJlRnVuY3Rpb24pIHsgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24gPSBpc051
bWVyaWNDb21wYXJlRnVuY3Rpb247IH0KKyAgICBib29sIGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uOyB9CisKKyAgICB2
b2lkIHNocmlua1RvRml0KCkKKyAgICB7CisgICAgICAgIG1fanVtcFRhcmdldHMuc2hyaW5rVG9G
aXQoKTsKKyAgICAgICAgbV9pZGVudGlmaWVycy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2Nv
bnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNscy5z
aHJpbmtUb0ZpdCgpOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgbV9saW5lSW5mby5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fZXhwcmVzc2lvbkluZm8uc2hy
aW5rVG9GaXQoKTsKKworI2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKKyAgICAgICAgbV9i
eXRlY29kZUNvbW1lbnRzLnNocmlua1RvRml0KCk7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fcmFy
ZURhdGEpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2hy
aW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaHJpbmtUb0Zp
dCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2hyaW5rVG9G
aXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxl
cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0
Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHVuc2lnbmVkIG51bWJlck9mSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV91bmxp
bmtlZEluc3RydWN0aW9ucy5zaXplKCk7IH0KKyAgICBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRJ
bnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1fdW5saW5rZWRJbnN0cnVjdGlv
bnM7IH0KKyAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRJbnN0cnVjdGlvbj4mIGlu
c3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRJbnN0cnVjdGlvbnM7IH0KKwor
ICAgIGludCBtX251bVZhcnM7CisgICAgaW50IG1fbnVtQ2FwdHVyZWRWYXJzOworICAgIGludCBt
X251bUNhbGxlZVJlZ2lzdGVyczsKKworICAgIC8vIEp1bXAgVGFibGVzCisKKyAgICBzaXplX3Qg
bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJl
RGF0YSA/IG1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAw
OyB9CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGFkZEltbWVkaWF0ZVN3aXRjaEp1bXBU
YWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX2ltbWVk
aWF0ZVN3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2VkU2ltcGxlSnVtcFRhYmxlKCkpOyBy
ZXR1cm4gbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQor
ICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBpbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUoaW50
IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9p
bW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAgICBzaXplX3QgbnVt
YmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0
YSA/IG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9
CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGFkZENoYXJhY3RlclN3aXRjaEp1bXBUYWJs
ZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX2NoYXJhY3Rl
clN3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2VkU2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1
cm4gbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAg
IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBjaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jaGFy
YWN0ZXJTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAgICBzaXplX3QgbnVtYmVy
T2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1f
cmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9CisgICAgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIGFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuYXBwZW5kKFVubGlua2VkU3RyaW5nSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1f
cmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOyB9CisKKyAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkRlY2woVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9mdW5j
dGlvbkRlY2xzLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzLmFwcGVuZChXcml0ZUJh
cnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOworICAgICAgICBtX2Z1bmN0aW9u
RGVjbHMubGFzdCgpLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlzLCBuKTsKKyAgICAgICAgcmV0dXJu
IHNpemU7CisgICAgfQorICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRl
Y2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9Cisg
ICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNs
cy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkV4cHIoVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9mdW5jdGlv
bkV4cHJzLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzLmFwcGVuZChXcml0ZUJhcnJp
ZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOworICAgICAgICBtX2Z1bmN0aW9uRXhw
cnMubGFzdCgpLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlzLCBuKTsKKyAgICAgICAgcmV0dXJuIHNp
emU7CisgICAgfQorICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4cHIo
aW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5kZXhdLmdldCgpOyB9CisgICAg
c2l6ZV90IG51bWJlck9mRnVuY3Rpb25FeHBycygpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHBycy5z
aXplKCk7IH0KKworICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CisgICAgc2l6ZV90
IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8g
bV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkgOiAwOyB9CisgICAgdm9pZCBh
ZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmxlcikgeyBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzLmFwcGVuZChoYW5sZXIpOyB9CisgICAgVW5saW5rZWRIYW5kbGVySW5mbyYgZXhj
ZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9y
YXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KKworICAgIFNoYXJlZFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ltYm9sVGFibGUuZ2V0KCk7
IH0KKworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xv
YmFsRGF0YTsgfQorCisgICAgdW5zaWduZWQgYWRkUmVzb2x2ZSgpIHsgcmV0dXJuIG1fcmVzb2x2
ZU9wZXJhdGlvbkNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlJlc29sdmVPcGVyYXRp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlT3BlcmF0aW9uQ291bnQ7IH0KKyAgICB1bnNp
Z25lZCBhZGRQdXRUb0Jhc2UoKSB7IHJldHVybiBtX3B1dFRvQmFzZU9wZXJhdGlvbkNvdW50Kys7
IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlB1dFRvQmFzZU9wZXJhdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX3B1dFRvQmFzZU9wZXJhdGlvbkNvdW50OyB9CisKKyAgICBVbmxpbmtlZEFycmF5UHJv
ZmlsZSBhZGRBcnJheVByb2ZpbGUoKSB7IHJldHVybiBtX2FycmF5UHJvZmlsZUNvdW50Kys7IH0K
KyAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5UHJvZmlsZXMoKSB7IHJldHVybiBtX2FycmF5UHJv
ZmlsZUNvdW50OyB9CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgYWRkVmFsdWVQcm9maWxlKCkg
eyByZXR1cm4gbV92YWx1ZVByb2ZpbGVDb3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVDb3VudDsgfQorCisgICAgVW5s
aW5rZWRMTEludENhbGxMaW5rSW5mbyBhZGRMTEludENhbGxMaW5rSW5mbygpIHsgcmV0dXJuIG1f
bGxpbnRDYWxsTGlua0luZm9Db3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMTGludENh
bGxMaW5rSW5mb3MoKSB7IHJldHVybiBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7IH0KKworICAg
IENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQorCisgICAg
aW50IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CisgICAg
aW50IGFjdGl2YXRpb25SZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZhdGlvblJlZ2lz
dGVyOyB9CisKKworICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbih1bnNpZ25l
ZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9ucy5hcHBlbmQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbik7CisgICAg
fQorCisgICAgc2l6ZV90IG51bWJlck9mUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQorICAgIGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsgfQorCisgICAgdHlwZWRlZiBW
ZWN0b3I8SlNWYWx1ZT4gQ29uc3RhbnRCdWZmZXI7CisKKyAgICBzaXplX3QgY29uc3RhbnRCdWZm
ZXJDb3VudCgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25z
dGFudEJ1ZmZlcnMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnRCdWZmZXIodW5z
aWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OworICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMu
c2l6ZSgpOworICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5hcHBlbmQoVmVj
dG9yPEpTVmFsdWU+KGxlbmd0aCkpOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisKKyAg
ICBjb25zdCBDb25zdGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBt
X3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpbmRleF07CisgICAgfQorCisgICAgQ29uc3Rh
bnRCdWZmZXImIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fcmFyZURhdGEpOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFu
dEJ1ZmZlcnNbaW5kZXhdOworICAgIH0KKworICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVEYXRhOyB9CisKKyAgICBpbnQgbGluZU51bWJlckZvckJ5dGVjb2RlT2Zm
c2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKworICAgIHZvaWQgZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGlu
dCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KTsKKworICAgIHZvaWQgcmVjb3JkUGFyc2Uo
Q29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCB1bnNpZ25l
ZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxpbmVDb3VudCkKKyAgICB7CisgICAgICAgIG1fZmVhdHVy
ZXMgPSBmZWF0dXJlczsKKyAgICAgICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGhhc0NhcHR1
cmVkVmFyaWFibGVzOworICAgICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKKyAgICAgICAg
bV9saW5lQ291bnQgPSBsaW5lQ291bnQ7CisgICAgfQorCisgICAgQ29kZUZlYXR1cmVzIGNvZGVG
ZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KKyAgICBib29sIGhhc0NhcHR1
cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsgfQor
ICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lOyB9Cisg
ICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KKwor
cHJvdGVjdGVkOgorICAgIFVubGlua2VkQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSosIFN0cnVjdHVy
ZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYpOworICAgIH5VbmxpbmtlZENvZGVC
bG9jaygpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gR2xvYmFsQ29kZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgU2hhcmVkU3ltYm9s
VGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhKSk7CisgICAgfQorCitwcml2YXRlOgorCisgICAgdm9p
ZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKKyAgICB7CisgICAgICAgIGlmICghbV9yYXJl
RGF0YSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmFyZURhdGEpOwor
ICAgIH0KKworICAgIFJlZkNvdW50ZWRBcnJheTxVbmxpbmtlZEluc3RydWN0aW9uPiBtX3VubGlu
a2VkSW5zdHJ1Y3Rpb25zOworCisgICAgaW50IG1fbnVtUGFyYW1ldGVyczsKKyAgICBKU0dsb2Jh
bERhdGEqIG1fZ2xvYmFsRGF0YTsKKworICAgIGludCBtX3RoaXNSZWdpc3RlcjsKKyAgICBpbnQg
bV9hcmd1bWVudHNSZWdpc3RlcjsKKyAgICBpbnQgbV9hY3RpdmF0aW9uUmVnaXN0ZXI7CisKKyAg
ICBib29sIG1fbmVlZHNGdWxsU2NvcGVDaGFpbiA6IDE7CisgICAgYm9vbCBtX3VzZXNFdmFsIDog
MTsKKyAgICBib29sIG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uIDogMTsKKyAgICBib29sIG1f
aXNTdHJpY3RNb2RlIDogMTsKKyAgICBib29sIG1faXNDb25zdHJ1Y3RvciA6IDE7CisgICAgYm9v
bCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKKyAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZTsK
KyAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKKworICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVz
OworICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fanVt
cFRhcmdldHM7CisKKyAgICAvLyBDb25zdGFudCBQb29scworICAgIFZlY3RvcjxJZGVudGlmaWVy
PiBtX2lkZW50aWZpZXJzOworICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiBtX2Nv
bnN0YW50UmVnaXN0ZXJzOworICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZT4gPiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7CisgICAgRnVu
Y3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNsczsKKyAgICBGdW5jdGlvbkV4cHJl
c3Npb25WZWN0b3IgbV9mdW5jdGlvbkV4cHJzOworCisgICAgV3JpdGVCYXJyaWVyPFNoYXJlZFN5
bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOworCisgICAgVmVjdG9yPExpbmVJbmZvPiBtX2xpbmVJ
bmZvOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
OworCisjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQorICAgIFZlY3RvcjxDb21tZW50PiAg
bV9ieXRlY29kZUNvbW1lbnRzOworICAgIHNpemVfdCBtX2J5dGVjb2RlQ29tbWVudEl0ZXJhdG9y
OworI2VuZGlmCisKKyAgICB1bnNpZ25lZCBtX3Jlc29sdmVPcGVyYXRpb25Db3VudDsKKyAgICB1
bnNpZ25lZCBtX3B1dFRvQmFzZU9wZXJhdGlvbkNvdW50OworICAgIHVuc2lnbmVkIG1fYXJyYXlQ
cm9maWxlQ291bnQ7CisgICAgdW5zaWduZWQgbV92YWx1ZVByb2ZpbGVDb3VudDsKKyAgICB1bnNp
Z25lZCBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7CisKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgUmFy
ZURhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwor
CisgICAgICAgIC8vIFJhcmUgQ29uc3RhbnRzCisgICAgICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8
UmVnRXhwPiA+IG1fcmVnZXhwczsKKworICAgICAgICAvLyBCdWZmZXJzIHVzZWQgZm9yIGxhcmdl
IGFycmF5IGxpdGVyYWxzCisgICAgICAgIFZlY3RvcjxDb25zdGFudEJ1ZmZlcj4gbV9jb25zdGFu
dEJ1ZmZlcnM7CisKKyAgICAgICAgLy8gSnVtcCBUYWJsZXMKKyAgICAgICAgVmVjdG9yPFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlPiBtX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXM7CisgICAgICAg
IFZlY3RvcjxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFi
bGVzOworICAgICAgICBWZWN0b3I8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlczsKKworICAgICAgICAvLyBFeHByZXNzaW9uIGluZm8gLSBwcmVzZW50IGlm
IGRlYnVnZ2luZy4KKyAgICB9OworCitwcml2YXRlOgorICAgIE93blB0cjxSYXJlRGF0YT4gbV9y
YXJlRGF0YTsKKyAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5m
bzsKKworcHJvdGVjdGVkOgorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworY2xhc3MgVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgeworcHVibGlj
OgorICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKKworcHJvdGVjdGVkOgorICAg
IFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYg
aW5mbykKKyAgICAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgY29kZVR5cGUsIGlu
Zm8pCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKwor
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworY2xhc3MgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKKyAgICBzdGF0aWMgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s+KGdsb2JhbERhdGEtPmhlYXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soZ2xv
YmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdl
dCgpLCBpbmZvKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCpnbG9iYWxEYXRh
KTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworcHVibGljOgorICAgIHR5cGVk
ZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOworCisgICAgdm9pZCBhZGRGdW5jdGlvbkRlY2xhcmF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1fZnVuY3Rpb25E
ZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5hbWUsIFdyaXRlQmFycmllcjxVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YSwgdGhpcywgZnVuY3Rpb25FeGVjdXRh
YmxlKSkpOworICAgIH0KKworICAgIHZvaWQgYWRkVmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBib29sIGlzQ29uc3RhbnQpCisgICAgeworICAgICAgICBtX3ZhckRl
Y2xhcmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobmFtZSwgaXNDb25zdGFudCkpOworICAg
IH0KKworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBib29sPiA+IFZh
cmlhYmxlRGVjbGF0aW9uczsKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRpZmll
ciwgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPiA+ID4gRnVuY3Rpb25E
ZWNsYXRpb25zOworCisgICAgY29uc3QgVmFyaWFibGVEZWNsYXRpb25zJiB2YXJpYWJsZURlY2xh
cmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyRGVjbGFyYXRpb25zOyB9CisgICAgY29uc3Qg
RnVuY3Rpb25EZWNsYXRpb25zJiBmdW5jdGlvbkRlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0ZToKKyAgICBVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgICAgIDogQmFzZShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUsIEdsb2JhbENvZGUsIGluZm8pCisgICAgeworICAgIH0KKworICAgIFZhcmlh
YmxlRGVjbGF0aW9ucyBtX3ZhckRlY2xhcmF0aW9uczsKKyAgICBGdW5jdGlvbkRlY2xhdGlvbnMg
bV9mdW5jdGlvbkRlY2xhcmF0aW9uczsKKworcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8o
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK2NsYXNzIFVubGlua2VkRXZhbENvZGVCbG9j
ayA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7Citwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBDb2RlQ2FjaGU7CisKKyAgICBzdGF0aWMgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBj
cmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5m
bykKKyAgICB7CisgICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+KGdsb2JhbERhdGEt
PmhlYXApKSBVbmxpbmtlZEV2YWxDb2RlQmxvY2soZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5s
aW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvKTsKKyAgICAgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNl
OworICAgIH0KKworcHVibGljOgorICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sg
QmFzZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgY29uc3QgSWRl
bnRpZmllciYgdmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFyaWFibGVzW2lu
ZGV4XTsgfQorICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdmFyaWFibGVz
LnNpemUoKTsgfQorICAgIHZvaWQgYWRvcHRWYXJpYWJsZXMoVmVjdG9yPElkZW50aWZpZXI+JiB2
YXJpYWJsZXMpCisgICAgeworICAgICAgICBBU1NFUlQobV92YXJpYWJsZXMuaXNFbXB0eSgpKTsK
KyAgICAgICAgbV92YXJpYWJsZXMuc3dhcCh2YXJpYWJsZXMpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgICAgIDog
QmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZvKQorICAgIHsKKyAgICB9
CisKKyAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV92YXJpYWJsZXM7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRXZhbENvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
CisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFzcyBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIFVubGlua2VkQ29kZUJsb2NrIHsKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKKworICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlVHlwZSBj
b2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgeworICAgICAgICBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+KGdsb2JhbERhdGEtPmhlYXApKSBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNvZGVUeXBlLCBpbmZvKTsKKyAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOworICAgIH0KKworcHVibGljOgorICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFz
ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCitwcml2YXRlOgorICAgIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBp
bmZvKQorICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5m
bykKKyAgICB7CisgICAgfQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCit9CisKKyNlbmRpZiAvLyBVbmxpbmtlZENvZGVC
bG9ja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDYxMzM1NGQ5MjIwZjZkODcxNzgxOGIzOWFmMmFj
MWFiMWJjOGIzYjIuLmIxMTg3MjU1MTg5ZmM3NTgxOTNmNjEyNDdiNmY5YTMzOGMyYzcxYWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRv
cjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkKICAgICByZXR1cm4gc19kdW1wc0dlbmVyYXRlZENvZGU7
CiB9CiAKLUpTT2JqZWN0KiBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQorUGFyc2VyRXJy
b3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiQnl0ZWNvZGUgR2VuZXJhdGlvbiIpOwogICAgIApAQCAtMTY5LDM2ICsx
NjksMjEgQEAgSlNPYmplY3QqIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdHJ5UmFuZ2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IFRyeVJhbmdlJiByYW5nZSA9IG1fdHJ5UmFuZ2VzW2ldOwogICAgICAgICBBU1NFUlQocmFuZ2Uu
dHJ5RGF0YS0+dGFyZ2V0U2NvcGVEZXB0aCAhPSBVSU5UX01BWCk7Ci0gICAgICAgIEhhbmRsZXJJ
bmZvIGluZm8gPSB7CisgICAgICAgIFVubGlua2VkSGFuZGxlckluZm8gaW5mbyA9IHsKICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5nZS5zdGFydC0+YmluZCgwLCAwKSksIHN0
YXRpY19jYXN0PHVpbnQzMl90PihyYW5nZS5lbmQtPmJpbmQoMCwgMCkpLAotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLnRyeURhdGEtPnRhcmdldC0+YmluZCgwLCAwKSks
IHN0YXRpY19jYXN0PHVpbnQzMl90PihyYW5nZS50cnlEYXRhLT50YXJnZXRTY29wZURlcHRoKQot
I2lmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICAsCi0jaWYgRU5BQkxFKExMSU5UKQotICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9t
RXhlY3V0YWJsZUFkZHJlc3MoTExJbnQ6OmdldENvZGVQdHIobGxpbnRfb3BfY2F0Y2gpKSkKLSNl
bHNlCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCgpCi0jZW5kaWYKLSNlbmRpZgorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhbmdlLnRyeURhdGEtPnRhcmdldC0+Ymlu
ZCgwLCAwKSksCisgICAgICAgICAgICByYW5nZS50cnlEYXRhLT50YXJnZXRTY29wZURlcHRoCiAg
ICAgICAgIH07CiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKGluZm8p
OwogICAgIH0KICAgICAKLSAgICBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkgPSBSZWZDb3Vu
dGVkQXJyYXk8SW5zdHJ1Y3Rpb24+KG1faW5zdHJ1Y3Rpb25zKTsKLQotICAgIGlmIChzX2R1bXBz
R2VuZXJhdGVkQ29kZSkKLSAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAobV9zY29wZS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7CisgICAgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
ID0gUmVmQ291bnRlZEFycmF5PFVubGlua2VkSW5zdHJ1Y3Rpb24+KG1faW5zdHJ1Y3Rpb25zKTsK
IAotI2lmZGVmIE5ERUJVRwotICAgIGlmICgobV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUgJiYg
IW1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkgJiYgIW1fY29kZUJsb2NrLT51c2Vz
QXJndW1lbnRzKCkpIHx8IG1fY29kZVR5cGUgPT0gRXZhbENvZGUpCi0gICAgICAgIHN5bWJvbFRh
YmxlKCkuY2xlYXIoKTsKLSNlbmRpZgotCi0gICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KENv
ZGVCbG9jazo6RWFybHlTaHJpbmspOworICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdCgpOwog
CiAgICAgaWYgKG1fZXhwcmVzc2lvblRvb0RlZXApCi0gICAgICAgIHJldHVybiBjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKG1fc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKLSAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIFBhcnNlckVycm9yOjpPdXRPZk1lbW9yeTsKKyAgICByZXR1cm4gUGFyc2Vy
RXJyb3I6OkVycm9yTm9uZTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJlZ2lzdGVySUQqJiByMCkK
QEAgLTIxNiw1MSArMjAxLDMyIEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcihjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50LCBSZWdpc3RlCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWludCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkR2xvYmFsVmFyKAotICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBGdW5jdGlv
bk1vZGUgZnVuY3Rpb25Nb2RlKQotewotICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk1vZGUpOwot
ICAgIGludCBpbmRleCA9IHN5bWJvbFRhYmxlKCkuc2l6ZSgpOwotICAgIFN5bWJvbFRhYmxlRW50
cnkgbmV3RW50cnkoaW5kZXgsIChjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCkgPyBSZWFkT25s
eSA6IDApOwotICAgIGlmIChmdW5jdGlvbk1vZGUgPT0gSXNGdW5jdGlvblRvU3BlY2lhbGl6ZSkK
LSAgICAgICAgbmV3RW50cnkuYXR0ZW1wdFRvV2F0Y2goKTsKLSAgICBTeW1ib2xUYWJsZTo6QWRk
UmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LmltcGwoKSwgbmV3RW50cnkp
OwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5ub3RpZnlXcml0ZSgpOwotICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuZ2V0SW5kZXgoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotfQotCiB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjpwcmVzZXJ2ZUxhc3RWYXIoKQogewogICAgIGlmICgobV9maXJzdENv
bnN0YW50SW5kZXggPSBtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpICE9IDApCiAgICAgICAgIG1f
bGFzdFZhciA9ICZtX2NhbGxlZVJlZ2lzdGVycy5sYXN0KCk7CiB9CiAKLUJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIEpTU2NvcGUq
IHNjb3BlLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFByb2dyYW1Db2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCkKLSAgICA6IG1fc2hv
dWxkRW1pdERlYnVnSG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQotICAg
ICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNQcm9maWxpbmcoc2NvcGUtPmdsb2JhbE9iamVj
dCgpKSkKLSAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNSaWNoU291cmNlSW5mbyhz
Y29wZS0+Z2xvYmFsT2JqZWN0KCkpKQotICAgICwgbV9zY29wZSgqc2NvcGUtPmdsb2JhbERhdGEo
KSwgc2NvcGUpCi0gICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQorQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvZ3Jh
bU5vZGUqIHByb2dyYW1Ob2RlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywg
RGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKKyAg
ICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3MoZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT24pCisg
ICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MocHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24p
CiAjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQogICAgICwgbV9jdXJyZW50Q29tbWVudFN0
cmluZygwKQogI2VuZGlmCisgICAgLCBtX3N5bWJvbFRhYmxlKDApCiAgICAgLCBtX3Njb3BlTm9k
ZShwcm9ncmFtTm9kZSkKLSAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fY29k
ZUJsb2NrKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAgICAgLCBtX2VtcHR5VmFsdWVSZWdpc3Rlcigw
KQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkK
LSAgICAsIG1fYmFzZVNjb3BlRGVwdGgoMCkKICAgICAsIG1fY29kZVR5cGUoR2xvYmFsQ29kZSkK
ICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCiAgICAgLCBtX2dsb2JhbENvbnN0YW50SW5k
ZXgoMCkKICAgICAsIG1faGFzQ3JlYXRlZEFjdGl2YXRpb24odHJ1ZSkKICAgICAsIG1fZmlyc3RM
YXp5RnVuY3Rpb24oMCkKICAgICAsIG1fbGFzdExhenlGdW5jdGlvbigwKQotICAgICwgbV9nbG9i
YWxEYXRhKHNjb3BlLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERh
dGEpCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCiAjaWZuZGVmIE5ERUJVRwogICAgICwg
bV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTI2OSw4MSArMjM1LDQ4IEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIEpTU2Nv
cGUqIHNjb3BlLCBTCiAgICAgLCBtX3VzZXNFeGNlcHRpb25zKGZhbHNlKQogICAgICwgbV9leHBy
ZXNzaW9uVG9vRGVlcChmYWxzZSkKIHsKLSAgICBtX2dsb2JhbERhdGEtPnN0YXJ0ZWRDb21waWxp
bmcobV9jb2RlQmxvY2spOwotICAgIAogICAgIGlmIChtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKQog
ICAgICAgICBtX2NvZGVCbG9jay0+c2V0TmVlZHNGdWxsU2NvcGVDaGFpbih0cnVlKTsKIAotICAg
IGNvZGVCbG9jay0+c2V0R2xvYmFsRGF0YShtX2dsb2JhbERhdGEpOwotICAgIHN5bWJvbFRhYmxl
LT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIWNvZGVCbG9j
ay0+aXNTdHJpY3RNb2RlKCkpOyAgICAKICAgICBtX2NvZGVCbG9jay0+c2V0TnVtUGFyYW1ldGVy
cygxKTsgLy8gQWxsb2NhdGUgc3BhY2UgZm9yICJ0aGlzIgogCiAgICAgcHJlcGVuZENvbW1lbnQo
ImVudGVyaW5nIFByb2dyYW0gYmxvY2siKTsKICAgICBlbWl0T3Bjb2RlKG9wX2VudGVyKTsKIAot
ICAgIC8vIEZJWE1FOiBNb3ZlIGNvZGUgdGhhdCBtb2RpZmllcyB0aGUgZ2xvYmFsIG9iamVjdCB0
byBJbnRlcnByZXRlcjo6ZXhlY3V0ZS4KLSAgICAKLSAgICBpZiAoY29tcGlsYXRpb25LaW5kID09
IE9wdGltaXppbmdDb21waWxhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAKLSAgICBCYXRjaGVk
VHJhbnNpdGlvbk9wdGltaXplciBvcHRpbWl6ZXIoKm1fZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
KTsKLQogICAgIGNvbnN0IFZhclN0YWNrJiB2YXJTdGFjayA9IHByb2dyYW1Ob2RlLT52YXJTdGFj
aygpOwogICAgIGNvbnN0IEZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2sgPSBwcm9ncmFtTm9k
ZS0+ZnVuY3Rpb25TdGFjaygpOwogCi0gICAgc2l6ZV90IG5ld0dsb2JhbHMgPSB2YXJTdGFjay5z
aXplKCkgKyBmdW5jdGlvblN0YWNrLnNpemUoKTsKLSAgICBpZiAoIW5ld0dsb2JhbHMpCi0gICAg
ICAgIHJldHVybjsKLSAgICBnbG9iYWxPYmplY3QtPmFkZFJlZ2lzdGVycyhuZXdHbG9iYWxzKTsK
LQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkg
ewogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07
Ci0gICAgICAgIGJvb2wgcHJvcGVydHlEaWRFeGlzdCA9IAotICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0LT5yZW1vdmVEaXJlY3QoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24tPmlkZW50KCkpOyAvLyBO
ZXdseSBkZWNsYXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCi0K
LSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbiksIHNjb3BlKTsKLSAg
ICAgICAgaW50IGluZGV4ID0gYWRkR2xvYmFsVmFyKAotICAgICAgICAgICAgZnVuY3Rpb24tPmlk
ZW50KCksIElzVmFyaWFibGUsCi0gICAgICAgICAgICAhcHJvcGVydHlEaWRFeGlzdCA/IElzRnVu
Y3Rpb25Ub1NwZWNpYWxpemUgOiBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6YWJsZSk7Ci0gICAg
ICAgIGdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChpbmRleCkuc2V0KCptX2dsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgdmFsdWUpOworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
dW5saW5rZWRGdW5jdGlvbiA9IG1ha2VGdW5jdGlvbihmdW5jdGlvbik7CisgICAgICAgIGNvZGVC
bG9jay0+YWRkRnVuY3Rpb25EZWNsYXJhdGlvbigqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbi0+aWRl
bnQoKSwgdW5saW5rZWRGdW5jdGlvbik7CiAgICAgfQogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5o
YXNQcm9wZXJ0eShleGVjLCAqdmFyU3RhY2tbaV0uZmlyc3QpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGFkZEdsb2JhbFZhcigKLSAgICAgICAgICAgICp2YXJTdGFja1tpXS5maXJz
dCwKLSAgICAgICAgICAgICh2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6
SXNDb25zdGFudCkgPyBJc0NvbnN0YW50IDogSXNWYXJpYWJsZSwKLSAgICAgICAgICAgIE5vdEZ1
bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlKTsKLSAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkKKyAgICAgICAgY29kZUJsb2NrLT5hZGRWYXJpYWJs
ZURlY2xhcmF0aW9uKCp2YXJTdGFja1tpXS5maXJzdCwgISEodmFyU3RhY2tbaV0uc2Vjb25kICYg
RGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpKTsKKwogfQogCi1CeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBKU1Nj
b3BlKiBzY29wZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kKQotICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhz
Y29wZS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCi0gICAgLCBtX3Nob3VsZEVtaXRQcm9m
aWxlSG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgp
LT5zdXBwb3J0c1Byb2ZpbGluZyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkpKQotICAgICwgbV9zaG91
bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSgpLT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9iYWxPYmplY3Qo
KSkpCi0gICAgLCBtX3Njb3BlKCpzY29wZS0+Z2xvYmFsRGF0YSgpLCBzY29wZSkKLSAgICAsIG1f
c3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlv
bkJvZHksIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2Rl
IGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKKyAgICA6IG1fc2hvdWxk
RW1pdERlYnVnSG9va3MoZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT24pCisgICAgLCBtX3Nob3Vs
ZEVtaXRQcm9maWxlSG9va3MocHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24pCisgICAgLCBtX3N5
bWJvbFRhYmxlKGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKICNpZiBFTkFCTEUoQllURUNPREVf
Q09NTUVOVFMpCiAgICAgLCBtX2N1cnJlbnRDb21tZW50U3RyaW5nKDApCiAjZW5kaWYKICAgICAs
IG1fc2NvcGVOb2RlKGZ1bmN0aW9uQm9keSkKLSAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
KyAgICAsIG1fY29kZUJsb2NrKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICAsIG1fYWN0aXZh
dGlvblJlZ2lzdGVyKDApCiAgICAgLCBtX2VtcHR5VmFsdWVSZWdpc3RlcigwKQogICAgICwgbV9m
aW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKLSAgICAsIG1fYmFz
ZVNjb3BlRGVwdGgoMCkKICAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2RlKQogICAgICwgbV9u
ZXh0Q29uc3RhbnRPZmZzZXQoMCkKICAgICAsIG1fZ2xvYmFsQ29uc3RhbnRJbmRleCgwKQogICAg
ICwgbV9oYXNDcmVhdGVkQWN0aXZhdGlvbihmYWxzZSkKICAgICAsIG1fZmlyc3RMYXp5RnVuY3Rp
b24oMCkKICAgICAsIG1fbGFzdExhenlGdW5jdGlvbigwKQotICAgICwgbV9nbG9iYWxEYXRhKHNj
b3BlLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCiAgICAg
LCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9sYXN0T3Bj
b2RlUG9zaXRpb24oMCkKQEAgLTM1MiwxNCArMjg1LDExIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIEpTU2NvcGUq
IHNjCiAgICAgLCBtX3VzZXNFeGNlcHRpb25zKGZhbHNlKQogICAgICwgbV9leHByZXNzaW9uVG9v
RGVlcChmYWxzZSkKIHsKLSAgICBtX2dsb2JhbERhdGEtPnN0YXJ0ZWRDb21waWxpbmcobV9jb2Rl
QmxvY2spOwotCiAgICAgaWYgKG1fc2hvdWxkRW1pdERlYnVnSG9va3MpCiAgICAgICAgIG1fY29k
ZUJsb2NrLT5zZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOwogCi0gICAgY29kZUJsb2NrLT5z
ZXRHbG9iYWxEYXRhKG1fZ2xvYmFsRGF0YSk7Ci0gICAgc3ltYm9sVGFibGUtPnNldFVzZXNOb25T
dHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1v
ZGUoKSk7Ci0gICAgc3ltYm9sVGFibGUtPnNldFBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyhm
dW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKS0+c2l6ZSgpICsgMSk7CisgICAgbV9zeW1ib2xUYWJs
ZS0+c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2RlQmxv
Y2stPmlzU3RyaWN0TW9kZSgpKTsKKyAgICBtX3N5bWJvbFRhYmxlLT5zZXRQYXJhbWV0ZXJDb3Vu
dEluY2x1ZGluZ1RoaXMoZnVuY3Rpb25Cb2R5LT5wYXJhbWV0ZXJzKCktPnNpemUoKSArIDEpOwog
CiAgICAgcHJlcGVuZENvbW1lbnQoImVudGVyaW5nIEZ1bmN0aW9uIGJsb2NrIik7CiAgICAgZW1p
dE9wY29kZShvcF9lbnRlcik7CkBAIC0zNzAsNyArMzAwLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgSlNTY29w
ZSogc2MKICAgICAgICAgbV9jb2RlQmxvY2stPnNldEFjdGl2YXRpb25SZWdpc3RlcihtX2FjdGl2
YXRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgfQogCi0gICAgc3ltYm9sVGFibGUtPnNldENh
cHR1cmVTdGFydChtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICBtX3N5bWJvbFRhYmxlLT5z
ZXRDYXB0dXJlU3RhcnQobV9jb2RlQmxvY2stPm1fbnVtVmFycyk7CiAKICAgICBpZiAoZnVuY3Rp
b25Cb2R5LT51c2VzQXJndW1lbnRzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpIHx8IG1fc2hv
dWxkRW1pdERlYnVnSG9va3MpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmplY3QuCiAgICAg
ICAgIFJlZ2lzdGVySUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigpOyAv
LyBBbm9ueW1vdXMsIHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29kZS4KQEAgLTQy
MCw3ICszNTAsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rp
b25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgIH0KIAogICAgIGlmIChj
YXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lICYmICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7
Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCA9IHN5bWJvbFRhYmxlLT5wYXJhbWV0ZXJD
b3VudCgpOworICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQgPSBtX3N5bWJvbFRhYmxlLT5w
YXJhbWV0ZXJDb3VudCgpOwogICAgICAgICBPd25BcnJheVB0cjxTbG93QXJndW1lbnQ+IHNsb3dB
cmd1bWVudHMgPSBhZG9wdEFycmF5UHRyKG5ldyBTbG93QXJndW1lbnRbcGFyYW1ldGVyQ291bnRd
KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3VudDsgKytpKSB7
CiAgICAgICAgICAgICBpZiAoIWNhcHR1cmVkQXJndW1lbnRzW2ldKSB7CkBAIC00MzEsNyArMzYx
LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5v
ZGUqIGZ1bmN0aW9uQm9keSwgSlNTY29wZSogc2MKICAgICAgICAgICAgIHNsb3dBcmd1bWVudHNb
aV0uc3RhdHVzID0gU2xvd0FyZ3VtZW50OjpDYXB0dXJlZDsKICAgICAgICAgICAgIHNsb3dBcmd1
bWVudHNbaV0uaW5kZXggPSBjYXB0dXJlZEFyZ3VtZW50c1tpXS0+aW5kZXgoKTsKICAgICAgICAg
fQotICAgICAgICBzeW1ib2xUYWJsZS0+c2V0U2xvd0FyZ3VtZW50cyhzbG93QXJndW1lbnRzLnJl
bGVhc2UoKSk7CisgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldFNsb3dBcmd1bWVudHMoc2xvd0Fy
Z3VtZW50cy5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIFJlZ2lzdGVySUQqIGNhbGxlZVJlZ2lz
dGVyID0gcmVzb2x2ZUNhbGxlZShmdW5jdGlvbkJvZHkpOyAvLyBNYXkgcHVzaCB0byB0aGUgc2Nv
cGUgY2hhaW4gYW5kL29yIGFkZCBhIGNhcHR1cmVkIHZhci4KQEAgLTQ3Miw3ICs0MDIsNyBAQCBC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVu
Y3Rpb25Cb2R5LCBKU1Njb3BlKiBzYwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9h
Y3RpdmF0aW9uUmVnaXN0ZXItPmluZGV4KCkpOwogICAgIH0KIAotICAgIHN5bWJvbFRhYmxlLT5z
ZXRDYXB0dXJlRW5kKGNvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICBtX3N5bWJvbFRhYmxlLT5z
ZXRDYXB0dXJlRW5kKGNvZGVCbG9jay0+bV9udW1WYXJzKTsKIAogICAgIG1fZmlyc3RMYXp5RnVu
Y3Rpb24gPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKQEAgLTUwMCw3ICs0MzAsNyBAQCBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25C
b2R5LCBKU1Njb3BlKiBzYwogICAgIH0KIAogICAgIGlmIChzaG91bGRDYXB0dXJlQWxsVGhlVGhp
bmdzKQotICAgICAgICBzeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZUVuZChjb2RlQmxvY2stPm1fbnVt
VmFycyk7CisgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldENhcHR1cmVFbmQoY29kZUJsb2NrLT5t
X251bVZhcnMpOwogCiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKmZ1bmN0
aW9uQm9keS0+cGFyYW1ldGVycygpOwogICAgIG1fcGFyYW1ldGVycy5ncm93KHBhcmFtZXRlcnMu
c2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlzIgpAQCAtNTMwLDM1ICs0NjAs
MzIgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5v
ZGUqIGZ1bmN0aW9uQm9keSwgSlNTY29wZSogc2MKICAgICAgICAgZW1pdE9wY29kZShvcF9jcmVh
dGVfdGhpcyk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX3RoaXNSZWdpc3Rlci5p
bmRleCgpKTsKICAgICB9IGVsc2UgaWYgKCFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpICYmIChm
dW5jdGlvbkJvZHktPnVzZXNUaGlzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpIHx8IG1fc2hv
dWxkRW1pdERlYnVnSG9va3MpKSB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVt
aXRQcm9maWxlZE9wY29kZShvcF9jb252ZXJ0X3RoaXMpOworICAgICAgICBVbmxpbmtlZFZhbHVl
UHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NvbnZlcnRfdGhpcyk7CiAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX3RoaXNSZWdpc3Rlci5pbmRleCgpKTsKICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIH0KIH0KIAotQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgSlNTY29w
ZSogc2NvcGUsIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCi0gICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tz
KHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKLSAgICAsIG1fc2hvdWxkRW1pdFBy
b2ZpbGVIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KCktPnN1cHBvcnRzUHJvZmlsaW5nKHNjb3BlLT5nbG9iYWxPYmplY3QoKSkpCi0gICAgLCBtX3No
b3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oc2NvcGUtPmdsb2JhbE9iamVj
dCgpKSkKLSAgICAsIG1fc2NvcGUoKnNjb3BlLT5nbG9iYWxEYXRhKCksIHNjb3BlKQotICAgICwg
bV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV2YWxOb2RlKiBldmFsTm9kZSwgVW5s
aW5rZWRFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUs
IFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCisgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tz
KGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9uKQorICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhv
b2tzKHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9uKQorICAgICwgbV9zeW1ib2xUYWJsZShjb2Rl
QmxvY2stPnN5bWJvbFRhYmxlKCkpCiAjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQogICAg
ICwgbV9jdXJyZW50Q29tbWVudFN0cmluZygwKQogI2VuZGlmCiAgICAgLCBtX3Njb3BlTm9kZShl
dmFsTm9kZSkKLSAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fY29kZUJsb2Nr
KGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6
dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAgICAgLCBtX2VtcHR5VmFsdWVSZWdpc3RlcigwKQogICAg
ICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKLSAgICAs
IG1fYmFzZVNjb3BlRGVwdGgoY29kZUJsb2NrLT5iYXNlU2NvcGVEZXB0aCgpKQogICAgICwgbV9j
b2RlVHlwZShFdmFsQ29kZSkKICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCiAgICAgLCBt
X2dsb2JhbENvbnN0YW50SW5kZXgoMCkKICAgICAsIG1faGFzQ3JlYXRlZEFjdGl2YXRpb24odHJ1
ZSkKICAgICAsIG1fZmlyc3RMYXp5RnVuY3Rpb24oMCkKICAgICAsIG1fbGFzdExhenlGdW5jdGlv
bigwKQotICAgICwgbV9nbG9iYWxEYXRhKHNjb3BlLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2ds
b2JhbERhdGEoJmdsb2JhbERhdGEpCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCiAjaWZu
ZGVmIE5ERUJVRwogICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTU2NywxMyArNDk0
LDkgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFs
Tm9kZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFMKICAgICAsIG1fdXNlc0V4Y2VwdGlvbnMoZmFs
c2UpCiAgICAgLCBtX2V4cHJlc3Npb25Ub29EZWVwKGZhbHNlKQogewotICAgIG1fZ2xvYmFsRGF0
YS0+c3RhcnRlZENvbXBpbGluZyhtX2NvZGVCbG9jayk7Ci0KLSAgICBpZiAobV9zaG91bGRFbWl0
RGVidWdIb29rcyB8fCBtX2Jhc2VTY29wZURlcHRoKQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0
TmVlZHNGdWxsU2NvcGVDaGFpbih0cnVlKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0TmVlZHNGdWxs
U2NvcGVDaGFpbih0cnVlKTsKIAotICAgIGNvZGVCbG9jay0+c2V0R2xvYmFsRGF0YShtX2dsb2Jh
bERhdGEpOwotICAgIHN5bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2st
PnVzZXNFdmFsKCkgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOyAgICAKKyAgICBtX3N5
bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYg
IWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAgIG1fY29kZUJsb2NrLT5zZXROdW1QYXJh
bWV0ZXJzKDEpOwogCiAgICAgcHJlcGVuZENvbW1lbnQoImVudGVyaW5nIEV2YWwgYmxvY2siKTsK
QEAgLTU4MSw3ICs1MDQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
RXZhbE5vZGUqIGV2YWxOb2RlLCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkUwogCiAgICAgY29uc3Qg
RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2sgPSBldmFsTm9k
ZS0+ZnVuY3Rpb25TdGFjaygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25T
dGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChG
dW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvblN0YWNrW2ld
KSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1
bmN0aW9uU3RhY2tbaV0pKTsKIAogICAgIGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFj
ayYgdmFyU3RhY2sgPSBldmFsTm9kZS0+dmFyU3RhY2soKTsKICAgICB1bnNpZ25lZCBudW1WYXJp
YWJsZXMgPSB2YXJTdGFjay5zaXplKCk7CkBAIC01OTUsNyArNTE4LDYgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgSlNTY29wZSogc2Nv
cGUsIFNoYXJlZFMKIAogQnl0ZWNvZGVHZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcigpCiB7
Ci0gICAgbV9nbG9iYWxEYXRhLT5maW5pc2hlZENvbXBpbGluZyhtX2NvZGVCbG9jayk7CiB9CiAK
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5pdExhenlSZWdpc3RlcihSZWdp
c3RlcklEKiByZWcpCkBAIC02MTgsMTcgKzU0MCw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpyZXNvbHZlQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUp
CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChmdW5jdGlvbkJvZHlO
b2RlLT5pZGVudCgpKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NhbGxlZVJl
Z2lzdGVyLmluZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVhZE9ubHkg
fCBEb250RGVsZXRlKTsKLQotICAgICAgICAvLyBQdXQgYSBtaXJyb3Igb2JqZWN0IGluIGNvbXBp
bGF0aW9uIHNjb3BlLCBzbyBjb21waWxlLXRpbWUgdmFyaWFibGUgcmVzb2x1dGlvbiBzZWVzIHRo
ZSBwcm9wZXJ0eSBuYW1lIHdlJ2xsIHNlZSBhdCBydW50aW1lLgotICAgICAgICBtX3Njb3BlLnNl
dCgqZ2xvYmFsRGF0YSgpLAotICAgICAgICAgICAgSlNOYW1lU2NvcGU6OmNyZWF0ZSgKLSAgICAg
ICAgICAgICAgICBtX3Njb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLAotICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uQm9keU5vZGUtPmlkZW50KCksCi0gICAgICAgICAgICAgICAganNV
bmRlZmluZWQoKSwKLSAgICAgICAgICAgICAgICBSZWFkT25seSB8IERvbnREZWxldGUsCi0gICAg
ICAgICAgICAgICAgbV9zY29wZS5nZXQoKQotICAgICAgICAgICAgKQotICAgICAgICApOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTc3Miw3ICs2ODMsNyBAQCB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0T3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQogICAgIG1fbGFzdE9wY29k
ZVBvc2l0aW9uID0gb3Bjb2RlUG9zaXRpb247CiAjZW5kaWYKICAgICBlbWl0Q29tbWVudCgpOwot
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChnbG9iYWxEYXRhKCktPmludGVycHJldGVyLT5nZXRP
cGNvZGUob3Bjb2RlSUQpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQob3Bjb2RlSUQpOwog
ICAgIG1fbGFzdE9wY29kZUlEID0gb3Bjb2RlSUQ7CiB9CiAKQEAgLTc5NiwyMSArNzA3LDIxIEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnByZXBlbmRDb21tZW50KGNvbnN0IGNoYXIqIHN0cmlu
ZykKIH0KICNlbmRpZgogCi1BcnJheVByb2ZpbGUqIEJ5dGVjb2RlR2VuZXJhdG9yOjpuZXdBcnJh
eVByb2ZpbGUoKQorVW5saW5rZWRBcnJheVByb2ZpbGUgQnl0ZWNvZGVHZW5lcmF0b3I6Om5ld0Fy
cmF5UHJvZmlsZSgpCiB7CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQotICAgIHJldHVybiBt
X2NvZGVCbG9jay0+YWRkQXJyYXlQcm9maWxlKGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5hZGRBcnJheVByb2ZpbGUoKTsKICNlbHNlCiAgICAgcmV0dXJu
IDA7CiAjZW5kaWYKIH0KIAotVmFsdWVQcm9maWxlKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFBy
b2ZpbGVkT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQorVW5saW5rZWRWYWx1ZVByb2ZpbGUgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlZE9wY29kZShPcGNvZGVJRCBvcGNvZGVJRCkKIHsK
ICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSBt
X2NvZGVCbG9jay0+YWRkVmFsdWVQcm9maWxlKGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAg
VW5saW5rZWRWYWx1ZVByb2ZpbGUgcmVzdWx0ID0gbV9jb2RlQmxvY2stPmFkZFZhbHVlUHJvZmls
ZSgpOwogI2Vsc2UKLSAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IDA7CisgICAgVW5saW5rZWRW
YWx1ZVByb2ZpbGUgcmVzdWx0ID0gMDsKICNlbmRpZgogICAgIGVtaXRPcGNvZGUob3Bjb2RlSUQp
OwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04NDAsMTQgKzc1MSw2IEBAIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OnJldHJpZXZlTGFzdFVuYXJ5T3AoaW50JiBkc3RJbmRleCwgaW50JiBzcmNJbmRl
eCkKICAgICBzcmNJbmRleCA9IGluc3RydWN0aW9ucygpLmF0KHNpemUgLSAxKS51Lm9wZXJhbmQ7
CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJldHJpZXZlTGFzdFVuYXJ5T3AoV3JpdGVC
YXJyaWVyPFVua25vd24+KiYgZHN0UG9pbnRlciwgaW50JiBzcmNJbmRleCkKLXsKLSAgICBBU1NF
UlQoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpID49IDMpOwotICAgIHNpemVfdCBzaXplID0gaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpOwotICAgIGRzdFBvaW50ZXIgPSBpbnN0cnVjdGlvbnMoKS5hdChzaXpl
IC0gMikudS5yZWdpc3RlclBvaW50ZXI7Ci0gICAgc3JjSW5kZXggPSBpbnN0cnVjdGlvbnMoKS5h
dChzaXplIC0gMSkudS5vcGVyYW5kOwotfQotCiB2b2lkIEFMV0FZU19JTkxJTkUgQnl0ZWNvZGVH
ZW5lcmF0b3I6OnJld2luZEJpbmFyeU9wKCkKIHsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpID49IDQpOwpAQCAtMTMzNiw3ICsxMjM5LDcgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29k
ZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKICAgICAgICAg
cmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZSh0aGlzUmVnaXN0ZXIoKSwgUmVz
b2x2ZVJlc3VsdDo6UmVhZE9ubHlGbGFnKTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBwcm9wZXJ0
eSBzaG91bGQgYmUgYWxsb2NhdGVkIGluIGEgcmVnaXN0ZXIuCi0gICAgaWYgKG1fY29kZVR5cGUg
IT0gR2xvYmFsQ29kZSAmJiBzaG91bGRPcHRpbWl6ZUxvY2FscygpKSB7CisgICAgaWYgKG1fY29k
ZVR5cGUgIT0gR2xvYmFsQ29kZSAmJiBzaG91bGRPcHRpbWl6ZUxvY2FscygpICYmIG1fc3ltYm9s
VGFibGUpIHsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCku
Z2V0KHByb3BlcnR5LmltcGwoKSk7CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKICAg
ICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKQpAQCAt
MTM1Miw3ICsxMjU1LDcgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2
ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIFJlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5l
cmF0b3I6OnJlc29sdmVDb25zdERlY2woY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiB7CiAg
ICAgLy8gUmVnaXN0ZXItYWxsb2NhdGVkIGNvbnN0IGRlY2xhcmF0aW9ucy4KLSAgICBpZiAobV9j
b2RlVHlwZSAhPSBFdmFsQ29kZSAmJiBtX2NvZGVUeXBlICE9IEdsb2JhbENvZGUpIHsKKyAgICBp
ZiAobV9jb2RlVHlwZSAhPSBFdmFsQ29kZSAmJiBtX2NvZGVUeXBlICE9IEdsb2JhbENvZGUgJiYg
bV9zeW1ib2xUYWJsZSkgewogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9s
VGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKICAgICAgICAgaWYgKCFlbnRyeS5pc051bGwo
KSkgewogICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MgPSBlbnRyeS5pc1JlYWRPbmx5KCkgPyBS
ZXNvbHZlUmVzdWx0OjpSZWFkT25seUZsYWcgOiAwOwpAQCAtMTM5NCw3ICsxMjk3LDcgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKFJlZ2lzdGVySUQqIGRzdCwg
Y29uc3QgUmVzb2x2ZVJlc3VsdCYKICAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc1JlZ2lzdGVyKCkp
CiAgICAgICAgIHJldHVybiBlbWl0R2V0TG9jYWxWYXIoZHN0LCByZXNvbHZlUmVzdWx0LCBwcm9w
ZXJ0eSk7CiAKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUo
b3BfcmVzb2x2ZSk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9m
aWxlZE9wY29kZShvcF9yZXNvbHZlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZ2V0UmVzb2x2ZU9wZXJhdGlvbnMocHJvcGVy
dHkpKTsKQEAgLTE0MDYsNyArMTMwOSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UmVzb2x2ZUJhc2UoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmVzCiB7CiAg
ICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlUmVzdWx0LCAhcmVzb2x2ZVJlc3VsdC5pc1JlZ2lzdGVy
KCkpOwogICAgIC8vIFdlIGNhbid0IG9wdGltaXNlIGF0IGFsbCA6LSgKLSAgICBWYWx1ZVByb2Zp
bGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV9iYXNlKTsKKyAgICBV
bmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29s
dmVfYmFzZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsKQEAgLTE0MjAsNyArMTMyMyw3IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2VGb3JQdXQoUmVnaXN0ZXJJRCogZHN0
LCBjb25zdCBSZXNvCiB7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlUmVzdWx0LCAhcmVzb2x2
ZVJlc3VsdC5pc1JlZ2lzdGVyKCkpOwogICAgIC8vIFdlIGNhbid0IG9wdGltaXNlIGF0IGFsbCA6
LSgKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVz
b2x2ZV9iYXNlKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2Zp
bGVkT3Bjb2RlKG9wX3Jlc29sdmVfYmFzZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRz
dC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3Bl
cnR5KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJsb2NrLT5pc1N0cmljdE1v
ZGUoKSk7CkBAIC0xNDM1LDcgKzEzMzgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFJlc29sdmVCYXNlRm9yUHV0KFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVzbwogUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aEJhc2VGb3JQdXQoUmVn
aXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwgY29uc3QgUmVzb2x2ZVJlc3Vs
dCYgcmVzb2x2ZVJlc3VsdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIE5vbmxvY2FsUmVz
b2x2ZUluZm8mIHZlcmlmaWVyKQogewogICAgIEFTU0VSVF9VTlVTRUQocmVzb2x2ZVJlc3VsdCwg
IXJlc29sdmVSZXN1bHQuaXNSZWdpc3RlcigpKTsKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUg
PSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX2Jhc2UpOworICAgIFVubGlua2Vk
VmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRo
X2Jhc2UpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlRHN0LT5pbmRleCgpKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcERzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CkBAIC0xNDU1LDcgKzEzNTgsNyBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVXaXRoVGhpcyhSZWdp
c3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcgogICAgICAgICByZXR1cm4gYmFzZURzdDsKICAgICB9
CiAKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVz
b2x2ZV93aXRoX3RoaXMpOworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0
UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX3RoaXMpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChiYXNlRHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJv
cERzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHBy
b3BlcnR5KSk7CkBAIC0xNDgyLDIzICsxMzg1LDExIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0R2V0TG9jYWxWYXIoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmVz
CiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluaXRHbG9iYWxDb25zdChjb25z
dCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsKICAgICBBU1NF
UlQobV9jb2RlVHlwZSA9PSBHbG9iYWxDb2RlKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgIFN5bWJvbFRhYmxlRW50
cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChpZGVudGlmaWVyLmlt
cGwoKSk7Ci0gICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAK
LSAgICBpZiAoZW50cnkuY291bGRCZVdhdGNoZWQoKSkgewotICAgICAgICBlbWl0T3Bjb2RlKG9w
X2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KCZnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkpOwotICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoZW50cnkuYWRkcmVzc09mSXNXYXRjaGVkKCkpOwotICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgfQotICAgIAotICAgIGVtaXRPcGNvZGUob3BfaW5pdF9nbG9iYWxfY29uc3Qp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgmZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVu
dHJ5LmdldEluZGV4KCkpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2luaXRfZ2xvYmFsX2NvbnN0X25v
cCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7CiAgICAgcmV0
dXJuIHZhbHVlOwogfQogCkBAIC0xNTA2LDcgKzEzOTcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEdldEJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNl
LCBjbwogewogICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGlu
c3RydWN0aW9ucygpLnNpemUoKSk7CiAKLSAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0
UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2J5X2lkKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBw
cm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9ieV9pZCk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJh
c2UtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9w
ZXJ0eSkpOwpAQCAtMTU5Miw4ICsxNDgzLDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXREZWxldGVCeUlkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwKIAog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRBcmd1bWVudEJ5VmFsKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7Ci0g
ICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKLSAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2FyZ3VtZW50
X2J5X3ZhbCk7CisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0gbmV3QXJy
YXlQcm9maWxlKCk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9m
aWxlZE9wY29kZShvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBBU1NFUlQoYmFzZS0+aW5kZXgoKSA9PSBtX2NvZGVC
bG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJh
c2UtPmluZGV4KCkpOwpAQCAtMTYxOCw4ICsxNTA5LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2Us
IFIKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KICAgICB9Ci0gICAgQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKLSAgICBWYWx1ZVByb2Zp
bGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2J5X3ZhbCk7CisgICAgVW5s
aW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxlKCk7CisgICAg
VW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRf
YnlfdmFsKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKQEAgLTE2MzAsNyArMTUyMSw3IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0
QnlWYWwoUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQq
IHZhbHVlKQogewotICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9m
aWxlKCk7CisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0gbmV3QXJyYXlQ
cm9maWxlKCk7CiAgICAgZW1pdE9wY29kZShvcF9wdXRfYnlfdmFsKTsKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHBy
b3BlcnR5LT5pbmRleCgpKTsKQEAgLTE3MDAsNyArMTU5MSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TmV3QXJyYXkoUmVnaXN0ZXJJRCogZHN0LCBFbGVtZW50Tm9kZSog
ZWxlbWVuCiAgICAgICAgIGlmICghaGFkVmFyaWFibGVFeHByZXNzaW9uKSB7CiAgICAgICAgICAg
ICBBU1NFUlQobGVuZ3RoID09IGNoZWNrTGVuZ3RoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNv
bnN0YW50QnVmZmVySW5kZXggPSBhZGRDb25zdGFudEJ1ZmZlcihsZW5ndGgpOwotICAgICAgICAg
ICAgSlNWYWx1ZSogY29uc3RhbnRCdWZmZXIgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIo
Y29uc3RhbnRCdWZmZXJJbmRleCk7CisgICAgICAgICAgICBKU1ZhbHVlKiBjb25zdGFudEJ1ZmZl
ciA9IG1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihjb25zdGFudEJ1ZmZlckluZGV4KS5kYXRh
KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgICAgICBmb3IgKEVs
ZW1lbnROb2RlKiBuID0gZWxlbWVudHM7IGluZGV4IDwgbGVuZ3RoOyBuID0gbi0+bmV4dCgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKG4tPnZhbHVlKCktPmlzTnVtYmVyKCkpCkBAIC0xNzM2LDE0
ICsxNjI3LDE0IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3QXJyYXko
UmVnaXN0ZXJJRCogZHN0LCBFbGVtZW50Tm9kZSogZWxlbWVuCiAKIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJv
ZHlOb2RlKiBmdW5jdGlvbikKIHsKLSAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwo
ZHN0LCBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3Jl
YXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSksIGZhbHNlKTsKKyAgICByZXR1cm4gZW1pdE5l
d0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1ha2VG
dW5jdGlvbihmdW5jdGlvbikpLCBmYWxzZSk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5
Tm9kZSogZnVuY3Rpb24pCiB7CiAgICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFkZFJlc3VsdCBwdHIg
PSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwogICAgIGlmIChwdHIuaXNOZXdF
bnRyeSkKLSAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRGdW5j
dGlvbkRlY2woRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rp
b24pKTsKKyAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRGdW5j
dGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7CiAgICAgcmV0dXJuIGVtaXROZXdGdW5j
dGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJhdG9yLT52YWx1ZSwgdHJ1ZSk7CiB9CiAKQEAgLTE3
NjgsNyArMTY1OSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3UmVn
RXhwKFJlZ2lzdGVySUQqIGRzdCwgUmVnRXhwKiByZWdFeHApCiBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiByMCwgRnVu
Y0V4cHJOb2RlKiBuKQogewogICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gbi0+Ym9k
eSgpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRXhwcihG
dW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOworICAg
IHVuc2lnbmVkIGluZGV4ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRXhwcihtYWtlRnVuY3Rp
b24oZnVuY3Rpb24pKTsKICAgICAKICAgICBjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKTsK
ICAgICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jX2V4cCk7CkBAIC0xOTE5LDcgKzE4MTAsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQs
IFJlZ2lzdGVySUQqIGRzdCwgUmVnaQogICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBlbWl0RXhwZWN0
ZWRGdW5jdGlvblNuaXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkb25lLmdldCgpKTsKICAgICAKICAgICAvLyBFbWl0IGNhbGwuCi0gICAgQXJyYXlQcm9m
aWxlKiBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKKyAgICBVbmxpbmtlZEFycmF5
UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKICAgICBlbWl0T3Bjb2Rl
KG9wY29kZUlEKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7IC8v
IGZ1bmMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpKTsgLy8gYXJnQ291bnQKQEAgLTE5MzEsNyArMTgyMiw3IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwg
UmVnaXN0ZXJJRCogZHN0LCBSZWdpCiAjZW5kaWYKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
YXJyYXlQcm9maWxlKTsKICAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSkgewotICAgICAg
ICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY2FsbF9wdXRf
cmVzdWx0KTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9m
aWxlZE9wY29kZShvcF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsgLy8gZHN0CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChwcm9maWxlKTsKICAgICB9CkBAIC0xOTY0LDcgKzE4NTUsNyBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogZnVuYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd1bWVudHMtPmluZGV4KCkpOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmaXJzdEZyZWVSZWdpc3Rlci0+aW5kZXgoKSk7CiAg
ICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpIHsKLSAgICAgICAgVmFsdWVQcm9maWxlKiBw
cm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CisgICAgICAg
IFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY2Fs
bF9wdXRfcmVzdWx0KTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgo
KSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAgICB9CkBAIC0y
MDQ3LDcgKzE5MzgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0
cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsCiAjZW5kaWYKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpIHsK
LSAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2Nh
bGxfcHV0X3Jlc3VsdCk7CisgICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBl
bWl0UHJvZmlsZWRPcGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7IC8vIGRzdAogICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQocHJvZmlsZSk7CiAgICAgfQpAQCAtMjQyNiw3ICsyMzE3LDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFRyeUFuZEVtaXRDYXRjaChUcnlEYXRhKiB0cnlEYXRh
LCBSZWdpc3RlcklEKgogICAgIG1fdHJ5Q29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAK
ICAgICBlbWl0TGFiZWwodHJ5UmFuZ2UudHJ5RGF0YS0+dGFyZ2V0LmdldCgpKTsKLSAgICB0cnlS
YW5nZS50cnlEYXRhLT50YXJnZXRTY29wZURlcHRoID0gbV9keW5hbWljU2NvcGVEZXB0aCArIG1f
YmFzZVNjb3BlRGVwdGg7CisgICAgdHJ5UmFuZ2UudHJ5RGF0YS0+dGFyZ2V0U2NvcGVEZXB0aCA9
IG1fZHluYW1pY1Njb3BlRGVwdGg7CiAKICAgICBlbWl0T3Bjb2RlKG9wX2NhdGNoKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0UmVnaXN0ZXItPmluZGV4KCkpOwpAQCAtMjQzNSw4
ICsyMzI2LDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFRyeUFuZEVtaXRD
YXRjaChUcnlEYXRhKiB0cnlEYXRhLCBSZWdpc3RlcklEKgogCiB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0g
ICAgZW1pdE9wY29kZShvcF90aHJvd19yZWZlcmVuY2VfZXJyb3IpOworICAgIGVtaXRPcGNvZGUo
b3BfdGhyb3dfc3RhdGljX2Vycm9yKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29u
c3RhbnRWYWx1ZShqc1N0cmluZyhnbG9iYWxEYXRhKCksIG1lc3NhZ2UpKS0+aW5kZXgoKSk7Cisg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRydWUpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UHVzaE5hbWVTY29wZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0
ZXJJRCogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkBAIC0yNDg3LDcgKzIzNzksNyBAQCBz
dGF0aWMgaW50MzJfdCBrZXlGb3JJbW1lZGlhdGVTd2l0Y2goRXhwcmVzc2lvbk5vZGUqIG5vZGUs
IGludDMyX3QgbWluLCBpbnQzMl90CiAgICAgcmV0dXJuIGtleSAtIG1pbjsKIH0KIAotc3RhdGlj
IHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZvckltbWVkaWF0ZVN3aXRjaChTaW1wbGVKdW1wVGFibGUm
IGp1bXBUYWJsZSwgaW50MzJfdCBzd2l0Y2hBZGRyZXNzLCB1aW50MzJfdCBjbGF1c2VDb3VudCwg
UmVmUHRyPExhYmVsPiogbGFiZWxzLCBFeHByZXNzaW9uTm9kZSoqIG5vZGVzLCBpbnQzMl90IG1p
biwgaW50MzJfdCBtYXgpCitzdGF0aWMgdm9pZCBwcmVwYXJlSnVtcFRhYmxlRm9ySW1tZWRpYXRl
U3dpdGNoKFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUsIGludDMyX3Qgc3dpdGNo
QWRkcmVzcywgdWludDMyX3QgY2xhdXNlQ291bnQsIFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRXhw
cmVzc2lvbk5vZGUqKiBub2RlcywgaW50MzJfdCBtaW4sIGludDMyX3QgbWF4KQogewogICAgIGp1
bXBUYWJsZS5taW4gPSBtaW47CiAgICAganVtcFRhYmxlLmJyYW5jaE9mZnNldHMucmVzaXplKG1h
eCAtIG1pbiArIDEpOwpAQCAtMjUxMyw3ICsyNDA1LDcgQEAgc3RhdGljIGludDMyX3Qga2V5Rm9y
Q2hhcmFjdGVyU3dpdGNoKEV4cHJlc3Npb25Ob2RlKiBub2RlLCBpbnQzMl90IG1pbiwgaW50MzJf
dAogICAgIHJldHVybiBrZXkgLSBtaW47CiB9CiAKLXN0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFi
bGVGb3JDaGFyYWN0ZXJTd2l0Y2goU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUsIGludDMyX3Qg
c3dpdGNoQWRkcmVzcywgdWludDMyX3QgY2xhdXNlQ291bnQsIFJlZlB0cjxMYWJlbD4qIGxhYmVs
cywgRXhwcmVzc2lvbk5vZGUqKiBub2RlcywgaW50MzJfdCBtaW4sIGludDMyX3QgbWF4KQorc3Rh
dGljIHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZvckNoYXJhY3RlclN3aXRjaChVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYganVtcFRhYmxlLCBpbnQzMl90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNs
YXVzZUNvdW50LCBSZWZQdHI8TGFiZWw+KiBsYWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMs
IGludDMyX3QgbWluLCBpbnQzMl90IG1heCkKIHsKICAgICBqdW1wVGFibGUubWluID0gbWluOwog
ICAgIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRzLnJlc2l6ZShtYXggLSBtaW4gKyAxKTsKQEAgLTI1
MjYsNyArMjQxOCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVKdW1wVGFibGVGb3JDaGFyYWN0ZXJT
d2l0Y2goU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUsIGludDMyCiAgICAgfQogfQogCi1zdGF0
aWMgdm9pZCBwcmVwYXJlSnVtcFRhYmxlRm9yU3RyaW5nU3dpdGNoKFN0cmluZ0p1bXBUYWJsZSYg
anVtcFRhYmxlLCBpbnQzMl90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNsYXVzZUNvdW50LCBS
ZWZQdHI8TGFiZWw+KiBsYWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMpCitzdGF0aWMgdm9p
ZCBwcmVwYXJlSnVtcFRhYmxlRm9yU3RyaW5nU3dpdGNoKFVubGlua2VkU3RyaW5nSnVtcFRhYmxl
JiBqdW1wVGFibGUsIGludDMyX3Qgc3dpdGNoQWRkcmVzcywgdWludDMyX3QgY2xhdXNlQ291bnQs
IFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRXhwcmVzc2lvbk5vZGUqKiBub2RlcykKIHsKICAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY2xhdXNlQ291bnQ7ICsraSkgewogICAgICAgICAvLyBX
ZSdyZSBlbWl0dGluZyB0aGlzIGFmdGVyIHRoZSBjbGF1c2UgbGFiZWxzIHNob3VsZCBoYXZlIGJl
ZW4gZml4ZWQsIHNvIApAQCAtMjUzNSw5ICsyNDI3LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUp1
bXBUYWJsZUZvclN0cmluZ1N3aXRjaChTdHJpbmdKdW1wVGFibGUmIGp1bXBUYWJsZSwgaW50MzJf
dAogICAgICAgICAKICAgICAgICAgQVNTRVJUKG5vZGVzW2ldLT5pc1N0cmluZygpKTsKICAgICAg
ICAgU3RyaW5nSW1wbCogY2xhdXNlID0gc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG5vZGVzW2ld
KS0+dmFsdWUoKS5pbXBsKCk7Ci0gICAgICAgIE9mZnNldExvY2F0aW9uIGxvY2F0aW9uOwotICAg
ICAgICBsb2NhdGlvbi5icmFuY2hPZmZzZXQgPSBsYWJlbHNbaV0tPmJpbmQoc3dpdGNoQWRkcmVz
cywgc3dpdGNoQWRkcmVzcyArIDMpOwotICAgICAgICBqdW1wVGFibGUub2Zmc2V0VGFibGUuYWRk
KGNsYXVzZSwgbG9jYXRpb24pOworICAgICAgICBqdW1wVGFibGUub2Zmc2V0VGFibGUuYWRkKGNs
YXVzZSwgbGFiZWxzW2ldLT5iaW5kKHN3aXRjaEFkZHJlc3MsIHN3aXRjaEFkZHJlc3MgKyAzKSk7
CiAgICAgfQogfQogCkBAIC0yNTQ5LDIwICsyNDM5LDIwIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVuZFN3aXRjaCh1aW50MzJfdCBjbGF1c2VDb3VudCwgUmVmUHRyPExhYmVsPiogbGFiZWxz
LCBFCiAgICAgICAgIGluc3RydWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAx
XSA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMoKTsKICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKClbc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCArIDJdID0gZGVm
YXVsdExhYmVsLT5iaW5kKHN3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQsIHN3aXRjaEluZm8uYnl0
ZWNvZGVPZmZzZXQgKyAzKTsKIAotICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSA9
IG1fY29kZUJsb2NrLT5hZGRJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUoKTsKKyAgICAgICAgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRJbW1lZGlh
dGVTd2l0Y2hKdW1wVGFibGUoKTsKICAgICAgICAgcHJlcGFyZUp1bXBUYWJsZUZvckltbWVkaWF0
ZVN3aXRjaChqdW1wVGFibGUsIHN3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQsIGNsYXVzZUNvdW50
LCBsYWJlbHMsIG5vZGVzLCBtaW4sIG1heCk7CiAgICAgfSBlbHNlIGlmIChzd2l0Y2hJbmZvLnN3
aXRjaFR5cGUgPT0gU3dpdGNoSW5mbzo6U3dpdGNoQ2hhcmFjdGVyKSB7CiAgICAgICAgIGluc3Ry
dWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAxXSA9IG1fY29kZUJsb2NrLT5u
dW1iZXJPZkNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMoKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25z
KClbc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCArIDJdID0gZGVmYXVsdExhYmVsLT5iaW5kKHN3
aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQsIHN3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAzKTsK
ICAgICAgICAgCi0gICAgICAgIFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxv
Y2stPmFkZENoYXJhY3RlclN3aXRjaEp1bXBUYWJsZSgpOworICAgICAgICBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPmFkZENoYXJhY3RlclN3aXRjaEp1
bXBUYWJsZSgpOwogICAgICAgICBwcmVwYXJlSnVtcFRhYmxlRm9yQ2hhcmFjdGVyU3dpdGNoKGp1
bXBUYWJsZSwgc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgY2xhdXNlQ291bnQsIGxhYmVscywg
bm9kZXMsIG1pbiwgbWF4KTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoc3dpdGNoSW5m
by5zd2l0Y2hUeXBlID09IFN3aXRjaEluZm86OlN3aXRjaFN0cmluZyk7CiAgICAgICAgIGluc3Ry
dWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAxXSA9IG1fY29kZUJsb2NrLT5u
dW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKClb
c3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCArIDJdID0gZGVmYXVsdExhYmVsLT5iaW5kKHN3aXRj
aEluZm8uYnl0ZWNvZGVPZmZzZXQsIHN3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAzKTsKIAot
ICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRTdHJp
bmdTd2l0Y2hKdW1wVGFibGUoKTsKKyAgICAgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGp1
bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKTsKICAgICAg
ICAgcHJlcGFyZUp1bXBUYWJsZUZvclN0cmluZ1N3aXRjaChqdW1wVGFibGUsIHN3aXRjaEluZm8u
Ynl0ZWNvZGVPZmZzZXQsIGNsYXVzZUNvdW50LCBsYWJlbHMsIG5vZGVzKTsKICAgICB9CiB9CkBA
IC0yNTk0LDkgKzI0ODQsOSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVhZE9ubHlF
eGNlcHRpb25JZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFpc1N0cmljdE1vZGUoKSkKICAgICAgICAg
cmV0dXJuOwotCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGVycm9yID0gZW1pdExvYWQobmV3VGVt
cG9yYXJ5KCksIEpTVmFsdWUoY3JlYXRlVHlwZUVycm9yKHNjb3BlKCktPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpKTsK
LSAgICBlbWl0VGhyb3coZXJyb3IuZ2V0KCkpOworICAgIGVtaXRPcGNvZGUob3BfdGhyb3dfc3Rh
dGljX2Vycm9yKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRWYWx1ZShq
c1N0cmluZyhnbG9iYWxEYXRhKCksIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cikpLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCAxZmNjZGViZWZlY2ZhMzc2OWUzYTlk
MGIzODZhMTEzYmI4YzY0ZWMzLi44Mjg3MjZkZWUzMjI2MDYwNDc5ZjViZTE0NzUxMTBmM2Y3NzEz
YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiU3ltYm9sVGFi
bGUuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCisjaW5jbHVk
ZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC0yMTEsMTggKzIxMiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgc2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0
ZWRDb2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2RlKCk7CiAKLSAg
ICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqLCBKU1Njb3BlKiwgU2hhcmVkU3lt
Ym9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKLSAgICAgICAg
Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIEpTU2NvcGUqLCBTaGFyZWRTeW1i
b2xUYWJsZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7Ci0gICAgICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yKEV2YWxOb2RlKiwgSlNTY29wZSosIFNoYXJlZFN5bWJvbFRhYmxlKiwgRXZhbENv
ZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSYsIFByb2dyYW1Ob2RlKiwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiwgRGVi
dWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOworICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihKU0ds
b2JhbERhdGEmLCBGdW5jdGlvbkJvZHlOb2RlKiwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayos
IERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhJiwgRXZhbE5vZGUqLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqLCBEZWJ1Z2dl
ck1vZGUsIFByb2ZpbGVyTW9kZSk7CiAKICAgICAgICAgfkJ5dGVjb2RlR2VuZXJhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbERhdGE7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3Bl
cnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzOyB9
CiAKLSAgICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPm1f
aXNDb25zdHJ1Y3RvcjsgfQorICAgICAgICBib29sIGlzQ29uc3RydWN0b3IoKSB7IHJldHVybiBt
X2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpOyB9CiAKLSAgICAgICAgSlNPYmplY3QqIGdlbmVy
YXRlKCk7CisgICAgICAgIFBhcnNlckVycm9yIGdlbmVyYXRlKCk7CiAKICAgICAgICAgYm9vbCBp
c0FyZ3VtZW50TnVtYmVyKGNvbnN0IElkZW50aWZpZXImLCBpbnQpOwogCkBAIC0zMzIsMTAgKzMz
Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdEV4cHJlc3Npb25JbmZv
KHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZv
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGl2b3QgLT0gbV9jb2Rl
QmxvY2stPnNvdXJjZU9mZnNldCgpOworICAgICAgICAgICAgZGl2b3QgLT0gbV9zY29wZU5vZGUt
PnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgICAgICBpZiAoZGl2b3QgPiBFeHByZXNz
aW9uUmFuZ2VJbmZvOjpNYXhEaXZvdCkgewogICAgICAgICAgICAgICAgIC8vIE92ZXJmbG93IGhh
cyBvY2N1cnJlZCwgd2UgY2FuIG9ubHkgZ2l2ZSBsaW5lIG51bWJlciBpbmZvIGZvciBlcnJvcnMg
Zm9yIHRoaXMgcmVnaW9uCiAgICAgICAgICAgICAgICAgZGl2b3QgPSAwOwpAQCAtNTA4LDggKzUw
Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxlSG9v
a3MoKSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3M7IH0KICAgICAgICAgCiAgICAg
ICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzU3Ry
aWN0TW9kZSgpOyB9Ci0gICAgICAgIAotICAgICAgICBKU1Njb3BlKiBzY29wZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2NvcGUuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBMYWJlbDsKQEAgLTUyNywxMSArNTIzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
CiAKICAgICAgICAgdm9pZCBlbWl0T3Bjb2RlKE9wY29kZUlEKTsKLSAgICAgICAgQXJyYXlQcm9m
aWxlKiBuZXdBcnJheVByb2ZpbGUoKTsKLSAgICAgICAgVmFsdWVQcm9maWxlKiBlbWl0UHJvZmls
ZWRPcGNvZGUoT3Bjb2RlSUQpOworICAgICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBuZXdBcnJh
eVByb2ZpbGUoKTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgZW1pdFByb2ZpbGVkT3Bj
b2RlKE9wY29kZUlEKTsKICAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RCaW5hcnlPcChpbnQmIGRz
dEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMySW5kZXgpOwogICAgICAgICB2b2lkIHJl
dHJpZXZlTGFzdFVuYXJ5T3AoaW50JiBkc3RJbmRleCwgaW50JiBzcmNJbmRleCk7Ci0gICAgICAg
IHZvaWQgcmV0cmlldmVMYXN0VW5hcnlPcChXcml0ZUJhcnJpZXI8VW5rbm93bj4qJiBkc3RQb2lu
dGVyLCBpbnQmIHNyY0luZGV4KTsKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJld2luZEJp
bmFyeU9wKCk7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdpbmRVbmFyeU9wKCk7CiAK
QEAgLTU3NCwxMCArNTY5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgYWRkZWQgdmFyLgotICAgICAgICBlbnVtIENv
bnN0YW50TW9kZSB7IElzQ29uc3RhbnQsIElzVmFyaWFibGUgfTsKLSAgICAgICAgZW51bSBGdW5j
dGlvbk1vZGUgeyBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplLCBOb3RGdW5jdGlvbk9yTm90U3BlY2lh
bGl6YWJsZSB9OwotICAgICAgICBpbnQgYWRkR2xvYmFsVmFyKGNvbnN0IElkZW50aWZpZXImLCBD
b25zdGFudE1vZGUsIEZ1bmN0aW9uTW9kZSk7Ci0KICAgICAgICAgdm9pZCBhZGRQYXJhbWV0ZXIo
Y29uc3QgSWRlbnRpZmllciYsIGludCBwYXJhbWV0ZXJJbmRleCk7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIHJlc29sdmVDYWxsZWUoRnVuY3Rpb25Cb2R5Tm9kZSopOwogICAgICAgICB2b2lkIGFkZENh
bGxlZShGdW5jdGlvbkJvZHlOb2RlKiwgUmVnaXN0ZXJJRCopOwpAQCAtNjA0LDE3ICs1OTUsMjIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnRCdWZmZXIo
dW5zaWduZWQgbGVuZ3RoKTsKICAgICAgICAgCisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBtYWtlRnVuY3Rpb24oRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUobV9n
bG9iYWxEYXRhLCBtX3Njb3BlTm9kZS0+c291cmNlKCksIGJvZHkpOworICAgICAgICB9CisKICAg
ICAgICAgSlNTdHJpbmcqIGFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElkZW50aWZpZXImKTsKIAog
ICAgICAgICB2b2lkIGFkZExpbmVJbmZvKHVuc2lnbmVkIGxpbmVObykKICAgICAgICAgewotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmFkZExpbmVJbmZvKGluc3RydWN0aW9ucygpLnNpemUoKSwg
bGluZU5vKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRMaW5lSW5mbyhpbnN0cnVjdGlv
bnMoKS5zaXplKCksIGxpbmVObyAtIG1fc2NvcGVOb2RlLT5maXJzdExpbmUoKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SW5pdExhenlSZWdpc3RlcihSZWdpc3RlcklE
Kik7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0
aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CisgICAgICAgIFZlY3RvcjxVbmxpbmtl
ZEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0K
IAogICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSB7IHJldHVybiAqbV9z
eW1ib2xUYWJsZTsgfQogI2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKQEAgLTY1MiwxMyAr
NjQ4LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNyZWF0ZUFjdGl2YXRpb25J
Zk5lY2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5l
Y2Vzc2FyeShSZWdpc3RlcklEKik7CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rp
b24+IG1faW5zdHJ1Y3Rpb25zOworICAgICAgICBWZWN0b3I8VW5saW5rZWRJbnN0cnVjdGlvbj4g
bV9pbnN0cnVjdGlvbnM7CiAKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzOwog
ICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rczsKLSAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXRSaWNoU291cmNlSW5mbzsKIAotICAgICAgICBTdHJvbmc8SlNTY29wZT4gbV9zY29w
ZTsKICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CiAKICNpZiBFTkFC
TEUoQllURUNPREVfQ09NTUVOVFMpCkBAIC02NjcsNyArNjYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAjZW5kaWYKIAogICAgICAgICBTY29wZU5vZGUqIG1fc2NvcGVOb2RlOwotICAgICAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOworICAgICAgICBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+IG1f
Y29kZUJsb2NrOwogCiAgICAgICAgIC8vIFNvbWUgb2YgdGhlc2Ugb2JqZWN0cyBrZWVwIHBvaW50
ZXJzIHRvIG9uZSBhbm90aGVyLiBUaGV5IGFyZSBhcnJhbmdlZAogICAgICAgICAvLyB0byBlbnN1
cmUgYSBzYW5lIGRlc3RydWN0aW9uIG9yZGVyIHRoYXQgYXZvaWRzIHJlZmVyZW5jZXMgdG8gZnJl
ZWQgbWVtb3J5LgpAQCAtNjg1LDcgKzY3OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gbV9sYXN0VmFyOwogICAgICAgICBpbnQgbV9maW5hbGx5RGVwdGg7
CiAgICAgICAgIGludCBtX2R5bmFtaWNTY29wZURlcHRoOwotICAgICAgICBpbnQgbV9iYXNlU2Nv
cGVEZXB0aDsKICAgICAgICAgQ29kZVR5cGUgbV9jb2RlVHlwZTsKIAogICAgICAgICBWZWN0b3I8
Q29udHJvbEZsb3dDb250ZXh0PiBtX3Njb3BlQ29udGV4dFN0YWNrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKaW5kZXggMzczMWIwNDczMDJkYTM5MTJlNTc4
OGE2MGFkZDEyY2I2NGM4YjRlOS4uYjE0NzI5MTQ2OGEyYjA1MDk4NDIxYjhkMmI3MGVlZjA5NDU2
NmZkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCkBA
IC04MCw2ICs4MCw3IEBAIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWxs
KiBjZWxsKQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnVuY3Rpb24tPnNjb3BlKCktPmdsb2Jh
bE9iamVjdCgpLT5KU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpOwogICAgIGV4ZWN1dGFibGUt
PmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CisgICAgZXhlY3V0YWJsZS0+Y2xlYXJVbmxpbmtl
ZENvZGVJZk5vdENvbXBpbGluZygpOwogICAgIGlmIChtX2RlYnVnZ2VyID09IGZ1bmN0aW9uLT5z
Y29wZSgpLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKICAgICAgICAgbV9zb3VyY2VQcm92
aWRlcnMuYWRkKGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4ZWMpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaAppbmRleCA2YjkwNTZl
NTRhMThjNmJmZDAwMTMwM2I4ZjRlNGVlNjVhZDA2NGM3Li5lMTgzN2IwNDFkNzI5MDY1OWMxNTA5
NmU0ZjVlYTU4NjU4YjRmY2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlQ2FjaGUuaApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8v
IE5vcGUsIHNvIHRyeSB0byBwYXJzZSBvbmUuCiAgICAgICAgICAgICBKU09iamVjdCogZXhjZXB0
aW9uOwogICAgICAgICAgICAgdmFsdWUub3duZWQgPSB0cnVlOwotICAgICAgICAgICAgdmFsdWUu
Y29kZUJsb2NrID0ga2V5LmV4ZWN1dGFibGUoKS0+cHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwg
T3B0aW1pemluZ0NvbXBpbGF0aW9uLCBrZXkua2luZCgpLCBleGNlcHRpb24pLmxlYWtQdHIoKTsK
KyAgICAgICAgICAgIHZhbHVlLmNvZGVCbG9jayA9IGtleS5leGVjdXRhYmxlKCktPnByb2R1Y2VD
b2RlQmxvY2tGb3Ioc2NvcGUsIGtleS5raW5kKCksIGV4Y2VwdGlvbikubGVha1B0cigpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVhc29u
IHRvIHJlamVjdCB0aGlzIGZyb20gb3VyIGNhY2hlLiBJZiBzbywgdGhlbgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCA5YTQxMDMzZTlj
ODBhMWIwN2RjOTU5MmMyMDFmZTA1NGRkODU0MTExLi43MGFhMmI2Mzc4NjMyMGRlOTNmZTY5Yjll
M2E0NDgzY2FjYjNmZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcApAQCAtMjYxNCw2ICsyNjE0LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9wdXRfYnlfaWQpOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9j
b25zdF9ub3A6IHsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luaXRfZ2xvYmFsX2NvbnN0
X25vcCk7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0OiB7
CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKApAQCAtMjg1MSwxMCArMjg1NSwx
MCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgYWRkVG9HcmFwaChUaHJvdywgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3Rocm93KTsKICAgICAgICAgICAg
IAotICAgICAgICBjYXNlIG9wX3Rocm93X3JlZmVyZW5jZV9lcnJvcjoKKyAgICAgICAgY2FzZSBv
cF90aHJvd19zdGF0aWNfZXJyb3I6CiAgICAgICAgICAgICBmbHVzaEFyZ3VtZW50c0FuZENhcHR1
cmVkVmFyaWFibGVzKCk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFRocm93UmVmZXJlbmNlRXJy
b3IpOwotICAgICAgICAgICAgTEFTVF9PUENPREUob3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKTsK
KyAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3Rocm93X3N0YXRpY19lcnJvcik7CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBvcF9jYWxsOgogICAgICAgICAgICAgaGFuZGxlQ2FsbChpbnRl
cnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDYWxsLCBDb2RlRm9yQ2FsbCk7CkBAIC0zNTk3
LDcgKzM2MDEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAg
ZGF0YUxvZygiUGFyc2luZyBjb2RlIGJsb2NrICVwLiBjb2RlVHlwZSA9ICVzLCBjYXB0dXJlQ291
bnQgPSAldSwgbmVlZHNGdWxsU2NvcGVDaGFpbiA9ICVzLCBuZWVkc0FjdGl2YXRpb24gPSAlcywg
aXNTdHJpY3RNb2RlID0gJXNcbiIsCiAgICAgICAgICAgICBjb2RlQmxvY2ssCiAgICAgICAgICAg
ICBjb2RlVHlwZVRvU3RyaW5nKGNvZGVCbG9jay0+Y29kZVR5cGUoKSksCi0gICAgICAgICAgICBj
b2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpLAorICAgICAgICAgICAgY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpID8gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJl
Q291bnQoKSA6IDAsCiAgICAgICAgICAgICBjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4o
KT8idHJ1ZSI6ImZhbHNlIiwKICAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCktPm5lZWRzQWN0aXZhdGlvbigpPyJ0cnVlIjoiZmFsc2UiLAogICAgICAgICAgICAgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCk/InRydWUiOiJmYWxzZSIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKaW5kZXggOTUyNjll
OGEwODJhNjEyMzcwM2IzNWJiMGE2MmRmOGViZmY1ZGViMC4uMWY5Nzc4ZWZlZjIzZDMzNDkyMjQ2
ZDBiMjI1NDZlYjE4NzM0ZDkxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5oCkBAIC0xNjYsNiArMTY2LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqLCBJbnN0cnVjdGkK
ICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdF9vdXRfb2ZfbGluZToKICAg
ICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIG9wX3B1dF9i
eV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX2luaXRfZ2xv
YmFsX2NvbnN0X25vcDoKICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0OgogICAgIGNhc2Ug
b3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2s6CiAgICAgY2FzZSBvcF9qbXA6CkBAIC0xOTksNyAr
MjAwLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlE
IG9wY29kZUlELCBDb2RlQmxvY2sqLCBJbnN0cnVjdGkKICAgICBjYXNlIG9wX3N0cmNhdDoKICAg
ICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToKICAgICBjYXNlIG9wX3Rocm93OgotICAgIGNhc2Ugb3Bf
dGhyb3dfcmVmZXJlbmNlX2Vycm9yOgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgog
ICAgIGNhc2Ugb3BfY2FsbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKICAgICBjYXNlIG9wX25l
d19yZWdleHA6IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
aW5kZXggMTNlMDQzODhjZDZhODU2ZDZlYTM3YmJjNGY4ZWYwZjY2ZWJkZWFiNC4uMGU0NWUyMzBj
Mzk5Y2NhODFjNjRjNjJhZTlkNjNhZTE4M2U2ZjM2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0xMTU3LDggKzExNTcsNyBAQCBKU0NlbGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwotICAgIEpT
QWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKAotICAgICAgICBn
bG9iYWxEYXRhLCBleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjLT5j
b2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCkpKTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2
YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZShnbG9iYWxEYXRhLCBleGVjLCBleGVjLT5jb2Rl
QmxvY2soKSk7CiAgICAgZXhlYy0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiAgICAgcmV0dXJuIGFj
dGl2YXRpb247CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IGNkMzM5M2Fh
MjBjMTU2NjRiMmE0NGNmYzYyOTM5YzRlMmIyY2I0YmEuLmM0NTVmYzJiMTg5YjZmZjY3YTg5Y2Q5
ZTU2NDE3ZDEzNDZjYTdkODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNPTk9iamVjdC5o
IgogI2luY2x1ZGUgIlRyYWNpbmcuaCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgog
I2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1
ZGUgPHd0Zi9SQU1TaXplLmg+CkBAIC00ODQsMTMgKzQ4NSwxMyBAQCB2b2lkIEhlYXA6Om1hcmtS
b290cyhib29sIGZ1bGxHQykKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCi0gICAg
CisKICAgICAgICAgaWYgKG1fZ2xvYmFsRGF0YS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6
ZSgpKSB7CiAgICAgICAgICAgICBHQ1BIQVNFKFZpc2l0QWN0aXZlQ29kZUJsb2NrKTsKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nbG9iYWxEYXRhLT5jb2RlQmxvY2tzQmVp
bmdDb21waWxlZC5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmNv
ZGVCbG9ja3NCZWluZ0NvbXBpbGVkW2ldLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAg
ICAgfQotICAgIAorCiAgICAgICAgIHsKICAgICAgICAgICAgIEdDUEhBU0UoVmlzaXRNYWNoaW5l
Um9vdHMpOwogICAgICAgICAgICAgTUFSS19MT0dfUk9PVCh2aXNpdG9yLCAiQysrIFN0YWNrIik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCmluZGV4IDEz
YmQ4ZTQ5M2QwZDdiM2YzOGU5ODNiMzU1OTQ2N2MyMzNkNWI4NWMuLjg2NzQ4MWZlMzMyOTYxM2Vj
N2EyN2RmMzMzMDdiZWFhNTUwODgzZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvci5oCkBAIC03NCwxMCArNzQsMTggQEAgaW5saW5lIHZvaWQgTWFya2Vk
QWxsb2NhdG9yOjppbml0KEhlYXAqIGhlYXAsIE1hcmtlZFNwYWNlKiBtYXJrZWRTcGFjZSwgc2l6
ZV90IGMKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBieXRl
cykKIHsKICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7
Ci0gICAgaWYgKFVOTElLRUxZKCFoZWFkKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nh
c2UoYnl0ZXMpOworICAgIGlmIChVTkxJS0VMWSghaGVhZCkpIHsKKyAgICAgICAgdm9pZCogcmVz
dWx0ID0gYWxsb2NhdGVTbG93Q2FzZShieXRlcyk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBt
ZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKKyNlbmRpZgogICAgIHJl
dHVybiBoZWFkOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5j
cHAKaW5kZXggN2EzMGRlYmRhNGZjZGY4OGNkNTNlYTdmZjc2MWNhN2YzOGNiNWFjMy4uMzkxOTcw
NWQwMGVhMTI5YTZjYTJiODRjYzA0ZmM1NmZhZGNlOTNhYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcApAQCAtMjk0LDYgKzI5NCw4IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSogc2xvdCkKICAgICBp
ZiAoIWNlbGwpCiAgICAgICAgIHJldHVybjsKIAorICAgIHZhbGlkYXRlKGNlbGwpOworCiAgICAg
aWYgKG1fc2hvdWxkSGFzaENvbnN0ICYmIGNlbGwtPmlzU3RyaW5nKCkpIHsKICAgICAgICAgSlNT
dHJpbmcqIHN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGNlbGwpOwogICAgICAgICBpZiAoc3Ry
aW5nLT5zaG91bGRUcnlIYXNoQ29uc3QoKSAmJiBzdHJpbmctPnRyeUhhc2hDb25zdExvY2soKSkg
ewpAQCAtMzU1LDYgKzM1NywxMCBAQCB2b2lkIFNsb3RWaXNpdG9yOjp2YWxpZGF0ZShKU0NlbGwq
IGNlbGwpCiAgICAgICAgICAgICAgICAgY2VsbC0+c3RydWN0dXJlKCktPnN0cnVjdHVyZSgpLCBw
YXJlbnRDbGFzc05hbWUsIGNlbGwsIGNlbGwtPnN0cnVjdHVyZSgpLCBvdXJDbGFzc05hbWUpOwog
ICAgICAgICBDUkFTSCgpOwogICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gd2FsayB0
aGUgQ2xhc3NJbmZvIGNoYWluCisgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gY2VsbC0+Y2xh
c3NJbmZvKCk7CisgICAgZG8geyB9IHdoaWxlICgoaW5mbyA9IGluZm8tPnBhcmVudENsYXNzKSk7
CiB9CiAjZWxzZQogdm9pZCBTbG90VmlzaXRvcjo6dmFsaWRhdGUoSlNDZWxsKikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDNl
NjQ3MWIwZmY3ZjUwOTczMmQ5ZWE4NzU4YjAzYzhlZTI3ZDM2ZTIuLjM5N2FjODQ3NDg0MWNjZWIw
NDEyOGNiMGE5OGQ2OGY4YWI4ZTViMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtOTQ4LDEwICs5NDgsMTMgQEAgZmFpbGVk
SlNPTlA6CiAgICAgLy8gb2JqZWN0LgogCiAgICAgLy8gQ29tcGlsZSBzb3VyY2UgdG8gYnl0ZWNv
ZGUgaWYgbmVjZXNzYXJ5OgotICAgIEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmNvbXBpbGUo
Y2FsbEZyYW1lLCBzY29wZSk7Ci0gICAgaWYgKGVycm9yKQorICAgIGlmIChKU09iamVjdCogZXJy
b3IgPSBwcm9ncmFtLT5pbml0YWxpemVHbG9iYWxQcm9wZXJ0aWVzKGdsb2JhbERhdGEsIGNhbGxG
cmFtZSwgc2NvcGUpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNh
bGxGcmFtZSwgZXJyb3IpKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZwcm9ncmFtLT5n
ZW5lcmF0ZWRCeXRlY29kZSgpOworCisgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0t
PmNvbXBpbGUoY2FsbEZyYW1lLCBzY29wZSkpCisgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJu
KHRocm93RXJyb3IoY2FsbEZyYW1lLCBlcnJvcikpOworCisgICAgUHJvZ3JhbUNvZGVCbG9jayog
Y29kZUJsb2NrID0gJnByb2dyYW0tPmdlbmVyYXRlZEJ5dGVjb2RlKCk7CiAKICAgICAvLyBQdXNo
IHRoZSBjYWxsIGZyYW1lIGZvciB0aGlzIGludm9jYXRpb246CiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDlmOTEwMTRjOGYyOTc0MjJkN2YwMDg1NGY0YjM1
M2MyMzY0ZGFhOGQuLjMxMDJjNzY5MzAxMWUxZjM5NDYyNGE4NmYzZTZkZWVhNjczMGNkODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTMzNSw2ICszMzUsOCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9wdXRfYnlfaW5k
ZXgpCiAgICAgICAgIERFRklORV9PUChvcF9wdXRfYnlfdmFsKQogICAgICAgICBERUZJTkVfT1Ao
b3BfcHV0X2dldHRlcl9zZXR0ZXIpCisgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Rf
bm9wOgorICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wKTsK
ICAgICAgICAgREVGSU5FX09QKG9wX2luaXRfZ2xvYmFsX2NvbnN0KQogICAgICAgICBERUZJTkVf
T1Aob3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2spCiAKQEAgLTM3MSw3ICszNzMsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF90ZWFy
X29mZl9hY3RpdmF0aW9uKQogICAgICAgICBERUZJTkVfT1Aob3BfdGVhcl9vZmZfYXJndW1lbnRz
KQogICAgICAgICBERUZJTkVfT1Aob3BfdGhyb3cpCi0gICAgICAgIERFRklORV9PUChvcF90aHJv
d19yZWZlcmVuY2VfZXJyb3IpCisgICAgICAgIERFRklORV9PUChvcF90aHJvd19zdGF0aWNfZXJy
b3IpCiAgICAgICAgIERFRklORV9PUChvcF90b19qc251bWJlcikKICAgICAgICAgREVGSU5FX09Q
KG9wX3RvX3ByaW1pdGl2ZSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggZDI1OTVjNzIz
ZjA3MWJhMzYxOGU2ODhmYWU3MmFjMTM2NmM2NDk2MS4uZGNmODdkMzUyNmE2ODY2MWY1NzI0YzM3
ODdlNTA1MjUyYzIyYzAzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC03MzEsNyArNzMx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90ZWFyX29mZl9hY3Rp
dmF0aW9uKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90ZWFyX29mZl9hcmd1
bWVudHMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Rocm93KEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF90aHJvd19yZWZlcmVuY2VfZXJyb3IoSW5zdHJ1
Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3Rocm93X3N0YXRpY19lcnJvcihJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fanNudW1iZXIoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3ByaW1pdGl2ZShJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfdW5leHBlY3RlZF9sb2FkKEluc3RydWN0aW9uKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVREcml2ZXIuaAppbmRleCAzMThiNGU3YWFlYjhhYjk1MzI2YWMyNmYyYzJl
NjQxMDBmZjJiMjhmLi42NDVjNjViMjgxZThjNjIzNTdmYWY5MGVhMzBlMjdmNDZmNjk2Y2EwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgKQEAgLTc1LDcgKzc1LDcgQEAgaW5s
aW5lIGJvb2wgaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8
Q29kZUJsb2NrVHlwZT4mIGNvZGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wg
aml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxG
dW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIFdyaXRlQmFycmllcjxTaGFyZWRT
eW1ib2xUYWJsZT4mIHN5bWJvbFRhYmxlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK2lubGluZSBi
b29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoRXhlY1N0YXRlKiBleGVjLCBPd25Q
dHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpKSVRUeXBl
IGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVm
Zm9ydCkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7CiAgICAgCkBAIC05OSw3ICs5OSw2IEBAIGlubGluZSBib29sIGppdENvbXBpbGVGdW5jdGlv
bklmQXBwcm9wcmlhdGUoRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlCiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgewogICAgICAg
ICAgICAgY29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4o
Y29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJs
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBj
b2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpOwogICAgICAgICAgICAgaml0Q29kZSA9IG9sZEpJVENv
ZGU7CiAgICAgICAgICAgICBqaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBvbGRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2s7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCAwN2M4YWNlMmEzNTM5NWVkYWY4YTU3NjUzZWUxZDFl
MTAxY2JlYTAwLi4yNDlkY2JhYzkxNTliMThlMmUyN2YwZWYwYTZhMTI0YjU4N2UzNTIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTEwNjksMTMgKzEwNjks
MTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGp1bXAocmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF90
aHJvd19yZWZlcmVuY2VfZXJyb3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3Zv
aWQgSklUOjplbWl0X29wX3Rocm93X3N0YXRpY19lcnJvcihJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90aHJv
d19yZWZlcmVuY2VfZXJyb3IpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF90aHJvd19zdGF0aWNfZXJyb3IpOwogICAgIGlmICghbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLmlzTnVtYmVyKCkpCiAgICAgICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUobV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSkpOwogICAg
IGVsc2UKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KSkpKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IDQ0MTIzYmUx
OTgxNzllMWI3NmI3NTEyODI0ZDNhOGM5M2YwZWU5NDcuLjljNWQyNjBhYjZlYzhkZDk5OWE5OTk4
ZTQzOTNiMjAyZjYwNmM4YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAKQEAgLTE0MDEsMTIgKzE0MDEsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGp1bXAo
cmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF90aHJvd19yZWZlcmVuY2VfZXJyb3IoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3Rocm93X3N0
YXRpY19lcnJvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2ln
bmVkIG1lc3NhZ2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogCi0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Rocm93X3JlZmVyZW5jZV9lcnJvcik7Cisg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Rocm93X3N0YXRpY19lcnJvcik7
CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG1lc3Nh
Z2UpKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAppbmRleCA1MTUzOTViNDlkYTRkNWE4N2M0OTg5
YWEwZGZlYzU0OTIxZmEyZDBkLi41ZGRiOThkZWU1MDA2MWExMWVmZjg5ODViM2QxODE3ZWJjNWJh
ZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMjE0NCw3ICsy
MTQ0LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9wdXNoX2FjdGl2YXRp
b24pCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgSlNB
Y3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoc3RhY2tGcmFtZS5j
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
b3duZXJFeGVjdXRhYmxlKCkpKTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0Fj
dGl2YXRpb246OmNyZWF0ZShzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBzdGFj
a0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKICAg
ICBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiAgICAgcmV0dXJu
IGFjdGl2YXRpb247CiB9CkBAIC0zMzM2LDEzICszMzM2LDE2IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQsIG9wX3B1dF9nZXR0ZXJfc2V0dGVyKQogICAgIGJhc2VPYmotPnB1dERpcmVjdEFj
Y2Vzc29yKGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgYWNjZXNz
b3IsIEFjY2Vzc29yKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGhyb3df
cmVmZXJlbmNlX2Vycm9yKQorREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGhyb3dfc3Rh
dGljX2Vycm9yKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAog
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgU3Ry
aW5nIG1lc3NhZ2UgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLnRvU3RyaW5nKGNhbGxG
cmFtZSktPnZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNl
cHRpb24gPSBjcmVhdGVSZWZlcmVuY2VFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpOworICAgIGlm
IChzdGFja0ZyYW1lLmFyZ3NbMV0uYXNJbnQzMikKKyAgICAgICAgc3RhY2tGcmFtZS5nbG9iYWxE
YXRhLT5leGNlcHRpb24gPSBjcmVhdGVSZWZlcmVuY2VFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2Up
OworICAgIGVsc2UKKyAgICAgICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBj
cmVhdGVUeXBlRXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKTsKICAgICBWTV9USFJPV19FWENFUFRJ
T05fQVRfRU5EKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAppbmRleCAz
ZDBlYTgzZGYzYjAzNjJjYzc5M2M1YjE3NmYwZTFjMTQ1OWJiMTEzLi41NzYxMjM2YjE0YjNmZmE5
ODk4OTcyOTk3YjE3OTA1YzhhYzA0MWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCkBAIC00NTIsNyArNDUyLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgdm9pZCBKSVRfU1RVQiBj
dGlfb3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZf
SU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlvbihT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0
aV9vcF90ZWFyX29mZl9hcmd1bWVudHMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7Ci0gICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
X3Rocm93X3N0YXRpY19lcnJvcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZShTVFVC
X0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAppbmRleCA4ZTJkYWNmNGQ0YTMzMDFiYTc1ODhlOGE1
OGE5MTA3OGM0Zjk2N2EzLi5lZWMzNzZiMzc5YWU4NjNkZTY1MTZjYzg3ZGIzNmRhYmM0ZjM5MWQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcApAQCAtMTAzLDcg
KzEwMyw3IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQogICAgIEFTU0VSVChWYWx1ZU51bGwgPT0gVGFnQml0VHlwZU90aGVyKTsKICNlbmRp
ZgogICAgIEFTU0VSVChTdHJpbmdUeXBlID09IDUpOwotICAgIEFTU0VSVChPYmplY3RUeXBlID09
IDEzKTsKKyAgICBBU1NFUlQoT2JqZWN0VHlwZSA9PSAxNyk7CiAgICAgQVNTRVJUKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPT0gMSk7CiAgICAgQVNTRVJUKEltcGxlbWVudHNIYXNJbnN0YW5jZSA9
PSAyKTsKICAgICBBU1NFUlQoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSA9PSA4KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IGE0
MTU3ZDNkN2NjM2U3NWNiMzRmMTI3YWY4MmNhOGM2NmVhNmQzMGMuLmJhNDRiZjQwNDE0OGQxOWRk
ZjdlNGRmZTg0OGMwNDAyZGFlNThhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtNDYwLDcgKzQ2MCw3IEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfYWN0aXZhdGlvbikKICNpZiBMTElOVF9TTE9XX1BBVEhf
VFJBQ0lORwogICAgIGRhdGFMb2coIkNyZWF0aW5nIGFuIGFjdGl2YXRpb24sIGV4ZWMgPSAlcCFc
biIsIGV4ZWMpOwogI2VuZGlmCi0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3Rp
dmF0aW9uOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVj
dXRhYmxlKj4oZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKSk7CisgICAgSlNB
Y3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
ZXhlYywgZXhlYy0+Y29kZUJsb2NrKCkpOwogICAgIGV4ZWMtPnNldFNjb3BlKGFjdGl2YXRpb24p
OwogICAgIExMSU5UX1JFVFVSTihKU1ZhbHVlKGFjdGl2YXRpb24pKTsKIH0KQEAgLTE2MjIsMTAg
KzE2MjIsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rocm93KQogICAgIExM
SU5UX1RIUk9XKExMSU5UX09QX0MoMSkuanNWYWx1ZSgpKTsKIH0KIAotTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3Rocm93X3JlZmVyZW5jZV9lcnJvcikKK0xMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF90aHJvd19zdGF0aWNfZXJyb3IpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsK
LSAgICBMTElOVF9USFJPVyhjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBMTElOVF9PUF9DKDEp
LmpzVmFsdWUoKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKKyAgICBpZiAocGNbMl0u
dS5vcGVyYW5kKQorICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVj
LCBMTElOVF9PUF9DKDEpLmpzVmFsdWUoKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsK
KyAgICBlbHNlCisgICAgICAgIExMSU5UX1RIUk9XKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBMTElO
VF9PUF9DKDEpLmpzVmFsdWUoKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKIH0KIAog
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlYnVnKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCBmNzg0NzY4NDEwMGM2NWM3OWUzZjJk
Nzk4ZGE4OTg5YTY2YjY3ZjAyLi45OWZiYWNjZmEyODIzMWJkMGM5NWUyMTZkODdiYjc0NGI2ZTE0
YTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApA
QCAtMjA0LDcgKzIwNCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
cHVzaF93aXRoX3Njb3BlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
cG9wX3Njb3BlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHVzaF9u
YW1lX3Njb3BlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdGhyb3cp
OwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90aHJvd19yZWZlcmVuY2Vf
ZXJyb3IpOworTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90aHJvd19zdGF0
aWNfZXJyb3IpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9kZWJ1Zyk7
CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfd2lsbF9jYWxs
KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHJvZmlsZV9kaWRfY2Fs
bCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5hc20KaW5kZXggZjQwM2IwYjZjYjNiZDNmYTAwYTVjM2I1ZmVlODBmNmE2ODAyYTMwZC4u
YmE1YjY3ZGY0Yzg3OWEzOTdjNDdkNDM4MDliNDllNWUwNWQ5YzcwNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtOTYs
NyArOTYsNyBAQCBjb25zdCBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPSAzMAogCiAjIFR5cGUg
Y29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDUKLWNvbnN0IE9iamVjdFR5cGUgPSAxMwor
Y29uc3QgT2JqZWN0VHlwZSA9IDE3CiAKICMgVHlwZSBmbGFncyBjb25zdGFudHMuCiBjb25zdCBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gMQpAQCAtMTIzNCwxMCArMTIzNCwxMCBAQCBfbGxpbnRf
b3BfdGhyb3c6CiAgICAgZGlzcGF0Y2goMikKIAogCi1fbGxpbnRfb3BfdGhyb3dfcmVmZXJlbmNl
X2Vycm9yOgorX2xsaW50X29wX3Rocm93X3N0YXRpY19lcnJvcjoKICAgICB0cmFjZUV4ZWN1dGlv
bigpCi0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfdGhyb3dfcmVmZXJlbmNlX2Vy
cm9yKQotICAgIGRpc3BhdGNoKDIpCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhf
dGhyb3dfc3RhdGljX2Vycm9yKQorICAgIGRpc3BhdGNoKDMpCiAKIAogX2xsaW50X29wX3Byb2Zp
bGVfd2lsbF9jYWxsOgpAQCAtMTMyNiw2ICsxMzI2LDggQEAgX2xsaW50X29wX3B1dF9ieV9pZF9y
ZXBsYWNlOgogX2xsaW50X29wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgogICAgIG5vdFN1cHBvcnRl
ZCgpCiAKK19sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CisgICAgZGlzcGF0Y2goNSkK
IAogIyBJbmRpY2F0ZSB0aGUgZW5kIG9mIExMSW50LgogX2xsaW50X2VuZDoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20KaW5kZXggODkxYjYzZDY0YjlhMmQ1NGZmMTZhNWJjN2M5ZDhhYzI1OGQxNmVlOC4uZmZiMTQ2
MjQ3ZmI1NzBhMzhiYWY0NjE1YmE4Y2FjM2I1YmVmNDczZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAg
LTk4NCw3ICs5ODQsNyBAQCBfbGxpbnRfb3BfaW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgd3JpdGVC
YXJyaWVyKHQyLCB0MykKICAgICBzdG9yZWkgdDIsIFRhZ09mZnNldFt0MF0KICAgICBzdG9yZWkg
dDMsIFBheWxvYWRPZmZzZXRbdDBdCi0gICAgZGlzcGF0Y2goMykKKyAgICBkaXNwYXRjaCg1KQog
CiAKIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggNWJi
MGQ3MGFlNmU2MDBkYTkxYzhmNjBlZTU3ODNmYzRmNjNmYTMwOC4uYzk5MDBiMzQzN2U1MjYwNDVh
MTY1MWJhMDIxNjU0M2FiMjNjNjg0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTgzMCw3ICs4MzAsNyBAQCBf
bGxpbnRfb3BfaW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0
MSwgdDIpCiAgICAgd3JpdGVCYXJyaWVyKHQyKQogICAgIHN0b3JlcSB0MiwgW3QwXQotICAgIGRp
c3BhdGNoKDMpCisgICAgZGlzcGF0Y2goNSkKIAogCiBfbGxpbnRfb3BfaW5pdF9nbG9iYWxfY29u
c3RfY2hlY2s6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCAzYjAzMTZm
ODE2NWEwODU2YTMyOTc1OTVjZTUyMTI1ZGMwZmE2MzJmLi42MTVkMDllYjc1ZDgzYTc5YjFiYWEw
OTVkYjhhMjk4MmJlYzY1NGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgK
QEAgLTc2LDYgKzc2LDQ5IEBAIENPTVBJTEVfQVNTRVJUKExhc3RVbnRhZ2dlZFRva2VuIDwgNjQs
IExlc3NUaGFuNjRVbnRhZ2dlZFRva2Vucyk7CiBlbnVtIFNvdXJjZUVsZW1lbnRzTW9kZSB7IENo
ZWNrRm9yU3RyaWN0TW9kZSwgRG9udENoZWNrRm9yU3RyaWN0TW9kZSB9OwogZW51bSBGdW5jdGlv
blJlcXVpcmVtZW50cyB7IEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEZ1bmN0aW9uTmVlZHNOYW1l
IH07CiAKK3N0cnVjdCBQYXJzZXJFcnJvciB7CisgICAgZW51bSBFcnJvclR5cGUgeyBFcnJvck5v
bmUsIFN0YWNrT3ZlcmZsb3csIFN5bnRheEVycm9yLCBFdmFsRXJyb3IsIE91dE9mTWVtb3J5IH0g
bV90eXBlOworICAgIFN0cmluZyBtX21lc3NhZ2U7CisgICAgaW50IG1fbGluZTsKKyAgICBQYXJz
ZXJFcnJvcigpCisgICAgICAgIDogbV90eXBlKEVycm9yTm9uZSkKKyAgICAgICAgLCBtX2xpbmUo
LTEpCisgICAgeworICAgIH0KKworICAgIFBhcnNlckVycm9yKEVycm9yVHlwZSB0eXBlKQorICAg
ICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fbGluZSgtMSkKKyAgICB7CisgICAgfQor
CisgICAgUGFyc2VyRXJyb3IoRXJyb3JUeXBlIHR5cGUsIFN0cmluZyBtc2csIGludCBsaW5lKQor
ICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fbWVzc2FnZShtc2cpCisgICAgICAg
ICwgbV9saW5lKGxpbmUpCisgICAgeworICAgIH0KKworICAgIEpTT2JqZWN0KiB0b0Vycm9yT2Jq
ZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgRXJyb3JO
b25lOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgU3ludGF4RXJyb3I6Cisg
ICAgICAgICAgICByZXR1cm4gYWRkRXJyb3JJbmZvKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
LCBjcmVhdGVTeW50YXhFcnJvcihnbG9iYWxPYmplY3QsIG1fbWVzc2FnZSksIG1fbGluZSwgc291
cmNlKTsKKyAgICAgICAgY2FzZSBFdmFsRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gY3JlYXRl
U3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCBtX21lc3NhZ2UpOworICAgICAgICBjYXNlIFN0YWNr
T3ZlcmZsb3c6CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGds
b2JhbE9iamVjdCk7CisgICAgICAgIGNhc2UgT3V0T2ZNZW1vcnk6CisgICAgICAgICAgICByZXR1
cm4gY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QpOworICAgICAgICB9CisgICAg
ICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2Jh
bE9iamVjdCk7IC8vIEFwcGVhc2UgUXQgYm90CisgICAgfQorCit9OworCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIGJvb2wgaXNFdmFsTm9kZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiB0ZW1w
bGF0ZSA8PiBpbmxpbmUgYm9vbCBpc0V2YWxOb2RlPEV2YWxOb2RlPigpIHsgcmV0dXJuIHRydWU7
IH0KIApAQCAtMzcwLDcgKzQxMyw3IEBAIHB1YmxpYzoKICAgICB+UGFyc2VyKCk7CiAKICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KLSAgICBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBh
cnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciosIEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiopOworICAgIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2UoUGFy
c2VyRXJyb3ImKTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgQWxsb3dJbk92ZXJyaWRlIHsKQEAg
LTg5MCw3ICs5MzMsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9sYXN0VG9rZW5FbmQ7
CiAgICAgfQogCi0gICAgbXV0YWJsZSBjb25zdCBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsK
KyAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICBjb25zdCBTb3VyY2VDb2RlKiBt
X3NvdXJjZTsKICAgICBQYXJzZXJBcmVuYSogbV9hcmVuYTsKICAgICBPd25QdHI8TGV4ZXJUeXBl
PiBtX2xleGVyOwpAQCAtOTM1LDEyICs5NzgsMTEgQEAgcHJpdmF0ZToKICAgICB9OwogfTsKIAor
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5v
ZGU+Ci1QYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRGVidWdnZXIqIGRlYnVnZ2VyLCBFeGVj
U3RhdGUqIGRlYnVnZ2VyRXhlY1N0YXRlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikKK1Bhc3NSZWZQ
dHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlKFBhcnNlckVycm9yJiBlcnJv
cikKIHsKLSAgICBBU1NFUlQobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgQVNTRVJUKGV4Y2Vw
dGlvbiAmJiAhKmV4Y2VwdGlvbik7CiAgICAgaW50IGVyckxpbmU7CiAgICAgU3RyaW5nIGVyck1z
ZzsKIApAQCAtOTcxLDcgKzEwMTMsNyBAQCBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iagogICAgICAg
ICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb247CiAgICAgICAgIGxvY2F0aW9uLmxpbmUgPSBtX2xl
eGVyLT5sYXN0TGluZU51bWJlcigpOwogICAgICAgICBsb2NhdGlvbi5jb2x1bW4gPSBtX2xleGVy
LT5jdXJyZW50Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAgIHJlc3VsdCA9IFBhcnNlZE5vZGU6OmNy
ZWF0ZSgmbGV4aWNhbEdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLAorICAgICAgICByZXN1bHQg
PSBQYXJzZWROb2RlOjpjcmVhdGUobV9nbG9iYWxEYXRhLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3NvdXJjZUVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV92YXJEZWNsYXJhdGlvbnMgPyAmbV92YXJEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLApAQCAt
OTgxLDcgKzEwMjMsNyBAQCBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iagogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbnVtQ29uc3RhbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2MobV9z
b3VyY2UtPmZpcnN0TGluZSgpLCBtX2xhc3RMaW5lLCBtX2xleGVyLT5jdXJyZW50Q29sdW1uTnVt
YmVyKCkpOwotICAgIH0gZWxzZSBpZiAobGV4aWNhbEdsb2JhbE9iamVjdCkgeworICAgIH0gZWxz
ZSB7CiAgICAgICAgIC8vIFdlIGNhbiBuZXZlciBzZWUgYSBzeW50YXggZXJyb3Igd2hlbiByZXBh
cnNpbmcgYSBmdW5jdGlvbiwgc2luY2Ugd2Ugc2hvdWxkIGhhdmUKICAgICAgICAgLy8gcmVwb3J0
ZWQgdGhlIGVycm9yIHdoZW4gcGFyc2luZyB0aGUgY29udGFpbmluZyBwcm9ncmFtIG9yIGV2YWwg
Y29kZS4gU28gaWYgd2UncmUKICAgICAgICAgLy8gcGFyc2luZyBhIGZ1bmN0aW9uIGJvZHkgbm9k
ZSwgd2UgYXNzdW1lIHRoYXQgd2hhdCBhY3R1YWxseSBoYXBwZW5lZCBoZXJlIGlzIHRoYXQKQEAg
LTk4OSwzNSArMTAzMSwzMSBAQCBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iagogICAgICAgICAvLyBj
b2RlIHdlIGFzc3VtZSB0aGF0IGl0IHdhcyBhIHN5bnRheCBlcnJvciBzaW5jZSBydW5uaW5nIG91
dCBvZiBzdGFjayBpcyBtdWNoIGxlc3MKICAgICAgICAgLy8gbGlrZWx5LCBhbmQgd2UgYXJlIGN1
cnJlbnRseSB1bmFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvIGNhc2VzLgogICAg
ICAgICBpZiAoaXNGdW5jdGlvbkJvZHlOb2RlKHN0YXRpY19jYXN0PFBhcnNlZE5vZGUqPigwKSkg
fHwgbV9oYXNTdGFja092ZXJmbG93KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0
YWNrT3ZlcmZsb3dFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIGVycm9y
ID0gUGFyc2VyRXJyb3I6OlN0YWNrT3ZlcmZsb3c7CiAgICAgICAgIGVsc2UgaWYgKGlzRXZhbE5v
ZGU8UGFyc2VkTm9kZT4oKSkKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTeW50YXhF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBlcnJNc2cpOworICAgICAgICAgICAgZXJyb3IgPSBQ
YXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6RXZhbEVycm9yLCBlcnJNc2csIGVyckxpbmUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gYWRkRXJyb3JJbmZvKGxleGljYWxH
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgY3JlYXRlU3ludGF4RXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgZXJyTXNnKSwgZXJyTGluZSwgKm1fc291cmNlKTsKKyAgICAgICAgICAgIGVycm9y
ID0gUGFyc2VyRXJyb3IoUGFyc2VyRXJyb3I6OlN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUp
OwogICAgIH0KIAotICAgIGlmIChkZWJ1Z2dlciAmJiAhUGFyc2VkTm9kZTo6c2NvcGVJc0Z1bmN0
aW9uKQotICAgICAgICBkZWJ1Z2dlci0+c291cmNlUGFyc2VkKGRlYnVnZ2VyRXhlY1N0YXRlLCBt
X3NvdXJjZS0+cHJvdmlkZXIoKSwgZXJyTGluZSwgZXJyTXNnKTsKLQogICAgIG1fYXJlbmEtPnJl
c2V0KCk7CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAogdGVtcGxhdGUgPGNs
YXNzIFBhcnNlZE5vZGU+Ci1QYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBjb25z
dCBJZGVudGlmaWVyJiBuYW1lLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJz
ZXJNb2RlIHBhcnNlck1vZGUsIERlYnVnZ2VyKiBkZWJ1Z2dlciwgRXhlY1N0YXRlKiBleGVjU3Rh
dGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQorUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rp
b25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1BhcnNl
clN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFBhcnNlckVy
cm9yJiBlcnJvcikKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiUGFyc2lu
ZyIpOwogCiAgICAgQVNTRVJUKCFzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXNOdWxsKCkp
OwotCiAgICAgaWYgKHNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2UoKS5pczhCaXQoKSkgewogICAg
ICAgICBQYXJzZXI8IExleGVyPExDaGFyPiA+IHBhcnNlcihnbG9iYWxEYXRhLCBzb3VyY2UsIHBh
cmFtZXRlcnMsIG5hbWUsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOwotICAgICAgICByZXR1cm4g
cGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGxleGljYWxHbG9iYWxPYmplY3QsIGRlYnVnZ2VyLCBl
eGVjU3RhdGUsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2Vk
Tm9kZT4oZXJyb3IpOwogICAgIH0KICAgICBQYXJzZXI8IExleGVyPFVDaGFyPiA+IHBhcnNlcihn
bG9iYWxEYXRhLCBzb3VyY2UsIHBhcmFtZXRlcnMsIG5hbWUsIHN0cmljdG5lc3MsIHBhcnNlck1v
ZGUpOwotICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4obGV4aWNhbEdsb2JhbE9i
amVjdCwgZGVidWdnZXIsIGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gcGFyc2Vy
LnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgCit9IC8vIG5h
bWVzcGFjZQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlck1vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDFmYjdmZGY5MGRhNWQ1ZGM1MGI5NWNkM2YyYzY0ZDQxNjJjMjBjMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9k
ZXMuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFBhcnNlck1vZGVz
X2gKKyNkZWZpbmUgUGFyc2VyTW9kZXNfaAorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBKU1Bh
cnNlclN0cmljdG5lc3MgeyBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlU3RyaWN0IH07CitlbnVtIEpT
UGFyc2VyTW9kZSB7IEpTUGFyc2VQcm9ncmFtQ29kZSwgSlNQYXJzZUZ1bmN0aW9uQ29kZSB9Owor
CitlbnVtIFByb2ZpbGVyTW9kZSB7IFByb2ZpbGVyT2ZmLCBQcm9maWxlck9uIH07CitlbnVtIERl
YnVnZ2VyTW9kZSB7IERlYnVnZ2VyT2ZmLCBEZWJ1Z2dlck9uIH07CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAppbmRleCA2ZTZjZWMx
MTRkNDQ1ZTM3ODY1ZmVjOGMzOTFkZjViNTFkZWM1MTdhLi4xNDE5MWI5NWQ3ZDNiNWJjYzA0MWIx
MTk3NWViNTUxNTZjZGRjNzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlclRva2Vucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyVG9rZW5zLmgKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgUGFyc2VyVG9rZW5zX2gKICNk
ZWZpbmUgUGFyc2VyVG9rZW5zX2gKIAorI2luY2x1ZGUgIlBhcnNlck1vZGVzLmgiCisKIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBJZGVudGlmaWVyOwpAQCAtMTYxLDkgKzE2Myw2IEBAIHN0cnVj
dCBKU1Rva2VuIHsKICAgICBKU1Rva2VuTG9jYXRpb24gbV9sb2NhdGlvbjsKIH07CiAKLWVudW0g
SlNQYXJzZXJTdHJpY3RuZXNzIHsgSlNQYXJzZU5vcm1hbCwgSlNQYXJzZVN0cmljdCB9OwotZW51
bSBKU1BhcnNlck1vZGUgeyBKU1BhcnNlUHJvZ3JhbUNvZGUsIEpTUGFyc2VGdW5jdGlvbkNvZGUg
fTsKLSAgICAKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5o
CmluZGV4IDdjOGI2OWJkMTI0NTFhYzFiNjY3NjBmZmRjNmI3MWZkYmZlNTVjMmYuLjc5NjFkNGJj
ODMyZGIxM2QzZWJmOGY4Y2QyYmUwYTM2YTM5OWM2NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCkBAIC0yNjcsOCArMjY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIG1fb3ZlcnJvZGVDYWxsZWUgPSBmYWxzZTsKICAgICAgICAgbV9vdmVycm9kZUNh
bGxlciA9IGZhbHNlOwogICAgICAgICBtX2lzU3RyaWN0TW9kZSA9IGpzQ2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1v
ZGUoKTsKLQotICAgICAgICBBU1NFUlQoIWpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxp
bmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpLT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1l
bnRzKCkpOworICAgICAgICBBU1NFUlQoIWpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxp
bmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpLT5zeW1ib2xUYWJsZShpbmxpbmVDYWxsRnJh
bWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZvckNvbnN0cnVjdCktPnNsb3dBcmd1bWVu
dHMoKSk7CiAKICAgICAgICAgLy8gVGhlIGJ5dGVjb2RlIGdlbmVyYXRvciBvbWl0cyBvcF90ZWFy
X29mZl9hY3RpdmF0aW9uIGluIGNhc2VzIG9mIG5vCiAgICAgICAgIC8vIGRlY2xhcmVkIHBhcmFt
ZXRlcnMsIHNvIHdlIG5lZWQgdG8gdGVhciBvZmYgaW1tZWRpYXRlbHkuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZGU3NjBlNDlkYzA4
ZWNhOGZjZGUxYjQ0ZmEwNzYxNThiOWMzNzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcApAQCAtMCwwICsxLDE4NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVHZW5l
cmF0b3IuaCIKKyNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAi
UGFyc2VyLmgiCisjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgorI2luY2x1ZGUgIlVubGlua2Vk
Q29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitDb2RlQ2FjaGU6OkNvZGVDYWNoZSgp
CisgICAgOiBtX3JhbmRvbUdlbmVyYXRvcihzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmFuZG9tTnVt
YmVyKCkgKiBVSU5UMzJfTUFYKSkKK3sKK30KKworQ29kZUNhY2hlOjp+Q29kZUNhY2hlKCkKK3sK
K30KKworQ29kZUNhY2hlOjpDb2RlQmxvY2tLZXkgQ29kZUNhY2hlOjptYWtlQ29kZUJsb2NrS2V5
KGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUNhY2hlOjpDb2RlVHlwZSB0eXBlLCBKU1Bh
cnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcykKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
c291cmNlLnRvU3RyaW5nKCksICh0eXBlIDw8IDEpIHwgc3RyaWN0bmVzcyk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ2FjaGVUeXBlcyB7IH07CisKK3RlbXBsYXRlIDw+IHN0
cnVjdCBDYWNoZVR5cGVzPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4geworICAgIHR5cGVkZWYg
SlNDOjpQcm9ncmFtTm9kZSBSb290Tm9kZTsKKyAgICBzdGF0aWMgY29uc3QgQ29kZUNhY2hlOjpD
b2RlVHlwZSBjb2RlVHlwZSA9IENvZGVDYWNoZTo6UHJvZ3JhbVR5cGU7Cit9OworCit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQ2FjaGVUeXBlczxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IHsKKyAgICB0eXBl
ZGVmIEpTQzo6RXZhbE5vZGUgUm9vdE5vZGU7CisgICAgc3RhdGljIGNvbnN0IENvZGVDYWNoZTo6
Q29kZVR5cGUgY29kZVR5cGUgPSBDb2RlQ2FjaGU6OkV2YWxUeXBlOworfTsKKwordGVtcGxhdGUg
PGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3MgRXhlY3V0YWJsZVR5cGU+CitVbmxp
bmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0Q29kZUJsb2NrKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1
Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikK
K3sKKyAgICBDb2RlQmxvY2tLZXkga2V5ID0gbWFrZUNvZGVCbG9ja0tleShzb3VyY2UsIENhY2hl
VHlwZXM8VW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6Y29kZVR5cGUsIHN0cmljdG5lc3MpOworICAg
IGJvb2wgc3RvcmVJbkNhY2hlID0gZmFsc2U7CisgICAgaWYgKGRlYnVnZ2VyTW9kZSA9PSBEZWJ1
Z2dlck9mZiAmJiBwcm9maWxlck1vZGUgPT0gUHJvZmlsZXJPZmYpIHsKKyAgICAgICAgQ29kZUJs
b2NrSW5kaWNlc01hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9jYWNoZWRDb2RlQmxvY2tJbmRpY2Vz
LmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBtX2NhY2hlZENvZGVCbG9ja0luZGlj
ZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRD
b2RlID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KG1fY2FjaGVkQ29kZUJsb2Nrc1ty
ZXN1bHQtPnZhbHVlXS5zZWNvbmQuZ2V0KCkpOworICAgICAgICAgICAgdW5zaWduZWQgZmlyc3RM
aW5lID0gc291cmNlLmZpcnN0TGluZSgpICsgdW5saW5rZWRDb2RlLT5maXJzdExpbmUoKTsKKyAg
ICAgICAgICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKHVubGlua2VkQ29kZS0+Y29kZUZlYXR1
cmVzKCksIHVubGlua2VkQ29kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgZmlyc3RMaW5lLCBm
aXJzdExpbmUgKyB1bmxpbmtlZENvZGUtPmxpbmVDb3VudCgpKTsKKyAgICAgICAgICAgIHJldHVy
biB1bmxpbmtlZENvZGU7CisgICAgICAgIH0KKyAgICAgICAgc3RvcmVJbkNhY2hlID0gdHJ1ZTsK
KyAgICB9CisKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENhY2hlVHlwZXM8VW5saW5rZWRDb2RlQmxv
Y2tUeXBlPjo6Um9vdE5vZGUgUm9vdE5vZGU7CisgICAgUmVmUHRyPFJvb3ROb2RlPiByb290Tm9k
ZSA9IHBhcnNlPFJvb3ROb2RlPigmZ2xvYmFsRGF0YSwgc291cmNlLCAwLCBJZGVudGlmaWVyKCks
IHN0cmljdG5lc3MsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOworICAgIGlmICghcm9vdE5v
ZGUpCisgICAgICAgIHJldHVybiAwOworICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKHJvb3RO
b2RlLT5mZWF0dXJlcygpLCByb290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcm9vdE5v
ZGUtPmxpbmVObygpLCByb290Tm9kZS0+bGFzdExpbmUoKSk7CisKKyAgICBVbmxpbmtlZENvZGVC
bG9ja1R5cGUqIHVubGlua2VkQ29kZSA9IFVubGlua2VkQ29kZUJsb2NrVHlwZTo6Y3JlYXRlKCZn
bG9iYWxEYXRhLCBleGVjdXRhYmxlLT5leGVjdXRhYmxlSW5mbygpKTsKKyAgICB1bmxpbmtlZENv
ZGUtPnJlY29yZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJlcygpLCByb290Tm9kZS0+aGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSwgcm9vdE5vZGUtPmxpbmVObygpIC0gc291cmNlLmZpcnN0TGluZSgpLCBy
b290Tm9kZS0+bGFzdExpbmUoKSAtIHJvb3ROb2RlLT5saW5lTm8oKSk7CisgICAgT3duUHRyPEJ5
dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9y
KGdsb2JhbERhdGEsIHJvb3ROb2RlLmdldCgpLCB1bmxpbmtlZENvZGUsIGRlYnVnZ2VyTW9kZSwg
cHJvZmlsZXJNb2RlKSkpOworICAgIGVycm9yID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpOworICAg
IHJvb3ROb2RlLT5kZXN0cm95RGF0YSgpOworICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFyc2Vy
RXJyb3I6OkVycm9yTm9uZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoc3RvcmVJbkNh
Y2hlKSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IG1fcmFuZG9tR2VuZXJhdG9yLmdldFVpbnQz
MigpICUga01heENvZGVCbG9ja0VudHJpZXM7CisgICAgICAgIGlmIChtX2NhY2hlZENvZGVCbG9j
a3NbaW5kZXhdLnNlY29uZCkKKyAgICAgICAgICAgIG1fY2FjaGVkQ29kZUJsb2NrSW5kaWNlcy5y
ZW1vdmUobV9jYWNoZWRDb2RlQmxvY2tzW2luZGV4XS5maXJzdCk7CisgICAgICAgIG1fY2FjaGVk
Q29kZUJsb2NrSW5kaWNlcy5zZXQoa2V5LCBpbmRleCk7CisgICAgICAgIG1fY2FjaGVkQ29kZUJs
b2Nrc1tpbmRleF0uc2Vjb25kLnNldChnbG9iYWxEYXRhLCB1bmxpbmtlZENvZGUpOworICAgICAg
ICBtX2NhY2hlZENvZGVCbG9ja3NbaW5kZXhdLmZpcnN0ID0ga2V5OworICAgIH0KKworICAgIHJl
dHVybiB1bmxpbmtlZENvZGU7Cit9CisKK1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogQ29kZUNh
Y2hlOjpnZXRQcm9ncmFtQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvZ3Jh
bUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJz
ZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2Zp
bGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICByZXR1cm4g
Z2V0Q29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4oZ2xvYmFsRGF0YSwgZXhlY3V0
YWJsZSwgc291cmNlLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJy
b3IpOworfQorCitVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIENvZGVDYWNoZTo6Z2V0RXZhbENvZGVC
bG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxl
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNz
LCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQ
YXJzZXJFcnJvciYgZXJyb3IpCit7CisgICAgcmV0dXJuIGdldENvZGVCbG9jazxVbmxpbmtlZEV2
YWxDb2RlQmxvY2s+KGdsb2JhbERhdGEsIGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0bmVzcywg
ZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKK30KKworVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogQ29kZUNhY2hlOjpnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJz
ZXJFcnJvciYgZXJyb3IpCit7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkgPSBw
YXJzZTxGdW5jdGlvbkJvZHlOb2RlPigmZ2xvYmFsRGF0YSwgc291cmNlLCBleGVjdXRhYmxlLT5w
YXJhbWV0ZXJzKCksIGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+aXNJblN0cmljdENv
bnRleHQoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlRnVuY3Rpb25D
b2RlLCBlcnJvcik7CisKKyAgICBpZiAoIWJvZHkpIHsKKyAgICAgICAgQVNTRVJUKGVycm9yLm1f
dHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgaWYgKGV4ZWN1dGFibGUtPmZvcmNlVXNlc0FyZ3VtZW50cygpKQorICAgICAgICBi
b2R5LT5zZXRVc2VzQXJndW1lbnRzKCk7CisgICAgYm9keS0+ZmluaXNoUGFyc2luZyhleGVjdXRh
YmxlLT5wYXJhbWV0ZXJzKCksIGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+ZnVuY3Rp
b25OYW1lSXNJblNjb3BlVG9nZ2xlKCkpOworICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKGJv
ZHktPmZlYXR1cmVzKCksIGJvZHktPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGJvZHktPmxpbmVO
bygpLCBib2R5LT5sYXN0TGluZSgpKTsKKyAgICAKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJmdsb2JhbERh
dGEsIEZ1bmN0aW9uQ29kZSwgRXhlY3V0YWJsZUluZm8oYm9keS0+bmVlZHNBY3RpdmF0aW9uKCks
IGJvZHktPnVzZXNFdmFsKCksIGJvZHktPmlzU3RyaWN0TW9kZSgpLCBraW5kID09IENvZGVGb3JD
b25zdHJ1Y3QpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9w
dFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgYm9keS5nZXQoKSwgcmVzdWx0
LCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSkpKTsKKyAgICBlcnJvciA9IGdlbmVyYXRvci0+
Z2VuZXJhdGUoKTsKKyAgICBib2R5LT5kZXN0cm95RGF0YSgpOworICAgIGlmIChlcnJvci5tX3R5
cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogQ29kZUNhY2hlOjpn
ZXRGdW5jdGlvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJv
ZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQoreworICAgIHJldHVy
biBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKGdsb2JhbERhdGEsIGV4ZWN1dGFibGUsIHNvdXJj
ZSwga2luZCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKK30KKworQ29kZUNh
Y2hlOjpHbG9iYWxGdW5jdGlvbktleSBDb2RlQ2FjaGU6Om1ha2VHbG9iYWxGdW5jdGlvbktleShj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1
cm4gR2xvYmFsRnVuY3Rpb25LZXkoc291cmNlLnRvU3RyaW5nKCksIG5hbWUpOworfQorCitVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ29kZUNhY2hlOjpnZXRGdW5jdGlvbkV4ZWN1dGFibGVG
cm9tR2xvYmFsQ29kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyc2VyRXJyb3ImIGVycm9yKQorewor
ICAgIEdsb2JhbEZ1bmN0aW9uS2V5IGtleSA9IG1ha2VHbG9iYWxGdW5jdGlvbktleShzb3VyY2Us
IG5hbWUuc3RyaW5nKCkpOworICAgIEdsb2JhbEZ1bmN0aW9uSW5kaWNlc01hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9jYWNoZWRHbG9iYWxGdW5jdGlvbkluZGljZXMuZmluZChrZXkpOworICAgIGlm
IChyZXN1bHQgIT0gbV9jYWNoZWRHbG9iYWxGdW5jdGlvbkluZGljZXMuZW5kKCkpCisgICAgICAg
IHJldHVybiBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uc1tyZXN1bHQtPnZhbHVlXS5zZWNvbmQuZ2V0
KCk7CisKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW0gPSBwYXJzZTxQcm9ncmFtTm9k
ZT4oJmdsb2JhbERhdGEsIHNvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBKU1BhcnNlTm9ybWFsLCBK
U1BhcnNlUHJvZ3JhbUNvZGUsIGVycm9yKTsKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAg
QVNTRVJUKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIGFuIGlucHV0
IHN0cmluZyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIHNpbmdsZSBhbm9ueW1vdXMgZnVuY3Rpb24g
ZXhwcmVzc2lvbi4KKyAgICBTdGF0ZW1lbnROb2RlKiBleHByU3RhdGVtZW50ID0gcHJvZ3JhbS0+
c2luZ2xlU3RhdGVtZW50KCk7CisgICAgQVNTRVJUKGV4cHJTdGF0ZW1lbnQpOworICAgIEFTU0VS
VChleHByU3RhdGVtZW50LT5pc0V4cHJTdGF0ZW1lbnQoKSk7CisgICAgRXhwcmVzc2lvbk5vZGUq
IGZ1bmNFeHByID0gc3RhdGljX2Nhc3Q8RXhwclN0YXRlbWVudE5vZGUqPihleHByU3RhdGVtZW50
KS0+ZXhwcigpOworICAgIEFTU0VSVChmdW5jRXhwcik7CisgICAgQVNTRVJUKGZ1bmNFeHByLT5p
c0Z1bmNFeHByTm9kZSgpKTsKKyAgICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5ID0gc3RhdGljX2Nh
c3Q8RnVuY0V4cHJOb2RlKj4oZnVuY0V4cHIpLT5ib2R5KCk7CisgICAgQVNTRVJUKGJvZHkpOwor
ICAgIEFTU0VSVChib2R5LT5pZGVudCgpLmlzTnVsbCgpKTsKKworICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y3JlYXRlKCZnbG9iYWxEYXRhLCBzb3VyY2UsIGJvZHkpOworICAgIGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+bV9uYW1lVmFsdWUuc2V0KGdsb2JhbERhdGEsIGZ1bmN0aW9uRXhlY3V0YWJsZSwg
anNTdHJpbmcoJmdsb2JhbERhdGEsIG5hbWUuc3RyaW5nKCkpKTsKKworICAgIHNpemVfdCBpbmRl
eCA9IG1fcmFuZG9tR2VuZXJhdG9yLmdldFVpbnQzMigpICUga01heEdsb2JhbEZ1bmN0aW9uRW50
cmllczsKKyAgICBpZiAobV9jYWNoZWRHbG9iYWxGdW5jdGlvbnNbaW5kZXhdLnNlY29uZCkKKyAg
ICAgICAgbV9jYWNoZWRHbG9iYWxGdW5jdGlvbkluZGljZXMucmVtb3ZlKG1fY2FjaGVkR2xvYmFs
RnVuY3Rpb25zW2luZGV4XS5maXJzdCk7CisgICAgbV9jYWNoZWRHbG9iYWxGdW5jdGlvbkluZGlj
ZXMuc2V0KGtleSwgaW5kZXgpOworICAgIG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25zW2luZGV4XS5z
ZWNvbmQuc2V0KGdsb2JhbERhdGEsIGZ1bmN0aW9uRXhlY3V0YWJsZSk7CisgICAgbV9jYWNoZWRH
bG9iYWxGdW5jdGlvbnNbaW5kZXhdLmZpcnN0ID0ga2V5OworCisgICAgcmV0dXJuIGZ1bmN0aW9u
RXhlY3V0YWJsZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2Fj
aGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40ZDQ2MTcxODllYzRlNjg5NDc2MTcxMjFlMmE4NmYwOTNjOWZkYzc1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQ29kZUNhY2hlX2gKKyNkZWZpbmUgQ29kZUNhY2hlX2gKKwor
I2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKKyNpbmNsdWRlICJQYXJzZXJNb2Rl
cy5oIgorI2luY2x1ZGUgIlN0cm9uZy5oIgorI2luY2x1ZGUgIldlYWtSYW5kb20uaCIKKworI2lu
Y2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRXZhbEV4ZWN1dGFibGU7CitjbGFzcyBJZGVudGlm
aWVyOworY2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGU7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsK
K2NsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s7CitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jazsKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK3N0cnVjdCBQYXJzZXJFcnJv
cjsKK2NsYXNzIFNvdXJjZUNvZGU7CitjbGFzcyBTb3VyY2VQcm92aWRlcjsKKworY2xhc3MgQ29k
ZUNhY2hlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDb2RlQ2FjaGU+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb2RlQ2FjaGUpOyB9CisKKyAgICBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2sqIGdldFByb2dyYW1Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiwgUHJvZ3Jh
bUV4ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBEZWJ1
Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKyAgICBVbmxpbmtlZEV2YWxD
b2RlQmxvY2sqIGdldEV2YWxDb2RlQmxvY2soSlNHbG9iYWxEYXRhJiwgRXZhbEV4ZWN1dGFibGUq
LCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUsIFBy
b2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KiBnZXRGdW5jdGlvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBEZWJ1
Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKyAgICBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogZ2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoSlNHbG9i
YWxEYXRhJiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJv
ciYpOworICAgIH5Db2RlQ2FjaGUoKTsKKworICAgIGVudW0gQ29kZVR5cGUgeyBFdmFsVHlwZSwg
UHJvZ3JhbVR5cGUsIEZ1bmN0aW9uVHlwZSB9OworICAgIHR5cGVkZWYgc3RkOjpwYWlyPFN0cmlu
ZywgdW5zaWduZWQ+IENvZGVCbG9ja0tleTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q29kZUJsb2Nr
S2V5LCB1bnNpZ25lZD4gQ29kZUJsb2NrSW5kaWNlc01hcDsKKyAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxTdHJpbmcsIFN0cmluZz4gR2xvYmFsRnVuY3Rpb25LZXk7CisgICAgdHlwZWRlZiBIYXNoTWFw
PEdsb2JhbEZ1bmN0aW9uS2V5LCB1bnNpZ25lZD4gR2xvYmFsRnVuY3Rpb25JbmRpY2VzTWFwOwor
Citwcml2YXRlOgorICAgIENvZGVDYWNoZSgpOworCisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogZ2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKworICAgIHRl
bXBsYXRlIDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFibGVUeXBl
PiBpbmxpbmUgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZXRDb2RlQmxvY2soSlNHbG9iYWxEYXRh
JiwgRXhlY3V0YWJsZVR5cGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNz
LCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKyAgICBDb2RlQmxv
Y2tLZXkgbWFrZUNvZGVCbG9ja0tleShjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVR5cGUsIEpTUGFy
c2VyU3RyaWN0bmVzcyk7CisgICAgQ29kZUJsb2NrSW5kaWNlc01hcCBtX2NhY2hlZENvZGVCbG9j
a0luZGljZXM7CisgICAgR2xvYmFsRnVuY3Rpb25LZXkgbWFrZUdsb2JhbEZ1bmN0aW9uS2V5KGNv
bnN0IFNvdXJjZUNvZGUmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBHbG9iYWxGdW5jdGlvbkluZGlj
ZXNNYXAgbV9jYWNoZWRHbG9iYWxGdW5jdGlvbkluZGljZXM7CisKKyAgICBlbnVtIHsKKyAgICAg
ICAga01heENvZGVCbG9ja0VudHJpZXMgPSAxMDI0LAorICAgICAgICBrTWF4R2xvYmFsRnVuY3Rp
b25FbnRyaWVzID0gMTAyNAorICAgIH07CisKKyAgICBGaXhlZEFycmF5PHN0ZDo6cGFpcjxDb2Rl
QmxvY2tLZXksIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4gPiwga01heENvZGVCbG9ja0VudHJp
ZXM+IG1fY2FjaGVkQ29kZUJsb2NrczsKKyAgICBGaXhlZEFycmF5PHN0ZDo6cGFpcjxHbG9iYWxG
dW5jdGlvbktleSwgU3Ryb25nPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPiA+LCBrTWF4R2xv
YmFsRnVuY3Rpb25FbnRyaWVzPiBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uczsKKyAgICBXZWFrUmFu
ZG9tIG1fcmFuZG9tR2VuZXJhdG9yOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKaW5kZXggMGE0NTNlZWEwNTY2ODQwZmU5
OWZiYzUyZDUxZGYwYjIyOWM3ZmJkMy4uMjBhMmUyYWNiOTc0NjI0ZjY2NmM3ZGJkOWQwZmY0YTRk
N2E1ZmFlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5j
cHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFeGVj
dXRhYmxlLmgiCiAKKyNpbmNsdWRlICJCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiREZHRHJpdmVyLmgiCkBAIC0xMzMsMTYgKzEzNCwxNCBAQCB2b2lkIFByb2dyYW1FeGVj
dXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIAogY29uc3QgQ2xhc3NJbmZvIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6c19pbmZvID0geyAiRnVuY3Rpb25FeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1
dGFibGU6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShGdW5jdGlvbkV4ZWN1dGFi
bGUpIH07CiAKLUZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSkKLSAgICA6IFNjcmlwdEV4
ZWN1dGFibGUoZ2xvYmFsRGF0YS5mdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGds
b2JhbERhdGEsIG5vZGUtPnNvdXJjZSgpLCBub2RlLT5pc1N0cmljdE1vZGUoKSkKLSAgICAsIG1f
Zm9yY2VVc2VzQXJndW1lbnRzKG5vZGUtPnVzZXNBcmd1bWVudHMoKSkKLSAgICAsIG1fcGFyYW1l
dGVycyhub2RlLT5wYXJhbWV0ZXJzKCkpCi0gICAgLCBtX25hbWUobm9kZS0+aWRlbnQoKSkKLSAg
ICAsIG1faW5mZXJyZWROYW1lKG5vZGUtPmluZmVycmVkTmFtZSgpLmlzTnVsbCgpID8gZ2xvYmFs
RGF0YS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIgOiBub2RlLT5pbmZlcnJlZE5hbWUo
KSkKLSAgICAsIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlKG5vZGUtPmZ1bmN0aW9uTmFt
ZUlzSW5TY29wZVRvZ2dsZSgpKQorRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFi
bGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZp
cnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUpCisgICAgOiBTY3JpcHRFeGVjdXRhYmxlKGdsb2Jh
bERhdGEuZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBnbG9iYWxEYXRhLCBzb3Vy
Y2UsIHVubGlua2VkRXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSkKKyAgICAsIG1fdW5s
aW5rZWRFeGVjdXRhYmxlKGdsb2JhbERhdGEsIHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZSkKIHsK
LSAgICBtX2ZpcnN0TGluZSA9IG5vZGUtPmxpbmVObygpOwotICAgIG1fbGFzdExpbmUgPSBub2Rl
LT5sYXN0TGluZSgpOworICAgIEFTU0VSVCghc291cmNlLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQo
c291cmNlLmxlbmd0aCgpKTsKKyAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKKyAgICBtX2xh
c3RMaW5lID0gbGFzdExpbmU7CiB9CiAKIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKQEAgLTE5MSw3ICsxOTAsNiBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFi
bGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRD
bwogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJ
bmRleCk7CiAjZW5kaWYKLSAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwog
ICAgIApAQCAtMjAwLDI4ICsxOTgsMjEgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21w
aWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSklUQ28KICAgICAg
ICAgbmV3Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVC
bG9jaz4obV9ldmFsQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwogICAgICAgICBtX2V2YWxDb2RlQmxv
Y2sgPSBuZXdDb2RlQmxvY2sucmVsZWFzZSgpOwogICAgIH0gZWxzZSB7CisgICAgICAgIFVOVVNF
RF9QQVJBTShzY29wZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShnbG9iYWxEYXRhKTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAoIWxleGlj
YWxHbG9iYWxPYmplY3QtPmV2YWxFbmFibGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVFdmFsRXJyb3IoZXhlYywgbGV4aWNhbEdsb2JhbE9iamVjdC0+ZXZh
bERpc2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKLSAgICAgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFs
Tm9kZSA9IHBhcnNlPEV2YWxOb2RlPihnbG9iYWxEYXRhLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBt
X3NvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3Qg
OiBKU1BhcnNlTm9ybWFsLCBFdmFsTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rp
b25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dl
cigpLCBleGVjLCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKCFldmFsTm9kZSkgewotICAgICAg
ICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisKKyAgICAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9
IDA7CisgICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRFdmFsQ29kZSA9IGxl
eGljYWxHbG9iYWxPYmplY3QtPmNyZWF0ZUV2YWxDb2RlQmxvY2soZXhlYywgdGhpcywgJmV4Y2Vw
dGlvbik7CisgICAgICAgIGlmICghdW5saW5rZWRFdmFsQ29kZSkKICAgICAgICAgICAgIHJldHVy
biBleGNlcHRpb247Ci0gICAgICAgIH0KLSAgICAgICAgcmVjb3JkUGFyc2UoZXZhbE5vZGUtPmZl
YXR1cmVzKCksIGV2YWxOb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBldmFsTm9kZS0+bGlu
ZU5vKCksIGV2YWxOb2RlLT5sYXN0TGluZSgpKTsKLSAgICAgICAgCi0gICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIAor
CiAgICAgICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0gbV9ldmFsQ29k
ZUJsb2NrLnJlbGVhc2UoKTsKICAgICAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJv
dHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKLSAgICAgICAgbV9ldmFsQ29k
ZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBz
b3VyY2UoKS5wcm92aWRlcigpLCBzY29wZS0+bG9jYWxEZXB0aCgpLCBwcmV2aW91c0NvZGVCbG9j
ay5yZWxlYXNlKCkpKTsKLSAgICAgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0
b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlLmdldCgpLCBzY29wZSwg
bV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksICEh
bV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDog
Rmlyc3RDb21waWxhdGlvbikpKTsKLSAgICAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3It
PmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBzdGF0aWNfcG9p
bnRlcl9jYXN0PEV2YWxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0
aXZlKCkpOwotICAgICAgICAgICAgZXZhbE5vZGUtPmRlc3Ryb3lEYXRhKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBldmFsTm9k
ZS0+ZGVzdHJveURhdGEoKTsKKyAgICAgICAgbV91bmxpbmtlZEV2YWxDb2RlQmxvY2suc2V0KCpn
bG9iYWxEYXRhLCB0aGlzLCB1bmxpbmtlZEV2YWxDb2RlKTsKKyAgICAgICAgbV9ldmFsQ29kZUJs
b2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgdW5saW5rZWRFdmFsQ29kZSwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGUtPmxvY2FsRGVw
dGgoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7CiAgICAgICAgIG1fZXZhbENvZGVC
bG9jay0+Y29weVBvc3RQYXJzZURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKICAgICB9CiAKQEAgLTI1
Nyw2ICsyNDgsNyBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9ldmFs
Q29kZUJsb2NrKQogICAgICAgICB0aGlzT2JqZWN0LT5tX2V2YWxDb2RlQmxvY2stPnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3VubGlu
a2VkRXZhbENvZGVCbG9jayk7CiB9CiAKIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnVubGlua0NhbGxz
KCkKQEAgLTI3MiwxOSArMjY0LDIwIEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnVubGlua0NhbGxz
KCkKIHZvaWQgRXZhbEV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiB7CiAgICAgbV9ldmFsQ29kZUJs
b2NrLmNsZWFyKCk7CisgICAgbV91bmxpbmtlZEV2YWxDb2RlQmxvY2suY2xlYXIoKTsKICAgICBC
YXNlOjpjbGVhckNvZGUoKTsKIH0KIAogSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjaGVj
a1N5bnRheChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7
CisgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICBSZWZQdHI8UHJvZ3JhbU5v
ZGU+IHByb2dyYW1Ob2RlID0gcGFyc2U8UHJvZ3JhbU5vZGU+KGdsb2JhbERhdGEsIGxleGljYWxH
bG9iYWxPYmplY3QsIG1fc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIFBy
b2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNl
UHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNl
cHRpb24pOworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9n
cmFtTm9kZT4oZ2xvYmFsRGF0YSwgbV9zb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5v
cm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6
IEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOwogICAgIGlmIChwcm9ncmFtTm9kZSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIGV4Y2VwdGlv
bjsKKyAgICBBU1NFUlQoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOwor
ICAgIHJldHVybiBlcnJvci50b0Vycm9yT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291
cmNlKTsKIH0KIAogSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
CkBAIC0zMTAsMzggKzMwMywxNyBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBp
bGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSQogICAgIFNhbXBs
aW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlwZSkpOwog
ICAgIAogI2lmICFFTkFCTEUoSklUKQorICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBVTlVT
RURfUEFSQU0oaml0VHlwZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwogI2Vu
ZGlmCi0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICAKICAgICBp
ZiAoISFtX3Byb2dyYW1Db2RlQmxvY2spIHsKICAgICAgICAgT3duUHRyPFByb2dyYW1Db2RlQmxv
Y2s+IG5ld0NvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQcm9ncmFtQ29kZUJsb2NrKENvZGVCbG9j
azo6Q29weVBhcnNlZEJsb2NrLCAqbV9wcm9ncmFtQ29kZUJsb2NrKSk7CiAgICAgICAgIG5ld0Nv
ZGVCbG9jay0+c2V0QWx0ZXJuYXRpdmUoc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KG1f
cHJvZ3JhbUNvZGVCbG9jay5yZWxlYXNlKCkpKTsKICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2Nr
ID0gbmV3Q29kZUJsb2NrLnJlbGVhc2UoKTsKICAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8
UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gcGFyc2U8UHJvZ3JhbU5vZGU+KGdsb2JhbERhdGEs
IGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlLCAwLCBJZGVudGlmaWVyKCksIGlzU3RyaWN0
TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2RlOjppc0Z1
bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxl
eGljYWxHbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOwotICAgICAg
ICBpZiAoIXByb2dyYW1Ob2RlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKLSAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgICAgIH0KLSAgICAgICAgcmVjb3JkUGFy
c2UocHJvZ3JhbU5vZGUtPmZlYXR1cmVzKCksIHByb2dyYW1Ob2RlLT5oYXNDYXB0dXJlZFZhcmlh
YmxlcygpLCBwcm9ncmFtTm9kZS0+bGluZU5vKCksIHByb2dyYW1Ob2RlLT5sYXN0TGluZSgpKTsK
LQogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9i
amVjdCgpOwotICAgIAotICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9j
ayA9IG1fcHJvZ3JhbUNvZGVCbG9jay5yZWxlYXNlKCk7Ci0gICAgICAgIEFTU0VSVCgoaml0VHlw
ZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7Ci0g
ICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQcm9ncmFtQ29kZUJsb2Nr
KHRoaXMsIEdsb2JhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgcHJl
dmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7Ci0gICAgICAgIE93blB0cjxCeXRlY29kZUdlbmVy
YXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihwcm9ncmFtTm9k
ZS5nZXQoKSwgc2NvcGUsIGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29k
ZUJsb2NrLmdldCgpLCAhIW1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IE9wdGlt
aXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24pKSk7Ci0gICAgICAgIGlmICgoZXhj
ZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAgICAgICAgbV9wcm9ncmFt
Q29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJsb2NrPihtX3Byb2dy
YW1Db2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgIHByb2dyYW1O
b2RlLT5kZXN0cm95RGF0YSgpOwotICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKLSAgICAg
ICAgfQotCi0gICAgICAgIHByb2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOworICAgICAgICBtX3By
b2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBtX3Vu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92
aWRlcigpLCBtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpKSk7CiAgICAgICAgIG1fcHJvZ3Jh
bUNvZGVCbG9jay0+Y29weVBvc3RQYXJzZURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKICAgICB9CiAK
QEAgLTM3OCw2ICszNTAsNjcgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMo
KQogI2VuZGlmCiB9CiAKK2ludCBQcm9ncmFtRXhlY3V0YWJsZTo6YWRkR2xvYmFsVmFyKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFu
dE1vZGUgY29uc3RhbnRNb2RlLCBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQoreworICAgIC8v
IFRyeSB0byBzaGFyZSB0aGUgc3ltYm9sVGFibGUgaWYgcG9zc2libGUKKyAgICBTaGFyZWRTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCk7CisgICAg
VU5VU0VEX1BBUkFNKGZ1bmN0aW9uTW9kZSk7CisgICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUt
PnNpemUoKTsKKyAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCAoY29uc3RhbnRN
b2RlID09IElzQ29uc3RhbnQpID8gUmVhZE9ubHkgOiAwKTsKKyAgICBpZiAoZnVuY3Rpb25Nb2Rl
ID09IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUpCisgICAgICAgIG5ld0VudHJ5LmF0dGVtcHRUb1dh
dGNoKCk7CisgICAgU3ltYm9sVGFibGU6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZS0+
YWRkKGlkZW50LmltcGwoKSwgbmV3RW50cnkpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
IHsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOworICAgICAg
ICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKTsKKyAgICB9CisgICAg
cmV0dXJuIGluZGV4OworfQorCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRhbGl6
ZUdsb2JhbFByb3BlcnRpZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNTY29wZSogc2NvcGUpCit7CisgICAgQVNTRVJUKHNjb3BlKTsKKyAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOworICAgIEFT
U0VSVChnbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCgmZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCkgPT0gJmdsb2JhbERhdGEpOworCisgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CisgICAg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGUgPSBnbG9iYWxPYmplY3QtPmNy
ZWF0ZVByb2dyYW1Db2RlQmxvY2soY2FsbEZyYW1lLCB0aGlzLCAmZXhjZXB0aW9uKTsKKyAgICBp
ZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworCisgICAgbV91bmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2suc2V0KGdsb2JhbERhdGEsIHRoaXMsIHVubGlua2VkQ29kZSk7CisK
KyAgICBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplciBvcHRpbWl6ZXIoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0KTsKKworICAgIGNvbnN0IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6VmFyaWFi
bGVEZWNsYXRpb25zJiB2YXJpYWJsZURlY2xhcmF0aW9ucyA9IHVubGlua2VkQ29kZS0+dmFyaWFi
bGVEZWNsYXJhdGlvbnMoKTsKKyAgICBjb25zdCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OkZ1
bmN0aW9uRGVjbGF0aW9ucyYgZnVuY3Rpb25EZWNsYXJhdGlvbnMgPSB1bmxpbmtlZENvZGUtPmZ1
bmN0aW9uRGVjbGFyYXRpb25zKCk7CisKKyAgICBzaXplX3QgbmV3R2xvYmFscyA9IHZhcmlhYmxl
RGVjbGFyYXRpb25zLnNpemUoKSArIGZ1bmN0aW9uRGVjbGFyYXRpb25zLnNpemUoKTsKKyAgICBp
ZiAoIW5ld0dsb2JhbHMpCisgICAgICAgIHJldHVybiAwOworICAgIGdsb2JhbE9iamVjdC0+YWRk
UmVnaXN0ZXJzKG5ld0dsb2JhbHMpOworICAgIENhbGxGcmFtZSogZ2xvYmFsRXhlYyA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5j
dGlvbkRlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBib29sIHByb3BlcnR5RGlk
RXhpc3QgPSBnbG9iYWxPYmplY3QtPnJlbW92ZURpcmVjdChnbG9iYWxEYXRhLCBmdW5jdGlvbkRl
Y2xhcmF0aW9uc1tpXS5maXJzdCk7IC8vIE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9ucyBvdmVyd3Jp
dGUgZXhpc3RpbmcgcHJvcGVydGllcy4KKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlID0gZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0u
c2Vjb25kLmdldCgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNGdW5jdGlvbjo6Y3JlYXRl
KGdsb2JhbEV4ZWMsIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5saW5rKGdsb2JhbERhdGEs
IG1fc291cmNlLCBsaW5lTm8oKSwgMCksIHNjb3BlKTsKKyAgICAgICAgaW50IGluZGV4ID0gYWRk
R2xvYmFsVmFyKGdsb2JhbE9iamVjdCwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uZmlyc3QsIElz
VmFyaWFibGUsCisgICAgICAgICAgICAhcHJvcGVydHlEaWRFeGlzdCA/IElzRnVuY3Rpb25Ub1Nw
ZWNpYWxpemUgOiBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6YWJsZSk7CisgICAgICAgIGdsb2Jh
bE9iamVjdC0+cmVnaXN0ZXJBdChpbmRleCkuc2V0KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
dmFsdWUpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyaWFibGVEZWNs
YXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+aGFzUHJv
cGVydHkoZ2xvYmFsRXhlYywgdmFyaWFibGVEZWNsYXJhdGlvbnNbaV0uZmlyc3QpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGFkZEdsb2JhbFZhcihnbG9iYWxPYmplY3QsIHZhcmlh
YmxlRGVjbGFyYXRpb25zW2ldLmZpcnN0LAorICAgICAgICAgICAgKHZhcmlhYmxlRGVjbGFyYXRp
b25zW2ldLnNlY29uZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3Rh
bnQgOiBJc1ZhcmlhYmxlLAorICAgICAgICAgICAgTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFi
bGUpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFByb2dyYW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxl
Kj4oY2VsbCk7CkBAIC0zODUsNiArNDE4LDcgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIENPTVBJ
TEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAg
ICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
KyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2spOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2RlQmxvY2spCiAgICAgICAgIHRo
aXNPYmplY3QtPm1fcHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9
CkBAIC0zOTIsNiArNDI2LDcgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogdm9pZCBQcm9ncmFtRXhlY3V0
YWJsZTo6Y2xlYXJDb2RlKCkKIHsKICAgICBtX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAg
ICBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOwogICAgIEJhc2U6OmNsZWFyQ29k
ZSgpOwogfQogCkBAIC00MzgsMTIgKzQ3MywxMiBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTYwog
I2lmIEVOQUJMRShKSVQpCiBib29sIEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNh
bGwoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFw
cHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBKSVRDb2RlOjpib3R0
b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHJldHVy
biBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2Fs
bCwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBKSVRD
b2RlOjpib3R0b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwog
fQogCiBib29sIEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNvbnN0cnVjdChFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlh
dGUoZXhlYywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdCwg
bV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUsIEpJVENv
ZGU6OmJvdHRvbVRpZXJKSVQoKSwgVUlOVF9NQVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Cisg
ICAgcmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoZXhlYywgbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdCwgbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSwgVUlOVF9NQVgsIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9CiAjZW5kaWYKIApAQCAtNDUyLDQ5ICs0ODcsMzAgQEAg
RnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29kZUJsb2NrV2l0aEJ5dGVj
b2RlRm9yKENvZGVTcGVjaWFsaXphdGkKICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Io
a2luZCk7CiB9CiAKLVBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0
YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihKU1Njb3BlKiBzY29wZSwgQ29tcGlsYXRpb25LaW5k
IGNvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktp
bmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQorUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4g
RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKEpTU2NvcGUqIHNjb3BlLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqJiBleGNl
cHRpb24pCiB7CiAgICAgaWYgKCEhY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpCiAg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2soQ29kZUJsb2NrOjpD
b3B5UGFyc2VkQmxvY2ssICpjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKSkpOwotICAg
IAotICAgIGV4Y2VwdGlvbiA9IDA7CisKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBz
Y29wZS0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBz
Y29wZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkg
PSBwYXJzZTxGdW5jdGlvbkJvZHlOb2RlPigKLSAgICAgICAgZ2xvYmFsRGF0YSwKLSAgICAgICAg
Z2xvYmFsT2JqZWN0LAotICAgICAgICBtX3NvdXJjZSwKLSAgICAgICAgbV9wYXJhbWV0ZXJzLmdl
dCgpLAotICAgICAgICBuYW1lKCksCi0gICAgICAgIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0
cmljdCA6IEpTUGFyc2VOb3JtYWwsCi0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGU6OmlzRnVuY3Rp
b25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwKLSAgICAg
ICAgMCwKLSAgICAgICAgMCwKLSAgICAgICAgJmV4Y2VwdGlvbgotICAgICk7Ci0KLSAgICBpZiAo
IWJvZHkpIHsKLSAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgUGFyc2VyRXJyb3IgZXJy
b3I7CisgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzRGVi
dWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKKyAgICBQcm9maWxlck1vZGUgcHJv
ZmlsZXJNb2RlID0gZ2xvYmFsT2JqZWN0LT5oYXNQcm9maWxlcigpID8gUHJvZmlsZXJPbiA6IFBy
b2ZpbGVyT2ZmOworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJs
b2NrID0gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcigqZ2xvYmFsRGF0YSwgbV9z
b3VyY2UsIHNwZWNpYWxpemF0aW9uS2luZCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVy
cm9yKTsKKyAgICByZWNvcmRQYXJzZShtX3VubGlua2VkRXhlY3V0YWJsZS0+ZmVhdHVyZXMoKSwg
bV91bmxpbmtlZEV4ZWN1dGFibGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGxpbmVObygpLCBs
YXN0TGluZSgpKTsKKworICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spIHsKKyAgICAgICAgZXhj
ZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdChnbG9iYWxPYmplY3QsIG1fc291cmNlKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIGlmIChtX2ZvcmNlVXNlc0FyZ3VtZW50
cykKLSAgICAgICAgYm9keS0+c2V0VXNlc0FyZ3VtZW50cygpOwotICAgIGJvZHktPmZpbmlzaFBh
cnNpbmcobV9wYXJhbWV0ZXJzLCBtX25hbWUsIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xl
KTsKLSAgICByZWNvcmRQYXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpLCBib2R5LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7Ci0KLSAgICBPd25Q
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IHJlc3VsdDsKLSAgICBBU1NFUlQoKGNvbXBpbGF0aW9uS2lu
ZCA9PSBGaXJzdENvbXBpbGF0aW9uKSA9PSAhY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2lu
ZCkpOwotICAgIHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBG
dW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCku
c3RhcnRPZmZzZXQoKSwgc3BlY2lhbGl6YXRpb25LaW5kID09IENvZGVGb3JDb25zdHJ1Y3QpKTsK
LSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0
ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGUsIHJlc3VsdC0+c3ltYm9sVGFibGUoKSwg
cmVzdWx0LmdldCgpLCBjb21waWxhdGlvbktpbmQpKSk7Ci0gICAgZXhjZXB0aW9uID0gZ2VuZXJh
dG9yLT5nZW5lcmF0ZSgpOwotICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7Ci0gICAgaWYgKGV4Y2Vw
dGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBPd25QdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+IHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCB1bmxp
bmtlZENvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2Uo
KS5zdGFydE9mZnNldCgpKSk7CiAgICAgcmVzdWx0LT5jb3B5UG9zdFBhcnNlRGF0YUZyb20oY29k
ZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkuZ2V0KCkpOwogICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOwogfQogCisKIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVG
b3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSklUQ29kZTo6
SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAgIFNhbXBsaW5n
UmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlwZSkpOwpAQCAt
NTA3LDcgKzUyMyw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JD
YWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzCiAjZW5kaWYKICAgICBBU1NF
UlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhbV9jb2RlQmxvY2tG
b3JDYWxsKTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uOwotICAgIE93blB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwgISFtX2Nv
ZGVCbG9ja0ZvckNhbGwgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9u
LCBDb2RlRm9yQ2FsbCwgZXhjZXB0aW9uKTsKKyAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+
IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsIENvZGVGb3JDYWxsLCBl
eGNlcHRpb24pOwogICAgIGlmICghbmV3Q29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0
aW9uOwogCkBAIC01MTYsMTAgKzUzMiw5IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzCiAgICAg
CiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+bnVtUGFy
YW1ldGVycygpOwogICAgIEFTU0VSVChtX251bVBhcmFtZXRlcnNGb3JDYWxsKTsKLSAgICBtX3N5
bWJvbFRhYmxlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fY29kZUJsb2NrRm9yQ2Fs
bC0+c3ltYm9sVGFibGUoKSk7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJlcGFyZUZ1
bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9qaXRDb2RlRm9y
Q2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBqaXRU
eXBlLCBieXRlY29kZUluZGV4LCBDb2RlRm9yQ2FsbCkpCisgICAgaWYgKCFwcmVwYXJlRnVuY3Rp
b25Gb3JFeGVjdXRpb24oZXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxs
LCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgs
IENvZGVGb3JDYWxsKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIApAQCAtNTQ0LDcgKzU1
OSw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJ
bnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvCiAgICAgCiAgICAgQVNTRVJUKChqaXRUeXBl
ID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0
KTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uOwotICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9j
az4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwgISFtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24s
IENvZGVGb3JDb25zdHJ1Y3QsIGV4Y2VwdGlvbik7CisgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJsb2NrRm9yKHNjb3BlLCBDb2RlRm9yQ29u
c3RydWN0LCBleGNlcHRpb24pOwogICAgIGlmICghbmV3Q29kZUJsb2NrKQogICAgICAgICByZXR1
cm4gZXhjZXB0aW9uOwogCkBAIC01NTMsMTAgKzU2OCw5IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpT
U2NvCiAgICAgCiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QtPm51bVBhcmFtZXRlcnMoKTsKICAgICBBU1NFUlQobV9udW1QYXJhbWV0ZXJz
Rm9yQ29uc3RydWN0KTsKLSAgICBtX3N5bWJvbFRhYmxlLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpKTsKIAogI2lmIEVO
QUJMRShKSVQpCi0gICAgaWYgKCFwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oZXhlYywgbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdCwgbV9qaXRDb2RlRm9y
Q29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUsIGppdFR5cGUsIGJ5dGVjb2Rl
SW5kZXgsIENvZGVGb3JDb25zdHJ1Y3QpKQorICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhl
Y3V0aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1
Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBieXRlY29k
ZUluZGV4LCBDb2RlRm9yQ29uc3RydWN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIApA
QCAtNTkyLDEyICs2MDYsMTEgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBDT01QSUxFX0FTU0VS
VChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAgIFNjcmlw
dEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmFtZVZhbHVlKTsKLSAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29k
ZUJsb2NrRm9yQ2FsbCkKICAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV91bmxpbmtlZEV4ZWN1dGFibGUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKQpAQCAtNjA3LDEwICs2MjAsMTggQEAgdm9pZCBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCkKICAgICBjbGVhckNvZGUo
KTsKIH0KIAordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyVW5saW5rZWRDb2RlSWZOb3RD
b21waWxpbmcoKQoreworICAgIGlmIChpc0NvbXBpbGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNsZWFyQ29kZSgpOworfQorCiB2b2lkIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKIHsKICAgICBtX2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIo
KTsKICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5jbGVhcigpOworICAgIG1fdW5saW5rZWRF
eGVjdXRhYmxlLT5jbGVhckNvZGUoKTsKICAgICBCYXNlOjpjbGVhckNvZGUoKTsKIH0KIApAQCAt
NjMwLDM5ICs2NTEsMTkgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua0NhbGxzKCkK
IAogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2Rl
KGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4ZWNTdGF0ZSogZXhlYywgRGVidWdnZXIqIGRlYnVn
Z2VyLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQogewot
ICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9IHBhcnNlPFBy
b2dyYW1Ob2RlPigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBzb3Vy
Y2UsIDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rp
b25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgZGVidWdn
ZXIsIGV4ZWMsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIEFTU0VS
VCgqZXhjZXB0aW9uKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRG
dW5jdGlvbiA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZShuYW1l
LCBleGVjLCBkZWJ1Z2dlciwgc291cmNlLCBleGNlcHRpb24pOworICAgIGlmICghdW5saW5rZWRG
dW5jdGlvbikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBmdW5jdGlv
biBhc3N1bWVzIGFuIGlucHV0IHN0cmluZyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIHNpbmdsZSBh
bm9ueW1vdXMgZnVuY3Rpb24gZXhwcmVzc2lvbi4KLSAgICBTdGF0ZW1lbnROb2RlKiBleHByU3Rh
dGVtZW50ID0gcHJvZ3JhbS0+c2luZ2xlU3RhdGVtZW50KCk7Ci0gICAgQVNTRVJUKGV4cHJTdGF0
ZW1lbnQpOwotICAgIEFTU0VSVChleHByU3RhdGVtZW50LT5pc0V4cHJTdGF0ZW1lbnQoKSk7Ci0g
ICAgRXhwcmVzc2lvbk5vZGUqIGZ1bmNFeHByID0gc3RhdGljX2Nhc3Q8RXhwclN0YXRlbWVudE5v
ZGUqPihleHByU3RhdGVtZW50KS0+ZXhwcigpOwotICAgIEFTU0VSVChmdW5jRXhwcik7Ci0gICAg
QVNTRVJUKGZ1bmNFeHByLT5pc0Z1bmNFeHByTm9kZSgpKTsKLSAgICBGdW5jdGlvbkJvZHlOb2Rl
KiBib2R5ID0gc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4oZnVuY0V4cHIpLT5ib2R5KCk7Ci0g
ICAgQVNTRVJUKGJvZHkpOwotICAgIEFTU0VSVChib2R5LT5pZGVudCgpLmlzTnVsbCgpKTsKLQot
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gRnVuY3Rpb25FeGVj
dXRhYmxlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBib2R5KTsKLSAgICBmdW5jdGlvbkV4
ZWN1dGFibGUtPm1fbmFtZVZhbHVlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uRXhl
Y3V0YWJsZSwganNTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZS5zdHJpbmcoKSkpOwot
ICAgIHJldHVybiBmdW5jdGlvbkV4ZWN1dGFibGU7CisgICAgdW5zaWduZWQgZmlyc3RMaW5lID0g
c291cmNlLmZpcnN0TGluZSgpICsgdW5saW5rZWRGdW5jdGlvbi0+Zmlyc3RMaW5lT2Zmc2V0KCk7
CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSArIHVubGlu
a2VkRnVuY3Rpb24tPnN0YXJ0T2Zmc2V0KCk7CisgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoID0g
dW5saW5rZWRGdW5jdGlvbi0+c291cmNlTGVuZ3RoKCk7CisgICAgU291cmNlQ29kZSBmdW5jdGlv
blNvdXJjZShzb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgc291
cmNlTGVuZ3RoLCBmaXJzdExpbmUpOworICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uU291cmNlLCB1bmxpbmtlZEZ1bmN0aW9u
LCBmaXJzdExpbmUsIHVubGlua2VkRnVuY3Rpb24tPmxpbmVDb3VudCgpKTsKIH0KIAogU3RyaW5n
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJpbmcoKSBjb25zdAogewotICAgIEZ1bmN0aW9u
UGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICptX3BhcmFtZXRlcnM7Ci0gICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOwotICAgIGZvciAoc2l6ZV90IHBvcyA9IDA7IHBvcyA8IHBhcmFtZXRlcnMuc2l6
ZSgpOyArK3BvcykgewotICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChw
YXJhbWV0ZXJzW3Bvc10uc3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOworICAgIHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+cGFyYW1TdHJpbmcoKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCmluZGV4
IDc2YTUzN2RhMzI0YWFjOTIwM2NkODRkMDkxY2M4YzkzMmYyZmYwMzYuLjc0YjRhZGQ3NWMzMmYz
ODZkNDRjYWUyNDg4YjE5MjRkZTJjODBjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJMTEludENMb29w
LmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKKyNpbmNs
dWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMzY0LDkgKzM2NSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgU3Ry
aWN0TW9kZUZlYXR1cmU7IH0KIAogICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CisKKyAgICAg
ICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQog
ICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKKyAgICAg
ICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVy
ZWRWYXJpYWJsZXMsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9mZWF0dXJlcyA9IGZlYXR1cmVzOworICAgICAgICAgICAgbV9oYXNDYXB0dXJl
ZFZhcmlhYmxlcyA9IGhhc0NhcHR1cmVkVmFyaWFibGVzOworICAgICAgICAgICAgbV9maXJzdExp
bmUgPSBmaXJzdExpbmU7CisgICAgICAgICAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CisgICAg
ICAgIH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKQEAgLTM3OSwxNCArMzkwLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgcmVjb3JkUGFy
c2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQg
Zmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmVhdHVy
ZXMgPSBmZWF0dXJlczsKLSAgICAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXND
YXB0dXJlZFZhcmlhYmxlczsKLSAgICAgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwot
ICAgICAgICAgICAgbV9sYXN0TGluZSA9IGxhc3RMaW5lOwotICAgICAgICB9Ci0KICAgICAgICAg
U291cmNlQ29kZSBtX3NvdXJjZTsKICAgICAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CiAg
ICAgICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsKQEAgLTQ0OCw2ICs0NTEsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGNsZWFyQ29kZSgpOwogCisgICAgICAgIEV4
ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUlu
Zm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSk7
IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1
Y3R1cmVGbGFnczsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291
cmNlQ29kZSYsIGJvb2wpOwpAQCAtNDU2LDYgKzQ2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAK
ICAgICAgICAgT3duUHRyPEV2YWxDb2RlQmxvY2s+IG1fZXZhbENvZGVCbG9jazsKKyAgICAgICAg
V3JpdGVCYXJyaWVyPFVubGlua2VkRXZhbENvZGVCbG9jaz4gbV91bmxpbmtlZEV2YWxDb2RlQmxv
Y2s7CiAgICAgfTsKIAogICAgIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlIDogcHVibGljIFNjcmlw
dEV4ZWN1dGFibGUgewpAQCAtNDcwLDYgKzQ3Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgICAgIH0KIAorCisgICAgICAgIEpTT2JqZWN0
KiBpbml0YWxpemVHbG9iYWxQcm9wZXJ0aWVzKEpTR2xvYmFsRGF0YSYsIENhbGxGcmFtZSosIEpT
U2NvcGUqKTsKKwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAg
ICAgIEpTT2JqZWN0KiBjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCkBA
IC01MTUsMTMgKzUyNCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGNsZWFy
Q29kZSgpOwogCisgICAgICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3Qg
eyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlz
U3RyaWN0TW9kZSgpLCBmYWxzZSk7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBT
Y3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKKwogICAgICAgICBQcm9ncmFtRXhlY3V0
YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKKyAgICAgICAgZW51bSBDb25z
dGFudE1vZGUgeyBJc0NvbnN0YW50LCBJc1ZhcmlhYmxlIH07CisgICAgICAgIGVudW0gRnVuY3Rp
b25Nb2RlIHsgSXNGdW5jdGlvblRvU3BlY2lhbGl6ZSwgTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxp
emFibGUgfTsKKyAgICAgICAgaW50IGFkZEdsb2JhbFZhcihKU0dsb2JhbE9iamVjdCosIGNvbnN0
IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUsIEZ1bmN0aW9uTW9kZSk7CisKICAgICAgICAgSlNP
YmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklU
VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKICAgICAgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCisgICAgICAgIFdy
aXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrOwogICAgICAgICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbV9wcm9ncmFtQ29kZUJs
b2NrOwogICAgIH07CiAKQEAgLTUzMSw5ICs1NDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHR5cGVkZWYgU2NyaXB0RXhlY3V0YWJsZSBCYXNlOwogCi0gICAgICAg
IHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpCisgICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1
dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwg
dW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSkKICAgICAgICAgewotICAgICAg
ICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBGdW5jdGlvbkV4
ZWN1dGFibGUoZ2xvYmFsRGF0YSwgbm9kZSk7CisgICAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1
dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBz
b3VyY2UsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBsYXN0TGluZSk7CiAgICAgICAg
ICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAg
IHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CkBAIC01NTQsNyArNTcxLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2Nr
V2l0aEJ5dGVjb2RlRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICAKLSAgICAg
ICAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcHJvZHVjZUNvZGVCbG9ja0ZvcihKU1Nj
b3BlKiwgQ29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdCom
IGV4Y2VwdGlvbik7CisgICAgICAgIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1
Y2VDb2RlQmxvY2tGb3IoSlNTY29wZSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0
KiYgZXhjZXB0aW9uKTsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGwoRXhlY1N0
YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewpAQCAtNjc5LDE0ICs2OTYsMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tG
b3Ioa2luZCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaW5m
ZXJyZWROYW1lKCkgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0KLSAgICAgICAgSlNTdHJpbmcq
IG5hbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZVZhbHVlLmdldCgpOyB9Ci0gICAgICAg
IHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6
ZSgpOyB9IC8vIEV4Y2x1ZGluZyAndGhpcychCisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5h
bWUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+bmFtZSgpOyB9CisgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRh
YmxlLT5pbmZlcnJlZE5hbWUoKTsgfQorICAgICAgICBKU1N0cmluZyogbmFtZVZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWVWYWx1ZSgpOyB9CisgICAgICAg
IHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRh
YmxlLT5wYXJhbWV0ZXJDb3VudCgpOyB9IC8vIEV4Y2x1ZGluZyAndGhpcychCiAgICAgICAgIFN0
cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OwotICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5bWJvbFRhYmxlLmdldCgpOyB9CisgICAgICAg
IFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZShDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5zeW1ib2xUYWJsZShraW5k
KTsgfQogCiAgICAgICAgIHZvaWQgY2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKKyAgICAgICAg
dm9pZCBjbGVhclVubGlua2VkQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICAgICAgewpAQCAt
Njk5LDE1ICs3MTcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGNsZWFyQ29k
ZSgpOwogCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBtX25hbWVWYWx1ZS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywganNTdHJpbmcoJmdsb2JhbERhdGEsIG5hbWUoKS5zdHJpbmcoKSkpOwotICAg
ICAgICB9Ci0KICAgICBwcml2YXRlOgotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9i
YWxEYXRhJiwgRnVuY3Rpb25Cb2R5Tm9kZSopOworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUo
SlNHbG9iYWxEYXRhJiwgY29uc3QgU291cmNlQ29kZSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSk7CiAKICAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJ
VENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7CiAgICAg
ICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNT
Y29wZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01B
WCk7CkBAIC03MzIsMTYgKzc0Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwotICAgICAgICBi
b29sIG1fZm9yY2VVc2VzQXJndW1lbnRzOwotCi0gICAgICAgIFJlZlB0cjxGdW5jdGlvblBhcmFt
ZXRlcnM+IG1fcGFyYW1ldGVyczsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlPiBtX3VubGlua2VkRXhlY3V0YWJsZTsKICAgICAgICAgT3duUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgICAgIE93blB0cjxGdW5jdGlv
bkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7Ci0gICAgICAgIElkZW50aWZpZXIg
bV9uYW1lOwotICAgICAgICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOwotICAgICAgICBGdW5j
dGlvbk5hbWVJc0luU2NvcGVUb2dnbGUgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGU7Ci0g
ICAgICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9uYW1lVmFsdWU7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxTaGFyZWRTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKICAgICB9OwogCiAgICAg
aW5saW5lIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCmluZGV4IDA2NTc4
OGFlZTFiZTI1ZjMwZGY2NWJjOTlhMTMxMDU4ZWUxOWM2NTYuLmI3MWI2MDIxN2ZhNWU0YzMxNDQx
NGE5OTBlNjEwYzlmNTk0NmMxOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRpb25IYXJuZXNzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgaW5saW5lIGJvb2wgcHJl
cGFyZUZvckV4ZWN1dGlvbihFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxDb2RlQmxvY2tUeXBlPiYg
Y29kZUJsb2MKICAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZXhlYywgY29kZUJs
b2NrLCBqaXRDb2RlLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBKSVRDb2RlOjppc0Jhc2VsaW5l
Q29kZShqaXRUeXBlKSA/IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwogfQogCi1pbmxpbmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24o
RXhlY1N0YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJ
VENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNo
ZWNrLCBXcml0ZUJhcnJpZXI8U2hhcmVkU3ltYm9sVGFibGU+JiBzeW1ib2xUYWJsZSwgSklUQ29k
ZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCitpbmxpbmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24o
RXhlY1N0YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJ
VENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNo
ZWNrLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICNpZiBFTkFCTEUoTExJTlQpCiAgICAgaWYg
KEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKSB7CkBAIC02MSw3ICs2MSw3IEBAIGlu
bGluZSBib29sIHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihFeGVjU3RhdGUqIGV4ZWMsIE93
blB0cjxGdW5jdGlvbkNvZGVCbG9jCiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShraW5kKTsKICNl
bmRpZiAvLyBFTkFCTEUoTExJTlQpCi0gICAgcmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBw
cm9wcmlhdGUoZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IHN5bWJvbFRhYmxlLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBKSVRDb2RlOjppc0Jhc2VsaW5l
Q29kZShqaXRUeXBlKSA/IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4
ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBi
eXRlY29kZUluZGV4LCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSA/IEpJVENvbXBp
bGF0aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmgKaW5kZXggZmEyMjkxODEzZjliYWFiZTBkNmYwYzY5YmU2Nzc4NGNkNDM0ZDExZC4uZmM2MzM2
NDYzMTY4NThiZGY2OWRmZGY0MWIyYTcyMGI4YzAxNGViZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKQEAgLTQ2LDE1ICs0NiwxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9iamVjdCBC
YXNlOwogCi0gICAgICAgIHN0YXRpYyBKU0FjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uRXhlY3V0YWJsZSkKKyAgICAgICAgc3RhdGljIEpTQWN0aXZhdGlvbiogY3JlYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayog
Y29kZUJsb2NrKQogICAgICAgICB7CisgICAgICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgICAgICBKU0FjdGl2
YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKAogICAgICAgICAgICAgICAgIE5vdE51bGwsCiAgICAg
ICAgICAgICAgICAgYWxsb2NhdGVDZWxsPEpTQWN0aXZhdGlvbj4oCiAgICAgICAgICAgICAgICAg
ICAgIGdsb2JhbERhdGEuaGVhcCwKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblNpemUo
ZnVuY3Rpb25FeGVjdXRhYmxlLT5zeW1ib2xUYWJsZSgpKQorICAgICAgICAgICAgICAgICAgICBh
bGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkKICAgICAgICAgICAgICAgICApCi0gICAgICAgICAg
ICApIEpTQWN0aXZhdGlvbihnbG9iYWxEYXRhLCBjYWxsRnJhbWUsIGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+c3ltYm9sVGFibGUoKSk7CisgICAgICAgICAgICApIEpTQWN0aXZhdGlvbihnbG9iYWxEYXRh
LCBjYWxsRnJhbWUsIHN5bWJvbFRhYmxlKTsKICAgICAgICAgICAgIGFjdGl2YXRpb24tPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgcmV0dXJuIGFjdGl2YXRpb247CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwCmluZGV4IDEyYTI4ZTM0MWZiMDJhYjk4NzMyZmUyMGQ1ZTYzNTY1ODg0YTAxZWQuLjRkY2E1
YjBmNmZlN2FhMTVmNzBiODkxNGE2ZTM2MmE1OTBkZjk3NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogCiAjaW5jbHVkZSAiQXJnTGlzdC5oIgorI2luY2x1ZGUg
IkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAi
RGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgpA
QCAtNTcsNiArNTgsNyBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlN0
cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgorI2luY2x1
ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgpA
QCAtMTk2LDYgKzE5OCw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFU
eXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1faW5pdGlhbGl6
aW5nT2JqZWN0Q2xhc3MoMCkKICNlbmRpZgogICAgICwgbV9pbkRlZmluZU93blByb3BlcnR5KGZh
bHNlKQorICAgICwgbV9jb2RlQ2FjaGUoQ29kZUNhY2hlOjpjcmVhdGUoKSkKIHsKICAgICBpbnRl
cnByZXRlciA9IG5ldyBJbnRlcnByZXRlcigqdGhpcyk7CiAKQEAgLTIyMSw2ICsyMjQsMTEgQEAg
SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHNoYXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlLnNldCgq
dGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICAgICBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZUNo
YWluOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3BhcnNlQXJy
YXlWYWx1ZU1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB3aXRoU2NvcGVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOworICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKKyAgICB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKKyAgICB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBV
bmxpbmtlZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKKyAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogCiAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZXhp
c3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgKaW5kZXggZTk3YzBhMDE1ZDQ4NTQ0NTQ3MDc3NzNmMTcxNjZl
MjAwNmMwNDNkZS4uMGZmYWNjYjZhZDEyNWY3NjRmNGI1ZDViMTI5N2VlYzUzYTI2YTlkOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKQEAgLTYzLDYg
KzYzLDcgQEAgc3RydWN0IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTsKIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgQ29kZUJsb2NrOworICAgIGNsYXNzIENvZGVDYWNoZTsKICAgICBjbGFz
cyBDb21tb25JZGVudGlmaWVyczsKICAgICBjbGFzcyBIYW5kbGVTdGFjazsKICAgICBjbGFzcyBJ
ZGVudGlmaWVyVGFibGU7CkBAIC04MCw2ICs4MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBF
TkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgY2xhc3MgUmVnRXhwOwogI2VuZGlmCisgICAgY2xh
c3MgVW5saW5rZWRDb2RlQmxvY2s7CisgICAgY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwor
ICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworICAgIGNsYXNzIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jazsKIAogICAgIHN0cnVjdCBIYXNoVGFibGU7CiAgICAgc3RydWN0IElu
c3RydWN0aW9uOwpAQCAtMjIzLDYgKzIyOCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gc2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1cmU7CiAgICAgICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZUNoYWluU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiBzcGFyc2VBcnJheVZhbHVlTWFwU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiB3aXRoU2NvcGVTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKIAogICAg
ICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJUYWJsZTsKICAgICAgICAgQ29tbW9uSWRl
bnRpZmllcnMqIHByb3BlcnR5TmFtZXM7CkBAIC00MzYsNiArNDQ2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU0xvY2smIGFwaUxvY2soKSB7IHJldHVybiBtX2Fw
aUxvY2s7IH0KKyAgICAgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUoKSB7IHJldHVybiBtX2NvZGVD
YWNoZS5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTQ1Niw2ICs0NjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2luaXRpYWxpemluZ09iamVjdENsYXNzOwogI2VuZGlm
CiAgICAgICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5OworICAgICAgICBPd25QdHI8Q29k
ZUNhY2hlPiBtX2NvZGVDYWNoZTsKIAogICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2lu
dDhBcnJheURlc2NyaXB0b3I7CiAgICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50MTZB
cnJheURlc2NyaXB0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKaW5kZXggMDMyNTJmYWQxY2E3MTI4NGM2YTBjYzIwZGJlNjE3YWVjNzc4
N2JjYi4uYzQ2NmEyYjA0YTJkNjFlYTM4OWMxMWJhNzJmYjVjYmY5YzRiODBiYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMzYs
NiArMzYsNyBAQAogI2luY2x1ZGUgIkJvb2xlYW5Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkJv
b2xlYW5Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2Rl
Q2FjaGUuaCIKICNpbmNsdWRlICJEYXRlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJEYXRlUHJv
dG90eXBlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKQEAgLTU4MCw0ICs1ODEsNTggQEAgdm9p
ZCBzbG93VmFsaWRhdGVDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhnbG9iYWxPYmplY3QsICZKU0dsb2JhbE9iamVjdDo6c19p
bmZvKTsKIH0KIAorVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdDo6Y3Jl
YXRlUHJvZ3JhbUNvZGVCbG9jayhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUHJvZ3JhbUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQoreworICAgIFBhcnNlckVycm9y
IGVycm9yOworICAgIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzID0gZXhlY3V0YWJsZS0+
aXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbDsKKyAgICBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gaGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1
Z2dlck9mZjsKKyAgICBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlID0gaGFzUHJvZmlsZXIoKSA/
IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKKyAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sq
IHVubGlua2VkQ29kZSA9IGdsb2JhbERhdGEoKS5jb2RlQ2FjaGUoKS0+Z2V0UHJvZ3JhbUNvZGVC
bG9jayhnbG9iYWxEYXRhKCksIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJp
Y3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworCisgICAgaWYgKGhh
c0RlYnVnZ2VyKCkpCisgICAgICAgIGRlYnVnZ2VyKCktPnNvdXJjZVBhcnNlZChjYWxsRnJhbWUs
IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9t
ZXNzYWdlKTsKKworICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9u
ZSkgeworICAgICAgICAqZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdCh0aGlzLCBleGVj
dXRhYmxlLT5zb3VyY2UoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gdW5saW5rZWRDb2RlOworfQorCitVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIEpTR2xvYmFs
T2JqZWN0OjpjcmVhdGVFdmFsQ29kZUJsb2NrKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFdmFsRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCit7CisgICAgUGFyc2Vy
RXJyb3IgZXJyb3I7CisgICAgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MgPSBleGVjdXRh
YmxlLT5pc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsOworICAg
IERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBoYXNEZWJ1Z2dlcigpID8gRGVidWdnZXJPbiA6
IERlYnVnZ2VyT2ZmOworICAgIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUgPSBoYXNQcm9maWxl
cigpID8gUHJvZmlsZXJPbiA6IFByb2ZpbGVyT2ZmOworICAgIFVubGlua2VkRXZhbENvZGVCbG9j
ayogdW5saW5rZWRDb2RlID0gZ2xvYmFsRGF0YSgpLmNvZGVDYWNoZSgpLT5nZXRFdmFsQ29kZUJs
b2NrKGdsb2JhbERhdGEoKSwgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+c291cmNlKCksIHN0cmlj
dG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CisKKyAgICBpZiAoaGFz
RGVidWdnZXIoKSkKKyAgICAgICAgZGVidWdnZXIoKS0+c291cmNlUGFyc2VkKGNhbGxGcmFtZSwg
ZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXJyb3IubV9saW5lLCBlcnJvci5tX21l
c3NhZ2UpOworCisgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25l
KSB7CisgICAgICAgICpleGNlcHRpb24gPSBlcnJvci50b0Vycm9yT2JqZWN0KHRoaXMsIGV4ZWN1
dGFibGUtPnNvdXJjZSgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IHVubGlua2VkQ29kZTsKK30KKworVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIEpTR2xvYmFs
T2JqZWN0OjpjcmVhdGVGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgY29k
ZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCit7CisgICAgUGFyc2VyRXJyb3IgZXJyb3I7CisgICAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBnbG9iYWxEYXRhKCkuY29k
ZUNhY2hlKCktPmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKGdsb2JhbERhdGEo
KSwgbmFtZSwgY29kZSwgZXJyb3IpOworICAgIGlmIChoYXNEZWJ1Z2dlcigpKQorICAgICAgICBk
ZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoY2FsbEZyYW1lLCBjb2RlLnByb3ZpZGVyKCksIGVycm9y
Lm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKKworICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFy
c2VyRXJyb3I6OkVycm9yTm9uZSkgeworICAgICAgICAqZXhjZXB0aW9uID0gZXJyb3IudG9FcnJv
ck9iamVjdCh0aGlzLCBjb2RlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0
dXJuIGV4ZWN1dGFibGU7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCA2NWZkYTQ5ZDg0ODg0
ODIwMjIzMjY4ZjVhM2IxYTU1MDU1ZmU3ZDIyLi4zMjEyMzYzYWI0ZTcxM2FmYjRhMTY0Mjk5M2Mw
MzU2NDQ0N2ZmYWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgKQEAgLTQzLDYgKzQzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNz
IERlYnVnZ2VyOwogICAgIGNsYXNzIEVycm9yQ29uc3RydWN0b3I7CiAgICAgY2xhc3MgRXJyb3JQ
cm90b3R5cGU7CisgICAgY2xhc3MgRXZhbENvZGVCbG9jazsKKyAgICBjbGFzcyBFdmFsRXhlY3V0
YWJsZTsKKyAgICBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKKyAgICBjbGFzcyBGdW5jdGlvbkV4
ZWN1dGFibGU7CiAgICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5cGU7CiAgICAgY2xhc3MgR2V0dGVy
U2V0dGVyOwogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jazsKQEAgLTUwLDkgKzU0LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBjbGFz
cyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOwogICAgIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7Cisg
ICAgY2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGU7CiAgICAgY2xhc3MgUmVnRXhwQ29uc3RydWN0b3I7
CiAgICAgY2xhc3MgUmVnRXhwUHJvdG90eXBlOwotCisgICAgY2xhc3MgU291cmNlQ29kZTsKICAg
ICBzdHJ1Y3QgQWN0aXZhdGlvblN0YWNrTm9kZTsKICAgICBzdHJ1Y3QgSGFzaFRhYmxlOwogCkBA
IC0xODUsNiArMTkwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIEpTX0VY
UE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAorICAgICAgICBib29sIGhhc0RlYnVn
Z2VyKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlcjsgfQorICAgICAgICBib29sIGhhc1Byb2Zp
bGVyKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNQ
cm9maWxpbmcodGhpcyk7IH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwg
Y29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CiAKQEAgLTM2Niw2ICszNzQsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZG91YmxlIHdlYWtSYW5kb21OdW1iZXIoKSB7
IHJldHVybiBtX3dlYWtSYW5kb20uZ2V0KCk7IH0KICAgICAgICAgdW5zaWduZWQgd2Vha1JhbmRv
bUludGVnZXIoKSB7IHJldHVybiBtX3dlYWtSYW5kb20uZ2V0VWludDMyKCk7IH0KKworICAgICAg
ICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZVByb2dyYW1Db2RlQmxvY2soQ2FsbEZy
YW1lKiwgUHJvZ3JhbUV4ZWN1dGFibGUqLCBKU09iamVjdCoqIGV4Y2VwdGlvbik7CisgICAgICAg
IFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRlRXZhbENvZGVCbG9jayhDYWxsRnJhbWUqLCBF
dmFsRXhlY3V0YWJsZSosIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKKyAgICAgICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZUZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2Rl
KENhbGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmpl
Y3QqKiBleGNlcHRpb24pOworCiAgICAgcHJvdGVjdGVkOgogCiAgICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCmlu
ZGV4IDAzZjRhNzc5MDkwNzdlNmE2YzVkYWEzOGI1YjMyOWUwMDYxYzYyOGIuLjEwZDk4ZDJiZDI1
YTZkMWUyMjc0N2I3MDAzYTgxNjBkODMxYjMxNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZS5oCkBAIC00MSw2ICs0MSwxMSBAQCBlbnVtIEpTVHlwZSB7CiAgICAgUHJvZ3Jh
bUV4ZWN1dGFibGVUeXBlLAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsCiAKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsCisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
VHlwZSwKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2tUeXBlLAorICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2tUeXBlLAorCiAgICAgLy8gVGhlIE9iamVjdFR5cGUgdmFsdWUgbXVzdCBjb21l
IGJlZm9yZSBhbnkgSlNUeXBlIHRoYXQgaXMgYSBzdWJjbGFzcyBvZiBKU09iamVjdC4KICAgICBP
YmplY3RUeXBlLAogICAgIEZpbmFsT2JqZWN0VHlwZSwK
</data>
<flag name="review"
          id="187039"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="187048"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>