<?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>152629</bug_id>
          
          <creation_ts>2015-12-31 15:40:28 -0800</creation_ts>
          <short_desc>JSC Sampling Profiler: Come up with a (program counter =&gt; CodeOrigin) mapping</short_desc>
          <delta_ts>2016-02-18 04:00:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>151713</dependson>
    
    <dependson>154391</dependson>
          <blocked>153508</blocked>
    
    <blocked>153455</blocked>
    
    <blocked>153663</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1151795</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-12-31 15:40:28 -0800</bug_when>
    <thetext>Hopefully we can get away with always storing this by finding a nice way to compress this information. This shouldn&apos;t be too difficult.

After thinking about the uses for this mapping, we should only need to consult this mapping for
the top frame in a stack trace. All other parent frames should have the call site index in an
accurate state on the stack which means we&apos;ll just be able to consult that CallSiteIndex to
retrieve the CodeOrigin.

The top frame, though, might not have the CallSiteIndex be in an accurate state.
This could happen for a number of reasons, for example: let&apos;s say we make a call
from inside an inlined function, but then pause the process after that call took
place, and before any other calls are made, and the PC is now at code that isn&apos;t from the
same inlined function. The CallSiteIndex will still show us executing in the inlined 
function, which isn&apos;t correct. There are also parts of the function, in the prologue for example,
where we could just have garbage bits for the CallSiteIndex. Having a PC=&gt;CodeOrigin map would solve
these problems. I&apos;m sure there are more situations it will help with, too.
There will probably be times, though, where the PC=&gt;CodeOrigin map won&apos;t help us, but we&apos;re still
able to take a valid stack trace, and in those situations, we will probably have to forfeit
getting high fidelity location information and settle for just knowing which function
we&apos;re executing inside.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156794</commentid>
    <comment_count>1</comment_count>
      <attachid>269310</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-19 16:57:42 -0800</bug_when>
    <thetext>Created attachment 269310
WIP

it&apos;s a start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157504</commentid>
    <comment_count>2</comment_count>
      <attachid>269522</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-21 17:01:17 -0800</bug_when>
    <thetext>Created attachment 269522
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157539</commentid>
    <comment_count>3</comment_count>
      <attachid>269532</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-21 18:27:18 -0800</bug_when>
    <thetext>Created attachment 269532
WIP

now accounting for inlined frames at the top of the stack in a stack traces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158600</commentid>
    <comment_count>4</comment_count>
      <attachid>269814</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-25 16:40:49 -0800</bug_when>
    <thetext>Created attachment 269814
WIP

I think it&apos;s almost done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158662</commentid>
    <comment_count>5</comment_count>
      <attachid>269839</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-25 18:55:46 -0800</bug_when>
    <thetext>Created attachment 269839
more cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158675</commentid>
    <comment_count>6</comment_count>
      <attachid>269843</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-25 19:18:56 -0800</bug_when>
    <thetext>Created attachment 269843
more cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158977</commentid>
    <comment_count>7</comment_count>
      <attachid>269911</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 13:35:08 -0800</bug_when>
    <thetext>Created attachment 269911
make findPC find more PCs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158982</commentid>
    <comment_count>8</comment_count>
      <attachid>269913</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 13:50:56 -0800</bug_when>
    <thetext>Created attachment 269913
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158983</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-26 13:52:19 -0800</bug_when>
    <thetext>Attachment 269913 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/SamplingProfiler.cpp:331:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/SamplingProfiler.cpp:344:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3PCToOriginMap.h:33:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3PCToOriginMap.h:61:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/JIT.h:50:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:54:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:178:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MachineStackMarker.cpp:27:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:126:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:155:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:159:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:175:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:267:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 14 in 43 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>1159011</commentid>
    <comment_count>10</comment_count>
      <attachid>269921</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 14:24:30 -0800</bug_when>
    <thetext>Created attachment 269921
patch

hopefully fix builds.
fix some style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159016</commentid>
    <comment_count>11</comment_count>
      <attachid>269924</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 14:33:40 -0800</bug_when>
    <thetext>Created attachment 269924
patch

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159017</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-26 14:35:42 -0800</bug_when>
    <thetext>Attachment 269924 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/SamplingProfiler.cpp:331:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/SamplingProfiler.cpp:344:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3PCToOriginMap.h:61:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:176:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:126:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:155:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:159:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:175:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:267:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 9 in 46 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>1159029</commentid>
    <comment_count>13</comment_count>
      <attachid>269924</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 14:49:58 -0800</bug_when>
    <thetext>Comment on attachment 269924
patch

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

&gt; Source/JavaScriptCore/inspector/JSGlobalObjectScriptDebugServer.cpp:46
&gt; +    m_globalObject.vm().setShouldBuildPCToCodeOriginMapping();

I&apos;m moving this into Debugger::attach().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159030</commentid>
    <comment_count>14</comment_count>
      <attachid>269924</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 14:52:37 -0800</bug_when>
    <thetext>Comment on attachment 269924
patch

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

&gt; Source/JavaScriptCore/b3/B3PCToOriginMap.h:58
&gt; +            if (m_ranges.last().origin == origin || !origin)
&gt; +                return;

this should be removed and is locally</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159034</commentid>
    <comment_count>15</comment_count>
      <attachid>269924</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 14:59:37 -0800</bug_when>
    <thetext>Comment on attachment 269924
patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:4290
&gt; +#if ENABLE(JIT)

I&apos;m going to make PCToCodeOrigin map only build under ENABLE(JIT)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159094</commentid>
    <comment_count>16</comment_count>
      <attachid>269947</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 16:28:41 -0800</bug_when>
    <thetext>Created attachment 269947
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159097</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-26 16:31:31 -0800</bug_when>
    <thetext>Attachment 269947 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/SamplingProfiler.cpp:331:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/SamplingProfiler.cpp:344:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3PCToOriginMap.h:59:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:176:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:128:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:157:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:161:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:177:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:269:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 9 in 46 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>1159550</commentid>
    <comment_count>18</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-01-27 17:48:21 -0800</bug_when>
    <thetext>I haven&apos;t looked at the patch fully but what about adding an option that always turns this on? I think it might be useful for debugging. Obviously, the option can come in a later patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159560</commentid>
    <comment_count>19</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-27 18:00:39 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; I haven&apos;t looked at the patch fully but what about adding an option that
&gt; always turns this on? I think it might be useful for debugging. Obviously,
&gt; the option can come in a later patch.

Yeah sure I&apos;ll add one.
It&apos;d be even better if that option created a global table
so you could always go from:
 (VM, PC) =&gt; CodeBlock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160021</commentid>
    <comment_count>20</comment_count>
      <attachid>269947</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-28 21:53:27 -0800</bug_when>
    <thetext>Comment on attachment 269947
patch

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

&gt; Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:81
&gt; +class DeltaCompressionBuilder {
&gt; +public:
&gt; +    DeltaCompressionBuilder(size_t maxSize)
&gt; +        : m_offset(0)
&gt; +        , m_maxSize(maxSize)
&gt; +    {
&gt; +        m_buffer = static_cast&lt;uint8_t*&gt;(fastMalloc(m_maxSize));
&gt; +    }
&gt; +
&gt; +    template &lt;typename T&gt;
&gt; +    void write(T item)
&gt; +    {
&gt; +        RELEASE_ASSERT(m_offset + sizeof(T) &lt;= m_maxSize);
&gt; +        *bitwise_cast&lt;T*&gt;(m_buffer + m_offset) = item;
&gt; +        m_offset += sizeof(T);
&gt; +    }
&gt; +
&gt; +    uint8_t* m_buffer; 
&gt; +    size_t m_offset;
&gt; +    size_t m_maxSize;
&gt; +};
&gt; +
&gt; +class DeltaCompresseionReader {
&gt; +public:
&gt; +    DeltaCompresseionReader(uint8_t* buffer, size_t size)
&gt; +        : m_buffer(buffer)
&gt; +        , m_size(size)
&gt; +        , m_offset(0)
&gt; +    { }
&gt; +
&gt; +    template &lt;typename T&gt;
&gt; +    T read()
&gt; +    {
&gt; +        RELEASE_ASSERT(m_offset + sizeof(T) &lt;= m_size);
&gt; +        T result = *bitwise_cast&lt;T*&gt;(m_buffer + m_offset);
&gt; +        m_offset += sizeof(T);
&gt; +        return result;
&gt; +    }
&gt; +
&gt; +private:
&gt; +    uint8_t* m_buffer;
&gt; +    size_t m_size;
&gt; +    size_t m_offset;

After speaking w/ Andreas today, I realize that this
probably won&apos;t play nice w/ ARM alignment requirements.
I&apos;m going to make the necessary changes to make this work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160238</commentid>
    <comment_count>21</comment_count>
      <attachid>270246</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-29 13:09:29 -0800</bug_when>
    <thetext>Created attachment 270246
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160262</commentid>
    <comment_count>22</comment_count>
      <attachid>270253</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-29 14:08:09 -0800</bug_when>
    <thetext>Created attachment 270253
patch

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160263</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-29 14:10:18 -0800</bug_when>
    <thetext>Attachment 270253 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/SamplingProfiler.cpp:331:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/SamplingProfiler.cpp:344:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3PCToOriginMap.h:59:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:176:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:138:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:167:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:187:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PCToCodeOriginMap.cpp:279:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 9 in 47 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>1160268</commentid>
    <comment_count>24</comment_count>
      <attachid>270253</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-29 14:17:56 -0800</bug_when>
    <thetext>Comment on attachment 270253
patch

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

&gt; Source/JavaScriptCore/b3/air/AirGenerate.cpp:239
&gt; +    pcToOriginMap.appendItem(jit.label(), Origin());

Can you add a FIXME and file a bug about making late paths have an origin?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160341</commentid>
    <comment_count>25</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-29 17:11:39 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/195865</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269310</attachid>
            <date>2016-01-19 16:57:42 -0800</date>
            <delta_ts>2016-01-21 17:01:17 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>27735</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUzMDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI4Niw2ICsxMjg2LDggQEAKIAkJNzBFQ0E2MDcxQUZE
QkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRl
bXBsYXRlUmVnaXN0cnkuY3BwICovOyB9OwogCQk3MEVDQTYwODFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzBFQ0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MEVDQTYw
OTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVP
cmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmNwcCAqLzsg
fTsKKwkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0ODFDNEVF
RDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyog
R2V0UHV0SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTdFMDdBOTFCOEZDRkI5MDA4
NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTcxQjhGQ0ZCOTAwODQwMEJBIC8q
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLzsgfTsKIAkJNzk3RTA3QUExQjhGQ0ZC
OTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzQ2NCw2ICszNDY2LDggQEAKIAkJNzBFQ0E2MDIx
QUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lz
dHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0Nv
ZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1
MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdB
NzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4
NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUwOTgsNiArNTEwMiw4IEBACiAJCQkJMEZDNzEyRTExN0NEODc4
RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJ
CQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAogCQkJ
CUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAorCQkJCTc5
MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi8sCisJCQkJ
NzkyQ0IzNDgxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggKi8sCiAJCQkJ
MEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNw
cCAqLywKIAkJCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAq
LywKQEAgLTY5NzQsNiArNjk4MCw3IEBACiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzczMDkzMUMwRDY3RUUwMDA1MkJGQSAv
KiBBaXJVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYy
QTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzkyQ0Iz
NEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzlENUNENUIxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzMxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dl
ck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTA5LDYgKzg5MTYsNyBAQAogCQkJCTBGOEYx
NDM1MUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjJDRDVCMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zm
c2V0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMg
LyogREZHTmF0dXJhbExvb3BzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5MkNCMzQ5MUM0RUVE
NUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkIzODc4RjFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxh
Z3MuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUy
LDcgQEAKICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJMb3dMZXZlbElu
dGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2Rl
T3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJQ
cm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUmVkdWNlV2hpdGVzcGFjZS5oIgpAQCAtNDI3
NSw0ICs0Mjc2LDI4IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkK
ICAgICB9CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVu
aXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYgbWFwKSAKK3sgCisgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcCA9IFdURk1vdmUobWFwKTsKK30KKworT3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJs
b2NrOjpmaW5kUEModm9pZCogcGMpCit7CisgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApIHsK
KyAgICAgICAgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX3BjVG9Db2Rl
T3JpZ2luTWFwLT5maW5kKHBjKSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAg
IH0KKyNpZiBFTkFCTEUoSklUKQorICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRl
cmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViID0gKml0ZXI7CisgICAgICAgIGlmIChzdHViLT5j
b250YWluc1BDKHBjKSkgeworICAgICAgICAgICAgZGF0YUxvZygiRm91bmQgaW4gc3R1YjogIiwg
aW5mZXJyZWROYW1lKCksICJcbiIpOworICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVP
cmlnaW4+KHN0dWItPmNvZGVPcmlnaW4pOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8vIEVO
QUJMRShKSVQpCisKKyAgICByZXR1cm4gTnVsbG9wdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBUeXBlTG9jYXRpb247
CiBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiAK
IGVudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsgRG9udENvdW50UmVvcHRpbWl6YXRpb24sIENvdW50
UmVvcHRpbWl6YXRpb24gfTsKIApAQCAtOTI3LDYgKzkyOCwxMCBAQCBwdWJsaWM6CiAKICAgICBD
YWxsU2l0ZUluZGV4IG5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUlu
ZGV4IG9yaWdpbmFsQ2FsbFNpdGUpOwogCisgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChz
dGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOworICAgIFBDVG9Db2RlT3JpZ2lu
TWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fcGNUb0NvZGVPcmlnaW5N
YXAuZ2V0KCk7IH0KKyAgICBPcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwor
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAgICAg
dm9pZCBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7CkBAIC0xMDk3LDYgKzExMDIs
NyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShKSVQpCiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwg
bV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZTsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1Rv
Q29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKIAogICAgIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOwogICAgIFdlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDE5NTMw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNiArMzI0LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFi
b3V0VG9EaWUoKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAg
ICBib29sIGNvbnRhaW5zUEModm9pZCogcGMpIGNvbnN0CisgICAgeyAKKyAgICAgICAgaWYgKCFt
X3N0dWJSb3V0aW5lKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHVpbnRw
dHJfdCBwY0FzSW50ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocGMpOworICAgICAgICByZXR1
cm4gbV9zdHViUm91dGluZS0+c3RhcnRBZGRyZXNzKCkgPD0gcGNBc0ludCAmJiBwY0FzSW50IDw9
IG1fc3R1YlJvdXRpbmUtPmVuZEFkZHJlc3MoKTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE5NTMwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsMTMgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbgogICAgIHJlc2V0KGNvZGVCbG9jayk7CiAgICAgcmVzZXRCeUdDID0g
dHJ1ZTsKIH0KKworYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y29udGFpbnNQQyh2b2lkKiBwYykg
Y29uc3QKK3sKKyAgICBpZiAoY2FjaGVUeXBlICE9IENhY2hlVHlwZTo6U3R1YikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiB1LnN0dWItPmNvbnRhaW5zUEMocGMpOworfQogI2Vu
ZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE5NTMwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDggQEAgcHVibGljOgogICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbjsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXg7CiAKKyAgICBib29sIGNv
bnRhaW5zUEModm9pZCogcGMpIGNvbnN0OworCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3Qg
ewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1
Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNSw2ICszMDUsOCBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgICAgICBtX2NvZGVCbG9j
ay0+YXBwZW5kRXhjZXB0aW9uSGFuZGxlcihuZXdFeGNlcHRpb25IYW5kbGVyKTsKICAgICAgICAg
fQogICAgIH0KKworICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1h
a2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciwg
bGlua0J1ZmZlcikpOwogfQogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE5NTMw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
LmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJUZW1wUmVnaXN0
ZXJTZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMTgsNiArMTE5LDcgQEAgcHVibGljOgog
ICAgIC8vIE1ldGhvZHMgdG8gc2V0IGxhYmVscyBmb3IgdGhlIGRpc2Fzc2VtYmxlci4KICAgICB2
b2lkIHNldFN0YXJ0T2ZDb2RlKCkKICAgICB7CisgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCksIENvZGVPcmlnaW4o
KSk7CiAgICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2RlKGxhYmVsSWdub3Jp
bmdXYXRjaHBvaW50cygpKTsKQEAgLTEzOSw2ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBzZXRFbmRPZk1haW5QYXRoKCkKICAgICB7CisgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCksIENvZGVPcmln
aW4oKSk7IC8vIEZJWE1FOiBXZSB3YW50IHRvIGhhbmRsZSBzbG93IHBhdGggZ2VuZXJhdG9ycywg
ZXRjLgogICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZk1haW5QYXRoKGxhYmVsSWdu
b3JpbmdXYXRjaHBvaW50cygpKTsKQEAgLTE0Niw2ICsxNDksNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCBzZXRFbmRPZkNvZGUoKQogICAgIHsKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgQ29kZU9yaWdp
bigpKTsgLy8gRklYTUU6IFdlIHdhbnQgdG8gaGFuZGxlIHNsb3cgcGF0aCBnZW5lcmF0b3JzLCBl
dGMuCiAgICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbElnbm9yaW5n
V2F0Y2hwb2ludHMoKSk7CkBAIC0yNjUsNiArMjY5LDggQEAgcHVibGljOgogCiAgICAgQ2FsbFNp
dGVJbmRleCByZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0
SWZOZWVkZWQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVkIGV2ZW50U3RyZWFtSW5kZXgpOwog
CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIo
KSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsgfQorCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyOwogICAgIApAQCAtMzI4LDYgKzMz
NCw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbCBtX2NhbGxBcml0eUZpeHVwOwogICAgIExhYmVsIG1f
YXJpdHlDaGVjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3BlY3VsYXRpdmVKSVQ+IG1fc3BlY3Vs
YXRpdmU7CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE5
NTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTAxLDkgKzE1MDEsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKICAgICAg
ICAgfQogCisKKwogICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5k
bGluZygpICYmIG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSkgIT0gRG9lc05v
dEV4aXQpCiAgICAgICAgICAgICBtX2ppdC5qaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsK
IAorICAgICAgICBtX2ppdC5wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKS5hcHBlbmRJdGVtKG1f
aml0LmxhYmVsKCksIG1fb3JpZ2luLnNlbWFudGljKTsKKwogICAgICAgICBjb21waWxlKG1fY3Vy
cmVudE5vZGUpOwogICAgICAgICAKICAgICAgICAgaWYgKGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgo
bV9jdXJyZW50Tm9kZS0+b3AoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAj
aW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9m
aWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgogI2luY2x1ZGUgIlNhbXBs
aW5nVG9vbC5oIgpAQCAtMTQyLDcgKzE0Myw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50
ZXJPZmZzZXQoKQogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAotdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFp
blBhc3MoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIp
CiB7CiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENv
dW50U2FuZSgpOwpAQCAtMTU4LDYgKzE1OSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3Ry
dWN0aW9uc0JlZ2luICsgbV9ieXRlY29kZU9mZnNldDsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX2ludGVycHJldGVyLT5pc09wY29kZShjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2Rl
KSwgInByaXZhdGVDb21waWxlTWFpblBhc3MgZ29uZSBiYWQgQCAlZCIsIG1fYnl0ZWNvZGVPZmZz
ZXQpOwogCisgICAgICAgIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCkpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9T
QU1QTElORykKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgPiAwKSAvLyBBdm9pZCB0aGUg
b3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCiAgICAgICAgICAgICBzYW1wbGVJ
bnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMzQ1LDcgKzM0OCw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCkKICAgICBtX2ptcFRhYmxlLmNsZWFyKCk7CiB9
CiAKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCit2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIpCiB7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAKQEAgLTM2NSw2ICszNjgsOCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIGZvciAoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBt
X3Nsb3dDYXNlcy5lbmQoKTspIHsKICAgICAgICAgbV9ieXRlY29kZU9mZnNldCA9IGl0ZXItPnRv
OwogCisgICAgICAgIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCks
IENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCkpOworCiAgICAgICAgIHVuc2lnbmVkIGZpcnN0
VG8gPSBtX2J5dGVjb2RlT2Zmc2V0OwogCiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNCZWdpbiArIG1fYnl0ZWNvZGVPZmZzZXQ7CkBAIC01MTks
NiArNTI0LDkgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAg
ICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CiAgICAgfQogICAgIAorICAgIFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlciBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CisgICAgcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbigpKTsKKwogICAgIGlm
IChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2Rl
KGxhYmVsKCkpOwogCkBAIC01NjUsOSArNTczLDkgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpw
cml2YXRlQ29tcGlsZShKSQogICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKICAgICBlbWl0TWF0
ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgcHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpOworICAgIHByaXZhdGVDb21waWxlTWFpblBhc3MocGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
KTsKICAgICBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7Ci0gICAgcHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKTsKKyAgICBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyhwY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIpOwogICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3Nl
bWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CkBAIC03MDgsNiArNzE2LDggQEAgQ29t
cGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdldCgpLCBwYXRjaEJ1ZmZlcik7
CiAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9j
b21waWxhdGlvbik7CiAgICAgfQorCisgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2lu
TWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KHBjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlciwgcGF0Y2hCdWZmZXIpKTsgLy8gRklYTUU6IGdldCB0aGUgZW5kIG9mIHRoZSBjb2Rl
IHJlZ2lvbiBhcyBDb2RlT3JpZ2luKCkuCiAgICAgCiAgICAgQ29kZVJlZiByZXN1bHQgPSBGSU5B
TElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwKQEAgLTcxNiw3ICs3MjYsNyBAQCBDb21w
aWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgbV92bS0+bWFjaGluZUNv
ZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULmFkZCgKICAgICAgICAgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJs
ZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSkpOwotICAgIAorCiAgICAgbV9j
b2RlQmxvY2stPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAgICAgbV9jb2Rl
QmxvY2stPnNldEpJVENvZGUoCiAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHJl
c3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkJhc2VsaW5lSklUKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xhc3MgSlNTdGFjazsKICAgICBjbGFz
cyBNYXJrZWRBbGxvY2F0b3I7CisgICAgY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwog
ICAgIGNsYXNzIFJlZ2lzdGVyOwogICAgIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogICAgIGNsYXNz
IFN0cnVjdHVyZVN0dWJJbmZvOwpAQCAtMjU4LDkgKzI1OSw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHByaXZhdGU6CiAgICAgICAgIEpJVChWTSosIENvZGVCbG9jayogPSAwKTsKIAotICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKKyAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZU1haW5QYXNzKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYpOwogICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlTGlua1Bhc3MoKTsKLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpOworICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlciYpOwogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGls
ZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2Rl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5N
YXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29k
ZU9yaWdpbk1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKworI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjph
cHBlbmRJdGVtKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQoreworICAgIGlmIChtX2NvZGVSYW5nZXMuc2l6ZSgpKSB7CisgICAgICAgIG1fY29kZVJh
bmdlcy5sYXN0KCkuZW5kID0gbGFiZWw7CisgICAgICAgIGlmIChtX2NvZGVSYW5nZXMubGFzdCgp
LmNvZGVPcmlnaW4gPT0gY29kZU9yaWdpbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX2NvZGVSYW5nZXMuYXBwZW5kKENvZGVSYW5nZXtsYWJlbCwgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsKCksIGNvZGVPcmlnaW59KTsKK30KKworUENUb0NvZGVPcmlnaW5NYXA6OlBDVG9Db2Rl
T3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYgYnVpbGRlciwgTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKK3sKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZSog
cHJldmlvdXMgPSBudWxscHRyOworICAgIGZvciAoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpD
b2RlUmFuZ2UmIGNvZGVSYW5nZSA6IGJ1aWxkZXIubV9jb2RlUmFuZ2VzKSB7CisgICAgICAgIHZv
aWQqIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVSYW5nZS5zdGFydCkuZGF0YUxv
Y2F0aW9uKCk7CisgICAgICAgIHZvaWQqIGVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2Rl
UmFuZ2UuZW5kKS5kYXRhTG9jYXRpb24oKTsKKworICAgICAgICBpZiAocHJldmlvdXMpCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJldmlvdXMtPmVu
ZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3RhcnQpOworICAgICAgICAKKyAgICAgICAgTm9kZSogbm9k
ZSA9IG1fbm9kZXMuYWRkKHN0YXJ0LCBzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIDEsIGNvZGVS
YW5nZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgbV90cmVlLmluc2VydChub2RlKTsKKworICAgICAg
ICBwcmV2aW91cyA9ICZjb2RlUmFuZ2U7CisgICAgfQorfQorCitPcHRpb25hbDxDb2RlT3JpZ2lu
PiBQQ1RvQ29kZU9yaWdpbk1hcDo6ZmluZCh2b2lkKiBwYykgY29uc3QKK3sKKyAgICBOb2RlKiBu
b2RlID0gbV90cmVlLmZpbmRFeGFjdChLZXkocGMsIHBjKSk7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4obm9k
ZS0+Y29kZU9yaWdpbigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgUENUb0NvZGVPcmlnaW5NYXBfaAorI2RlZmluZSBQQ1Rv
Q29kZU9yaWdpbk1hcF9oCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIExpbmtCdWZmZXI7CitjbGFzcyBQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXI7CisKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwIHsKKworcHVi
bGljOgorICAgIFBDVG9Db2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYsIExp
bmtCdWZmZXImKTsKKworICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmQodm9pZCogcGMpIGNv
bnN0OworCitwcml2YXRlOgorICAgIHN0cnVjdCBLZXkgeworICAgICAgICBLZXkodm9pZCogc3Rh
cnQsIHZvaWQqIGVuZCkKKyAgICAgICAgICAgIDogc3RhcnQoc3RhcnQpCisgICAgICAgICAgICAs
IGVuZChlbmQpCisgICAgICAgIHsgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEtl
eSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0cnVlKTsgLy8g
IEZJWE1FOiBub3Qgb3ZlcmxhcHBpbmcuCisgICAgICAgICAgICByZXR1cm4gc3RhcnQgPCBvdGhl
ci5zdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRvIGZpbmQgdGhpbmdzLCB3ZSBhcmUg
ImVxdWFsIiBpZiB0aGUgb3RoZXIgdGhpbmcgaXMgZW5jbG9zZWQgd2l0aGluIHVzLgorICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHN0YXJ0IDw9IG90aGVyLnN0YXJ0ICYmIG90aGVyLmVuZCA8PSBlbmQ7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkKiBzdGFydDsKKyAgICAgICAgdm9pZCogZW5kOwor
ICAgIH07CisKKyAgICBjbGFzcyBOb2RlIDogcHVibGljIFJlZEJsYWNrVHJlZTxOb2RlLCBLZXk+
OjpOb2RlIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgor
ICAgICAgICBOb2RlKHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQsIENvZGVPcmlnaW4gb3JpZ2luKQor
ICAgICAgICAgICAgOiBtX2tleShzdGFydCwgZW5kKQorICAgICAgICAgICAgLCBtX2NvZGVPcmln
aW4ob3JpZ2luKQorICAgICAgICB7IH0KKworICAgICAgICBjb25zdCBDb2RlT3JpZ2luJiBjb2Rl
T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlT3JpZ2luOyB9CisgICAgICAgIGNvbnN0IEtl
eSYga2V5KCkgeyByZXR1cm4gbV9rZXk7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBLZXkgbV9r
ZXk7IAorICAgICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICB9OworCisgICAgUmVk
QmxhY2tUcmVlPE5vZGUsIEtleT4gbV90cmVlOworICAgIEJhZzxOb2RlPiBtX25vZGVzOworfTsK
KworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHsKKyAgICBmcmllbmQgY2xhc3MgUENU
b0NvZGVPcmlnaW5NYXA7CitwdWJsaWM6CisgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCwgQ29kZU9yaWdpbik7Citwcml2YXRlOgorCisgICAgc3RydWN0IENvZGVSYW5n
ZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzdGFydDsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGVuZDsKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOworICAg
IH07CisKKyAgICBWZWN0b3I8Q29kZVJhbmdlPiBtX2NvZGVSYW5nZXM7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFBDVG9Db2RlT3JpZ2luTWFwX2ggCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAko
cmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRl
ICJMTEludFBDUmFuZ2VzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJN
YXJrZWRCbG9ja1NldC5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVk
ZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNs
dWRlICJWTS5oIgpAQCAtODIsMTIgKzgzLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0g
ICAgc2l6ZV90IHdhbGsoVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU+JiBzdGFj
a1RyYWNlLCBib29sJiBkaWRSdW5PdXRPZlNwYWNlLCBib29sJiBzdGFja3RyYWNlTmVlZHNWZXJp
ZmljYXRpb24pCisgICAgc2l6ZV90IHdhbGsoVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNr
RnJhbWU+JiBzdGFja1RyYWNlLCBib29sJiBkaWRSdW5PdXRPZlNwYWNlLCBib29sJiBzdGFja3Ry
YWNlTmVlZHNWZXJpZmljYXRpb24sIHZvaWQqIHRvcFBDKQogICAgIHsKICAgICAgICAgc3RhY2t0
cmFjZU5lZWRzVmVyaWZpY2F0aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChzUmVwb3J0U3RhdHMp
CiAgICAgICAgICAgICBzTnVtVG90YWxXYWxrcysrOwotICAgICAgICByZXNldEF0TWFjaGluZUZy
YW1lKCk7CisgICAgICAgIHJlc2V0QXRNYWNoaW5lRnJhbWUodG9wUEMpOwogICAgICAgICBzaXpl
X3QgbWF4U3RhY2tUcmFjZVNpemUgPSBzdGFja1RyYWNlLnNpemUoKTsKICAgICAgICAgd2hpbGUg
KCFpc0F0VG9wKCkgJiYgIW1fYmFpbGluZ091dCAmJiBtX2RlcHRoIDwgbWF4U3RhY2tUcmFjZVNp
emUpIHsKICAgICAgICAgICAgIHdoaWxlIChtX2lubGluZUNhbGxGcmFtZSAmJiBtX2RlcHRoIDwg
bWF4U3RhY2tUcmFjZVNpemUpIHsKQEAgLTEzNiw3ICsxMzcsNyBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gIW1fY2FsbEZyYW1lOwogICAgIH0KIAotICAgIHZvaWQgcmVzZXRBdE1hY2hpbmVG
cmFtZSgpCisgICAgdm9pZCByZXNldEF0TWFjaGluZUZyYW1lKHZvaWQqIHBjID0gbnVsbHB0cikK
ICAgICB7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0cjsKIApAQCAtMTUxLDkg
KzE1Miw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotI2lm
IEVOQUJMRShERkdfSklUKQotICAgICAgICAvLyBJZiB0aGUgZnJhbWUgZG9lc24ndCBoYXZlIGEg
Y29kZSBibG9jaywgdGhlbiBpdCdzIG5vdCBhIAotICAgICAgICAvLyBERkcvRlRMIGZyYW1lIHdo
aWNoIG1lYW5zIHdlJ3JlIG5vdCBhbiBpbmxpbmVkIGZyYW1lLgogICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IG1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgaWYgKCFjb2Rl
QmxvY2spCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjUsNiArMTYzLDE3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBpZiAocGMpIHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBjb25jdXJyZW5jeSBoZXJlLgorICAgICAgICAg
ICAgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBjb2RlQmxvY2stPmZpbmRQ
QyhwYykpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJFeGVjdXRpbmcgYXQgQ29kZU9yaWdp
bjogIiwgKmNvZGVPcmlnaW4sICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGRvZXNuJ3QgaGF2ZSBh
IGNvZGUgYmxvY2ssIHRoZW4gaXQncyBub3QgYSAKKyAgICAgICAgLy8gREZHL0ZUTCBmcmFtZSB3
aGljaCBtZWFucyB3ZSdyZSBub3QgYW4gaW5saW5lZCBmcmFtZS4KKwogICAgICAgICAvLyBJZiB0
aGUgY29kZSBibG9jayBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIG9yaWdpbnMsIHRoZW4gdGhlcmUn
cyBubwogICAgICAgICAvLyBpbmxpbmluZy4gSGVuY2UsIHdlJ3JlIG5vdCBhdCBhbiBpbmxpbmVk
IGZyYW1lLgogICAgICAgICBpZiAoIWNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkKQEAgLTI4
Nyw3ICsyOTYsNyBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2CiAg
ICAgICAgICAgICAgICAgYm9vbCBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb247CiAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBGcmFtZVdhbGtlciB3YWxrZXIoY2FsbEZy
YW1lLCBtX3ZtLCBjb2RlQmxvY2tTZXRMb2NrZXIsIG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsKLSAg
ICAgICAgICAgICAgICAgICAgd2Fsa1NpemUgPSB3YWxrZXIud2FsayhtX2N1cnJlbnRGcmFtZXMs
IGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UsIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgIHdhbGtTaXplID0gd2Fsa2VyLndhbGsobV9jdXJyZW50RnJhbWVz
LCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlLCBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24sIHBj
KTsKICAgICAgICAgICAgICAgICAgICAgd2FzVmFsaWRXYWxrID0gd2Fsa2VyLndhc1ZhbGlkV2Fs
aygpOwogICAgICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDE5NTMwMikKKysrIFNv
dXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIG5hbWVz
cGFjZSBXVEYgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgQmFnIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShCYWcpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHJp
dmF0ZToKICAgICBjbGFzcyBOb2RlIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JlZEJsYWNrVHJl
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZpc2lv
biAxOTUzMDIpCisrKyBTb3VyY2UvV1RGL3d0Zi9SZWRCbGFja1RyZWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTY4LDcgKzU2OCw5IEBAIHByaXZhdGU6CiAgICAgTm9kZVR5cGUqIG1fcm9vdDsKIH07
CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlJlZEJsYWNrVHJlZTsKIAog
I2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NlZ21lbnRlZFZlY3Rvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NlZ21lbnRlZFZlY3Rvci5oCShyZXZpc2lvbiAxOTUzMDIp
CisrKyBTb3VyY2UvV1RGL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQxLDkgKzE0MSwxOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgfQogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHZvaWQgYXBwZW5kKEFyZ3MmJi4uLiBh
cmdzKQorICAgICAgICB7CisgICAgICAgICAgICArK21fc2l6ZTsKKyAgICAgICAgICAgIGlmICgh
c2VnbWVudEV4aXN0c0ZvcihtX3NpemUgLSAxKSkKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZVNl
Z21lbnQoKTsKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJmxhc3QoKSkgVChzdGQ6OmZvcndh
cmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJncz4KICAgICAgICAgVCYgYWxsb2MoQXJncyYmLi4uIGFyZ3MpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGFwcGVuZDxUPihUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOwor
ICAgICAgICAgICAgYXBwZW5kKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiAgICAgICAg
ICAgICByZXR1cm4gbGFzdCgpOwogICAgICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269522</attachid>
            <date>2016-01-21 17:01:17 -0800</date>
            <delta_ts>2016-01-21 18:27:18 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>51395</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUzMDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI4Niw2ICsxMjg2LDggQEAKIAkJNzBFQ0E2MDcxQUZE
QkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRl
bXBsYXRlUmVnaXN0cnkuY3BwICovOyB9OwogCQk3MEVDQTYwODFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzBFQ0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MEVDQTYw
OTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVP
cmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmNwcCAqLzsg
fTsKKwkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0ODFDNEVF
RDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyog
R2V0UHV0SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTdFMDdBOTFCOEZDRkI5MDA4
NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTcxQjhGQ0ZCOTAwODQwMEJBIC8q
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLzsgfTsKIAkJNzk3RTA3QUExQjhGQ0ZC
OTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzQ2NCw2ICszNDY2LDggQEAKIAkJNzBFQ0E2MDIx
QUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lz
dHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0Nv
ZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1
MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdB
NzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4
NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUwOTgsNiArNTEwMiw4IEBACiAJCQkJMEZDNzEyRTExN0NEODc4
RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJ
CQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAogCQkJ
CUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAorCQkJCTc5
MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi8sCisJCQkJ
NzkyQ0IzNDgxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggKi8sCiAJCQkJ
MEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNw
cCAqLywKIAkJCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAq
LywKQEAgLTY5NzQsNiArNjk4MCw3IEBACiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzczMDkzMUMwRDY3RUUwMDA1MkJGQSAv
KiBBaXJVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYy
QTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzkyQ0Iz
NEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzlENUNENUIxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzMxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dl
ck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTA5LDYgKzg5MTYsNyBAQAogCQkJCTBGOEYx
NDM1MUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjJDRDVCMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zm
c2V0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMg
LyogREZHTmF0dXJhbExvb3BzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5MkNCMzQ5MUM0RUVE
NUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkIzODc4RjFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxh
Z3MuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTk1
MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBpbmxpbmUgYm9vbCBv
cHRpbWl6ZUZvclg4Nl82NCgpCiBjbGFzcyBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2U7
CiBjbGFzcyBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2U7CiBjbGFzcyBMaW5rQnVm
ZmVyOworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwogY2xhc3MgV2F0Y2hwb2ludDsK
IG5hbWVzcGFjZSBERkcgewogc3RydWN0IE9TUkV4aXQ7CkBAIC0zOTMsNiArMzk0LDcgQEAgcHVi
bGljOgogICAgICAgICBmcmllbmQgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogICAgICAg
ICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhdGNocG9p
bnQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CiAKICAg
ICBwdWJsaWM6CiAgICAgICAgIExhYmVsKCkKQEAgLTQwNSw2ICs0MDcsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtYXNtLT5pbnZhbGlkYXRlQWxsVGVtcFJlZ2lzdGVycygpOwogICAgICAgICB9
CiAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExhYmVsJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9sYWJlbCA9PSBvdGhlci5tX2xhYmVsOyB9CisKICAgICAgICAgYm9vbCBpc1NldCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwuaXNTZXQoKTsgfQogICAgIHByaXZhdGU6CiAgICAgICAg
IEFzc2VtYmxlckxhYmVsIG1fbGFiZWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9uIDE5NTMwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDYgKzU2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1
cm4gQXNzZW1ibGVyTGFiZWwobV9vZmZzZXQgKyBvZmZzZXQpOwogICAgICAgICB9CiAKKyAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFzc2VtYmxlckxhYmVsJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQ7IH0KKwogICAgICAgICB1aW50MzJfdCBt
X29mZnNldDsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
aWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
cGlsYXRpb24uY3BwCShyZXZpc2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCkBAIC00NSw3ICs0Niw4IEBAIENvbXBpbGF0aW9u
OjpDb21waWxhdGlvbihWTSYgdm0sIFByb2NlZHUKICAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihw
cm9jLCBvcHRMZXZlbCk7CiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOwotICAgIGdl
bmVyYXRlKHByb2MsIGppdCk7CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHVudXNlZEJ1
aWxkZXI7CisgICAgZ2VuZXJhdGUocHJvYywgaml0LCB1bnVzZWRCdWlsZGVyKTsKICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgbnVsbHB0cik7CiAKICAgICBtX2NvZGVSZWYgPSBG
SU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiQjM6OkNvbXBpbGF0aW9uIikpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1MzAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiQjNSZWR1Y2VTdHJlbmd0aC5oIgogI2luY2x1ZGUg
IkIzVGltaW5nU2NvcGUuaCIKICNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAg
LTUzLDkgKzU0LDkgQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihQcm9jZWR1cmUmIHBybwog
ICAgIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlLmNvZGUoKSk7CiB9CiAKLXZv
aWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENDYWxsSGVscGVycyYgaml0KQordm9p
ZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBqaXQsIFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlciYgYnVpbGRlcikKIHsKLSAgICBBaXI6OmdlbmVyYXRlKHByb2Nl
ZHVyZS5jb2RlKCksIGppdCk7CisgICAgQWlyOjpnZW5lcmF0ZShwcm9jZWR1cmUuY29kZSgpLCBq
aXQsIGJ1aWxkZXIpOwogfQogCiB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIHVuc2lnbmVkIG9wdExldmVsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5l
cmF0ZS5oCShyZXZpc2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
OwogCiBuYW1lc3BhY2UgQjMgewogCkBAIC00NCw3ICs0NSw3IEBAIHZvaWQgcHJlcGFyZUZvckdl
bmVyYXRpb24oUHJvY2VkdXJlJiwgdW4KIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlIHRo
YXQgaGFzIGJlZW4gcHJlcGFyZWQgZm9yIGdlbmVyYXRpb24gKGkuZS4gaXQgaGFzIGJlZW4gbG93
ZXJlZCB0byBBaXIgYW5kCiAvLyB0aGUgQWlyIGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0
aW9uKSBhbmQgZ2VuZXJhdGVzIGl0LiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGNhbGxpbmcK
IC8vIEFpcjo6Z2VuZXJhdGUoKSBvbiB0aGUgUHJvY2VkdXJlOjpjb2RlKCkuCi12b2lkIGdlbmVy
YXRlKFByb2NlZHVyZSYsIENDYWxsSGVscGVycyYpOwordm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUm
LCBDQ2FsbEhlbHBlcnMmLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImKTsKIAogLy8gVGhpcyB0
YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1wbGFjZSwgYW5kIGxvd2VycyBp
dCB0byBBaXIuIFlvdSBjYW4gdGhlbiBnZW5lcmF0ZQogLy8gdGhlIEFpciB0byBtYWNoaW5lIGNv
ZGUgdXNpbmcgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbigpIGFuZCBBaXI6OmdlbmVyYXRlKCkg
b24gdGhlIFByb2NlZHVyZSdzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDgg
QEAKICNpbmNsdWRlICJCM1RpbWluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CiAjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisjaW5jbHVk
ZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIApAQCAtMTM1LDcgKzEzNyw3
IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICB9CiB9CiAKLXZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit2b2lkIGdlbmVyYXRl
KENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgaml0LCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIm
IHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcikKIHsKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29w
ZSgiQWlyOjpnZW5lcmF0ZSIpOwogCkBAIC0xNzEsMTIgKzE3MywyNiBAQCB2b2lkIGdlbmVyYXRl
KENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIGJsb2NrSnVtcHNbdGFyZ2V0XS5h
cHBlbmQoanVtcCk7CiAgICAgfTsKIAorICAgIGF1dG8gYWRkSXRlbSA9IFsmXSAoSW5zdCYgaW5z
dCkgeworICAgICAgICBpZiAoIWluc3Qub3JpZ2luKSB7CisgICAgICAgICAgICBwY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShqaXQubGFiZWwoKSwgQ29kZU9yaWdpbigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBERkc6Ok5vZGUqIG5vZGUgPSBi
aXR3aXNlX2Nhc3Q8REZHOjpOb2RlKj4oaW5zdC5vcmlnaW4tPm9yaWdpbigpLmRhdGEoKSk7Cisg
ICAgICAgIGlmIChub2RlKQorICAgICAgICAgICAgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0oaml0LmxhYmVsKCksIG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGppdC5s
YWJlbCgpLCBDb2RlT3JpZ2luKCkpOworICAgIH07CisKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogY29kZSkgewogICAgICAgICBibG9ja0p1bXBzW2Jsb2NrXS5saW5rKCZqaXQpOwogICAg
ICAgICBibG9ja0xhYmVsc1tibG9ja10gPSBqaXQubGFiZWwoKTsKICAgICAgICAgQVNTRVJUKGJs
b2NrLT5zaXplKCkgPj0gMSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9j
ay0+c2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVt
cCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGFkZEl0ZW0oaW5zdCk7CisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGluc3QuZ2VuZXJhdGUoaml0LCBjb250
ZXh0KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7CiAg
ICAgICAgIH0KIApAQCAtMTg0LDYgKzIwMCw4IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwg
Q0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9
PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAg
ICAgICAgYWRkSXRlbShibG9jay0+bGFzdCgpKTsKKwogICAgICAgICBpZiAoaXNSZXR1cm4oYmxv
Y2stPmxhc3QoKS5vcGNvZGUpKSB7CiAgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3Qg
cmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0
bwogICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRlLgpAQCAtMTk4LDYgKzIxNiw3IEBA
IHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZVdpdGhFbXB0eUZy
YW1lKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICBhZGRJdGVtKGJsb2Nr
LT5sYXN0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMjE4LDYg
KzIzNyw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQorICAgICAgICBhZGRJdGVtKGJsb2NrLT5sYXN0KCkpOwogICAgIH0KIAogICAg
IGZvciAoYXV0byYgbGF0ZVBhdGggOiBjb250ZXh0LmxhdGVQYXRocykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDE5NTMwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENDYWxsSGVscGVy
czsKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKIAogbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CiAKQEAgLTQyLDcgKzQzLDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
cmVwYXJlRm9yR2VuZXJhdAogCiAvLyBUaGlzIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUg
Z2l2ZW4gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxs
YmFja3MKIC8vIGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzIGdlbmVyYXRpbmcuCi1KU19F
WFBPUlRfUFJJVkFURSB2b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKK0pTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYsIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlciYpOwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2aXNpb24g
MTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRp
bmcuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgor
I2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHVyZU5hTi5oIgogI2lu
Y2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8Y21hdGg+CkBAIC03OSw3ICs4MCw4IEBAIHN0ZDo6dW5p
cXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvbXBpbGUKIHsKICAgICBwcmVwYXJlRm9yR2VuZXJh
dGlvbihwcm9jLmNvZGUoKSk7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7Ci0gICAgZ2VuZXJh
dGUocHJvYy5jb2RlKCksIGppdCk7CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHVudXNl
ZEJ1aWxkZXI7CisgICAgZ2VuZXJhdGUocHJvYy5jb2RlKCksIGppdCwgdW51c2VkQnVpbGRlcik7
CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKIAogICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTk1MzAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNp
bmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nl
c3MuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUmVkdWNlV2hp
dGVzcGFjZS5oIgpAQCAtMjQ4MSw2ICsyNDgyLDMzIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2UKIAogdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CisvLyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkgeworLy8j
ZGVmaW5lIEFTKHZlY3RvciwgaXRlbSkgc2l6ZSArPSB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKGl0
ZW0pCisvLyAgICAgICAgZG91YmxlIHNpemUgPSAwOworLy8gICAgICAgIHNpemUgKz0gc2l6ZW9m
KENvZGVCbG9jayk7CisvLyAgICAgICAgQVMobV9sbGludENhbGxMaW5rSW5mb3MsIExMSW50Q2Fs
bExpbmtJbmZvKTsKKy8vICAgICAgICBBUyhtX2FyZ3VtZW50VmFsdWVQcm9maWxlcywgVmFsdWVQ
cm9maWxlKTsKKy8vICAgICAgICBBUyhtX3ZhbHVlUHJvZmlsZXMsIFZhbHVlUHJvZmlsZSk7Cisv
LyAgICAgICAgQVMobV9yYXJlQ2FzZVByb2ZpbGVzLCBSYXJlQ2FzZVByb2ZpbGUpOworLy8gICAg
ICAgIEFTKG1fcmVzdWx0UHJvZmlsZXMsIFJlc3VsdFByb2ZpbGUpOworLy8gICAgICAgIEFTKG1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUpOworLy8gICAg
ICAgIEFTKG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzLCBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSk7CisvLyAgICAgICAgQVMobV9jb25zdGFudFJlZ2lzdGVycywgV3JpdGVCYXJyaWVyPFVua25v
d24+KTsKKy8vICAgICAgICBBUyhtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwg
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKKy8vICAgICAgICBBUyhtX2Z1bmN0aW9uRGVjbHMs
IFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+KTsKKy8vICAgICAgICBBUyhtX2Z1bmN0
aW9uRXhwcnMsIFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+KTsKKy8vICAgICAgICBB
UyhtX2luc3RydWN0aW9ucywgSW5zdHJ1Y3Rpb24pOworLy8gICAgICAgIEFTKG1fdW5saW5rZWRD
b2RlLT5leHByZXNzaW9uSW5mbygpLCBFeHByZXNzaW9uUmFuZ2VJbmZvKTsKKy8vCisvLyAgICAg
ICAgZGF0YUxvZ0YoIlNpemVcblx0Qnl0ZXM6JWxmXG5cdEtCOiVsZlxuXHRNQjolbGZcbiIsIHNp
emUsIHNpemUvMTAyNC4wLCBzaXplLygxMDI0LjAqMTAyNC4wKSk7CisvLyAgICAgICAgLy9kb3Vi
bGUgcHJvamVjdGVkU2l6ZSA9ICgxLmYgKyA5LmYpKihtX2luc3RydWN0aW9ucy5zaXplKCkgLyA0
LmYpOworLy8gICAgICAgIGRvdWJsZSBwcm9qZWN0ZWRTaXplID0gbV9wY1RvQ29kZU9yaWdpbk1h
cC0+bWVtb3J5U2l6ZSgpOworLy8gICAgICAgIGRhdGFMb2dGKCJQcm9qZWN0ZWQgc2l6ZVxuXHRC
eXRlczolbGZcblx0S0I6JWxmXG5cdE1COiVsZlxuIiwgcHJvamVjdGVkU2l6ZSwgcHJvamVjdGVk
U2l6ZS8xMDI0LjAsIHByb2plY3RlZFNpemUvKDEwMjQuMCoxMDI0LjApKTsKKy8vICAgICAgICBk
YXRhTG9nRigiUHJvamVjdGVkIHNpemUgUGVyY2VudDogJWxmXG4iLCAocHJvamVjdGVkU2l6ZS8o
c2l6ZSArIHByb2plY3RlZFNpemUpKjEwMC5mKSk7CisvLyAgICAgICAgZGF0YUxvZygiXG5cbiIp
OworLy8jdW5kZWYgQVMKKy8vICAgIH0KKwogICAgIC8vIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRo
YXQgbWF5IHVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnM6IGlubGluZSBjYWNoZSBjbGVhcmlu
ZwogICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcg
dG8gZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncwogICAgIC8vIGlzIHByb2JhYmx5IHF1
aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQgYW5kIHdoZW4gaXQg
cnVucywgaXQKQEAgLTQyNzUsNCArNDMwMyw1NSBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFz
aWNCbG9ja0JvdW5kYXJpCiAgICAgfQogfQogCit2b2lkIENvZGVCbG9jazo6c2V0UENUb0NvZGVP
cmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmIG1hcCkgCit7IAor
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1hcCk7CisgICAgcmV0dXJuOworCisg
ICAgeworI2RlZmluZSBBUyh2ZWN0b3IsIGl0ZW0pIHNpemUgKz0gdmVjdG9yLnNpemUoKSAqIHNp
emVvZihpdGVtKQorICAgICAgICBkb3VibGUgc2l6ZSA9IDA7CisgICAgICAgIHNpemUgKz0gc2l6
ZW9mKENvZGVCbG9jayk7CisgICAgICAgIEFTKG1fbGxpbnRDYWxsTGlua0luZm9zLCBMTEludENh
bGxMaW5rSW5mbyk7CisgICAgICAgIEFTKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBWYWx1ZVBy
b2ZpbGUpOworICAgICAgICBBUyhtX3ZhbHVlUHJvZmlsZXMsIFZhbHVlUHJvZmlsZSk7CisgICAg
ICAgIEFTKG1fcmFyZUNhc2VQcm9maWxlcywgUmFyZUNhc2VQcm9maWxlKTsKKyAgICAgICAgQVMo
bV9yZXN1bHRQcm9maWxlcywgUmVzdWx0UHJvZmlsZSk7CisgICAgICAgIEFTKG1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZXMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUpOworICAgICAgICBBUyhtX29i
amVjdEFsbG9jYXRpb25Qcm9maWxlcywgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUpOworICAgICAg
ICBBUyhtX2NvbnN0YW50UmVnaXN0ZXJzLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgICAg
ICBBUyhtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKTsKKyAgICAgICAgQVMobV9mdW5jdGlvbkRlY2xzLCBXcml0ZUJhcnJpZXI8RnVu
Y3Rpb25FeGVjdXRhYmxlPik7CisgICAgICAgIEFTKG1fZnVuY3Rpb25FeHBycywgV3JpdGVCYXJy
aWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4pOworICAgICAgICBBUyhtX2luc3RydWN0aW9ucywgSW5z
dHJ1Y3Rpb24pOworCisgICAgICAgIGRhdGFMb2dGKCJTaXplXG5cdEJ5dGVzOiVsZlxuXHRLQjol
bGZcblx0TUI6JWxmXG4iLCBzaXplLCBzaXplLzEwMjQuMCwgc2l6ZS8oMTAyNC4wKjEwMjQuMCkp
OworICAgICAgICAvL2RvdWJsZSBwcm9qZWN0ZWRTaXplID0gKDEuZiArIDkuZikqKG1faW5zdHJ1
Y3Rpb25zLnNpemUoKSAvIDQuZik7CisgICAgICAgIGRvdWJsZSBwcm9qZWN0ZWRTaXplID0gbV9w
Y1RvQ29kZU9yaWdpbk1hcC0+bWVtb3J5U2l6ZSgpOworICAgICAgICBkYXRhTG9nRigiUHJvamVj
dGVkIHNpemVcblx0Qnl0ZXM6JWxmXG5cdEtCOiVsZlxuXHRNQjolbGZcbiIsIHByb2plY3RlZFNp
emUsIHByb2plY3RlZFNpemUvMTAyNC4wLCBwcm9qZWN0ZWRTaXplLygxMDI0LjAqMTAyNC4wKSk7
CisgICAgICAgIGRhdGFMb2dGKCJQcm9qZWN0ZWQgc2l6ZSBQZXJjZW50OiAlbGZcbiIsIChwcm9q
ZWN0ZWRTaXplLyhzaXplICsgcHJvamVjdGVkU2l6ZSkqMTAwLmYpKTsKKyAgICAgICAgZGF0YUxv
ZygiXG5cbiIpOworI3VuZGVmIEFTCisgICAgfQorfQorCitPcHRpb25hbDxDb2RlT3JpZ2luPiBD
b2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKK3sKKyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1h
cCkgeworICAgICAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1fcGNU
b0NvZGVPcmlnaW5NYXAtPmZpbmQocGMpKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47
CisgICAgfQorI2lmIEVOQUJMRShKSVQpCisgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+
OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsK
KyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIgPSAqaXRlcjsKKyAgICAgICAgaWYgKHN0
dWItPmNvbnRhaW5zUEMocGMpKSB7CisgICAgICAgICAgICAvL2RhdGFMb2coIkZvdW5kIGluIHN0
dWI6ICIsIGluZmVycmVkTmFtZSgpLCAiXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25h
bDxDb2RlT3JpZ2luPihzdHViLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoSklUKQorCisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OwogY2xhc3MgVHlwZUxv
Y2F0aW9uOwogY2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVudDsKK2NsYXNzIFBDVG9Db2RlT3JpZ2lu
TWFwOwogCiBlbnVtIFJlb3B0aW1pemF0aW9uTW9kZSB7IERvbnRDb3VudFJlb3B0aW1pemF0aW9u
LCBDb3VudFJlb3B0aW1pemF0aW9uIH07CiAKQEAgLTkyNyw2ICs5MjgsMTAgQEAgcHVibGljOgog
CiAgICAgQ2FsbFNpdGVJbmRleCBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2Fs
bFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKTsKIAorICAgIHZvaWQgc2V0UENUb0NvZGVPcmln
aW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKKyAgICBQQ1RvQ29k
ZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBjb25zdCB7IHJldHVybiBtX3BjVG9Db2Rl
T3JpZ2luTWFwLmdldCgpOyB9CisgICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQq
IHBjKTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNhY2hlcygp
OwogICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwpAQCAtMTA5Nyw2
ICsxMTAyLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSklUKQogICAgIERGRzo6Q2FwYWJpbGl0
eUxldmVsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAKICAgICBVbmNvbmRp
dGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lv
biAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYgKzMyNCwxNCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhYm91dFRvRGllKCk7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3Q7CisgICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdAorICAgIHsgCisgICAgICAg
IGlmICghbV9zdHViUm91dGluZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICB1aW50cHRyX3QgcGNBc0ludCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBjKTsKKyAgICAg
ICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUtPnN0YXJ0QWRkcmVzcygpIDw9IHBjQXNJbnQgJiYgcGNB
c0ludCA8PSBtX3N0dWJSb3V0aW5lLT5lbmRBZGRyZXNzKCk7CisgICAgfQogCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NDYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxOTUz
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDEzIEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICByZXNldChjb2RlQmxvY2spOwogICAgIHJlc2V0
QnlHQyA9IHRydWU7CiB9CisKK2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OmNvbnRhaW5zUEModm9p
ZCogcGMpIGNvbnN0Cit7CisgICAgaWYgKGNhY2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdS5zdHViLT5jb250YWluc1BDKHBjKTsK
K30KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxOTUz
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw4IEBAIHB1YmxpYzoKICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW47CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4OwogCisgICAg
Ym9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdDsKKwogICAgIHVuaW9uIHsKICAgICAgICAg
c3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2Jq
ZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE5NTMwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsNiArMTMxLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVHlwZVByb2ZpbGVyRXhwcmVz
c2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3Qs
IHVuc2lnbmVkIGVuZERpdm90KTsKIAogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJl
dHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxFeHByZXNz
aW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZv
OyB9CiAKICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVn
aXN0ZXI7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNp
b24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAvLyBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBleHBlcmltZW50YWwgdHJhbnNpdGlv
biBmcm9tIExMVk0gdG8gQjMgYXMgdGhlIGJhY2tlbmQgZm9yIHRoZSBGVEwuIFdlIGRvbid0CiAv
LyB5ZXQga25vdyBob3cgaXQgd2lsbCB0dXJuIG91dC4gRm9yIG5vdywgdGhpcyBmbGFnIHdpbGwg
Y29udHJvbCB3aGV0aGVyIEZUTCB1c2VzIEIzLiBSZW1lbWJlciB0byBzZXQgdGhpcwogLy8gdG8g
MCBiZWZvcmUgY29tbWl0dGluZyEKLSNkZWZpbmUgRlRMX1VTRVNfQjMgMAorI2RlZmluZSBGVExf
VVNFU19CMyAxCiAKIHN0cnVjdCBOb2RlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
NSw2ICszMDUsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAg
ICAgICAgICAgICBtX2NvZGVCbG9jay0+YXBwZW5kRXhjZXB0aW9uSGFuZGxlcihuZXdFeGNlcHRp
b25IYW5kbGVyKTsKICAgICAgICAgfQogICAgIH0KKworICAgIG1fY29kZUJsb2NrLT5zZXRQQ1Rv
Q29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlciwgbGlua0J1ZmZlcikpOwogfQogCiB2b2lkIEpJVENvbXBpbGVy
Ojpjb21waWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHJldmlzaW9uIDE5NTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUg
IkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIK
ICNpbmNsdWRlICJUZW1wUmVnaXN0ZXJTZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMTgs
NiArMTE5LDcgQEAgcHVibGljOgogICAgIC8vIE1ldGhvZHMgdG8gc2V0IGxhYmVscyBmb3IgdGhl
IGRpc2Fzc2VtYmxlci4KICAgICB2b2lkIHNldFN0YXJ0T2ZDb2RlKCkKICAgICB7CisgICAgICAg
IG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNo
cG9pbnRzKCksIENvZGVPcmlnaW4oMCwgbnVsbHB0cikpOwogICAgICAgICBpZiAoTElLRUxZKCFt
X2Rpc2Fzc2VtYmxlcikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CkBAIC0xMzks
NiArMTQxLDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc2V0RW5kT2ZNYWluUGF0aCgpCiAg
ICAgeworICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
SWdub3JpbmdXYXRjaHBvaW50cygpLCBDb2RlT3JpZ2luKCkpOyAvLyBGSVhNRTogV2Ugd2FudCB0
byBoYW5kbGUgc2xvdyBwYXRoIGdlbmVyYXRvcnMsIGV0Yy4KICAgICAgICAgaWYgKExJS0VMWSgh
bV9kaXNhc3NlbWJsZXIpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+c2V0RW5kT2ZNYWluUGF0aChsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CkBAIC0x
NDYsNiArMTQ5LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc2V0RW5kT2ZDb2RlKCkKICAg
ICB7CisgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJ
Z25vcmluZ1dhdGNocG9pbnRzKCksIENvZGVPcmlnaW4oKSk7IC8vIEZJWE1FOiBXZSB3YW50IHRv
IGhhbmRsZSBzbG93IHBhdGggZ2VuZXJhdG9ycywgZXRjLgogICAgICAgICBpZiAoTElLRUxZKCFt
X2Rpc2Fzc2VtYmxlcikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5zZXRFbmRPZkNvZGUobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOwpAQCAtMjY1LDYg
KzI2OSw4IEBAIHB1YmxpYzoKIAogICAgIENhbGxTaXRlSW5kZXggcmVjb3JkQ2FsbFNpdGVBbmRH
ZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvbnN0IENvZGVPcmlnaW4m
LCB1bnNpZ25lZCBldmVudFN0cmVhbUluZGV4KTsKIAorICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVp
bGRlciYgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXI7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgT1NSRXhpdEp1bXBQ
bGFjZWhvbGRlcjsKICAgICAKQEAgLTMyOCw2ICszMzQsNyBAQCBwcml2YXRlOgogICAgIENhbGwg
bV9jYWxsQXJpdHlGaXh1cDsKICAgICBMYWJlbCBtX2FyaXR5Q2hlY2s7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFNwZWN1bGF0aXZlSklUPiBtX3NwZWN1bGF0aXZlOworICAgIFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlciBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwNCw2
ICsxNTA0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAg
ICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpICYmIG1heUV4
aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSkgIT0gRG9lc05vdEV4aXQpCiAgICAgICAg
ICAgICBtX2ppdC5qaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAorICAgICAgICBtX2pp
dC5wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKS5hcHBlbmRJdGVtKG1faml0LmxhYmVsKCksIG1f
b3JpZ2luLnNlbWFudGljKTsKKwogICAgICAgICBjb21waWxlKG1fY3VycmVudE5vZGUpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgobV9jdXJyZW50Tm9kZS0+
b3AoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3Bw
CShyZXZpc2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29t
cGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJGVExV
bndpbmRJbmZvLmgiCiAjaW5jbHVkZSAiSklUU3ViR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKQEAgLTExMyw4ICsxMTQsOSBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9p
bnQ6OlJlCiAgICAgLy8gV2Ugd2lsbCBhZGQgZXhjZXB0aW9uIGhhbmRsZXJzIHdoaWxlIGdlbmVy
YXRpbmcuCiAgICAgY29kZUJsb2NrLT5jbGVhckV4Y2VwdGlvbkhhbmRsZXJzKCk7CiAKKyAgICBQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwogICAgIEND
YWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOwotICAgIEIzOjpnZW5lcmF0ZSgqc3RhdGUu
cHJvYywgaml0KTsKKyAgICBCMzo6Z2VuZXJhdGUoKnN0YXRlLnByb2MsIGppdCwgcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyKTsKIAogICAgIC8vIEVtaXQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgog
ICAgICpzdGF0ZS5leGNlcHRpb25IYW5kbGVyID0gaml0LmxhYmVsKCk7CkBAIC0xMzUsNiArMTM3
LDggQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisgICAgY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6
Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIs
ICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKwogICAgIHN0YXRlLmdlbmVy
YXRlZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PEdlbmVyYXRlZEZ1bmN0aW9uPigKICAgICAgICAg
c3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CiAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhz
dGF0ZS5wcm9jLT5yZWxlYXNlQnlwcm9kdWN0cygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHJldmlzaW9uIDE5NTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2lu
Y2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5j
bHVkZSAiU2FtcGxpbmdUb29sLmgiCkBAIC0xNDIsNyArMTQzLDcgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAg
fQogCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCit2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcyhQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImIHBjVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcikKIHsKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2Vy
dEFyZ3VtZW50Q291bnRTYW5lKCk7CkBAIC0xNTgsNiArMTU5LDggQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBtX2J5dGVjb2RlT2Zmc2V0OwogICAgICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1faW50ZXJwcmV0ZXItPmlzT3Bjb2RlKGN1cnJlbnRJbnN0cnVjdGlv
bi0+dS5vcGNvZGUpLCAicHJpdmF0ZUNvbXBpbGVNYWluUGFzcyBnb25lIGJhZCBAICVkIiwgbV9i
eXRlY29kZU9mZnNldCk7CiAKKyAgICAgICAgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVu
ZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSk7CisKICNpZiBFTkFC
TEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9ieXRlY29kZU9mZnNldCA+IDApIC8v
IEF2b2lkIHRoZSBvdmVyaGVhZCBvZiBzYW1wbGluZyBvcF9lbnRlciB0d2ljZS4KICAgICAgICAg
ICAgIHNhbXBsZUluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0zNDUsNyArMzQ4
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3MoKQogICAgIG1fam1wVGFibGUu
Y2xlYXIoKTsKIH0KIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKK3ZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyhQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImIHBj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcikKIHsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25z
QmVnaW4gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKIApAQCAtMzY1LDYg
KzM2OCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgZm9yIChW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigp
OyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewogICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0
ID0gaXRlci0+dG87CiAKKyAgICAgICAgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0
ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSk7CisKICAgICAgICAgdW5z
aWduZWQgZmlyc3RUbyA9IG1fYnl0ZWNvZGVPZmZzZXQ7CiAKICAgICAgICAgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2luICsgbV9ieXRlY29kZU9mZnNl
dDsKQEAgLTUxOSw2ICs1MjQsOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21w
aWxlKEpJCiAgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKICAgICB9CiAgICAgCisgICAg
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKKyAgICBw
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKDAs
IG51bGxwdHIpKTsKKwogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3Nl
bWJsZXItPnNldFN0YXJ0T2ZDb2RlKGxhYmVsKCkpOwogCkBAIC01NjUsOSArNTczLDkgQEAgQ29t
cGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIGVtaXRTYXZlQ2FsbGVl
U2F2ZXMoKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAg
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOworICAgIHByaXZhdGVDb21waWxlTWFpblBhc3MocGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKTsKICAgICBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7Ci0g
ICAgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKKyAgICBwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cyhwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOwogICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxl
cikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CkBA
IC03MDgsNiArNzE2LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShK
SQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9u
LmdldCgpLCBwYXRjaEJ1ZmZlcik7CiAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ci0+YWRkQ29tcGlsYXRpb24obV9jb21waWxhdGlvbik7CiAgICAgfQorCisgICAgbV9jb2RlQmxv
Y2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5N
YXA+KHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciwgcGF0Y2hCdWZmZXIpKTsgLy8gRklYTUU6IGdl
dCB0aGUgZW5kIG9mIHRoZSBjb2RlIHJlZ2lvbiBhcyBDb2RlT3JpZ2luKCkuCiAgICAgCiAgICAg
Q29kZVJlZiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwKQEAg
LTcxNiw3ICs3MjYsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJ
CiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklU
LmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCiAgICAg
ICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUo
KSkpOwotICAgIAorCiAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0
ZVNocmluayk7CiAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUoCiAgICAgICAgIGFkb3B0UmVm
KG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkJhc2Vs
aW5lSklUKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxOTUzMDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw2ICs2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xh
c3MgSlNTdGFjazsKICAgICBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CisgICAgY2xhc3MgUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyOwogICAgIGNsYXNzIFJlZ2lzdGVyOwogICAgIGNsYXNzIFN0cnVj
dHVyZUNoYWluOwogICAgIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpAQCAtMjU4LDkgKzI1OSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIEpJVChWTSosIENvZGVC
bG9jayogPSAwKTsKIAotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKKyAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ciYpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKLSAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOworICAgICAgICB2b2lkIHByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYpOwogICAgICAgICBDb21waWxhdGlv
blJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRk
cmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UENUb0NvZGVPcmlnaW5NYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisK
KyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcjo6YXBwZW5kSXRlbShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFi
ZWwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBpZiAobV9jb2RlUmFuZ2VzLnNpemUo
KSkgeworICAgICAgICBpZiAobV9jb2RlUmFuZ2VzLmxhc3QoKS5lbmQgPT0gbGFiZWwpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIG1fY29kZVJhbmdlcy5sYXN0KCkuZW5kID0gbGFiZWw7
CisgICAgICAgIGlmIChtX2NvZGVSYW5nZXMubGFzdCgpLmNvZGVPcmlnaW4gPT0gY29kZU9yaWdp
biB8fCAhY29kZU9yaWdpbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Nv
ZGVSYW5nZXMuYXBwZW5kKENvZGVSYW5nZXtsYWJlbCwgbGFiZWwsIGNvZGVPcmlnaW59KTsKK30K
KworUENUb0NvZGVPcmlnaW5NYXA6OlBDVG9Db2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlciYgYnVpbGRlciwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZSogcHJldmlvdXMgPSBudWxscHRyOworICAgIERl
bHRhQ29tcHJlc3Npb25CdWlsZGVyIHBjQ29tcHJlc3Nvcigoc2l6ZW9mKHVpbnRwdHJfdCkgKyBz
aXplb2YodWludDhfdCkpICogKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSArIDEpKTsKKyAg
ICB2b2lkKiBsYXN0UENWYWx1ZSA9IG51bGxwdHI7CisgICAgYXV0byBidWlsZFBDVGFibGUgPSBb
Jl0gKHZvaWQqIHBjVmFsdWUpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2VudGlu
ZWxWYWx1ZSA9IDA7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBjVmFsdWUgPiBsYXN0UENWYWx1
ZSk7CisgICAgICAgIHVpbnRwdHJfdCBkZWx0YSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBj
VmFsdWUpIC0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obGFzdFBDVmFsdWUpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChkZWx0YSAhPSBzZW50aW5lbFZhbHVlKTsKKyAgICAgICAgbGFzdFBDVmFs
dWUgPSBwY1ZhbHVlOworICAgICAgICBpZiAoZGVsdGEgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ4X3Q+OjptYXgoKSkgeworICAgICAgICAgICAgcGNDb21wcmVzc29yLndyaXRlPHVpbnQ4X3Q+
KHNlbnRpbmVsVmFsdWUpOworICAgICAgICAgICAgcGNDb21wcmVzc29yLndyaXRlPHVpbnRwdHJf
dD4oZGVsdGEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcGND
b21wcmVzc29yLndyaXRlPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGRlbHRhKSk7Cisg
ICAgfTsKKworICAgIERlbHRhQ29tcHJlc3Npb25CdWlsZGVyIGNvZGVPcmlnaW5Db21wcmVzc29y
KChzaXplb2YoaW50cHRyX3QpICsgc2l6ZW9mKGludDhfdCkgKyBzaXplb2YoaW50OF90KSArIHNp
emVvZihJbmxpbmVDYWxsRnJhbWUqKSkgKiAoYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpICsg
MSkpOworICAgIENvZGVPcmlnaW4gbGFzdENvZGVPcmlnaW4oMCwgbnVsbHB0cik7CisgICAgYXV0
byBidWlsZENvZGVPcmlnaW5UYWJsZSA9IFsmXSAoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdp
bikgeworICAgICAgICBzdGF0aWMgY29uc3QgaW50OF90IHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSA9
IDA7CisKKyAgICAgICAgaW50cHRyX3QgZGVsdGEgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KSAtIHN0YXRpY19jYXN0PGludHB0cl90PihsYXN0Q29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgbGFzdENvZGVPcmlnaW4gPSBjb2RlT3JpZ2lu
OworICAgICAgICBpZiAoZGVsdGEgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDhfdD46Om1heCgp
IHx8IGRlbHRhIDwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ4X3Q+OjptaW4oKSB8fCBkZWx0YSA9
PSBzZW50aW5lbEJ5dGVjb2RlRGVsdGEpIHsKKyAgICAgICAgICAgIGNvZGVPcmlnaW5Db21wcmVz
c29yLndyaXRlPGludDhfdD4oc2VudGluZWxCeXRlY29kZURlbHRhKTsKKyAgICAgICAgICAgIGNv
ZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPGludHB0cl90PihkZWx0YSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50OF90PihzdGF0aWNf
Y2FzdDxpbnQ4X3Q+KGRlbHRhKSk7CisKKyAgICAgICAgaW50OF90IGhhc0lubGluZUNhbGxGcmFt
ZUJ5dGUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA/IDEgOiAwOworICAgICAgICBjb2Rl
T3JpZ2luQ29tcHJlc3Nvci53cml0ZTxpbnQ4X3Q+KGhhc0lubGluZUNhbGxGcmFtZUJ5dGUpOwor
ICAgICAgICBpZiAoaGFzSW5saW5lQ2FsbEZyYW1lQnl0ZSkgeworICAgICAgICAgICAgY29kZU9y
aWdpbkNvbXByZXNzb3Iud3JpdGU8SW5saW5lQ2FsbEZyYW1lKj4oY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIGlmIChidWlsZGVyLm1fY29kZVJh
bmdlcy5zaXplKCkpIHsKKyAgICAgICAgbV9wY1JhbmdlU3RhcnQgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnRwdHJfdD46Om1heCgpOworICAgICAgICBtX3BjUmFuZ2VFbmQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnRwdHJfdD46Om1pbigpOworICAgICAgICB7CisgICAgICAgICAgICBjb25z
dCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZSYgbGFzdCA9IGJ1aWxkZXIubV9j
b2RlUmFuZ2VzLmxhc3QoKTsKKyAgICAgICAgICAgIGlmICghKGxhc3Quc3RhcnQgPT0gbGFzdC5l
bmQpKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmFwcGVuZChQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZXsgbGFzdC5lbmQsIGxhc3QuZW5kLCBsYXN0LmNv
ZGVPcmlnaW4gfSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZSYgY29kZVJhbmdlID0gYnVpbGRlci5tX2NvZGVS
YW5nZXNbaV07CisgICAgICAgICAgICB2b2lkKiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihjb2RlUmFuZ2Uuc3RhcnQpLmRhdGFMb2NhdGlvbigpOworICAgICAgICAgICAgdm9pZCogZW5k
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVSYW5nZS5lbmQpLmRhdGFMb2NhdGlvbigpOwor
CisgICAgICAgICAgICBtX3BjUmFuZ2VTdGFydCA9IHN0ZDo6bWluKG1fcGNSYW5nZVN0YXJ0LCBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdGFydCkpOworICAgICAgICAgICAgbV9wY1JhbmdlRW5k
ID0gc3RkOjptYXgobV9wY1JhbmdlRW5kLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbmQpKTsK
KworICAgICAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChpID09IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSAtIDEpOworCisgICAgICAg
ICAgICBidWlsZFBDVGFibGUoc3RhcnQpOworICAgICAgICAgICAgYnVpbGRDb2RlT3JpZ2luVGFi
bGUoY29kZVJhbmdlLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9k
ZXMuYWRkKHN0YXJ0LCBzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIDEsIGNvZGVSYW5nZS5jb2Rl
T3JpZ2luKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnQobm9kZSk7CisKKyAgICAgICAgICAg
IGlmIChwcmV2aW91cykKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVy
LmxvY2F0aW9uT2YocHJldmlvdXMtPmVuZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3RhcnQpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBwcmV2aW91cyA9ICZjb2RlUmFuZ2U7CisgICAgICAgIH0K
KworICAgICAgICBtX3BjUmFuZ2VFbmQgLT0gMTsKKworICAgICAgICBtX2NvbXByZXNzZWRQQ0J1
ZmZlclNpemUgPSBwY0NvbXByZXNzb3IubV9vZmZzZXQ7CisgICAgICAgIG1fY29tcHJlc3NlZFBD
cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhwY0NvbXByZXNzb3IubV9idWZm
ZXIsIG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZSkpOworCisgICAgICAgIG1fY29tcHJlc3NlZENv
ZGVPcmlnaW5zU2l6ZSA9IGNvZGVPcmlnaW5Db21wcmVzc29yLm1fb2Zmc2V0OworICAgICAgICBt
X2NvbXByZXNzZWRDb2RlT3JpZ2lucyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxv
Yyhjb2RlT3JpZ2luQ29tcHJlc3Nvci5tX2J1ZmZlciwgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNT
aXplKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wY1JhbmdlU3RhcnQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpOworICAgICAgICBtX3BjUmFuZ2VFbmQgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpOworCisgICAgICAgIG1fY29tcHJlc3Nl
ZFBDQnVmZmVyU2l6ZSA9IDA7CisgICAgICAgIG1fY29tcHJlc3NlZFBDcyA9IG51bGxwdHI7Cisg
ICAgICAgIGZhc3RGcmVlKHBjQ29tcHJlc3Nvci5tX2J1ZmZlcik7CisKKyAgICAgICAgbV9jb21w
cmVzc2VkQ29kZU9yaWdpbnNTaXplID0gMDsKKyAgICAgICAgbV9jb21wcmVzc2VkQ29kZU9yaWdp
bnMgPSBudWxscHRyOworICAgICAgICBmYXN0RnJlZShjb2RlT3JpZ2luQ29tcHJlc3Nvci5tX2J1
ZmZlcik7CisgICAgfQorfQorCitkb3VibGUgUENUb0NvZGVPcmlnaW5NYXA6Om1lbW9yeVNpemUo
KQoreworICAgIGRvdWJsZSBzaXplID0gMDsKKyAgICBzaXplICs9IG1fY29tcHJlc3NlZFBDQnVm
ZmVyU2l6ZTsKKyAgICBzaXplICs9IG1fY29tcHJlc3NlZENvZGVPcmlnaW5zU2l6ZTsKKyAgICBy
ZXR1cm4gc2l6ZTsKK30KKworT3B0aW9uYWw8Q29kZU9yaWdpbj4gUENUb0NvZGVPcmlnaW5NYXA6
OmZpbmQodm9pZCogcGMpIGNvbnN0Cit7CisgICAgdWludHB0cl90IHBjQXNJbnQgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihwYyk7CisgICAgaWYgKCEobV9wY1JhbmdlU3RhcnQgPD0gcGNBc0lu
dCAmJiBwY0FzSW50IDw9IG1fcGNSYW5nZUVuZCkpCisgICAgICAgIHJldHVybiBOdWxsb3B0Owor
CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2VudGluZWxWYWx1ZSA9IDA7CisgICAgc3RhdGlj
IGNvbnN0IGludDhfdCBzZW50aW5lbEJ5dGVjb2RlRGVsdGEgPSAwOworCisgICAgdWludHB0cl90
IGN1cnJlbnRWYWx1ZSA9IDA7CisgICAgQ29kZU9yaWdpbiBjdXJyZW50Q29kZU9yaWdpbigwLCBu
dWxscHRyKTsKKyAgICBDb2RlT3JpZ2luIHByZXZpb3VzT3JpZ2luOworCisgICAgRGVsdGFDb21w
cmVzc2Vpb25SZWFkZXIgcGNSZWFkZXIobV9jb21wcmVzc2VkUENzLCBtX2NvbXByZXNzZWRQQ0J1
ZmZlclNpemUpOworICAgIERlbHRhQ29tcHJlc3NlaW9uUmVhZGVyIGNvZGVPcmlnaW5SZWFkZXIo
bV9jb21wcmVzc2VkQ29kZU9yaWdpbnMsIG1fY29tcHJlc3NlZENvZGVPcmlnaW5zU2l6ZSk7Cisg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgdWludHB0cl90IHByZXZpb3VzVmFsdWUgPSBjdXJy
ZW50VmFsdWU7CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgdmFsdWUgPSBwY1JlYWRl
ci5yZWFkPHVpbnQ4X3Q+KCk7CisgICAgICAgICAgICB1aW50cHRyX3QgZGVsdGE7CisgICAgICAg
ICAgICBpZiAodmFsdWUgPT0gc2VudGluZWxWYWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICgh
cGNSZWFkZXIuY2FuUmVhZDx1aW50cHRyX3Q+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlbHRhID0gcGNSZWFk
ZXIucmVhZDx1aW50cHRyX3Q+KCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBkZWx0YSA9IHZhbHVlOworICAgICAgICAgICAgY3VycmVudFZhbHVlICs9IGRlbHRhOworICAg
ICAgICB9CisKKyAgICAgICAgQ29kZU9yaWdpbiBwcmV2aW91c09yaWdpbiA9IGN1cnJlbnRDb2Rl
T3JpZ2luOworICAgICAgICB7CisgICAgICAgICAgICBpbnQ4X3QgdmFsdWUgPSBjb2RlT3JpZ2lu
UmVhZGVyLnJlYWQ8aW50OF90PigpOworICAgICAgICAgICAgaW50cHRyX3QgZGVsdGE7CisgICAg
ICAgICAgICBpZiAodmFsdWUgPT0gc2VudGluZWxCeXRlY29kZURlbHRhKQorICAgICAgICAgICAg
ICAgIGRlbHRhID0gY29kZU9yaWdpblJlYWRlci5yZWFkPGludHB0cl90PigpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHZh
bHVlKTsKKworICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY3VycmVudENvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCkgKyBkZWx0YSk7CisKKyAgICAgICAgICAgIGludDhfdCBoYXNJbmxp
bmVGcmFtZSA9IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxpbnQ4X3Q+KCk7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChoYXNJbmxpbmVGcmFtZSA9PSAwIHx8IGhhc0lubGluZUZyYW1lID09IDEp
OworICAgICAgICAgICAgaWYgKGhhc0lubGluZUZyYW1lKQorICAgICAgICAgICAgICAgIGN1cnJl
bnRDb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxJbmxp
bmVDYWxsRnJhbWUqPigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJl
bnRDb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAocHJldmlvdXNWYWx1ZSkgeworICAgICAgICAgICAgdWludHB0cl90IHN0YXJ0T2ZS
YW5nZSA9IHByZXZpb3VzVmFsdWU7CisgICAgICAgICAgICAvLyBzdWJ0cmFjdCAxIGJlY2F1c2Ug
d2UgZ2VuZXJhdGUgZW5kIHBvaW50cyBpbmNsdXNpdmVseSBpbiB0aGlzIHRhYmxlLCBldmVuIHRo
b3VnaCB3ZSBzZWFyY2ggdGhyb3VnaCBtZWFuaW5nIHJhbmdlcyBhcmU6IFtwcmV2aW91c1ZhbHVl
LCBjdXJyZW50VmFsdWUpCisgICAgICAgICAgICB1aW50cHRyX3QgZW5kT2ZSYW5nZSA9IGN1cnJl
bnRWYWx1ZSAtIDE7CisgICAgICAgICAgICBpZiAoc3RhcnRPZlJhbmdlIDw9IHBjQXNJbnQgJiYg
cGNBc0ludCA8PSBlbmRPZlJhbmdlKQorICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxD
b2RlT3JpZ2luPihwcmV2aW91c09yaWdpbik7IC8vIFdlIHJldHVybiBwcmV2aW91c09yaWdpbiBo
ZXJlIGJlY2F1c2UgQ29kZU9yaWdpbidzIGFyZSBtYXBwZWQgdG8gdGhlIHN0YXJ0VmFsdWUgb2Yg
dGhlIHJhbmdlLgorICAgICAgICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIE51bGxvcHQ7CisKKyAgICAvL05vZGUqIG5vZGUgPSBtX3RyZWUu
ZmluZEV4YWN0KEtleShwYywgcGMpKTsKKyAgICAvL2lmICghbm9kZSkgeworICAgIC8vICAgIGlm
IChmaW5kQ29tcHJlc3NlZCgpKSB7CisgICAgLy8gICAgICAgIGRhdGFMb2coIk5vdCBudWxsXG4i
KTsKKyAgICAvLyAgICAgICAgQ1JBU0goKTsKKyAgICAvLyAgICB9CisgICAgLy8gICAgcmV0dXJu
IE51bGxvcHQ7CisgICAgLy99CisgICAgLy9kYXRhTG9nRigiUEMgc2VhcmNoIFJCVDogJXAsIHJh
bmdlOiBbJXAsICVwXVxuIiwgcGMsIG5vZGUtPmtleSgpLnN0YXJ0LCBub2RlLT5rZXkoKS5lbmQp
OworICAgIC8vYXV0byByZXN1bHQgPSBPcHRpb25hbDxDb2RlT3JpZ2luPihub2RlLT5jb2RlT3Jp
Z2luKCkpOworICAgIC8vYXV0byBhbHRSZXN1bHQgPSBmaW5kQ29tcHJlc3NlZCgpOworICAgIC8v
aWYgKCFhbHRSZXN1bHQpIHsKKyAgICAvLyAgICBkYXRhTG9nKCJjb21wcmVzc2VkIG5vdCBleGlz
dGVudDogIik7CisgICAgLy99CisgICAgLy9kYXRhTG9nRigiUEMgc2VhcmNoIENvbXByZXNzOiAl
cCwgcmFuZ2U6IFslcCwgJXBdXG4iLCBwYywgYml0d2lzZV9jYXN0PHZvaWQqPihjb21wcmVzc2Vk
U3RhcnRSZXN1bHQpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbXByZXNzZWRFbmRSZXN1bHQpKTsK
KyAgICAvL2lmIChyZXN1bHQtPmJ5dGVjb2RlSW5kZXggIT0gYWx0UmVzdWx0LT5ieXRlY29kZUlu
ZGV4KSB7CisgICAgLy8gICAgZGF0YUxvZygiQnl0ZWNvZGUgSW5kaWNlcyBvcmlnaW5zIG5vdCBl
cXVhbDpcbiIpOworICAgIC8vICAgIGRhdGFMb2coIlJCVDogIiwgbm9kZS0+Y29kZU9yaWdpbigp
LCAiXG4iKTsKKyAgICAvLyAgICBkYXRhTG9nKCJDb21wcmVzczogIiwgKmFsdFJlc3VsdCwgIlxu
Iik7CisgICAgLy8gICAgZGF0YUxvZyhyZXN1bHQtPmJ5dGVjb2RlSW5kZXgsICI6IiwgYWx0UmVz
dWx0LT5ieXRlY29kZUluZGV4LCAiXG4iKTsKKyAgICAvLyAgICBDUkFTSCgpOworICAgIC8vfQor
ICAgIC8vaWYgKHJlc3VsdC0+aW5saW5lQ2FsbEZyYW1lICE9IGFsdFJlc3VsdC0+aW5saW5lQ2Fs
bEZyYW1lKSB7CisgICAgLy8gICAgZGF0YUxvZygiSW5saW5lIGZyYW1lcyBub3QgZXF1YWw6XG4i
KTsKKyAgICAvLyAgICBkYXRhTG9nKCJSQlQ6ICIsIG5vZGUtPmNvZGVPcmlnaW4oKSwgIlxuIik7
CisgICAgLy8gICAgZGF0YUxvZygiQ29tcHJlc3M6ICIsICphbHRSZXN1bHQsICJcbiIpOworICAg
IC8vICAgIENSQVNIKCk7CisgICAgLy99CisgICAgLy9yZXR1cm4gcmVzdWx0OworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVP
cmlnaW5NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9D
b2RlT3JpZ2luTWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQQ1Rv
Q29kZU9yaWdpbk1hcF9oCisjZGVmaW5lIFBDVG9Db2RlT3JpZ2luTWFwX2gKKworI2luY2x1ZGUg
IkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0
Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVkQmxh
Y2tUcmVlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgTGlua0J1ZmZlcjsKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKKworY2xh
c3MgRGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIgeworcHVibGljOgorICAgIERlbHRhQ29tcHJlc3Np
b25CdWlsZGVyKHNpemVfdCBtYXhTaXplKQorICAgICAgICA6IG1fb2Zmc2V0KDApCisgICAgICAg
ICwgbV9tYXhTaXplKG1heFNpemUpCisgICAgeworICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKG1fbWF4U2l6ZSkpOworICAgIH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgorICAgIHZvaWQgd3JpdGUoVCBpdGVtKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9vZmZzZXQgKyBzaXplb2YoVCkgPD0gbV9tYXhTaXplKTsKKyAgICAg
ICAgKmJpdHdpc2VfY2FzdDxUKj4obV9idWZmZXIgKyBtX29mZnNldCkgPSBpdGVtOworICAgICAg
ICBtX29mZnNldCArPSBzaXplb2YoVCk7CisgICAgfQorCisgICAgdWludDhfdCogbV9idWZmZXI7
IAorICAgIHNpemVfdCBtX29mZnNldDsKKyAgICBzaXplX3QgbV9tYXhTaXplOworfTsKKworY2xh
c3MgRGVsdGFDb21wcmVzc2Vpb25SZWFkZXIgeworcHVibGljOgorICAgIERlbHRhQ29tcHJlc3Nl
aW9uUmVhZGVyKHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCisgICAgICAgIDogbV9idWZm
ZXIoYnVmZmVyKQorICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgICAgICAsIG1fb2Zmc2V0KDAp
CisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBUIHJlYWQoKQorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FuUmVhZDxUPigpKTsKKyAgICAgICAgVCByZXN1
bHQgPSAqYml0d2lzZV9jYXN0PFQqPihtX2J1ZmZlciArIG1fb2Zmc2V0KTsKKyAgICAgICAgbV9v
ZmZzZXQgKz0gc2l6ZW9mKFQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGJvb2wgY2FuUmVhZCgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9vZmZzZXQgKyBzaXplb2YoVCkgPD0gbV9zaXplOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB1aW50OF90KiBtX2J1ZmZlcjsKKyAgICBzaXplX3QgbV9zaXplOworICAgIHNpemVf
dCBtX29mZnNldDsKK307CisKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQQ1RvQ29kZU9yaWdpbk1hcCk7CitwdWJsaWM6CisgICAgUENUb0NvZGVP
cmlnaW5NYXAoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiwgTGlua0J1ZmZlciYpOworCisgICAg
T3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZCh2b2lkKiBwYykgY29uc3Q7CisKKyAgICBkb3VibGUg
bWVtb3J5U2l6ZSgpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBLZXkgeworICAgICAgICBLZXko
dm9pZCogc3RhcnQsIHZvaWQqIGVuZCkKKyAgICAgICAgICAgIDogc3RhcnQoc3RhcnQpCisgICAg
ICAgICAgICAsIGVuZChlbmQpCisgICAgICAgIHsgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IEtleSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0
cnVlKTsgLy8gIEZJWE1FOiBub3Qgb3ZlcmxhcHBpbmcuCisgICAgICAgICAgICByZXR1cm4gc3Rh
cnQgPCBvdGhlci5zdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRvIGZpbmQgdGhpbmdz
LCB3ZSBhcmUgImVxdWFsIiBpZiB0aGUgb3RoZXIgdGhpbmcgaXMgZW5jbG9zZWQgd2l0aGluIHVz
LgorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5JiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXJ0IDw9IG90aGVyLnN0YXJ0ICYmIG90aGVyLmVu
ZCA8PSBlbmQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkKiBzdGFydDsKKyAgICAgICAgdm9p
ZCogZW5kOworICAgIH07CisKKyAgICBjbGFzcyBOb2RlIDogcHVibGljIFJlZEJsYWNrVHJlZTxO
b2RlLCBLZXk+OjpOb2RlIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
cHVibGljOgorICAgICAgICBOb2RlKHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQsIENvZGVPcmlnaW4g
b3JpZ2luKQorICAgICAgICAgICAgOiBtX2tleShzdGFydCwgZW5kKQorICAgICAgICAgICAgLCBt
X2NvZGVPcmlnaW4ob3JpZ2luKQorICAgICAgICB7IH0KKworICAgICAgICBjb25zdCBDb2RlT3Jp
Z2luJiBjb2RlT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlT3JpZ2luOyB9CisgICAgICAg
IGNvbnN0IEtleSYga2V5KCkgeyByZXR1cm4gbV9rZXk7IH0KKyAgICBwcml2YXRlOgorICAgICAg
ICBLZXkgbV9rZXk7IAorICAgICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICB9Owor
CisgICAgUmVkQmxhY2tUcmVlPE5vZGUsIEtleT4gbV90cmVlOworICAgIEJhZzxOb2RlPiBtX25v
ZGVzOworICAgIHNpemVfdCBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemU7CisgICAgc2l6ZV90IG1f
Y29tcHJlc3NlZENvZGVPcmlnaW5zU2l6ZTsKKyAgICB1aW50OF90KiBtX2NvbXByZXNzZWRQQ3M7
CisgICAgdWludDhfdCogbV9jb21wcmVzc2VkQ29kZU9yaWdpbnM7CisgICAgdWludHB0cl90IG1f
cGNSYW5nZVN0YXJ0OworICAgIHVpbnRwdHJfdCBtX3BjUmFuZ2VFbmQ7Cit9OworCitjbGFzcyBQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcik7CisgICAgZnJpZW5kIGNsYXNzIFBDVG9Db2RlT3JpZ2luTWFw
OworCitwdWJsaWM6CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkKKyAgICB7IH0KKwor
ICAgIHZvaWQgYXBwZW5kSXRlbShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwsIENvZGVPcmlnaW4pOwor
Citwcml2YXRlOgorCisgICAgc3RydWN0IENvZGVSYW5nZSB7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBzdGFydDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGVuZDsKKyAg
ICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOworICAgIH07CisKKyAgICBWZWN0b3I8Q29kZVJh
bmdlPiBtX2NvZGVSYW5nZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IFBDVG9Db2RlT3JpZ2luTWFwX2ggCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMTk1MzAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJMTEludFBDUmFuZ2VzLmgiCiAjaW5j
bHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgorI2luY2x1
ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNs
dWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgpAQCAtODIsMTIgKzgz
LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgc2l6ZV90IHdhbGsoVmVjdG9yPFNh
bXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU+JiBzdGFja1RyYWNlLCBib29sJiBkaWRSdW5PdXRP
ZlNwYWNlLCBib29sJiBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24pCisgICAgc2l6ZV90IHdh
bGsoVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU+JiBzdGFja1RyYWNlLCBib29s
JiBkaWRSdW5PdXRPZlNwYWNlLCBib29sJiBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24sIHZv
aWQqIHRvcFBDKQogICAgIHsKICAgICAgICAgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uID0g
ZmFsc2U7CiAgICAgICAgIGlmIChzUmVwb3J0U3RhdHMpCiAgICAgICAgICAgICBzTnVtVG90YWxX
YWxrcysrOwotICAgICAgICByZXNldEF0TWFjaGluZUZyYW1lKCk7CisgICAgICAgIHJlc2V0QXRN
YWNoaW5lRnJhbWUodG9wUEMpOwogICAgICAgICBzaXplX3QgbWF4U3RhY2tUcmFjZVNpemUgPSBz
dGFja1RyYWNlLnNpemUoKTsKICAgICAgICAgd2hpbGUgKCFpc0F0VG9wKCkgJiYgIW1fYmFpbGlu
Z091dCAmJiBtX2RlcHRoIDwgbWF4U3RhY2tUcmFjZVNpemUpIHsKICAgICAgICAgICAgIHdoaWxl
IChtX2lubGluZUNhbGxGcmFtZSAmJiBtX2RlcHRoIDwgbWF4U3RhY2tUcmFjZVNpemUpIHsKQEAg
LTEzNiw3ICsxMzcsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gIW1fY2FsbEZyYW1lOwog
ICAgIH0KIAotICAgIHZvaWQgcmVzZXRBdE1hY2hpbmVGcmFtZSgpCisgICAgdm9pZCByZXNldEF0
TWFjaGluZUZyYW1lKHZvaWQqIHBjID0gbnVsbHB0cikKICAgICB7CiAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lID0gbnVsbHB0cjsKIApAQCAtMTUxLDkgKzE1Miw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAg
ICAvLyBJZiB0aGUgZnJhbWUgZG9lc24ndCBoYXZlIGEgY29kZSBibG9jaywgdGhlbiBpdCdzIG5v
dCBhIAotICAgICAgICAvLyBERkcvRlRMIGZyYW1lIHdoaWNoIG1lYW5zIHdlJ3JlIG5vdCBhbiBp
bmxpbmVkIGZyYW1lLgogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKICAgICAgICAgaWYgKCFjb2RlQmxvY2spCiAgICAgICAgICAgICByZXR1
cm47CkBAIC0xNjUsNiArMTYzLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAorICAgICAgICBpZiAocGMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBjb25z
aWRlciBjb25jdXJyZW5jeSBoZXJlLgorICAgICAgICAgICAgaWYgKE9wdGlvbmFsPENvZGVPcmln
aW4+IGNvZGVPcmlnaW4gPSBjb2RlQmxvY2stPmZpbmRQQyhwYykpIHsKKyAgICAgICAgICAgICAg
ICBVTlVTRURfUEFSQU0oY29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiRXhl
Y3V0aW5nIGF0IENvZGVPcmlnaW46ICIsICpjb2RlT3JpZ2luLCAiXG4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIC8vIElmIHRoZSBm
cmFtZSBkb2Vzbid0IGhhdmUgYSBjb2RlIGJsb2NrLCB0aGVuIGl0J3Mgbm90IGEgCisgICAgICAg
IC8vIERGRy9GVEwgZnJhbWUgd2hpY2ggbWVhbnMgd2UncmUgbm90IGFuIGlubGluZWQgZnJhbWUu
CisKICAgICAgICAgLy8gSWYgdGhlIGNvZGUgYmxvY2sgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBv
cmlnaW5zLCB0aGVuIHRoZXJlJ3Mgbm8KICAgICAgICAgLy8gaW5saW5pbmcuIEhlbmNlLCB3ZSdy
ZSBub3QgYXQgYW4gaW5saW5lZCBmcmFtZS4KICAgICAgICAgaWYgKCFjb2RlQmxvY2stPmhhc0Nv
ZGVPcmlnaW5zKCkpCkBAIC0yODcsNyArMjk3LDcgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxp
bmdQcm9maWxlcihWTSYgdgogICAgICAgICAgICAgICAgIGJvb2wgc3RhY2t0cmFjZU5lZWRzVmVy
aWZpY2F0aW9uOwogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgRnJhbWVX
YWxrZXIgd2Fsa2VyKGNhbGxGcmFtZSwgbV92bSwgY29kZUJsb2NrU2V0TG9ja2VyLCBtYWNoaW5l
VGhyZWFkc0xvY2tlcik7Ci0gICAgICAgICAgICAgICAgICAgIHdhbGtTaXplID0gd2Fsa2VyLndh
bGsobV9jdXJyZW50RnJhbWVzLCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlLCBzdGFja3RyYWNlTmVl
ZHNWZXJpZmljYXRpb24pOworICAgICAgICAgICAgICAgICAgICB3YWxrU2l6ZSA9IHdhbGtlci53
YWxrKG1fY3VycmVudEZyYW1lcywgZGlkUnVuT3V0T2ZWZWN0b3JTcGFjZSwgc3RhY2t0cmFjZU5l
ZWRzVmVyaWZpY2F0aW9uLCBwYyk7CiAgICAgICAgICAgICAgICAgICAgIHdhc1ZhbGlkV2FsayA9
IHdhbGtlci53YXNWYWxpZFdhbGsoKTsKICAgICAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZp
c2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNs
YXNzIEJhZyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFnKTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CiAgICAgY2xhc3MgTm9kZSB7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9SZWRCbGFja1RyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SZWRC
bGFja1RyZWUuaAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL1dURi93dGYvUmVkQmxhY2tU
cmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2OCw3ICs1NjgsOSBAQCBwcml2YXRlOgogICAgIE5v
ZGVUeXBlKiBtX3Jvb3Q7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpSZWRCbGFja1RyZWU7CiAKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWdtZW50
ZWRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWdtZW50ZWRWZWN0b3Iu
aAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL1dURi93dGYvU2VnbWVudGVkVmVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSw5ICsxNDEsMTggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB2b2lk
IGFwcGVuZChBcmdzJiYuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgKyttX3NpemU7
CisgICAgICAgICAgICBpZiAoIXNlZ21lbnRFeGlzdHNGb3IobV9zaXplIC0gMSkpCisgICAgICAg
ICAgICAgICAgYWxsb2NhdGVTZWdtZW50KCk7CisgICAgICAgICAgICBuZXcgKE5vdE51bGwsICZs
YXN0KCkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIFQmIGFsbG9jKEFyZ3MmJi4u
LiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmQ8VD4oVChzdGQ6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pKTsKKyAgICAgICAgICAgIGFwcGVuZChzdGQ6OmZvcndhcmQ8QXJncz4o
YXJncykuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGxhc3QoKTsKICAgICAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvbS5hcHBsZS5XZWJQcm9jZXNzLnNiLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29tLmFwcGxlLldlYlByb2Nl
c3Muc2IuaW4JKHJldmlzaW9uIDE5NTMwMikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29tLmFwcGxlLldlYlByb2Nlc3Muc2IuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcg
QEAKIDsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAodmVyc2lvbiAxKQotKGRl
bnkgZGVmYXVsdCAod2l0aCBwYXJ0aWFsLXN5bWJvbGljYXRpb24pKQorKGFsbG93IGRlZmF1bHQg
KHdpdGggcGFydGlhbC1zeW1ib2xpY2F0aW9uKSkKIChhbGxvdyBzeXN0ZW0tYXVkaXQgZmlsZS1y
ZWFkLW1ldGFkYXRhKQogCiAoaW1wb3J0ICJzeXN0ZW0uc2IiKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269532</attachid>
            <date>2016-01-21 18:27:18 -0800</date>
            <delta_ts>2016-01-25 16:40:49 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>56645</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUzMDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI4Niw2ICsxMjg2LDggQEAKIAkJNzBFQ0E2MDcxQUZE
QkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRl
bXBsYXRlUmVnaXN0cnkuY3BwICovOyB9OwogCQk3MEVDQTYwODFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzBFQ0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MEVDQTYw
OTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVP
cmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmNwcCAqLzsg
fTsKKwkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0ODFDNEVF
RDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyog
R2V0UHV0SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTdFMDdBOTFCOEZDRkI5MDA4
NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTcxQjhGQ0ZCOTAwODQwMEJBIC8q
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLzsgfTsKIAkJNzk3RTA3QUExQjhGQ0ZC
OTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzQ2NCw2ICszNDY2LDggQEAKIAkJNzBFQ0E2MDIx
QUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lz
dHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0Nv
ZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1
MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdB
NzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4
NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUwOTgsNiArNTEwMiw4IEBACiAJCQkJMEZDNzEyRTExN0NEODc4
RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJ
CQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAogCQkJ
CUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAorCQkJCTc5
MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi8sCisJCQkJ
NzkyQ0IzNDgxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggKi8sCiAJCQkJ
MEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNw
cCAqLywKIAkJCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAq
LywKQEAgLTY5NzQsNiArNjk4MCw3IEBACiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzczMDkzMUMwRDY3RUUwMDA1MkJGQSAv
KiBBaXJVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYy
QTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzkyQ0Iz
NEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzlENUNENUIxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzMxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dl
ck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTA5LDYgKzg5MTYsNyBAQAogCQkJCTBGOEYx
NDM1MUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjJDRDVCMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zm
c2V0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMg
LyogREZHTmF0dXJhbExvb3BzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5MkNCMzQ5MUM0RUVE
NUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkIzODc4RjFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxh
Z3MuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTk1
MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBpbmxpbmUgYm9vbCBv
cHRpbWl6ZUZvclg4Nl82NCgpCiBjbGFzcyBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2U7
CiBjbGFzcyBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2U7CiBjbGFzcyBMaW5rQnVm
ZmVyOworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwogY2xhc3MgV2F0Y2hwb2ludDsK
IG5hbWVzcGFjZSBERkcgewogc3RydWN0IE9TUkV4aXQ7CkBAIC0zOTMsNiArMzk0LDcgQEAgcHVi
bGljOgogICAgICAgICBmcmllbmQgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogICAgICAg
ICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhdGNocG9p
bnQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CiAKICAg
ICBwdWJsaWM6CiAgICAgICAgIExhYmVsKCkKQEAgLTQwNSw2ICs0MDcsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtYXNtLT5pbnZhbGlkYXRlQWxsVGVtcFJlZ2lzdGVycygpOwogICAgICAgICB9
CiAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExhYmVsJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9sYWJlbCA9PSBvdGhlci5tX2xhYmVsOyB9CisKICAgICAgICAgYm9vbCBpc1NldCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwuaXNTZXQoKTsgfQogICAgIHByaXZhdGU6CiAgICAgICAg
IEFzc2VtYmxlckxhYmVsIG1fbGFiZWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9uIDE5NTMwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDYgKzU2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1
cm4gQXNzZW1ibGVyTGFiZWwobV9vZmZzZXQgKyBvZmZzZXQpOwogICAgICAgICB9CiAKKyAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFzc2VtYmxlckxhYmVsJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQ7IH0KKwogICAgICAgICB1aW50MzJfdCBt
X29mZnNldDsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
aWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
cGlsYXRpb24uY3BwCShyZXZpc2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCkBAIC00NSw3ICs0Niw4IEBAIENvbXBpbGF0aW9u
OjpDb21waWxhdGlvbihWTSYgdm0sIFByb2NlZHUKICAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihw
cm9jLCBvcHRMZXZlbCk7CiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOwotICAgIGdl
bmVyYXRlKHByb2MsIGppdCk7CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHVudXNlZEJ1
aWxkZXI7CisgICAgZ2VuZXJhdGUocHJvYywgaml0LCB1bnVzZWRCdWlsZGVyKTsKICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgbnVsbHB0cik7CiAKICAgICBtX2NvZGVSZWYgPSBG
SU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiQjM6OkNvbXBpbGF0aW9uIikpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1MzAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiQjNSZWR1Y2VTdHJlbmd0aC5oIgogI2luY2x1ZGUg
IkIzVGltaW5nU2NvcGUuaCIKICNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAg
LTUzLDkgKzU0LDkgQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihQcm9jZWR1cmUmIHBybwog
ICAgIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlLmNvZGUoKSk7CiB9CiAKLXZv
aWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENDYWxsSGVscGVycyYgaml0KQordm9p
ZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBqaXQsIFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlciYgYnVpbGRlcikKIHsKLSAgICBBaXI6OmdlbmVyYXRlKHByb2Nl
ZHVyZS5jb2RlKCksIGppdCk7CisgICAgQWlyOjpnZW5lcmF0ZShwcm9jZWR1cmUuY29kZSgpLCBq
aXQsIGJ1aWxkZXIpOwogfQogCiB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIHVuc2lnbmVkIG9wdExldmVsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5l
cmF0ZS5oCShyZXZpc2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
OwogCiBuYW1lc3BhY2UgQjMgewogCkBAIC00NCw3ICs0NSw3IEBAIHZvaWQgcHJlcGFyZUZvckdl
bmVyYXRpb24oUHJvY2VkdXJlJiwgdW4KIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlIHRo
YXQgaGFzIGJlZW4gcHJlcGFyZWQgZm9yIGdlbmVyYXRpb24gKGkuZS4gaXQgaGFzIGJlZW4gbG93
ZXJlZCB0byBBaXIgYW5kCiAvLyB0aGUgQWlyIGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0
aW9uKSBhbmQgZ2VuZXJhdGVzIGl0LiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGNhbGxpbmcK
IC8vIEFpcjo6Z2VuZXJhdGUoKSBvbiB0aGUgUHJvY2VkdXJlOjpjb2RlKCkuCi12b2lkIGdlbmVy
YXRlKFByb2NlZHVyZSYsIENDYWxsSGVscGVycyYpOwordm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUm
LCBDQ2FsbEhlbHBlcnMmLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImKTsKIAogLy8gVGhpcyB0
YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1wbGFjZSwgYW5kIGxvd2VycyBp
dCB0byBBaXIuIFlvdSBjYW4gdGhlbiBnZW5lcmF0ZQogLy8gdGhlIEFpciB0byBtYWNoaW5lIGNv
ZGUgdXNpbmcgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbigpIGFuZCBBaXI6OmdlbmVyYXRlKCkg
b24gdGhlIFByb2NlZHVyZSdzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDgg
QEAKICNpbmNsdWRlICJCM1RpbWluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CiAjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisjaW5jbHVk
ZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIApAQCAtMTM1LDcgKzEzNyw3
IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICB9CiB9CiAKLXZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit2b2lkIGdlbmVyYXRl
KENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgaml0LCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIm
IHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcikKIHsKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29w
ZSgiQWlyOjpnZW5lcmF0ZSIpOwogCkBAIC0xNzEsMTIgKzE3MywyNiBAQCB2b2lkIGdlbmVyYXRl
KENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIGJsb2NrSnVtcHNbdGFyZ2V0XS5h
cHBlbmQoanVtcCk7CiAgICAgfTsKIAorICAgIGF1dG8gYWRkSXRlbSA9IFsmXSAoSW5zdCYgaW5z
dCkgeworICAgICAgICBpZiAoIWluc3Qub3JpZ2luKSB7CisgICAgICAgICAgICBwY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShqaXQubGFiZWwoKSwgQ29kZU9yaWdpbigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBERkc6Ok5vZGUqIG5vZGUgPSBi
aXR3aXNlX2Nhc3Q8REZHOjpOb2RlKj4oaW5zdC5vcmlnaW4tPm9yaWdpbigpLmRhdGEoKSk7Cisg
ICAgICAgIGlmIChub2RlKQorICAgICAgICAgICAgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0oaml0LmxhYmVsKCksIG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGppdC5s
YWJlbCgpLCBDb2RlT3JpZ2luKCkpOworICAgIH07CisKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogY29kZSkgewogICAgICAgICBibG9ja0p1bXBzW2Jsb2NrXS5saW5rKCZqaXQpOwogICAg
ICAgICBibG9ja0xhYmVsc1tibG9ja10gPSBqaXQubGFiZWwoKTsKICAgICAgICAgQVNTRVJUKGJs
b2NrLT5zaXplKCkgPj0gMSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9j
ay0+c2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVt
cCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGFkZEl0ZW0oaW5zdCk7CisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGluc3QuZ2VuZXJhdGUoaml0LCBjb250
ZXh0KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7CiAg
ICAgICAgIH0KIApAQCAtMTg0LDYgKzIwMCw4IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwg
Q0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9
PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAg
ICAgICAgYWRkSXRlbShibG9jay0+bGFzdCgpKTsKKwogICAgICAgICBpZiAoaXNSZXR1cm4oYmxv
Y2stPmxhc3QoKS5vcGNvZGUpKSB7CiAgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3Qg
cmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0
bwogICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRlLgpAQCAtMTk4LDYgKzIxNiw3IEBA
IHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZVdpdGhFbXB0eUZy
YW1lKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICBhZGRJdGVtKGJsb2Nr
LT5sYXN0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMjE4LDYg
KzIzNyw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQorICAgICAgICBhZGRJdGVtKGJsb2NrLT5sYXN0KCkpOwogICAgIH0KIAogICAg
IGZvciAoYXV0byYgbGF0ZVBhdGggOiBjb250ZXh0LmxhdGVQYXRocykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDE5NTMwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENDYWxsSGVscGVy
czsKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKIAogbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CiAKQEAgLTQyLDcgKzQzLDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
cmVwYXJlRm9yR2VuZXJhdAogCiAvLyBUaGlzIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUg
Z2l2ZW4gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxs
YmFja3MKIC8vIGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzIGdlbmVyYXRpbmcuCi1KU19F
WFBPUlRfUFJJVkFURSB2b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKK0pTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYsIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlciYpOwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2aXNpb24g
MTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRp
bmcuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgor
I2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHVyZU5hTi5oIgogI2lu
Y2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8Y21hdGg+CkBAIC03OSw3ICs4MCw4IEBAIHN0ZDo6dW5p
cXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvbXBpbGUKIHsKICAgICBwcmVwYXJlRm9yR2VuZXJh
dGlvbihwcm9jLmNvZGUoKSk7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7Ci0gICAgZ2VuZXJh
dGUocHJvYy5jb2RlKCksIGppdCk7CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHVudXNl
ZEJ1aWxkZXI7CisgICAgZ2VuZXJhdGUocHJvYy5jb2RlKCksIGppdCwgdW51c2VkQnVpbGRlcik7
CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKIAogICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTk1MzAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNp
bmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nl
c3MuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUmVkdWNlV2hp
dGVzcGFjZS5oIgpAQCAtMjQ4MSw2ICsyNDgyLDMzIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2UKIAogdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CisvLyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkgeworLy8j
ZGVmaW5lIEFTKHZlY3RvciwgaXRlbSkgc2l6ZSArPSB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKGl0
ZW0pCisvLyAgICAgICAgZG91YmxlIHNpemUgPSAwOworLy8gICAgICAgIHNpemUgKz0gc2l6ZW9m
KENvZGVCbG9jayk7CisvLyAgICAgICAgQVMobV9sbGludENhbGxMaW5rSW5mb3MsIExMSW50Q2Fs
bExpbmtJbmZvKTsKKy8vICAgICAgICBBUyhtX2FyZ3VtZW50VmFsdWVQcm9maWxlcywgVmFsdWVQ
cm9maWxlKTsKKy8vICAgICAgICBBUyhtX3ZhbHVlUHJvZmlsZXMsIFZhbHVlUHJvZmlsZSk7Cisv
LyAgICAgICAgQVMobV9yYXJlQ2FzZVByb2ZpbGVzLCBSYXJlQ2FzZVByb2ZpbGUpOworLy8gICAg
ICAgIEFTKG1fcmVzdWx0UHJvZmlsZXMsIFJlc3VsdFByb2ZpbGUpOworLy8gICAgICAgIEFTKG1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUpOworLy8gICAg
ICAgIEFTKG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzLCBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSk7CisvLyAgICAgICAgQVMobV9jb25zdGFudFJlZ2lzdGVycywgV3JpdGVCYXJyaWVyPFVua25v
d24+KTsKKy8vICAgICAgICBBUyhtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwg
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKKy8vICAgICAgICBBUyhtX2Z1bmN0aW9uRGVjbHMs
IFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+KTsKKy8vICAgICAgICBBUyhtX2Z1bmN0
aW9uRXhwcnMsIFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+KTsKKy8vICAgICAgICBB
UyhtX2luc3RydWN0aW9ucywgSW5zdHJ1Y3Rpb24pOworLy8gICAgICAgIEFTKG1fdW5saW5rZWRD
b2RlLT5leHByZXNzaW9uSW5mbygpLCBFeHByZXNzaW9uUmFuZ2VJbmZvKTsKKy8vCisvLyAgICAg
ICAgZGF0YUxvZ0YoIlNpemVcblx0Qnl0ZXM6JWxmXG5cdEtCOiVsZlxuXHRNQjolbGZcbiIsIHNp
emUsIHNpemUvMTAyNC4wLCBzaXplLygxMDI0LjAqMTAyNC4wKSk7CisvLyAgICAgICAgLy9kb3Vi
bGUgcHJvamVjdGVkU2l6ZSA9ICgxLmYgKyA5LmYpKihtX2luc3RydWN0aW9ucy5zaXplKCkgLyA0
LmYpOworLy8gICAgICAgIGRvdWJsZSBwcm9qZWN0ZWRTaXplID0gbV9wY1RvQ29kZU9yaWdpbk1h
cC0+bWVtb3J5U2l6ZSgpOworLy8gICAgICAgIGRhdGFMb2dGKCJQcm9qZWN0ZWQgc2l6ZVxuXHRC
eXRlczolbGZcblx0S0I6JWxmXG5cdE1COiVsZlxuIiwgcHJvamVjdGVkU2l6ZSwgcHJvamVjdGVk
U2l6ZS8xMDI0LjAsIHByb2plY3RlZFNpemUvKDEwMjQuMCoxMDI0LjApKTsKKy8vICAgICAgICBk
YXRhTG9nRigiUHJvamVjdGVkIHNpemUgUGVyY2VudDogJWxmXG4iLCAocHJvamVjdGVkU2l6ZS8o
c2l6ZSArIHByb2plY3RlZFNpemUpKjEwMC5mKSk7CisvLyAgICAgICAgZGF0YUxvZygiXG5cbiIp
OworLy8jdW5kZWYgQVMKKy8vICAgIH0KKwogICAgIC8vIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRo
YXQgbWF5IHVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnM6IGlubGluZSBjYWNoZSBjbGVhcmlu
ZwogICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcg
dG8gZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncwogICAgIC8vIGlzIHByb2JhYmx5IHF1
aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQgYW5kIHdoZW4gaXQg
cnVucywgaXQKQEAgLTQyNzUsNCArNDMwMyw1NSBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFz
aWNCbG9ja0JvdW5kYXJpCiAgICAgfQogfQogCit2b2lkIENvZGVCbG9jazo6c2V0UENUb0NvZGVP
cmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmIG1hcCkgCit7IAor
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1hcCk7CisgICAgcmV0dXJuOworCisg
ICAgeworI2RlZmluZSBBUyh2ZWN0b3IsIGl0ZW0pIHNpemUgKz0gdmVjdG9yLnNpemUoKSAqIHNp
emVvZihpdGVtKQorICAgICAgICBkb3VibGUgc2l6ZSA9IDA7CisgICAgICAgIHNpemUgKz0gc2l6
ZW9mKENvZGVCbG9jayk7CisgICAgICAgIEFTKG1fbGxpbnRDYWxsTGlua0luZm9zLCBMTEludENh
bGxMaW5rSW5mbyk7CisgICAgICAgIEFTKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBWYWx1ZVBy
b2ZpbGUpOworICAgICAgICBBUyhtX3ZhbHVlUHJvZmlsZXMsIFZhbHVlUHJvZmlsZSk7CisgICAg
ICAgIEFTKG1fcmFyZUNhc2VQcm9maWxlcywgUmFyZUNhc2VQcm9maWxlKTsKKyAgICAgICAgQVMo
bV9yZXN1bHRQcm9maWxlcywgUmVzdWx0UHJvZmlsZSk7CisgICAgICAgIEFTKG1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZXMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUpOworICAgICAgICBBUyhtX29i
amVjdEFsbG9jYXRpb25Qcm9maWxlcywgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUpOworICAgICAg
ICBBUyhtX2NvbnN0YW50UmVnaXN0ZXJzLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgICAg
ICBBUyhtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKTsKKyAgICAgICAgQVMobV9mdW5jdGlvbkRlY2xzLCBXcml0ZUJhcnJpZXI8RnVu
Y3Rpb25FeGVjdXRhYmxlPik7CisgICAgICAgIEFTKG1fZnVuY3Rpb25FeHBycywgV3JpdGVCYXJy
aWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4pOworICAgICAgICBBUyhtX2luc3RydWN0aW9ucywgSW5z
dHJ1Y3Rpb24pOworCisgICAgICAgIGRhdGFMb2dGKCJTaXplXG5cdEJ5dGVzOiVsZlxuXHRLQjol
bGZcblx0TUI6JWxmXG4iLCBzaXplLCBzaXplLzEwMjQuMCwgc2l6ZS8oMTAyNC4wKjEwMjQuMCkp
OworICAgICAgICAvL2RvdWJsZSBwcm9qZWN0ZWRTaXplID0gKDEuZiArIDkuZikqKG1faW5zdHJ1
Y3Rpb25zLnNpemUoKSAvIDQuZik7CisgICAgICAgIGRvdWJsZSBwcm9qZWN0ZWRTaXplID0gbV9w
Y1RvQ29kZU9yaWdpbk1hcC0+bWVtb3J5U2l6ZSgpOworICAgICAgICBkYXRhTG9nRigiUHJvamVj
dGVkIHNpemVcblx0Qnl0ZXM6JWxmXG5cdEtCOiVsZlxuXHRNQjolbGZcbiIsIHByb2plY3RlZFNp
emUsIHByb2plY3RlZFNpemUvMTAyNC4wLCBwcm9qZWN0ZWRTaXplLygxMDI0LjAqMTAyNC4wKSk7
CisgICAgICAgIGRhdGFMb2dGKCJQcm9qZWN0ZWQgc2l6ZSBQZXJjZW50OiAlbGZcbiIsIChwcm9q
ZWN0ZWRTaXplLyhzaXplICsgcHJvamVjdGVkU2l6ZSkqMTAwLmYpKTsKKyAgICAgICAgZGF0YUxv
ZygiXG5cbiIpOworI3VuZGVmIEFTCisgICAgfQorfQorCitPcHRpb25hbDxDb2RlT3JpZ2luPiBD
b2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKK3sKKyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1h
cCkgeworICAgICAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1fcGNU
b0NvZGVPcmlnaW5NYXAtPmZpbmQocGMpKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47
CisgICAgfQorI2lmIEVOQUJMRShKSVQpCisgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+
OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsK
KyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIgPSAqaXRlcjsKKyAgICAgICAgaWYgKHN0
dWItPmNvbnRhaW5zUEMocGMpKSB7CisgICAgICAgICAgICAvL2RhdGFMb2coIkZvdW5kIGluIHN0
dWI6ICIsIGluZmVycmVkTmFtZSgpLCAiXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25h
bDxDb2RlT3JpZ2luPihzdHViLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoSklUKQorCisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OwogY2xhc3MgVHlwZUxv
Y2F0aW9uOwogY2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVudDsKK2NsYXNzIFBDVG9Db2RlT3JpZ2lu
TWFwOwogCiBlbnVtIFJlb3B0aW1pemF0aW9uTW9kZSB7IERvbnRDb3VudFJlb3B0aW1pemF0aW9u
LCBDb3VudFJlb3B0aW1pemF0aW9uIH07CiAKQEAgLTkyNyw2ICs5MjgsMTAgQEAgcHVibGljOgog
CiAgICAgQ2FsbFNpdGVJbmRleCBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2Fs
bFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKTsKIAorICAgIHZvaWQgc2V0UENUb0NvZGVPcmln
aW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKKyAgICBQQ1RvQ29k
ZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBjb25zdCB7IHJldHVybiBtX3BjVG9Db2Rl
T3JpZ2luTWFwLmdldCgpOyB9CisgICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQq
IHBjKTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNhY2hlcygp
OwogICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwpAQCAtMTA5Nyw2
ICsxMTAyLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSklUKQogICAgIERGRzo6Q2FwYWJpbGl0
eUxldmVsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAKICAgICBVbmNvbmRp
dGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTk1MzAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMTAyLDYgKzEwMiw5IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAgICBib29sIGlzQXBw
cm94aW1hdGVseUVxdWFsVG8oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0OwogICAgIAog
ICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaCgpIGNvbnN0OworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rp
b24mKTsKICAgICAKICAgICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBh
bmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2lu
PiBpbmxpbmVTdGFjaygpIGNvbnN0OwpAQCAtMTI3LDcgKzEzMCw3IEBAIGlubGluZSBib29sIENv
ZGVPcmlnaW46Om9wZXJhdG9yPT0oY29uc3QKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA9PSBv
dGhlci5ieXRlY29kZUluZGV4CiAgICAgICAgICYmIGlubGluZUNhbGxGcmFtZSA9PSBvdGhlci5p
bmxpbmVDYWxsRnJhbWU7CiB9Ci0gICAgCisKIHN0cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ29kZU9yaWdpbiYga2V5KSB7IHJldHVybiBrZXku
aGFzaCgpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29u
c3QgQ29kZU9yaWdpbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCShyZXZpc2lvbiAxOTUz
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0Niw2ICsyNDYsMTQgQEAgaW5saW5lIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2tGb3JPcgogICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsKIH0KIAor
dGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgoraW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fs
a1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIGZvciAoSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0aGlzLT5pbmxpbmVDYWxsRnJhbWU7IGlu
bGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RD
YWxsZXIuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBmdW5jdGlvbihpbmxpbmVDYWxsRnJhbWUp
OworfQorICAgIAorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuaAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw2ICszMjQsMTQgQEAg
cHVibGljOgogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnNQQyh2b2lkKiBwYykgY29uc3QKKyAg
ICB7IAorICAgICAgICBpZiAoIW1fc3R1YlJvdXRpbmUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgdWludHB0cl90IHBjQXNJbnQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihwYyk7CisgICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLT5zdGFydEFkZHJlc3MoKSA8PSBw
Y0FzSW50ICYmIHBjQXNJbnQgPD0gbV9zdHViUm91dGluZS0+ZW5kQWRkcmVzcygpOworICAgIH0K
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWNjZXNzQ2FzZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
cmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCwxMyBAQCB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgcmVzZXQoY29kZUJsb2Nr
KTsKICAgICByZXNldEJ5R0MgPSB0cnVlOwogfQorCitib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpj
b250YWluc1BDKHZvaWQqIHBjKSBjb25zdAoreworICAgIGlmIChjYWNoZVR5cGUgIT0gQ2FjaGVU
eXBlOjpTdHViKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHUuc3R1Yi0+Y29u
dGFpbnNQQyhwYyk7Cit9CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAko
cmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsOCBAQCBwdWJsaWM6
CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleDsKIAorICAgIGJvb2wgY29udGFpbnNQQyh2b2lkKiBwYykgY29uc3Q7CisKICAgICB1bmlv
biB7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxOTUzMDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFR5cGVQ
cm9maWxlckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25l
ZCBzdGFydERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCk7CiAKICAgICBib29sIGhhc0V4cHJlc3Np
b25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXplKCk7IH0KKyAgICBjb25zdCBW
ZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9l
eHByZXNzaW9uSW5mbzsgfQogCiAgICAgLy8gU3BlY2lhbCByZWdpc3RlcnMKICAgICB2b2lkIHNl
dFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lz
dGVyID0gdGhpc1JlZ2lzdGVyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uLmgJKHJldmlzaW9uIDE5NTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogLy8gV2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gZXhwZXJpbWVu
dGFsIHRyYW5zaXRpb24gZnJvbSBMTFZNIHRvIEIzIGFzIHRoZSBiYWNrZW5kIGZvciB0aGUgRlRM
LiBXZSBkb24ndAogLy8geWV0IGtub3cgaG93IGl0IHdpbGwgdHVybiBvdXQuIEZvciBub3csIHRo
aXMgZmxhZyB3aWxsIGNvbnRyb2wgd2hldGhlciBGVEwgdXNlcyBCMy4gUmVtZW1iZXIgdG8gc2V0
IHRoaXMKIC8vIHRvIDAgYmVmb3JlIGNvbW1pdHRpbmchCi0jZGVmaW5lIEZUTF9VU0VTX0IzIDAK
KyNkZWZpbmUgRlRMX1VTRVNfQjMgMQogCiBzdHJ1Y3QgTm9kZTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE5NTMwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDUsNiArMzA1LDggQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVm
ZmVyJiBsaW5rQgogICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRs
ZXIobmV3RXhjZXB0aW9uSGFuZGxlcik7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBtX2NvZGVC
bG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQQ1RvQ29kZU9yaWdp
bk1hcD4obV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIsIGxpbmtCdWZmZXIpKTsKIH0KIAogdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcg
QEAKICNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlBDVG9Db2Rl
T3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVGVtcFJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtMTE4LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICAvLyBNZXRob2RzIHRvIHNldCBs
YWJlbHMgZm9yIHRoZSBkaXNhc3NlbWJsZXIuCiAgICAgdm9pZCBzZXRTdGFydE9mQ29kZSgpCiAg
ICAgeworICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
SWdub3JpbmdXYXRjaHBvaW50cygpLCBDb2RlT3JpZ2luKDAsIG51bGxwdHIpKTsKICAgICAgICAg
aWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+c2V0U3RhcnRPZkNvZGUobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRz
KCkpOwpAQCAtMTM5LDYgKzE0MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHNldEVuZE9m
TWFpblBhdGgoKQogICAgIHsKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgQ29kZU9yaWdpbigpKTsgLy8gRklY
TUU6IFdlIHdhbnQgdG8gaGFuZGxlIHNsb3cgcGF0aCBnZW5lcmF0b3JzLCBldGMuCiAgICAgICAg
IGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mTWFpblBhdGgobGFiZWxJZ25vcmluZ1dhdGNocG9p
bnRzKCkpOwpAQCAtMTQ2LDYgKzE0OSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHNldEVu
ZE9mQ29kZSgpCiAgICAgeworICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBl
bmRJdGVtKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBDb2RlT3JpZ2luKCkpOyAvLyBGSVhN
RTogV2Ugd2FudCB0byBoYW5kbGUgc2xvdyBwYXRoIGdlbmVyYXRvcnMsIGV0Yy4KICAgICAgICAg
aWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygp
KTsKQEAgLTI2NSw2ICsyNjksOCBAQCBwdWJsaWM6CiAKICAgICBDYWxsU2l0ZUluZGV4IHJlY29y
ZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb25z
dCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgZXZlbnRTdHJlYW1JbmRleCk7CiAKKyAgICBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXImIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigpIHsgcmV0dXJuIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IE9TUkV4aXRKdW1wUGxhY2Vob2xkZXI7CiAgICAgCkBAIC0zMjgsNiArMzM0LDcgQEAgcHJpdmF0
ZToKICAgICBDYWxsIG1fY2FsbEFyaXR5Rml4dXA7CiAgICAgTGFiZWwgbV9hcml0eUNoZWNrOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTcGVjdWxhdGl2ZUpJVD4gbV9zcGVjdWxhdGl2ZTsKKyAgICBQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTk1MzAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MDQsNiArMTUwNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJy
ZW50QmxvY2sKICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxp
bmcoKSAmJiBtYXlFeGl0KG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUpICE9IERvZXNOb3RF
eGl0KQogICAgICAgICAgICAgbV9qaXQuaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAK
KyAgICAgICAgbV9qaXQucGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkuYXBwZW5kSXRlbShtX2pp
dC5sYWJlbCgpLCBtX29yaWdpbi5zZW1hbnRpYyk7CisKICAgICAgICAgY29tcGlsZShtX2N1cnJl
bnROb2RlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChiZWxvbmdzSW5NaW5pZmllZEdyYXBoKG1f
Y3VycmVudE5vZGUtPm9wKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExC
M0NvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QjNDb21waWxlLmNwcAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExCM0NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAj
aW5jbHVkZSAiRlRMVW53aW5kSW5mby5oIgogI2luY2x1ZGUgIkpJVFN1YkdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgog
I2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CkBAIC0xMTMsOCArMTE0LDkgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBz
dGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIC8vIFdlIHdpbGwgYWRkIGV4Y2VwdGlvbiBoYW5kbGVy
cyB3aGlsZSBnZW5lcmF0aW5nLgogICAgIGNvZGVCbG9jay0+Y2xlYXJFeGNlcHRpb25IYW5kbGVy
cygpOwogCisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHBjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlcjsKICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKLSAgICBCMzo6Z2Vu
ZXJhdGUoKnN0YXRlLnByb2MsIGppdCk7CisgICAgQjM6OmdlbmVyYXRlKCpzdGF0ZS5wcm9jLCBq
aXQsIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik7CiAKICAgICAvLyBFbWl0IHRoZSBleGNlcHRp
b24gaGFuZGxlci4KICAgICAqc3RhdGUuZXhjZXB0aW9uSGFuZGxlciA9IGppdC5sYWJlbCgpOwpA
QCAtMTM1LDYgKzEzNyw4IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6
UmUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGNvZGVCbG9jay0+c2V0UENUb0NvZGVP
cmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4ocGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKSk7CisKICAg
ICBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxHZW5lcmF0ZWRGdW5jdGlv
bj4oCiAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+ZW50cnlwb2lu
dCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVC
M0J5cHJvZHVjdHMoc3RhdGUucHJvYy0+cmVsZWFzZUJ5cHJvZHVjdHMoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmln
aW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUmVzdWx0
VHlwZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgpAQCAtMTQyLDcgKzE0Myw3IEBAIHZv
aWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgICAgICBORVhUX09QQ09ERShu
YW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQordm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBw
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpCiB7CiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsK
ICAgICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwpAQCAtMTU4LDYgKzE1OSw4IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2luICsgbV9ieXRlY29kZU9mZnNldDsK
ICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2ludGVycHJldGVyLT5pc09wY29kZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSwgInByaXZhdGVDb21waWxlTWFpblBhc3MgZ29uZSBi
YWQgQCAlZCIsIG1fYnl0ZWNvZGVPZmZzZXQpOwogCisgICAgICAgIHBjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCkp
OworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVP
ZmZzZXQgPiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdp
Y2UuCiAgICAgICAgICAgICBzYW1wbGVJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOwpA
QCAtMzQ1LDcgKzM0OCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCkKICAg
ICBtX2ptcFRhYmxlLmNsZWFyKCk7CiB9CiAKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoUENUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpCiB7CiAgICAgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7
CiAKQEAgLTM2NSw2ICszNjgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93
Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKICAgICAgICAgbV9i
eXRlY29kZU9mZnNldCA9IGl0ZXItPnRvOwogCisgICAgICAgIHBjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCkpOwor
CiAgICAgICAgIHVuc2lnbmVkIGZpcnN0VG8gPSBtX2J5dGVjb2RlT2Zmc2V0OwogCiAgICAgICAg
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNCZWdpbiArIG1f
Ynl0ZWNvZGVPZmZzZXQ7CkBAIC01MTksNiArNTI0LDkgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklU
Ojpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5
dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CiAgICAg
fQogICAgIAorICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciBwY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXI7CisgICAgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwg
Q29kZU9yaWdpbigwLCBudWxscHRyKSk7CisKICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbCgpKTsKIApAQCAtNTY1LDkg
KzU3Myw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICBl
bWl0U2F2ZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3Rl
cnMoKTsKIAotICAgIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKKyAgICBwcml2YXRlQ29tcGls
ZU1haW5QYXNzKHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik7CiAgICAgcHJpdmF0ZUNvbXBpbGVM
aW5rUGFzcygpOwotICAgIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CisgICAgcHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMocGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKTsKICAgICAKICAgICBpZiAo
bV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRo
KGxhYmVsKCkpOwpAQCAtNzA4LDYgKzcxNiw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJp
dmF0ZUNvbXBpbGUoSkkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIo
bV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwogICAgICAgICBtX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29tcGlsYXRpb24pOwogICAgIH0KKwor
ICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBD
VG9Db2RlT3JpZ2luTWFwPihwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIsIHBhdGNoQnVmZmVyKSk7
IC8vIEZJWE1FOiBnZXQgdGhlIGVuZCBvZiB0aGUgY29kZSByZWdpb24gYXMgQ29kZU9yaWdpbigp
LgogICAgIAogICAgIENvZGVSZWYgcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0
Y2hCdWZmZXIsCkBAIC03MTYsNyArNzI2LDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2
YXRlQ29tcGlsZShKSQogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRG
b3JCYXNlbGluZUpJVC5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNp
emUoKSkgLwogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5zaXplKCkpKTsKLSAgICAKKwogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChD
b2RlQmxvY2s6OkxhdGVTaHJpbmspOwogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAg
ICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBK
SVRDb2RlOjpCYXNlbGluZUpJVCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU1Nj
b3BlOwogICAgIGNsYXNzIEpTU3RhY2s7CiAgICAgY2xhc3MgTWFya2VkQWxsb2NhdG9yOworICAg
IGNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKICAgICBjbGFzcyBSZWdpc3RlcjsKICAg
ICBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKICAgICBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKQEAg
LTI1OCw5ICsyNTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBK
SVQoVk0qLCBDb2RlQmxvY2sqID0gMCk7CiAKLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCk7CisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcyhQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXImKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7
Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKKyAgICAgICAgdm9pZCBw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcyhQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImKTsKICAgICAg
ICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQp
OwogICAgICAgICAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5m
byosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9y
aWdpbk1hcC5oIgorCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsK
Kwordm9pZCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmFwcGVuZEl0ZW0oTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGxhYmVsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgaWYgKG1fY29k
ZVJhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgaWYgKG1fY29kZVJhbmdlcy5sYXN0KCkuZW5kID09
IGxhYmVsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2NvZGVSYW5nZXMubGFzdCgp
LmVuZCA9IGxhYmVsOworICAgICAgICBpZiAobV9jb2RlUmFuZ2VzLmxhc3QoKS5jb2RlT3JpZ2lu
ID09IGNvZGVPcmlnaW4gfHwgIWNvZGVPcmlnaW4pCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9jb2RlUmFuZ2VzLmFwcGVuZChDb2RlUmFuZ2V7bGFiZWwsIGxhYmVsLCBjb2Rl
T3JpZ2lufSk7Cit9CisKK1BDVG9Db2RlT3JpZ2luTWFwOjpQQ1RvQ29kZU9yaWdpbk1hcChQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXImIGJ1aWxkZXIsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7
CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2UqIHByZXZpb3VzID0gbnVs
bHB0cjsKKyAgICBEZWx0YUNvbXByZXNzaW9uQnVpbGRlciBwY0NvbXByZXNzb3IoKHNpemVvZih1
aW50cHRyX3QpICsgc2l6ZW9mKHVpbnQ4X3QpKSAqIChidWlsZGVyLm1fY29kZVJhbmdlcy5zaXpl
KCkgKyAxKSk7CisgICAgdm9pZCogbGFzdFBDVmFsdWUgPSBudWxscHRyOworICAgIGF1dG8gYnVp
bGRQQ1RhYmxlID0gWyZdICh2b2lkKiBwY1ZhbHVlKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCB1
aW50OF90IHNlbnRpbmVsVmFsdWUgPSAwOworICAgICAgICBSRUxFQVNFX0FTU0VSVChwY1ZhbHVl
ID4gbGFzdFBDVmFsdWUpOworICAgICAgICB1aW50cHRyX3QgZGVsdGEgPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihwY1ZhbHVlKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxhc3RQQ1ZhbHVl
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGVsdGEgIT0gc2VudGluZWxWYWx1ZSk7CisgICAg
ICAgIGxhc3RQQ1ZhbHVlID0gcGNWYWx1ZTsKKyAgICAgICAgaWYgKGRlbHRhID4gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpIHsKKyAgICAgICAgICAgIHBjQ29tcHJlc3Nvci53
cml0ZTx1aW50OF90PihzZW50aW5lbFZhbHVlKTsKKyAgICAgICAgICAgIHBjQ29tcHJlc3Nvci53
cml0ZTx1aW50cHRyX3Q+KGRlbHRhKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIHBjQ29tcHJlc3Nvci53cml0ZTx1aW50OF90PihzdGF0aWNfY2FzdDx1aW50OF90
PihkZWx0YSkpOworICAgIH07CisKKyAgICBEZWx0YUNvbXByZXNzaW9uQnVpbGRlciBjb2RlT3Jp
Z2luQ29tcHJlc3Nvcigoc2l6ZW9mKGludHB0cl90KSArIHNpemVvZihpbnQ4X3QpICsgc2l6ZW9m
KGludDhfdCkgKyBzaXplb2YoSW5saW5lQ2FsbEZyYW1lKikpICogKGJ1aWxkZXIubV9jb2RlUmFu
Z2VzLnNpemUoKSArIDEpKTsKKyAgICBDb2RlT3JpZ2luIGxhc3RDb2RlT3JpZ2luKDAsIG51bGxw
dHIpOworICAgIGF1dG8gYnVpbGRDb2RlT3JpZ2luVGFibGUgPSBbJl0gKGNvbnN0IENvZGVPcmln
aW4mIGNvZGVPcmlnaW4pIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludDhfdCBzZW50aW5lbEJ5
dGVjb2RlRGVsdGEgPSAwOworCisgICAgICAgIGludHB0cl90IGRlbHRhID0gc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkgLSBzdGF0aWNfY2FzdDxpbnRwdHJf
dD4obGFzdENvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGxhc3RDb2RlT3JpZ2lu
ID0gY29kZU9yaWdpbjsKKyAgICAgICAgaWYgKGRlbHRhID4gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ4X3Q+OjptYXgoKSB8fCBkZWx0YSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWlu
KCkgfHwgZGVsdGEgPT0gc2VudGluZWxCeXRlY29kZURlbHRhKSB7CisgICAgICAgICAgICBjb2Rl
T3JpZ2luQ29tcHJlc3Nvci53cml0ZTxpbnQ4X3Q+KHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSk7Cisg
ICAgICAgICAgICBjb2RlT3JpZ2luQ29tcHJlc3Nvci53cml0ZTxpbnRwdHJfdD4oZGVsdGEpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPGlu
dDhfdD4oc3RhdGljX2Nhc3Q8aW50OF90PihkZWx0YSkpOworCisgICAgICAgIGludDhfdCBoYXNJ
bmxpbmVDYWxsRnJhbWVCeXRlID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPyAxIDogMDsK
KyAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50OF90PihoYXNJbmxpbmVDYWxs
RnJhbWVCeXRlKTsKKyAgICAgICAgaWYgKGhhc0lubGluZUNhbGxGcmFtZUJ5dGUpIHsKKyAgICAg
ICAgICAgIGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPElubGluZUNhbGxGcmFtZSo+KGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBpZiAoYnVp
bGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpKSB7CisgICAgICAgIG1fcGNSYW5nZVN0YXJ0ID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKTsKKyAgICAgICAgbV9wY1JhbmdlRW5k
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptaW4oKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3QgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2UmIGxhc3Qg
PSBidWlsZGVyLm1fY29kZVJhbmdlcy5sYXN0KCk7CisgICAgICAgICAgICBpZiAoIShsYXN0LnN0
YXJ0ID09IGxhc3QuZW5kKSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLm1fY29kZVJhbmdlcy5h
cHBlbmQoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2V7IGxhc3QuZW5kLCBsYXN0
LmVuZCwgbGFzdC5jb2RlT3JpZ2luIH0pOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCk7IGkrKykgeworICAgICAg
ICAgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2UmIGNvZGVSYW5nZSA9IGJ1
aWxkZXIubV9jb2RlUmFuZ2VzW2ldOworICAgICAgICAgICAgdm9pZCogc3RhcnQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoY29kZVJhbmdlLnN0YXJ0KS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAg
ICAgIHZvaWQqIGVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2RlUmFuZ2UuZW5kKS5kYXRh
TG9jYXRpb24oKTsKKworICAgICAgICAgICAgbV9wY1JhbmdlU3RhcnQgPSBzdGQ6Om1pbihtX3Bj
UmFuZ2VTdGFydCwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpKTsKKyAgICAgICAgICAg
IG1fcGNSYW5nZUVuZCA9IHN0ZDo6bWF4KG1fcGNSYW5nZUVuZCwgYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oZW5kKSk7CisKKyAgICAgICAgICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaSA9PSBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCkgLSAx
KTsKKworICAgICAgICAgICAgYnVpbGRQQ1RhYmxlKHN0YXJ0KTsKKyAgICAgICAgICAgIGJ1aWxk
Q29kZU9yaWdpblRhYmxlKGNvZGVSYW5nZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX25vZGVzLmFkZChzdGFydCwgc3RhdGljX2Nhc3Q8Y2hhcio+KGVuZCkgLSAxLCBj
b2RlUmFuZ2UuY29kZU9yaWdpbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0KG5vZGUpOwor
CisgICAgICAgICAgICBpZiAocHJldmlvdXMpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobGlua0J1ZmZlci5sb2NhdGlvbk9mKHByZXZpb3VzLT5lbmQpLmRhdGFMb2NhdGlvbigpID09
IHN0YXJ0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHJldmlvdXMgPSAmY29kZVJhbmdl
OworICAgICAgICB9CisKKyAgICAgICAgbV9wY1JhbmdlRW5kIC09IDE7CisKKyAgICAgICAgbV9j
b21wcmVzc2VkUENCdWZmZXJTaXplID0gcGNDb21wcmVzc29yLm1fb2Zmc2V0OworICAgICAgICBt
X2NvbXByZXNzZWRQQ3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJlYWxsb2MocGNDb21w
cmVzc29yLm1fYnVmZmVyLCBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemUpKTsKKworICAgICAgICBt
X2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemUgPSBjb2RlT3JpZ2luQ29tcHJlc3Nvci5tX29mZnNl
dDsKKyAgICAgICAgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnMgPSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4oZmFzdFJlYWxsb2MoY29kZU9yaWdpbkNvbXByZXNzb3IubV9idWZmZXIsIG1fY29tcHJlc3Nl
ZENvZGVPcmlnaW5zU2l6ZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGNSYW5nZVN0YXJ0
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKTsKKyAgICAgICAgbV9wY1Jh
bmdlRW5kID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKTsKKworICAgICAg
ICBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemUgPSAwOworICAgICAgICBtX2NvbXByZXNzZWRQQ3Mg
PSBudWxscHRyOworICAgICAgICBmYXN0RnJlZShwY0NvbXByZXNzb3IubV9idWZmZXIpOworCisg
ICAgICAgIG1fY29tcHJlc3NlZENvZGVPcmlnaW5zU2l6ZSA9IDA7CisgICAgICAgIG1fY29tcHJl
c3NlZENvZGVPcmlnaW5zID0gbnVsbHB0cjsKKyAgICAgICAgZmFzdEZyZWUoY29kZU9yaWdpbkNv
bXByZXNzb3IubV9idWZmZXIpOworICAgIH0KK30KKworZG91YmxlIFBDVG9Db2RlT3JpZ2luTWFw
OjptZW1vcnlTaXplKCkKK3sKKyAgICBkb3VibGUgc2l6ZSA9IDA7CisgICAgc2l6ZSArPSBtX2Nv
bXByZXNzZWRQQ0J1ZmZlclNpemU7CisgICAgc2l6ZSArPSBtX2NvbXByZXNzZWRDb2RlT3JpZ2lu
c1NpemU7CisgICAgcmV0dXJuIHNpemU7Cit9CisKK09wdGlvbmFsPENvZGVPcmlnaW4+IFBDVG9D
b2RlT3JpZ2luTWFwOjpmaW5kKHZvaWQqIHBjKSBjb25zdAoreworICAgIHVpbnRwdHJfdCBwY0Fz
SW50ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocGMpOworICAgIGlmICghKG1fcGNSYW5nZVN0
YXJ0IDw9IHBjQXNJbnQgJiYgcGNBc0ludCA8PSBtX3BjUmFuZ2VFbmQpKQorICAgICAgICByZXR1
cm4gTnVsbG9wdDsKKworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IHNlbnRpbmVsVmFsdWUgPSAw
OworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3Qgc2VudGluZWxCeXRlY29kZURlbHRhID0gMDsKKwor
ICAgIHVpbnRwdHJfdCBjdXJyZW50VmFsdWUgPSAwOworICAgIENvZGVPcmlnaW4gY3VycmVudENv
ZGVPcmlnaW4oMCwgbnVsbHB0cik7CisgICAgQ29kZU9yaWdpbiBwcmV2aW91c09yaWdpbjsKKwor
ICAgIERlbHRhQ29tcHJlc3NlaW9uUmVhZGVyIHBjUmVhZGVyKG1fY29tcHJlc3NlZFBDcywgbV9j
b21wcmVzc2VkUENCdWZmZXJTaXplKTsKKyAgICBEZWx0YUNvbXByZXNzZWlvblJlYWRlciBjb2Rl
T3JpZ2luUmVhZGVyKG1fY29tcHJlc3NlZENvZGVPcmlnaW5zLCBtX2NvbXByZXNzZWRDb2RlT3Jp
Z2luc1NpemUpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHVpbnRwdHJfdCBwcmV2aW91
c1ZhbHVlID0gY3VycmVudFZhbHVlOworICAgICAgICB7CisgICAgICAgICAgICB1aW50OF90IHZh
bHVlID0gcGNSZWFkZXIucmVhZDx1aW50OF90PigpOworICAgICAgICAgICAgdWludHB0cl90IGRl
bHRhOworICAgICAgICAgICAgaWYgKHZhbHVlID09IHNlbnRpbmVsVmFsdWUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXBjUmVhZGVyLmNhblJlYWQ8dWludHB0cl90PigpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBk
ZWx0YSA9IHBjUmVhZGVyLnJlYWQ8dWludHB0cl90PigpOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgZGVsdGEgPSB2YWx1ZTsKKyAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSAr
PSBkZWx0YTsKKyAgICAgICAgfQorCisgICAgICAgIENvZGVPcmlnaW4gcHJldmlvdXNPcmlnaW4g
PSBjdXJyZW50Q29kZU9yaWdpbjsKKyAgICAgICAgeworICAgICAgICAgICAgaW50OF90IHZhbHVl
ID0gY29kZU9yaWdpblJlYWRlci5yZWFkPGludDhfdD4oKTsKKyAgICAgICAgICAgIGludHB0cl90
IGRlbHRhOworICAgICAgICAgICAgaWYgKHZhbHVlID09IHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSkK
KyAgICAgICAgICAgICAgICBkZWx0YSA9IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxpbnRwdHJfdD4o
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZWx0YSA9IHN0YXRpY19jYXN0
PGludHB0cl90Pih2YWx1ZSk7CisKKyAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGN1
cnJlbnRDb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpICsgZGVsdGEpOworCisgICAgICAgICAgICBp
bnQ4X3QgaGFzSW5saW5lRnJhbWUgPSBjb2RlT3JpZ2luUmVhZGVyLnJlYWQ8aW50OF90PigpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaGFzSW5saW5lRnJhbWUgPT0gMCB8fCBoYXNJbmxp
bmVGcmFtZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChoYXNJbmxpbmVGcmFtZSkKKyAgICAgICAg
ICAgICAgICBjdXJyZW50Q29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUmVh
ZGVyLnJlYWQ8SW5saW5lQ2FsbEZyYW1lKj4oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBjdXJyZW50Q29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUpIHsKKyAgICAgICAgICAgIHVpbnRw
dHJfdCBzdGFydE9mUmFuZ2UgPSBwcmV2aW91c1ZhbHVlOworICAgICAgICAgICAgLy8gc3VidHJh
Y3QgMSBiZWNhdXNlIHdlIGdlbmVyYXRlIGVuZCBwb2ludHMgaW5jbHVzaXZlbHkgaW4gdGhpcyB0
YWJsZSwgZXZlbiB0aG91Z2ggd2Ugc2VhcmNoIHRocm91Z2ggbWVhbmluZyByYW5nZXMgYXJlOiBb
cHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKQorICAgICAgICAgICAgdWludHB0cl90IGVuZE9m
UmFuZ2UgPSBjdXJyZW50VmFsdWUgLSAxOworICAgICAgICAgICAgaWYgKHN0YXJ0T2ZSYW5nZSA8
PSBwY0FzSW50ICYmIHBjQXNJbnQgPD0gZW5kT2ZSYW5nZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4ocHJldmlvdXNPcmlnaW4pOyAvLyBXZSByZXR1cm4gcHJl
dmlvdXNPcmlnaW4gaGVyZSBiZWNhdXNlIENvZGVPcmlnaW4ncyBhcmUgbWFwcGVkIHRvIHRoZSBz
dGFydFZhbHVlIG9mIHRoZSByYW5nZS4KKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBOdWxsb3B0OworCisgICAgLy9Ob2RlKiBu
b2RlID0gbV90cmVlLmZpbmRFeGFjdChLZXkocGMsIHBjKSk7CisgICAgLy9pZiAoIW5vZGUpIHsK
KyAgICAvLyAgICBpZiAoZmluZENvbXByZXNzZWQoKSkgeworICAgIC8vICAgICAgICBkYXRhTG9n
KCJOb3QgbnVsbFxuIik7CisgICAgLy8gICAgICAgIENSQVNIKCk7CisgICAgLy8gICAgfQorICAg
IC8vICAgIHJldHVybiBOdWxsb3B0OworICAgIC8vfQorICAgIC8vZGF0YUxvZ0YoIlBDIHNlYXJj
aCBSQlQ6ICVwLCByYW5nZTogWyVwLCAlcF1cbiIsIHBjLCBub2RlLT5rZXkoKS5zdGFydCwgbm9k
ZS0+a2V5KCkuZW5kKTsKKyAgICAvL2F1dG8gcmVzdWx0ID0gT3B0aW9uYWw8Q29kZU9yaWdpbj4o
bm9kZS0+Y29kZU9yaWdpbigpKTsKKyAgICAvL2F1dG8gYWx0UmVzdWx0ID0gZmluZENvbXByZXNz
ZWQoKTsKKyAgICAvL2lmICghYWx0UmVzdWx0KSB7CisgICAgLy8gICAgZGF0YUxvZygiY29tcHJl
c3NlZCBub3QgZXhpc3RlbnQ6ICIpOworICAgIC8vfQorICAgIC8vZGF0YUxvZ0YoIlBDIHNlYXJj
aCBDb21wcmVzczogJXAsIHJhbmdlOiBbJXAsICVwXVxuIiwgcGMsIGJpdHdpc2VfY2FzdDx2b2lk
Kj4oY29tcHJlc3NlZFN0YXJ0UmVzdWx0KSwgYml0d2lzZV9jYXN0PHZvaWQqPihjb21wcmVzc2Vk
RW5kUmVzdWx0KSk7CisgICAgLy9pZiAocmVzdWx0LT5ieXRlY29kZUluZGV4ICE9IGFsdFJlc3Vs
dC0+Ynl0ZWNvZGVJbmRleCkgeworICAgIC8vICAgIGRhdGFMb2coIkJ5dGVjb2RlIEluZGljZXMg
b3JpZ2lucyBub3QgZXF1YWw6XG4iKTsKKyAgICAvLyAgICBkYXRhTG9nKCJSQlQ6ICIsIG5vZGUt
PmNvZGVPcmlnaW4oKSwgIlxuIik7CisgICAgLy8gICAgZGF0YUxvZygiQ29tcHJlc3M6ICIsICph
bHRSZXN1bHQsICJcbiIpOworICAgIC8vICAgIGRhdGFMb2cocmVzdWx0LT5ieXRlY29kZUluZGV4
LCAiOiIsIGFsdFJlc3VsdC0+Ynl0ZWNvZGVJbmRleCwgIlxuIik7CisgICAgLy8gICAgQ1JBU0go
KTsKKyAgICAvL30KKyAgICAvL2lmIChyZXN1bHQtPmlubGluZUNhbGxGcmFtZSAhPSBhbHRSZXN1
bHQtPmlubGluZUNhbGxGcmFtZSkgeworICAgIC8vICAgIGRhdGFMb2coIklubGluZSBmcmFtZXMg
bm90IGVxdWFsOlxuIik7CisgICAgLy8gICAgZGF0YUxvZygiUkJUOiAiLCBub2RlLT5jb2RlT3Jp
Z2luKCksICJcbiIpOworICAgIC8vICAgIGRhdGFMb2coIkNvbXByZXNzOiAiLCAqYWx0UmVzdWx0
LCAiXG4iKTsKKyAgICAvLyAgICBDUkFTSCgpOworICAgIC8vfQorICAgIC8vcmV0dXJuIHJlc3Vs
dDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1BDVG9Db2RlT3JpZ2luTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgUENUb0NvZGVPcmlnaW5NYXBfaAorI2RlZmluZSBQQ1RvQ29kZU9yaWdpbk1hcF9o
CisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIK
KyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIExpbmtCdWZmZXI7CitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXI7CisKK2NsYXNzIERlbHRhQ29tcHJlc3Npb25CdWlsZGVyIHsKK3B1YmxpYzoKKyAgICBE
ZWx0YUNvbXByZXNzaW9uQnVpbGRlcihzaXplX3QgbWF4U2l6ZSkKKyAgICAgICAgOiBtX29mZnNl
dCgwKQorICAgICAgICAsIG1fbWF4U2l6ZShtYXhTaXplKQorICAgIHsKKyAgICAgICAgbV9idWZm
ZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhtX21heFNpemUpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHdyaXRlKFQgaXRlbSkKKyAg
ICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb2Zmc2V0ICsgc2l6ZW9mKFQpIDw9IG1fbWF4
U2l6ZSk7CisgICAgICAgICpiaXR3aXNlX2Nhc3Q8VCo+KG1fYnVmZmVyICsgbV9vZmZzZXQpID0g
aXRlbTsKKyAgICAgICAgbV9vZmZzZXQgKz0gc2l6ZW9mKFQpOworICAgIH0KKworICAgIHVpbnQ4
X3QqIG1fYnVmZmVyOyAKKyAgICBzaXplX3QgbV9vZmZzZXQ7CisgICAgc2l6ZV90IG1fbWF4U2l6
ZTsKK307CisKK2NsYXNzIERlbHRhQ29tcHJlc3NlaW9uUmVhZGVyIHsKK3B1YmxpYzoKKyAgICBE
ZWx0YUNvbXByZXNzZWlvblJlYWRlcih1aW50OF90KiBidWZmZXIsIHNpemVfdCBzaXplKQorICAg
ICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAgICAg
LCBtX29mZnNldCgwKQorICAgIHsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAg
VCByZWFkKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhblJlYWQ8VD4oKSk7Cisg
ICAgICAgIFQgcmVzdWx0ID0gKmJpdHdpc2VfY2FzdDxUKj4obV9idWZmZXIgKyBtX29mZnNldCk7
CisgICAgICAgIG1fb2Zmc2V0ICs9IHNpemVvZihUKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBib29sIGNhblJlYWQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ICsgc2l6ZW9mKFQpIDw9IG1fc2l6ZTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCogbV9idWZmZXI7CisgICAgc2l6ZV90IG1fc2l6
ZTsKKyAgICBzaXplX3QgbV9vZmZzZXQ7Cit9OworCitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUENUb0NvZGVPcmlnaW5NYXApOworcHVibGljOgor
ICAgIFBDVG9Db2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYsIExpbmtCdWZm
ZXImKTsKKworICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmQodm9pZCogcGMpIGNvbnN0Owor
CisgICAgZG91YmxlIG1lbW9yeVNpemUoKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgS2V5IHsK
KyAgICAgICAgS2V5KHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCisgICAgICAgICAgICA6IHN0YXJ0
KHN0YXJ0KQorICAgICAgICAgICAgLCBlbmQoZW5kKQorICAgICAgICB7IH0KKworICAgICAgICBi
b29sIG9wZXJhdG9yPChjb25zdCBLZXkmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQodHJ1ZSk7IC8vICBGSVhNRTogbm90IG92ZXJsYXBwaW5nLgorICAgICAgICAg
ICAgcmV0dXJuIHN0YXJ0IDwgb3RoZXIuc3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBU
byBmaW5kIHRoaW5ncywgd2UgYXJlICJlcXVhbCIgaWYgdGhlIG90aGVyIHRoaW5nIGlzIGVuY2xv
c2VkIHdpdGhpbiB1cy4KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSYgb3RoZXIp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGFydCA8PSBvdGhlci5zdGFy
dCAmJiBvdGhlci5lbmQgPD0gZW5kOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCogc3RhcnQ7
CisgICAgICAgIHZvaWQqIGVuZDsKKyAgICB9OworCisgICAgY2xhc3MgTm9kZSA6IHB1YmxpYyBS
ZWRCbGFja1RyZWU8Tm9kZSwgS2V5Pjo6Tm9kZSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgTm9kZSh2b2lkKiBzdGFydCwgdm9pZCogZW5k
LCBDb2RlT3JpZ2luIG9yaWdpbikKKyAgICAgICAgICAgIDogbV9rZXkoc3RhcnQsIGVuZCkKKyAg
ICAgICAgICAgICwgbV9jb2RlT3JpZ2luKG9yaWdpbikKKyAgICAgICAgeyB9CisKKyAgICAgICAg
Y29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU9yaWdp
bjsgfQorICAgICAgICBjb25zdCBLZXkmIGtleSgpIHsgcmV0dXJuIG1fa2V5OyB9CisgICAgcHJp
dmF0ZToKKyAgICAgICAgS2V5IG1fa2V5OyAKKyAgICAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmln
aW47CisgICAgfTsKKworICAgIFJlZEJsYWNrVHJlZTxOb2RlLCBLZXk+IG1fdHJlZTsKKyAgICBC
YWc8Tm9kZT4gbV9ub2RlczsKKyAgICBzaXplX3QgbV9jb21wcmVzc2VkUENCdWZmZXJTaXplOwor
ICAgIHNpemVfdCBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemU7CisgICAgdWludDhfdCogbV9j
b21wcmVzc2VkUENzOworICAgIHVpbnQ4X3QqIG1fY29tcHJlc3NlZENvZGVPcmlnaW5zOworICAg
IHVpbnRwdHJfdCBtX3BjUmFuZ2VTdGFydDsKKyAgICB1aW50cHRyX3QgbV9wY1JhbmdlRW5kOwor
fTsKKworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOworICAgIGZyaWVuZCBjbGFzcyBQQ1Rv
Q29kZU9yaWdpbk1hcDsKKworcHVibGljOgorICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigp
CisgICAgeyB9CisKKyAgICB2b2lkIGFwcGVuZEl0ZW0oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsLCBD
b2RlT3JpZ2luKTsKKworcHJpdmF0ZToKKworICAgIHN0cnVjdCBDb2RlUmFuZ2UgeworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc3RhcnQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBlbmQ7CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICB9OworCisgICAg
VmVjdG9yPENvZGVSYW5nZT4gbV9jb2RlUmFuZ2VzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBQQ1RvQ29kZU9yaWdpbk1hcF9oIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDE5
NTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiTExJbnRQQ1Jh
bmdlcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tT
ZXQuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlNsb3RWaXNp
dG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIK
QEAgLTgyLDggKzgzLDkgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBzaXplX3Qgd2Fs
ayhWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZT4mIHN0YWNrVHJhY2UsIGJvb2wm
IGRpZFJ1bk91dE9mU3BhY2UsIGJvb2wmIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbikKKyAg
ICBzaXplX3Qgd2FsayhWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZT4mIHN0YWNr
VHJhY2UsIGJvb2wmIGRpZFJ1bk91dE9mU3BhY2UsIGJvb2wmIHN0YWNrdHJhY2VOZWVkc1Zlcmlm
aWNhdGlvbiwgQ29kZUJsb2NrKiYgdG9wQ29kZUJsb2NrKQogICAgIHsKKyAgICAgICAgdG9wQ29k
ZUJsb2NrID0gbnVsbHB0cjsKICAgICAgICAgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uID0g
ZmFsc2U7CiAgICAgICAgIGlmIChzUmVwb3J0U3RhdHMpCiAgICAgICAgICAgICBzTnVtVG90YWxX
YWxrcysrOwpAQCAtMTAxLDExICsxMDMsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKG1f
ZGVwdGggPj0gbWF4U3RhY2tUcmFjZVNpemUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwotICAgICAgICAgICAgaWYgKGlzVmFsaWRDb2RlQmxvY2soY29kZUJsb2NrKSkgeworICAgICAg
ICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygp
KSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZENvZGVCbG9jayhjb2Rl
QmxvY2spKTsKICAgICAgICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CiAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZVtt
X2RlcHRoXSA9IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWUoRnJhbWVUeXBlOjpWZXJpZmll
ZEV4ZWN1dGFibGUsZXhlY3V0YWJsZSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZGVwdGggPT0g
MCkKKyAgICAgICAgICAgICAgICAgICAgdG9wQ29kZUJsb2NrID0gY29kZUJsb2NrOwogICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2sg
PT0gbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9u
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHVuc2FmZUNhbGxlZSA9IG1fY2FsbEZy
YW1lLT51bnNhZmVDYWxsZWUoKTsKICAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhd
ID0gU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZShGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxs
ZWUsIEpTVmFsdWU6OmVuY29kZSh1bnNhZmVDYWxsZWUpKTsKQEAgLTE1MSw5ICsxNTYsNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGRvZXNuJ3QgaGF2ZSBhIGNvZGUgYmxvY2ss
IHRoZW4gaXQncyBub3QgYSAKLSAgICAgICAgLy8gREZHL0ZUTCBmcmFtZSB3aGljaCBtZWFucyB3
ZSdyZSBub3QgYW4gaW5saW5lZCBmcmFtZS4KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGlmICghY29kZUJsb2NrKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMTY1LDYgKzE2NywxMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgaWYg
KG1fZGVwdGggPT0gMCkKKyAgICAgICAgICAgIHJldHVybjsgLy8gV2UgcmVseSBvbiBQQ1RvQ29k
ZU9yaWdpbk1hcCBmb3IgdGhlIHRvcCBmcmFtZS4KKworICAgICAgICAvLyBJZiB0aGUgZnJhbWUg
ZG9lc24ndCBoYXZlIGEgY29kZSBibG9jaywgdGhlbiBpdCdzIG5vdCBhIAorICAgICAgICAvLyBE
RkcvRlRMIGZyYW1lIHdoaWNoIG1lYW5zIHdlJ3JlIG5vdCBhbiBpbmxpbmVkIGZyYW1lLgorCiAg
ICAgICAgIC8vIElmIHRoZSBjb2RlIGJsb2NrIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgb3JpZ2lu
cywgdGhlbiB0aGVyZSdzIG5vCiAgICAgICAgIC8vIGlubGluaW5nLiBIZW5jZSwgd2UncmUgbm90
IGF0IGFuIGlubGluZWQgZnJhbWUuCiAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNDb2RlT3Jp
Z2lucygpKQpAQCAtMjg1LDkgKzI5NCwxMCBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1By
b2ZpbGVyKFZNJiB2CiAgICAgICAgICAgICAgICAgYm9vbCB3YXNWYWxpZFdhbGs7CiAgICAgICAg
ICAgICAgICAgYm9vbCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlOwogICAgICAgICAgICAgICAgIGJv
b2wgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uOworICAgICAgICAgICAgICAgIENvZGVCbG9j
ayogdG9wQ29kZUJsb2NrOwogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
RnJhbWVXYWxrZXIgd2Fsa2VyKGNhbGxGcmFtZSwgbV92bSwgY29kZUJsb2NrU2V0TG9ja2VyLCBt
YWNoaW5lVGhyZWFkc0xvY2tlcik7Ci0gICAgICAgICAgICAgICAgICAgIHdhbGtTaXplID0gd2Fs
a2VyLndhbGsobV9jdXJyZW50RnJhbWVzLCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlLCBzdGFja3Ry
YWNlTmVlZHNWZXJpZmljYXRpb24pOworICAgICAgICAgICAgICAgICAgICB3YWxrU2l6ZSA9IHdh
bGtlci53YWxrKG1fY3VycmVudEZyYW1lcywgZGlkUnVuT3V0T2ZWZWN0b3JTcGFjZSwgc3RhY2t0
cmFjZU5lZWRzVmVyaWZpY2F0aW9uLCB0b3BDb2RlQmxvY2spOwogICAgICAgICAgICAgICAgICAg
ICB3YXNWYWxpZFdhbGsgPSB3YWxrZXIud2FzVmFsaWRXYWxrKCk7CiAgICAgICAgICAgICAgICAg
fQogCkBAIC0zMTIsNyArMzIyLDcgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxl
cihWTSYgdgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2VlbkV4ZWN1dGFibGVzLmFk
ZChmcmFtZS51LnZlcmlmaWVkRXhlY3V0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICBtX3N0YWNrVHJhY2VzLmFwcGVuZChTdGFja1RyYWNleyBzdGFj
a3RyYWNlTmVlZHNWZXJpZmljYXRpb24sIG5vd1RpbWUsIFdURk1vdmUoc3RhY2tUcmFjZSkgfSk7
CisgICAgICAgICAgICAgICAgICAgIG1fc3RhY2tUcmFjZXMuYXBwZW5kKFN0YWNrVHJhY2V7IHN0
YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbiwgbm93VGltZSwgcGMsIHRvcENvZGVCbG9jaywgV1RG
TW92ZShzdGFja1RyYWNlKSB9KTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoZGlkUnVuT3V0
T2ZWZWN0b3JTcGFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lcy5n
cm93KG1fY3VycmVudEZyYW1lcy5zaXplKCkgKiAxLjI1KTsKQEAgLTM0MSw3ICszNTEsMjMgQEAg
dm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgIE1hcmtlZEJsb2Nr
U2V0JiBtYXJrZWRCbG9ja1NldCA9IG1fdm0uaGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeTsg
aSA8IG1fc3RhY2tUcmFjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgU3RhY2tUcmFjZSYgc3Rh
Y2tUcmFjZSA9IG1fc3RhY2tUcmFjZXNbaV07IAorICAgICAgICBTdGFja1RyYWNlJiBzdGFja1Ry
YWNlID0gbV9zdGFja1RyYWNlc1tpXTsKKworICAgICAgICAvLyBQcmVwZW5kIGlubGluZSBmcmFt
ZSBpZiBuZWVkZWQuCisgICAgICAgIGlmIChDb2RlQmxvY2sqIHRvcENvZGVCbG9jayA9IHN0YWNr
VHJhY2UudG9wQ29kZUJsb2NrKSB7CisgICAgICAgICAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdp
bj4gY29kZU9yaWdpbk9wdGlvbmFsID0gdG9wQ29kZUJsb2NrLT5maW5kUEMoc3RhY2tUcmFjZS50
b3BQQykpIHsKKyAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAqY29kZU9y
aWdpbk9wdGlvbmFsOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlZlcmlmaWVkIGNvZGUgb3Jp
Z2luOiAiLCBjb2RlT3JpZ2luLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U3RhY2tG
cmFtZT4gaW5saW5lVG9wT2ZTdGFjazsKKyAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLndhbGtV
cElubGluZVN0YWNrKFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUt
PmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpbmxpbmVUb3BP
ZlN0YWNrLmFwcGVuZChTdGFja0ZyYW1lKFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6VmVy
aWZpZWRFeGVjdXRhYmxlLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKGlubGluZVRvcE9mU3RhY2suc2l6ZSgp
KQorICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLmZyYW1lcy5pbnNlcnRWZWN0b3IoMCwg
aW5saW5lVG9wT2ZTdGFjayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBp
ZiAoIXN0YWNrVHJhY2UubmVlZHNWZXJpZmljYXRpb24pCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgc3RhY2tUcmFjZS5uZWVkc1ZlcmlmaWNhdGlvbiA9IGZhbHNlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2
aXNpb24gMTk1MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw4IEBAIHB1YmxpYzoKICAgICBz
dHJ1Y3QgU3RhY2tUcmFjZSB7CiAgICAgICAgIGJvb2wgbmVlZHNWZXJpZmljYXRpb247CiAgICAg
ICAgIGRvdWJsZSB0aW1lc3RhbXA7CisgICAgICAgIHZvaWQqIHRvcFBDOworICAgICAgICBDb2Rl
QmxvY2sqIHRvcENvZGVCbG9jazsKICAgICAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IGZyYW1lczsK
ICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NhbXBs
aW5nLXByb2ZpbGVyLWJhc2ljLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItYmFzaWMuanMJKHJldmlzaW9uIDE5NTMw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmls
ZXItYmFzaWMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiw4IEBAIGlmIChwbGF0Zm9y
bVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlcigpKSAKICAgICAgICAgICAgIHgtLTsKICAgICAgICAg
fQogICAgIH0KLSAgICBub0lubGluZSh0b3ApOwotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGNh
bGwgdG9wKCkgdG8gZ2V0IHRoZSBDYWxsU2l0ZUluZGV4IHRvIHVwZGF0ZQotICAgIC8vIGluc2lk
ZSB0aGUgY2FsbCBmcmFtZS4gV2UgbmVlZCB0byBmaXggdGhhdCBieSBoYXZpbmcgYSBQQz0+Q29k
ZU9yaWdpbgotICAgIC8vIG1hcHBpbmc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTI2MjkKLSAgICBmdW5jdGlvbiBqYXooeCkgeyByZXR1cm4geCArIHRvcCgpOyB9
IC8vIAorCisgICAgZnVuY3Rpb24gamF6KHgpIHsgcmV0dXJuIHggKyB0b3AoKTsgfQogICAgIGZ1
bmN0aW9uIGtheih5KSB7CiAgICAgICAgIHJldHVybiBqYXooeSkgKyA1OwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5o
CShyZXZpc2lvbiAxOTUzMDIpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KIGNsYXNzIEJhZyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFnKTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CiAgICAgY2xhc3MgTm9kZSB7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9SZWRCbGFja1RyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9SZWRCbGFja1RyZWUuaAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL1dURi93dGYvUmVk
QmxhY2tUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2OCw3ICs1NjgsOSBAQCBwcml2YXRlOgog
ICAgIE5vZGVUeXBlKiBtX3Jvb3Q7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNp
bmcgV1RGOjpSZWRCbGFja1RyZWU7CiAKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9T
ZWdtZW50ZWRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWdtZW50ZWRW
ZWN0b3IuaAkocmV2aXNpb24gMTk1MzAyKQorKysgU291cmNlL1dURi93dGYvU2VnbWVudGVkVmVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw5ICsxNDEsMTggQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgICAg
ICB2b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgKytt
X3NpemU7CisgICAgICAgICAgICBpZiAoIXNlZ21lbnRFeGlzdHNGb3IobV9zaXplIC0gMSkpCisg
ICAgICAgICAgICAgICAgYWxsb2NhdGVTZWdtZW50KCk7CisgICAgICAgICAgICBuZXcgKE5vdE51
bGwsICZsYXN0KCkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgfQor
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIFQmIGFsbG9jKEFy
Z3MmJi4uLiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmQ8VD4oVChzdGQ6OmZv
cndhcmQ8QXJncz4oYXJncykuLi4pKTsKKyAgICAgICAgICAgIGFwcGVuZChzdGQ6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGxhc3QoKTsKICAgICAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvbS5hcHBsZS5XZWJQcm9jZXNzLnNi
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29tLmFwcGxlLldl
YlByb2Nlc3Muc2IuaW4JKHJldmlzaW9uIDE5NTMwMikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvY29tLmFwcGxlLldlYlByb2Nlc3Muc2IuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIyLDcg
KzIyLDcgQEAKIDsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAodmVyc2lvbiAx
KQotKGRlbnkgZGVmYXVsdCAod2l0aCBwYXJ0aWFsLXN5bWJvbGljYXRpb24pKQorKGFsbG93IGRl
ZmF1bHQgKHdpdGggcGFydGlhbC1zeW1ib2xpY2F0aW9uKSkKIChhbGxvdyBzeXN0ZW0tYXVkaXQg
ZmlsZS1yZWFkLW1ldGFkYXRhKQogCiAoaW1wb3J0ICJzeXN0ZW0uc2IiKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269814</attachid>
            <date>2016-01-25 16:40:49 -0800</date>
            <delta_ts>2016-01-25 18:55:46 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>88911</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0Myw3ICsxNjQzLDYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNhbQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpKTsKICAgICBTdHJpbmcganNvblN0
cmluZyA9IGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNPTigp
OwotICAgIGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpLT5jbGVhckRhdGEoKTsKICAgICBF
bmNvZGVkSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpz
b25TdHJpbmcpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMDIsOSArMTMwMiwx
MiBAQAogCQk3MEVDQTYwNzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMjFB
RkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjA4
MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMzFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVD
QTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5MkNCMzQ5MUM0RUVENUMw
MEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0Nv
ZGVPcmlnaW5NYXAuY3BwICovOyB9OworCQk3OTJDQjM0QTFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5NjQ2NTZB
MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdB
NzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9
OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0Uw
N0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5OUVGN0M0MUM1
NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BD
VG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3OUM0QjE1RDFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUM0QjE1QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTky
RSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMzM0IxMDAw
MEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0z
NDk2LDkgKzM0OTksMTIgQEAKIAkJNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxh
dGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFG
REJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyog
UENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk5RUY3QzMx
QzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QjFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUMxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9u
UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDRkM2RUYxQzMzQjEwMDAw
Qzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTExJbnRQQ1Jhbmdlcy5oOyBwYXRoID0gbGxpbnQvTExJbnRQQ1Jhbmdlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDgzNyw2ICs0ODQzLDcgQEAKIAkJCQkwRkVDODREQzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAogCQkJCTBGRUM4NERE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0
REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJNzk5RUY3
QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovLAogCQkJCTBGRUM4NERG
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovLAogCQkJCTBGRUM4NEUwMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLywKIAkJCQkwRjM3MzA4QTFDMEJEMjkx
MDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgKi8sCkBAIC01MTQ2LDYgKzUxNTMsOCBAQAog
CQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCAqLywKKwkJCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmln
aW5NYXAuY3BwICovLAorCQkJCTc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9y
aWdpbk1hcC5oICovLAogCQkJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8q
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZBN0E4RTkxOEI0MTNDODAw
NTIzNzFEIC8qIFJlZy5jcHAgKi8sCkBAIC03MDIyLDYgKzcwMzEsOCBAQAogCQkJCTBGRUM4NTc2
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5
MzFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAu
aCBpbiBIZWFkZXJzICovLAorCQkJCTc5MkNCMzRBMUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29k
ZU9yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVB
IC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkw
MENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMz
MTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLApAQCAt
ODk2Nyw2ICs4OTc4LDcgQEAKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92
SGludFJlbW92YWxQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4
MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5N
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8qIERG
R05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMzg3OEYxQkZCQzQ0RDAwRTNBQjFFIC8q
IEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1
MEU5NTJDMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MDUsNiArNDA1LDggQEAgcHVibGljOgogICAgICAgICAgICAgbWFzbS0+aW52YWxpZGF0ZUFsbFRl
bXBSZWdpc3RlcnMoKTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwgPT0gb3RoZXIubV9sYWJlbDsg
fQorCiAgICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsLmlzU2V0KCk7
IH0KICAgICBwcml2YXRlOgogICAgICAgICBBc3NlbWJsZXJMYWJlbCBtX2xhYmVsOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5o
CShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fz
c2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVsKG1fb2Zmc2V0ICsgb2Zm
c2V0KTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBc3NlbWJs
ZXJMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0
OyB9CisKICAgICAgICAgdWludDMyX3QgbV9vZmZzZXQ7CiAgICAgfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1NDQ2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiQjNSZWR1Y2VTdHJlbmd0aC5oIgogI2luY2x1ZGUgIkIz
VGltaW5nU2NvcGUuaCIKICNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiAr
NDcsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3JpZ2luJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9kYXRhID09IG90aGVyLm1fZGF0YTsgfQorCiAgICAgLy8gWW91IHNob3Vs
ZCBhdm9pZCB1c2luZyB0aGlzLiBVc2UgT3JpZ2luRHVtcCBpbnN0ZWFkLgogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUENUb09yaWdpbk1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNQQ1RvT3JpZ2luTWFwX2gKKyNkZWZpbmUgQjNQQ1RvT3JpZ2luTWFwX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlICJCM09yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgUENUb09yaWdpbk1hcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUENUb09yaWdpbk1hcCk7CitwdWJsaWM6CisgICAgUENUb09yaWdpbk1hcCgpCisgICAgeyB9
CisKKyAgICBQQ1RvT3JpZ2luTWFwKFBDVG9PcmlnaW5NYXAmJiBvdGhlcikKKyAgICAgICAgOiBt
X3JhbmdlcyhXVEZNb3ZlKG90aGVyLm1fcmFuZ2VzKSkKKyAgICB7IH0KKworICAgIHN0cnVjdCBP
cmlnaW5SYW5nZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbDsKKyAgICAg
ICAgT3JpZ2luIG9yaWdpbjsKKyAgICB9OworCisgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsYWJlbCwgT3JpZ2luIG9yaWdpbikKKyAgICB7CisgICAgICAgIGlmICht
X3Jhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3Jhbmdlcy5sYXN0KCkubGFiZWwg
PT0gbGFiZWwpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG1fcmFu
Z2VzLmxhc3QoKS5vcmlnaW4gPT0gb3JpZ2luIHx8ICFvcmlnaW4pCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9yYW5nZXMuYXBwZW5kKE9yaWdpblJhbmdl
e2xhYmVsLCBvcmlnaW59KTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8T3JpZ2luUmFuZ2U+
JiByYW5nZXMoKSBjb25zdCAgeyByZXR1cm4gbV9yYW5nZXM7IH0KKworcHJpdmF0ZToKKyAgICBW
ZWN0b3I8T3JpZ2luUmFuZ2U+IG1fcmFuZ2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQQ1RvT3JpZ2lu
TWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lv
biAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1
Y3RzLmgiCiAjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAu
aCIKICNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCiAjaW5jbHVk
ZSAiUHVyZU5hTi5oIgpAQCAtMjc1LDYgKzI3Niw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdDsKICAgICBjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0OwogCisgICAgUENUb09yaWdp
bk1hcCYgcGNUb09yaWdpbk1hcCgpIHsgcmV0dXJuIG1fcGNUb09yaWdpbk1hcDsgfQorICAgIFBD
VG9PcmlnaW5NYXAgcmVsZWFzZVBDVG9PcmlnaW5NYXAoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGNU
b09yaWdpbk1hcCk7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvY2tJbnNlcnRp
b25TZXQ7CiAgICAgCkBAIC0yOTEsNiArMjk1LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWlyOjpDb2RlPiBtX2NvZGU7CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmlu
dFN0cmVhbSYsIE9yaWdpbik+PiBtX29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9m
cm9udGVuZERhdGE7CisgICAgUENUb09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSAr
NDcsMTIgQEAKICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkIzQ29tbW9uLmgi
CiAjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5j
bHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1
ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKQEAgLTE3MSwxMiArMTc0LDIzIEBAIHZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgYmxvY2tKdW1w
c1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKICAgICB9OwogCisgICAgUENUb09yaWdpbk1hcCYgcGNU
b09yaWdpbk1hcCA9IGNvZGUucHJvYygpLnBjVG9PcmlnaW5NYXAoKTsKKyAgICBhdXRvIGFkZEl0
ZW0gPSBbJl0gKEluc3QmIGluc3QpIHsKKyAgICAgICAgaWYgKCFpbnN0Lm9yaWdpbikgeworICAg
ICAgICAgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcGNUb09yaWdpbk1hcC5h
cHBlbmRJdGVtKGppdC5sYWJlbCgpLCBpbnN0Lm9yaWdpbi0+b3JpZ2luKCkpOworICAgIH07CisK
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAgICAgICBibG9ja0p1bXBz
W2Jsb2NrXS5saW5rKCZqaXQpOwogICAgICAgICBibG9ja0xhYmVsc1tibG9ja10gPSBqaXQubGFi
ZWwoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNv
bnRleHQpOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAg
ICAgIGFkZEl0ZW0oaW5zdCk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9
IGluc3QuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
anVtcCwgIWp1bXAuaXNTZXQoKSk7CiAgICAgICAgIH0KIApAQCAtMTg0LDYgKzE5OCw4IEBAIHZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgICYmIGJs
b2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQogICAg
ICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgYWRkSXRlbShibG9jay0+bGFzdCgpKTsKKwog
ICAgICAgICBpZiAoaXNSZXR1cm4oYmxvY2stPmxhc3QoKS5vcGNvZGUpKSB7CiAgICAgICAgICAg
ICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxv
Z3VlIGluIEFpciwgc28gd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJy
aWRlLgpAQCAtMTk4LDYgKzIxNCw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxI
ZWxwZXJzJiAKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZVdpdGhFbXB0eUZyYW1lKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7Cisg
ICAgICAgICAgICBhZGRJdGVtKGJsb2NrLT5sYXN0KCkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KIApAQCAtMjE4LDYgKzIzNSw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29k
ZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBhZGRJdGVtKGJsb2Nr
LT5sYXN0KCkpOwogICAgIH0KIAogICAgIGZvciAoYXV0byYgbGF0ZVBhdGggOiBjb250ZXh0Lmxh
dGVQYXRocykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1
ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIK
ICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJh
c2UuaCIKICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCkBAIC0yNDgxLDYgKzI0ODIsMzMg
QEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogCiB2b2lkIENvZGVC
bG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKy8vICAgIGlmICht
X3BjVG9Db2RlT3JpZ2luTWFwKSB7CisvLyNkZWZpbmUgQVModmVjdG9yLCBpdGVtKSBzaXplICs9
IHZlY3Rvci5zaXplKCkgKiBzaXplb2YoaXRlbSkKKy8vICAgICAgICBkb3VibGUgc2l6ZSA9IDA7
CisvLyAgICAgICAgc2l6ZSArPSBzaXplb2YoQ29kZUJsb2NrKTsKKy8vICAgICAgICBBUyhtX2xs
aW50Q2FsbExpbmtJbmZvcywgTExJbnRDYWxsTGlua0luZm8pOworLy8gICAgICAgIEFTKG1fYXJn
dW1lbnRWYWx1ZVByb2ZpbGVzLCBWYWx1ZVByb2ZpbGUpOworLy8gICAgICAgIEFTKG1fdmFsdWVQ
cm9maWxlcywgVmFsdWVQcm9maWxlKTsKKy8vICAgICAgICBBUyhtX3JhcmVDYXNlUHJvZmlsZXMs
IFJhcmVDYXNlUHJvZmlsZSk7CisvLyAgICAgICAgQVMobV9yZXN1bHRQcm9maWxlcywgUmVzdWx0
UHJvZmlsZSk7CisvLyAgICAgICAgQVMobV9hcnJheUFsbG9jYXRpb25Qcm9maWxlcywgQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSk7CisvLyAgICAgICAgQVMobV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZXMsIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKTsKKy8vICAgICAgICBBUyhtX2NvbnN0YW50UmVn
aXN0ZXJzLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworLy8gICAgICAgIEFTKG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOworLy8g
ICAgICAgIEFTKG1fZnVuY3Rpb25EZWNscywgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJs
ZT4pOworLy8gICAgICAgIEFTKG1fZnVuY3Rpb25FeHBycywgV3JpdGVCYXJyaWVyPEZ1bmN0aW9u
RXhlY3V0YWJsZT4pOworLy8gICAgICAgIEFTKG1faW5zdHJ1Y3Rpb25zLCBJbnN0cnVjdGlvbik7
CisvLyAgICAgICAgQVMobV91bmxpbmtlZENvZGUtPmV4cHJlc3Npb25JbmZvKCksIEV4cHJlc3Np
b25SYW5nZUluZm8pOworLy8KKy8vICAgICAgICBkYXRhTG9nRigiU2l6ZVxuXHRCeXRlczolbGZc
blx0S0I6JWxmXG5cdE1COiVsZlxuIiwgc2l6ZSwgc2l6ZS8xMDI0LjAsIHNpemUvKDEwMjQuMCox
MDI0LjApKTsKKy8vICAgICAgICAvL2RvdWJsZSBwcm9qZWN0ZWRTaXplID0gKDEuZiArIDkuZikq
KG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAvIDQuZik7CisvLyAgICAgICAgZG91YmxlIHByb2plY3Rl
ZFNpemUgPSBtX3BjVG9Db2RlT3JpZ2luTWFwLT5tZW1vcnlTaXplKCk7CisvLyAgICAgICAgZGF0
YUxvZ0YoIlByb2plY3RlZCBzaXplXG5cdEJ5dGVzOiVsZlxuXHRLQjolbGZcblx0TUI6JWxmXG4i
LCBwcm9qZWN0ZWRTaXplLCBwcm9qZWN0ZWRTaXplLzEwMjQuMCwgcHJvamVjdGVkU2l6ZS8oMTAy
NC4wKjEwMjQuMCkpOworLy8gICAgICAgIGRhdGFMb2dGKCJQcm9qZWN0ZWQgc2l6ZSBQZXJjZW50
OiAlbGZcbiIsIChwcm9qZWN0ZWRTaXplLyhzaXplICsgcHJvamVjdGVkU2l6ZSkqMTAwLmYpKTsK
Ky8vICAgICAgICBkYXRhTG9nKCJcblxuIik7CisvLyN1bmRlZiBBUworLy8gICAgfQorCiAgICAg
Ly8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0aW9uYWwgZmluYWxp
emVyczogaW5saW5lIGNhY2hlIGNsZWFyaW5nCiAgICAgLy8gYW5kIGpldHRpc29uaW5nLiBUaGUg
cHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgdGhp
bmdzCiAgICAgLy8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBu
byBtYXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdApAQCAtNDI3NSw0ICs0MzAzLDUzIEBA
IHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKICAgICB9CiB9CiAKK3Zv
aWQgQ29kZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0Nv
ZGVPcmlnaW5NYXA+JiYgbWFwKSAKK3sgCisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1v
dmUobWFwKTsKK30KKworZG91YmxlIENvZGVCbG9jazo6YXZlcmFnZU1lbVNpemUoKSBjb25zdAor
eworICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKSB7CisjZGVmaW5lIEFTKHZlY3RvciwgaXRl
bSkgc2l6ZSArPSB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKGl0ZW0pCisgICAgICAgIGRvdWJsZSBz
aXplID0gMDsKKyAgICAgICAgc2l6ZSArPSBzaXplb2YoQ29kZUJsb2NrKTsKKyAgICAgICAgQVMo
bV9sbGludENhbGxMaW5rSW5mb3MsIExMSW50Q2FsbExpbmtJbmZvKTsKKyAgICAgICAgQVMobV9h
cmd1bWVudFZhbHVlUHJvZmlsZXMsIFZhbHVlUHJvZmlsZSk7CisgICAgICAgIEFTKG1fdmFsdWVQ
cm9maWxlcywgVmFsdWVQcm9maWxlKTsKKyAgICAgICAgQVMobV9yYXJlQ2FzZVByb2ZpbGVzLCBS
YXJlQ2FzZVByb2ZpbGUpOworICAgICAgICBBUyhtX3Jlc3VsdFByb2ZpbGVzLCBSZXN1bHRQcm9m
aWxlKTsKKyAgICAgICAgQVMobV9hcnJheUFsbG9jYXRpb25Qcm9maWxlcywgQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSk7CisgICAgICAgIEFTKG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzLCBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZSk7CisgICAgICAgIEFTKG1fY29uc3RhbnRSZWdpc3RlcnMsIFdy
aXRlQmFycmllcjxVbmtub3duPik7CisgICAgICAgIEFTKG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uLCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOworICAgICAgICBBUyhtX2Z1
bmN0aW9uRGVjbHMsIFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+KTsKKyAgICAgICAg
QVMobV9mdW5jdGlvbkV4cHJzLCBXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPik7Cisg
ICAgICAgIEFTKG1faW5zdHJ1Y3Rpb25zLCBJbnN0cnVjdGlvbik7CisKKyAgICAgICAgc2l6ZSAr
PSBtX3BjVG9Db2RlT3JpZ2luTWFwLT5tZW1vcnlTaXplKCk7CisgICAgICAgIHJldHVybiBtX3Bj
VG9Db2RlT3JpZ2luTWFwLT5tZW1vcnlTaXplKCkgLyBzaXplOworI3VuZGVmIEFTCisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK09wdGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9jazo6Zmlu
ZFBDKHZvaWQqIHBjKQoreworICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKSB7CisgICAgICAg
IGlmIChPcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gbV9wY1RvQ29kZU9yaWdpbk1h
cC0+ZmluZFBDKHBjKSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKyNp
ZiBFTkFCTEUoSklUKQorICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Ig
aXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViID0gKml0ZXI7CisgICAgICAgIGlmIChzdHViLT5jb250YWlu
c1BDKHBjKSkKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihzdHViLT5j
b2RlT3JpZ2luKTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworICAgIHJldHVybiBO
dWxsb3B0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODQs
NiArODQsNyBAQCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBSZWdpc3RlckF0
T2Zmc2V0TGlzdDsKIGNsYXNzIFR5cGVMb2NhdGlvbjsKIGNsYXNzIEpTTW9kdWxlRW52aXJvbm1l
bnQ7CitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKIAogZW51bSBSZW9wdGltaXphdGlvbk1vZGUg
eyBEb250Q291bnRSZW9wdGltaXphdGlvbiwgQ291bnRSZW9wdGltaXphdGlvbiB9OwogCkBAIC0y
NzQsNiArMjc1LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1faml0Q29kZU1h
cC5nZXQoKTsKICAgICB9CisKKyAgICBkb3VibGUgYXZlcmFnZU1lbVNpemUoKSBjb25zdDsKICAg
ICAKICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChJbnN0cnVjdGlvbiogcmV0dXJuQWRkcmVz
cykKICAgICB7CkBAIC05MjcsNiArOTMwLDEwIEBAIHB1YmxpYzoKIAogICAgIENhbGxTaXRlSW5k
ZXggbmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggb3JpZ2lu
YWxDYWxsU2l0ZSk7CiAKKyAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVl
X3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9D
b2RlT3JpZ2luTWFwKCkgY29uc3QgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsg
fQorICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7CisKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKICAgICB2b2lkIGZpbmFs
aXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKQEAgLTEwOTcsNiArMTEwNCw3IEBAIHByaXZh
dGU6CiAjaWYgRU5BQkxFKEpJVCkKICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBtX2NhcGFiaWxp
dHlMZXZlbFN0YXRlOwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2lu
TWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogCiAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBt
X3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiAgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciBtX3dl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIs
OSBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgYm9vbCBpc0FwcHJveGltYXRlbHlFcXVhbFRv
KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdDsKICAgICAKICAgICB1bnNpZ25lZCBhcHBy
b3hpbWF0ZUhhc2goKSBjb25zdDsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4K
KyAgICB2b2lkIHdhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJik7CiAgICAgCiAgICAg
Ly8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRoaXMgaXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZv
ciBkZWJ1Z2dpbmcgb25seS4KICAgICBWZWN0b3I8Q29kZU9yaWdpbj4gaW5saW5lU3RhY2soKSBj
b25zdDsKQEAgLTEyNyw3ICsxMzAsNyBAQCBpbmxpbmUgYm9vbCBDb2RlT3JpZ2luOjpvcGVyYXRv
cj09KGNvbnN0CiAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXggPT0gb3RoZXIuYnl0ZWNvZGVJbmRl
eAogICAgICAgICAmJiBpbmxpbmVDYWxsRnJhbWUgPT0gb3RoZXIuaW5saW5lQ2FsbEZyYW1lOwog
fQotICAgIAorCiBzdHJ1Y3QgQ29kZU9yaWdpbkhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IENvZGVPcmlnaW4mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQogICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IENvZGVPcmlnaW4mIGEsIGNvbnN0IENvZGVPcmlnaW4mIGIp
IHsgcmV0dXJuIGEgPT0gYjsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUNhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAkocmV2aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDYsNiArMjQ2LDE5IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9y
T3IKICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2s7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNv
bnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAq
dGhpczsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBmdW5jdGlvbihjb2RlT3JpZ2luKTsK
KyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmRp
cmVjdENhbGxlcjsKKyAgICB9Cit9CisgICAgCisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1l
c3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MzI0LDYgKzMyNCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgYm9vbCBjb250YWluc1BDKHZv
aWQqIHBjKSBjb25zdAorICAgIHsgCisgICAgICAgIGlmICghbV9zdHViUm91dGluZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB1aW50cHRyX3QgcGNBc0ludCA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KHBjKTsKKyAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUtPnN0
YXJ0QWRkcmVzcygpIDw9IHBjQXNJbnQgJiYgcGNBc0ludCA8PSBtX3N0dWJSb3V0aW5lLT5lbmRB
ZGRyZXNzKCk7CisgICAgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NDYXNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQs
NiArMTg0LDEzIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAg
ICByZXNldChjb2RlQmxvY2spOwogICAgIHJlc2V0QnlHQyA9IHRydWU7CiB9CisKK2Jvb2wgU3Ry
dWN0dXJlU3R1YkluZm86OmNvbnRhaW5zUEModm9pZCogcGMpIGNvbnN0Cit7CisgICAgaWYgKGNh
Y2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gdS5zdHViLT5jb250YWluc1BDKHBjKTsKK30KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYg
KzEyMiw4IEBAIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4OwogCisgICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBj
b25zdDsKKwogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgYWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rp
b25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KTsKIAogICAg
IGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUo
KTsgfQorICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbklu
Zm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAKICAgICAvLyBTcGVjaWFsIHJlZ2lz
dGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0
ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAvLyBXZSBhcmUgaW4gdGhlIG1pZGRs
ZSBvZiBhbiBleHBlcmltZW50YWwgdHJhbnNpdGlvbiBmcm9tIExMVk0gdG8gQjMgYXMgdGhlIGJh
Y2tlbmQgZm9yIHRoZSBGVEwuIFdlIGRvbid0CiAvLyB5ZXQga25vdyBob3cgaXQgd2lsbCB0dXJu
IG91dC4gRm9yIG5vdywgdGhpcyBmbGFnIHdpbGwgY29udHJvbCB3aGV0aGVyIEZUTCB1c2VzIEIz
LiBSZW1lbWJlciB0byBzZXQgdGhpcwogLy8gdG8gMCBiZWZvcmUgY29tbWl0dGluZyEKLSNkZWZp
bmUgRlRMX1VTRVNfQjMgMAorI2RlZmluZSBGVExfVVNFU19CMyAxCiAKIHN0cnVjdCBOb2RlOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAko
cmV2aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNSw2ICszMDUsOCBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgICAgICBtX2NvZGVCbG9jay0+YXBw
ZW5kRXhjZXB0aW9uSGFuZGxlcihuZXdFeGNlcHRpb25IYW5kbGVyKTsKICAgICAgICAgfQogICAg
IH0KKworICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5p
cXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
KSwgbGlua0J1ZmZlcikpOwogfQogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKQEAgLTMz
OSw3ICszNDEsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKICAgICBtX3NwZWN1bGF0
aXZlLT5jYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0
aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKIAogICAgIC8vIEdlbmVy
YXRlIHNsb3cgcGF0aCBjb2RlLgotICAgIG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJh
dG9ycygpOworICAgIG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycyhtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcik7CisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKDAsIG51bGxwdHIpKTsKICAgICAKICAgICBjb21w
aWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKICAgICBsaW5rT1NSRXhpdHMoKTsKQEAgLTQzMiw3ICs0
MzUsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIGp1bXAoZnJv
bUFyaXR5Q2hlY2spOwogICAgIAogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgotICAg
IG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIG1fc3BlY3VsYXRp
dmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycyhtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik7Cisg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3Jp
Z2luKDAsIG51bGxwdHIpKTsKICAgICAKICAgICBjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsK
ICAgICBsaW5rT1NSRXhpdHMoKTsKQEAgLTU5OCw2ICs2MDIsMjIgQEAgQ2FsbFNpdGVJbmRleCBK
SVRDb21waWxlcjo6cmVjb3JkQ2FsbFNpdAogICAgIHJldHVybiBjYWxsU2l0ZTsKIH0KIAordm9p
ZCBKSVRDb21waWxlcjo6c2V0RW5kT2ZNYWluUGF0aCgpCit7CisgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgbV9zcGVj
dWxhdGl2ZS0+bV9vcmlnaW4uc2VtYW50aWMpOworICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1i
bGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZk1haW5Q
YXRoKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6
c2V0RW5kT2ZDb2RlKCkKK3sKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJ
dGVtKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBDb2RlT3JpZ2luKDAsIG51bGxwdHIpKTsK
KyAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShy
ZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVk
ZSAiVGVtcFJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTE4LDYgKzExOSw3
IEBAIHB1YmxpYzoKICAgICAvLyBNZXRob2RzIHRvIHNldCBsYWJlbHMgZm9yIHRoZSBkaXNhc3Nl
bWJsZXIuCiAgICAgdm9pZCBzZXRTdGFydE9mQ29kZSgpCiAgICAgeworICAgICAgICBtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygp
LCBDb2RlT3JpZ2luKDAsIG51bGxwdHIpKTsKICAgICAgICAgaWYgKExJS0VMWSghbV9kaXNhc3Nl
bWJsZXIpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0
U3RhcnRPZkNvZGUobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOwpAQCAtMTM3LDE5ICsxMzks
OCBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JOb2RlKG5vZGUsIGxh
YmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRFbmRP
Zk1haW5QYXRoKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mTWFp
blBhdGgobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IHNldEVuZE9mQ29kZSgpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxl
cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRP
ZkNvZGUobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOwotICAgIH0KKyAgICB2b2lkIHNldEVu
ZE9mTWFpblBhdGgoKTsKKyAgICB2b2lkIHNldEVuZE9mQ29kZSgpOwogICAgIAogICAgIENhbGxT
aXRlSW5kZXggYWRkQ2FsbFNpdGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKQEAgLTI2
NSw2ICsyNTYsOCBAQCBwdWJsaWM6CiAKICAgICBDYWxsU2l0ZUluZGV4IHJlY29yZENhbGxTaXRl
QW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb25zdCBDb2RlT3Jp
Z2luJiwgdW5zaWduZWQgZXZlbnRTdHJlYW1JbmRleCk7CiAKKyAgICBQQ1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXImIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigpIHsgcmV0dXJuIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE9TUkV4aXRK
dW1wUGxhY2Vob2xkZXI7CiAgICAgCkBAIC0zMjgsNiArMzIxLDcgQEAgcHJpdmF0ZToKICAgICBD
YWxsIG1fY2FsbEFyaXR5Rml4dXA7CiAgICAgTGFiZWwgbV9hcml0eUNoZWNrOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxTcGVjdWxhdGl2ZUpJVD4gbV9zcGVjdWxhdGl2ZTsKKyAgICBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CiB9OwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ns
b3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDYgKzYyLDkgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBCeSBkZWZhdWx0IHNsb3cgcGF0aCBnZW5lcmF0b3JzIGRvbid0IGhhdmUgYSBjYWxs
LgogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkNhbGwoKTsKICAgICB9CisKKyAgICBj
b25zdCBOb2RlT3JpZ2luJiBvcmlnaW4oKSBjb25zdCAgeyByZXR1cm4gbV9vcmlnaW47IH0KKwog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZl
SklUKikgPSAwOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2xhYmVsOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzAsMTAgKzMzMCwxMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjphZGRTbG93UGF0aEdlbmVyYXRvCiAgICAgbV9zbG93UGF0aEdlbmVyYXRvcnMuYXBw
ZW5kKFdURk1vdmUoc2xvd1BhdGhHZW5lcmF0b3IpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6cnVuU2xvd1BhdGhHZW5lcmF0b3JzKCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnJ1blNsb3dQ
YXRoR2VuZXJhdG9ycyhQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImIHBjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zbG93UGF0aEdlbmVy
YXRvcnMuc2l6ZSgpOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2xvd1Bh
dGhHZW5lcmF0b3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHBjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlci5hcHBlbmRJdGVtKG1faml0LmxhYmVsKCksIG1fc2xvd1BhdGhHZW5lcmF0b3JzW2ldLT5v
cmlnaW4oKS5zZW1hbnRpYyk7CiAgICAgICAgIG1fc2xvd1BhdGhHZW5lcmF0b3JzW2ldLT5nZW5l
cmF0ZSh0aGlzKTsKKyAgICB9CiB9CiAKIC8vIE9uIFdpbmRvd3Mgd2UgbmVlZCB0byB3cmFwIGZt
b2Q7IG9uIG90aGVyIHBsYXRmb3JtcyB3ZSBjYW4gY2FsbCBpdCBkaXJlY3RseS4KQEAgLTE1MDQs
NiArMTUwNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSAmJiBtYXlF
eGl0KG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUpICE9IERvZXNOb3RFeGl0KQogICAgICAg
ICAgICAgbV9qaXQuaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAKKyAgICAgICAgbV9q
aXQucGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkuYXBwZW5kSXRlbShtX2ppdC5sYWJlbCgpLCBt
X29yaWdpbi5zZW1hbnRpYyk7CisKICAgICAgICAgY29tcGlsZShtX2N1cnJlbnROb2RlKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChiZWxvbmdzSW5NaW5pZmllZEdyYXBoKG1fY3VycmVudE5vZGUt
Pm9wKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsNyArMzE3LDcgQEAgcHVi
bGljOgogICAgIEdlbmVyYXRlZE9wZXJhbmRUeXBlIGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50
MzIoTm9kZSopOwogCiAgICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6OnVuaXF1ZV9w
dHI8U2xvd1BhdGhHZW5lcmF0b3I+KTsKLSAgICB2b2lkIHJ1blNsb3dQYXRoR2VuZXJhdG9ycygp
OworICAgIHZvaWQgcnVuU2xvd1BhdGhHZW5lcmF0b3JzKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ciYpOwogICAgIAogICAgIHZvaWQgY29tcGlsZShOb2RlKik7CiAgICAgdm9pZCBub3RpY2VPU1JC
aXJ0aChOb2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBp
bGUuY3BwCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEIzQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRl
ICJGVExVbndpbmRJbmZvLmgiCiAjaW5jbHVkZSAiSklUU3ViR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVk
ZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKQEAgLTEzNCw2ICsxMzUsOSBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBT
YWZlcG9pbnQ6OlJlCiAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorICAgIAorICAgIEIzOjpQQ1RvT3JpZ2luTWFwIG9yaWdpbk1h
cCA9IHN0YXRlLnByb2MtPnJlbGVhc2VQQ1RvT3JpZ2luTWFwKCk7CisgICAgY29kZUJsb2NrLT5z
ZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFs
aXplci0+YjNDb2RlTGlua0J1ZmZlcikpOwogCiAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24g
PSBiaXR3aXNlX2Nhc3Q8R2VuZXJhdGVkRnVuY3Rpb24+KAogICAgICAgICBzdGF0ZS5maW5hbGl6
ZXItPmIzQ29kZUxpbmtCdWZmZXItPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxOTU0NDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA4Niw2ICsxMDg2LDI3IEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OmNvbGxlY3RJbXBsKEhl
YXAKICAgICB3aWxsU3RhcnRDb2xsZWN0aW9uKGNvbGxlY3Rpb25UeXBlKTsKICAgICBHQ1BIQVNF
KENvbGxlY3QpOwogCisgICAgeworICAgICAgICBjbGFzcyBJdGVyYXRvciB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgYXZnID0gY29kZUJsb2NrLT5h
dmVyYWdlTWVtU2l6ZSgpOworICAgICAgICAgICAgICAgIGlmIChhdmcgPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIG51bVNlZW4gKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0g
YXZnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBkb3VibGUgbnVtU2VlbiB7IDAgfTsKKyAgICAgICAg
ICAgIGRvdWJsZSB0b3RhbCB7IDAgfTsKKyAgICAgICAgfTsKKyAgICAgICAgSXRlcmF0b3IgaXQ7
CisgICAgICAgIG1fY29kZUJsb2Nrcy5pdGVyYXRlPEl0ZXJhdG9yPihpdCk7CisgICAgICAgIGlm
IChpdC5udW1TZWVuID4gMCkKKyAgICAgICAgICAgIGRhdGFMb2dGKCJFeHBlY3RlZCBhdmVyYWdl
IHNpemU6ICVsZlxuIiwgMTAwKihpdC50b3RhbC9pdC5udW1TZWVuKSk7CisgICAgfQorCiAgICAg
ZG91YmxlIGdjU3RhcnRUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsK
ICAgICBpZiAobV92ZXJpZmllcikgewogICAgICAgICAvLyBWZXJpZnkgdGhhdCBsaXZlIG9iamVj
dHMgZnJvbSB0aGUgbGFzdCBHQyBjeWNsZSBoYXZlbid0IGJlZW4gY29ycnVwdGVkIGJ5CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hp
bmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDExIEBACiAKICNp
bmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRl
ICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJMTEludFBDUmFuZ2VzLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1ZGUgPHN0ZGxp
Yi5oPgpAQCAtNTc3LDYgKzU4MCw2NCBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpS
ZWdpc3RlcnM6CiAjZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIGluc3RydWN0aW9uIHBvaW50
ZXIgZm9yIGFub3RoZXIgdGhyZWFkIG9uIHRoaXMgcGxhdGZvcm0KICNlbmRpZgogfQordm9pZCog
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOjpsbGludFBDKCkgY29uc3QKK3sKKyAg
ICAvLyBMTEludCB1c2VzIHJlZ1Q0IGFzIFBDLgorI2lmIE9TKERBUldJTikKKworI2lmIF9fREFS
V0lOX1VOSVgwMworCisjaWYgQ1BVKFg4NikKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTElu
dFBDID09IFg4NlJlZ2lzdGVyczo6ZXNpLCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX19lc2kpOworI2VsaWYgQ1BVKFg4Nl82NCkK
KyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6cjgsICJX
cm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVn
cy5fX3I4KTsKKyNlbGlmIENQVShBUk0pCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQ
QyA9PSBBUk1SZWdpc3RlcnM6OnI4LCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX19yWzhdKTsKKyNlbGlmIENQVShBUk02NCkKKyAg
ICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IEFSTTY0UmVnaXN0ZXJzOjp4NCwgIldy
b25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdz
Ll9feFs0XSk7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKwor
I2Vsc2UgLy8gIV9fREFSV0lOX1VOSVgwMworI2lmIENQVShYODYpCisgICAgc3RhdGljX2Fzc2Vy
dChMTEludDo6TExJbnRQQyA9PSBYODZSZWdpc3RlcnM6OmVzaSwgIldyb25nIExMSW50IFBDLiIp
OworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLmVzaSk7CisjZWxpZiBD
UFUoWDg2XzY0KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0
ZXJzOjpyOCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWdzLnI4KTsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNl
bmRpZgorCisjZW5kaWYgLy8gX19EQVJXSU5fVU5JWDAzCisKKy8vIGVuZCBPUyhEQVJXSU4pCisj
ZWxpZiBPUyhXSU5ET1dTKQorCisjaWYgQ1BVKEFSTSkKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50
OjpMTEludFBDID09IEFSTVJlZ2lzdGVyczo6cjgsICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHVpbnRwdHJfdCkgcmVncy5SOCk7CisjZWxp
ZiBDUFUoTUlQUykKKyNlcnJvciBEb250IGtub3cgd2hhdCB0byBkbyB3aXRoIG1pcHMuIERvIHdl
IGV2ZW4gbmVlZCB0aGlzPworI2VsaWYgQ1BVKFg4NikKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50
OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6ZXNpLCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCh1aW50cHRyX3QpIHJlZ3MuRXNpKTsKKyNl
bGlmIENQVShYODZfNjQpCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBYODZS
ZWdpc3RlcnM6OnIxMCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PHZvaWQqPigodWludHB0cl90KSByZWdzLlIxMCk7CisjZWxzZQorI2Vycm9yIFVua25v
d24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworI2Vsc2UKKyNlcnJvciBOZWVkIGEgd2F5IHRvIGdl
dCB0aGUgTExJbnRQQyBmb3IgYW5vdGhlciB0aHJlYWQgb24gdGhpcyBwbGF0Zm9ybQorI2VuZGlm
Cit9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogCiB2b2lkIE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWQ6OmZyZWVSZWdpc3RlcnMoVGhyZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVy
cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01h
cmtlci5oCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YWNoaW5lU3RhY2tNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQCBwdWJs
aWM6CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgdm9pZCogZnJh
bWVQb2ludGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2b2lkKiBpbnN0cnVjdGlvblBvaW50ZXIo
KSBjb25zdDsKKyAgICAgICAgICAgIHZvaWQqIGxsaW50UEMoKSBjb25zdDsKICNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICAKICNpZiBPUyhEQVJXSU4pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3Jp
cHRQcm9maWxlckFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAkocmV2aXNp
b24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsx
NTcsNyBAQCB2b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OmFkZEV2CiB9CiAKICNp
ZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi1zdGF0aWMgUmVmPFByb3RvY29sOjpTY3JpcHRQ
cm9maWxlcjo6U2FtcGxlcz4gYnVpbGRTYW1wbGVzKFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpT
dGFja1RyYWNlPiYgc2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzLCBkb3VibGUgdG90YWxUaW1l
KQorc3RhdGljIFJlZjxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlNhbXBsZXM+IGJ1aWxkU2Ft
cGxlcyhWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZT4mJiBzYW1wbGluZ1Byb2Zp
bGVyU3RhY2tUcmFjZXMsIGRvdWJsZSB0b3RhbFRpbWUpCiB7CiAgICAgUmVmPFByb3RvY29sOjpB
cnJheTxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlN0YWNrVHJhY2U+PiBzdGFja1RyYWNlcyA9
IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlN0YWNrVHJhY2U+Ojpj
cmVhdGUoKTsKICAgICBmb3IgKFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2UmIHN0YWNrVHJh
Y2UgOiBzYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMpIHsKQEAgLTE2Niw4ICsxNjYsOCBAQCBz
dGF0aWMgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U2FtCiAgICAgICAgICAgICBSZWY8
UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTdGFja0ZyYW1lPiBmcmFtZSA9IFByb3RvY29sOjpT
Y3JpcHRQcm9maWxlcjo6U3RhY2tGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0
U291cmNlSUQoU3RyaW5nOjpudW1iZXIoc3RhY2tGcmFtZS5zb3VyY2VJRCgpKSkKICAgICAgICAg
ICAgICAgICAuc2V0TmFtZShzdGFja0ZyYW1lLmRpc3BsYXlOYW1lKCkpCi0gICAgICAgICAgICAg
ICAgLnNldExpbmUoc3RhY2tGcmFtZS5zdGFydExpbmUoKSkKLSAgICAgICAgICAgICAgICAuc2V0
Q29sdW1uKHN0YWNrRnJhbWUuc3RhcnRDb2x1bW4oKSkKKyAgICAgICAgICAgICAgICAuc2V0TGlu
ZShzdGFja0ZyYW1lLmZ1bmN0aW9uU3RhcnRMaW5lKCkpCisgICAgICAgICAgICAgICAgLnNldENv
bHVtbihzdGFja0ZyYW1lLmZ1bmN0aW9uU3RhcnRDb2x1bW4oKSkKICAgICAgICAgICAgICAgICAu
c2V0VXJsKHN0YWNrRnJhbWUudXJsKCkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAg
ICAgICAgICAgIGZyYW1lcy0+YWRkSXRlbShXVEZNb3ZlKGZyYW1lKSk7CkBAIC0xOTQsOCArMTk0
LDggQEAgdm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50Ojp0cmFjawogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzYW1wbGluZ1Byb2ZpbGVyKTsKICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKICAgICAgICAgc2FtcGxpbmdQcm9maWxl
ci0+c3RvcChsb2NrZXIpOwotICAgICAgICBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpT
YW1wbGVzPiBzYW1wbGVzID0gYnVpbGRTYW1wbGVzKHNhbXBsaW5nUHJvZmlsZXItPnN0YWNrVHJh
Y2VzKGxvY2tlciksIHNhbXBsaW5nUHJvZmlsZXItPnRvdGFsVGltZShsb2NrZXIpKTsKLSAgICAg
ICAgc2FtcGxpbmdQcm9maWxlci0+Y2xlYXJEYXRhKGxvY2tlcik7CisgICAgICAgIFZlY3RvcjxT
YW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiBzdGFja1RyYWNlcyA9IHNhbXBsaW5nUHJvZmls
ZXItPnJlbGVhc2VTdGFja1RyYWNlcyhsb2NrZXIpOworICAgICAgICBSZWY8UHJvdG9jb2w6OlNj
cmlwdFByb2ZpbGVyOjpTYW1wbGVzPiBzYW1wbGVzID0gYnVpbGRTYW1wbGVzKFdURk1vdmUoc3Rh
Y2tUcmFjZXMpLCBzYW1wbGluZ1Byb2ZpbGVyLT50b3RhbFRpbWUobG9ja2VyKSk7CiAKICAgICAg
ICAgbG9ja2VyLnVubG9ja0Vhcmx5KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUg
IlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAi
U2FtcGxpbmdUb29sLmgiCkBAIC0xNDIsNyArMTQzLDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCi12
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcyhQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImIHBjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlcikKIHsKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3Vt
ZW50Q291bnRTYW5lKCk7CkBAIC0xNTgsNiArMTU5LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
aW5zdHJ1Y3Rpb25zQmVnaW4gKyBtX2J5dGVjb2RlT2Zmc2V0OwogICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKG1faW50ZXJwcmV0ZXItPmlzT3Bjb2RlKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5v
cGNvZGUpLCAicHJpdmF0ZUNvbXBpbGVNYWluUGFzcyBnb25lIGJhZCBAICVkIiwgbV9ieXRlY29k
ZU9mZnNldCk7CiAKKyAgICAgICAgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0o
bGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSk7CisKICNpZiBFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9ieXRlY29kZU9mZnNldCA+IDApIC8vIEF2b2lk
IHRoZSBvdmVyaGVhZCBvZiBzYW1wbGluZyBvcF9lbnRlciB0d2ljZS4KICAgICAgICAgICAgIHNh
bXBsZUluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0zNDUsNyArMzQ4LDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3MoKQogICAgIG1fam1wVGFibGUuY2xlYXIo
KTsKIH0KIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKK3ZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcyhQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImIHBjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlcikKIHsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4g
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKIApAQCAtMzY1LDYgKzM2OCw4
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgZm9yIChWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVy
ICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewogICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gaXRl
ci0+dG87CiAKKyAgICAgICAgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFi
ZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSk7CisKICAgICAgICAgdW5zaWduZWQg
Zmlyc3RUbyA9IG1fYnl0ZWNvZGVPZmZzZXQ7CiAKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2luICsgbV9ieXRlY29kZU9mZnNldDsKQEAg
LTUxOSw2ICs1MjQsOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJ
CiAgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKICAgICB9CiAgICAgCisgICAgUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKKyAgICBwY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKDAsIG51bGxw
dHIpKTsKKwogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3NlbWJsZXIt
PnNldFN0YXJ0T2ZDb2RlKGxhYmVsKCkpOwogCkBAIC01NjUsOSArNTczLDkgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMo
KTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgcHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpOworICAgIHByaXZhdGVDb21waWxlTWFpblBhc3MocGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyKTsKICAgICBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7Ci0gICAgcHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKKyAgICBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyhwY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIpOwogICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CkBAIC03MDgs
NiArNzE2LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAg
ICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdldCgp
LCBwYXRjaEJ1ZmZlcik7CiAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRk
Q29tcGlsYXRpb24obV9jb21waWxhdGlvbik7CiAgICAgfQorCisgICAgbV9jb2RlQmxvY2stPnNl
dFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdU
Rk1vdmUocGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpKTsgLy8gRklYTUU6
IGdldCB0aGUgZW5kIG9mIHRoZSBjb2RlIHJlZ2lvbiBhcyBDb2RlT3JpZ2luKCkuCiAgICAgCiAg
ICAgQ29kZVJlZiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwK
QEAgLTcxNiw3ICs3MjYsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxl
KEpJCiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5l
SklULmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCiAg
ICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNp
emUoKSkpOwotICAgIAorCiAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KENvZGVCbG9jazo6
TGF0ZVNocmluayk7CiAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUoCiAgICAgICAgIGFkb3B0
UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkJh
c2VsaW5lSklUKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxOTU0
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw2ICs2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTU2NvcGU7CiAgICAg
Y2xhc3MgSlNTdGFjazsKICAgICBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CisgICAgY2xhc3MgUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyOwogICAgIGNsYXNzIFJlZ2lzdGVyOwogICAgIGNsYXNzIFN0
cnVjdHVyZUNoYWluOwogICAgIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpAQCAtMjU4LDkgKzI1
OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIEpJVChWTSosIENv
ZGVCbG9jayogPSAwKTsKIAotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsK
KyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKFBDVG9Db2RlT3JpZ2luTWFwQnVp
bGRlciYpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKLSAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOworICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYpOwogICAgICAgICBDb21waWxh
dGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAgICAg
IAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJu
QWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgi
CisKKyNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsK
KworY2xhc3MgRGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIgeworcHVibGljOgorICAgIERlbHRhQ29t
cHJlc3Npb25CdWlsZGVyKHNpemVfdCBtYXhTaXplKQorICAgICAgICA6IG1fb2Zmc2V0KDApCisg
ICAgICAgICwgbV9tYXhTaXplKG1heFNpemUpCisgICAgeworICAgICAgICBtX2J1ZmZlciA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKG1fbWF4U2l6ZSkpOworICAgIH0KKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHZvaWQgd3JpdGUoVCBpdGVtKQorICAgIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9vZmZzZXQgKyBzaXplb2YoVCkgPD0gbV9tYXhTaXplKTsK
KyAgICAgICAgKmJpdHdpc2VfY2FzdDxUKj4obV9idWZmZXIgKyBtX29mZnNldCkgPSBpdGVtOwor
ICAgICAgICBtX29mZnNldCArPSBzaXplb2YoVCk7CisgICAgfQorCisgICAgdWludDhfdCogbV9i
dWZmZXI7IAorICAgIHNpemVfdCBtX29mZnNldDsKKyAgICBzaXplX3QgbV9tYXhTaXplOworfTsK
KworY2xhc3MgRGVsdGFDb21wcmVzc2Vpb25SZWFkZXIgeworcHVibGljOgorICAgIERlbHRhQ29t
cHJlc3NlaW9uUmVhZGVyKHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCisgICAgICAgIDog
bV9idWZmZXIoYnVmZmVyKQorICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgICAgICAsIG1fb2Zm
c2V0KDApCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBUIHJlYWQo
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9vZmZzZXQgKyBzaXplb2YoVCkgPD0g
bV9zaXplKTsKKyAgICAgICAgVCByZXN1bHQgPSAqYml0d2lzZV9jYXN0PFQqPihtX2J1ZmZlciAr
IG1fb2Zmc2V0KTsKKyAgICAgICAgbV9vZmZzZXQgKz0gc2l6ZW9mKFQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90KiBtX2J1ZmZlcjsKKyAg
ICBzaXplX3QgbV9zaXplOworICAgIHNpemVfdCBtX29mZnNldDsKK307CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCit2b2lkIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6YXBwZW5kSXRl
bShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwsIGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmln
aW4pCit7CisgICAgaWYgKG1fY29kZVJhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgaWYgKG1fY29k
ZVJhbmdlcy5sYXN0KCkuZW5kID09IGxhYmVsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX2NvZGVSYW5nZXMubGFzdCgpLmVuZCA9IGxhYmVsOworICAgICAgICBpZiAobV9jb2RlUmFu
Z2VzLmxhc3QoKS5jb2RlT3JpZ2luID09IGNvZGVPcmlnaW4gfHwgIWNvZGVPcmlnaW4pCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb2RlUmFuZ2VzLmFwcGVuZChDb2RlUmFu
Z2V7bGFiZWwsIGxhYmVsLCBjb2RlT3JpZ2lufSk7Cit9CisKKyNpZiBGVExfVVNFU19CMworUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoQjM6OlBDVG9P
cmlnaW5NYXAmJiBiM1BDVG9PcmlnaW5NYXApCit7CisgICAgZm9yIChjb25zdCBCMzo6UENUb09y
aWdpbk1hcDo6T3JpZ2luUmFuZ2UmIG9yaWdpblJhbmdlIDogYjNQQ1RvT3JpZ2luTWFwLnJhbmdl
cygpKSB7CisgICAgICAgIERGRzo6Tm9kZSogbm9kZSA9IGJpdHdpc2VfY2FzdDxERkc6Ok5vZGUq
PihvcmlnaW5SYW5nZS5vcmlnaW4uZGF0YSgpKTsKKyAgICAgICAgaWYgKG5vZGUpCisgICAgICAg
ICAgICBhcHBlbmRJdGVtKG9yaWdpblJhbmdlLmxhYmVsLCBub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcHBlbmRJdGVtKG9yaWdpblJhbmdlLmxhYmVs
LCBDb2RlT3JpZ2luKCkpOworICAgIH0KK30KKyNlbmRpZgorCisKK3N0YXRpYyBjb25zdCB1aW50
OF90IHNlbnRpbmVsUENEZWx0YSA9IDA7CitzdGF0aWMgY29uc3QgaW50OF90IHNlbnRpbmVsQnl0
ZWNvZGVEZWx0YSA9IDA7CisKK1BDVG9Db2RlT3JpZ2luTWFwOjpQQ1RvQ29kZU9yaWdpbk1hcChQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImJiBidWlsZGVyLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KQoreworICAgIGlmIChidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgLy8g
V2UgZG8gYSBmaW5hbCB0b3VjaC11cCBvbiB0aGUgbGFzdCByYW5nZSBoZXJlIGJlY2F1c2Ugb2Yg
aG93IHdlIGdlbmVyYXRlIHRoZSB0YWJsZS4KKyAgICAgICAgLy8gVGhlIGZpbmFsIHJhbmdlIChp
ZiBub24gZW1wdHkpIHdvdWxkIGJlIGlnbm9yZWQgaWYgd2UgZGlkbid0IGFwcGVuZCBhbnkgKGFy
Yml0cmFyeSkKKyAgICAgICAgLy8gcmFuZ2UgYXMgdGhlIGxhc3QgaXRlbSBvZiB0aGUgdmVjdG9y
LgorICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZSYgbGFzdCA9IGJ1
aWxkZXIubV9jb2RlUmFuZ2VzLmxhc3QoKTsKKyAgICAgICAgaWYgKCEobGFzdC5zdGFydCA9PSBs
YXN0LmVuZCkpCisgICAgICAgICAgICBidWlsZGVyLm1fY29kZVJhbmdlcy5hcHBlbmQoUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2V7IGxhc3QuZW5kLCBsYXN0LmVuZCwgbGFzdC5j
b2RlT3JpZ2luIH0pOyAvLyBUaGlzIHJhbmdlIHdpbGwgbmV2ZXIgYWN0dWFsbHkgYmUgZm91bmQs
IGJ1dCBpdCBlbnN1cmVzIHRoZSByZWFsIGxhc3QgcmFuZ2UgaXMgZm91bmQuCisgICAgfQorCisg
ICAgRGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIgcGNDb21wcmVzc29yKChzaXplb2YodWludHB0cl90
KSArIHNpemVvZih1aW50OF90KSkgKiBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCkpOworICAg
IHZvaWQqIGxhc3RQQ1ZhbHVlID0gbnVsbHB0cjsKKyAgICBhdXRvIGJ1aWxkUENUYWJsZSA9IFsm
XSAodm9pZCogcGNWYWx1ZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChwY1ZhbHVlID4gbGFz
dFBDVmFsdWUpOworICAgICAgICB1aW50cHRyX3QgZGVsdGEgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihwY1ZhbHVlKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxhc3RQQ1ZhbHVlKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZGVsdGEgIT0gc2VudGluZWxQQ0RlbHRhKTsKKyAgICAgICAg
bGFzdFBDVmFsdWUgPSBwY1ZhbHVlOworICAgICAgICBpZiAoZGVsdGEgPiBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ4X3Q+OjptYXgoKSkgeworICAgICAgICAgICAgcGNDb21wcmVzc29yLndyaXRl
PHVpbnQ4X3Q+KHNlbnRpbmVsUENEZWx0YSk7CisgICAgICAgICAgICBwY0NvbXByZXNzb3Iud3Jp
dGU8dWludHB0cl90PihkZWx0YSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBwY0NvbXByZXNzb3Iud3JpdGU8dWludDhfdD4oc3RhdGljX2Nhc3Q8dWludDhfdD4o
ZGVsdGEpKTsKKyAgICB9OworCisgICAgRGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIgY29kZU9yaWdp
bkNvbXByZXNzb3IoKHNpemVvZihpbnRwdHJfdCkgKyBzaXplb2YoaW50OF90KSArIHNpemVvZihp
bnQ4X3QpICsgc2l6ZW9mKElubGluZUNhbGxGcmFtZSopKSAqIGJ1aWxkZXIubV9jb2RlUmFuZ2Vz
LnNpemUoKSk7CisgICAgQ29kZU9yaWdpbiBsYXN0Q29kZU9yaWdpbigwLCBudWxscHRyKTsKKyAg
ICBhdXRvIGJ1aWxkQ29kZU9yaWdpblRhYmxlID0gWyZdIChjb25zdCBDb2RlT3JpZ2luJiBjb2Rl
T3JpZ2luKSB7CisgICAgICAgIGludHB0cl90IGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkgLSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4obGFzdENv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGxhc3RDb2RlT3JpZ2luID0gY29kZU9y
aWdpbjsKKyAgICAgICAgaWYgKGRlbHRhID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ4X3Q+Ojpt
YXgoKSB8fCBkZWx0YSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWluKCkgfHwgZGVs
dGEgPT0gc2VudGluZWxCeXRlY29kZURlbHRhKSB7CisgICAgICAgICAgICBjb2RlT3JpZ2luQ29t
cHJlc3Nvci53cml0ZTxpbnQ4X3Q+KHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSk7CisgICAgICAgICAg
ICBjb2RlT3JpZ2luQ29tcHJlc3Nvci53cml0ZTxpbnRwdHJfdD4oZGVsdGEpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPGludDhfdD4oc3Rh
dGljX2Nhc3Q8aW50OF90PihkZWx0YSkpOworCisgICAgICAgIGludDhfdCBoYXNJbmxpbmVDYWxs
RnJhbWVCeXRlID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPyAxIDogMDsKKyAgICAgICAg
Y29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50OF90PihoYXNJbmxpbmVDYWxsRnJhbWVCeXRl
KTsKKyAgICAgICAgaWYgKGhhc0lubGluZUNhbGxGcmFtZUJ5dGUpIHsKKyAgICAgICAgICAgIGNv
ZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPElubGluZUNhbGxGcmFtZSo+KGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBpZiAoYnVpbGRlci5tX2Nv
ZGVSYW5nZXMuc2l6ZSgpKSB7CisgICAgICAgIG1fcGNSYW5nZVN0YXJ0ID0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmZp
cnN0KCkuc3RhcnQpLmRhdGFMb2NhdGlvbigpKTsKKyAgICAgICAgbV9wY1JhbmdlRW5kID0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2Rl
UmFuZ2VzLmxhc3QoKS5lbmQpLmRhdGFMb2NhdGlvbigpKTsKKyAgICAgICAgbV9wY1JhbmdlRW5k
IC09IDE7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1aWxkZXIubV9jb2Rl
UmFuZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXI6OkNvZGVSYW5nZSYgY29kZVJhbmdlID0gYnVpbGRlci5tX2NvZGVSYW5nZXNbaV07CisgICAg
ICAgICAgICB2b2lkKiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2RlUmFuZ2Uuc3Rh
cnQpLmRhdGFMb2NhdGlvbigpOworICAgICAgICAgICAgdm9pZCogZW5kID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKGNvZGVSYW5nZS5lbmQpLmRhdGFMb2NhdGlvbigpOworICAgICAgICAgICAgQVNT
RVJUKG1fcGNSYW5nZVN0YXJ0IDw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSk7Cisg
ICAgICAgICAgICBBU1NFUlQobV9wY1JhbmdlRW5kID49IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KGVuZCkgLSAxKTsKKyAgICAgICAgICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgICAgICAg
ICAgQVNTRVJUKGkgPT0gYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpIC0gMSk7CisgICAgICAg
ICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICAgICAgQVNTRVJUKGxpbmtCdWZmZXIubG9jYXRp
b25PZihidWlsZGVyLm1fY29kZVJhbmdlc1tpIC0gMV0uZW5kKS5kYXRhTG9jYXRpb24oKSA9PSBz
dGFydCk7CisKKyAgICAgICAgICAgIGJ1aWxkUENUYWJsZShzdGFydCk7CisgICAgICAgICAgICBi
dWlsZENvZGVPcmlnaW5UYWJsZShjb2RlUmFuZ2UuY29kZU9yaWdpbik7CisgICAgICAgIH0KKwor
ICAgICAgICBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemUgPSBwY0NvbXByZXNzb3IubV9vZmZzZXQ7
CisgICAgICAgIG1fY29tcHJlc3NlZFBDcyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0UmVh
bGxvYyhwY0NvbXByZXNzb3IubV9idWZmZXIsIG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZSkpOwor
CisgICAgICAgIG1fY29tcHJlc3NlZENvZGVPcmlnaW5zU2l6ZSA9IGNvZGVPcmlnaW5Db21wcmVz
c29yLm1fb2Zmc2V0OworICAgICAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2lucyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhjb2RlT3JpZ2luQ29tcHJlc3Nvci5tX2J1ZmZlciwg
bV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9w
Y1JhbmdlU3RhcnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpOworICAg
ICAgICBtX3BjUmFuZ2VFbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgp
OworCisgICAgICAgIG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZSA9IDA7CisgICAgICAgIG1fY29t
cHJlc3NlZFBDcyA9IG51bGxwdHI7CisgICAgICAgIGZhc3RGcmVlKHBjQ29tcHJlc3Nvci5tX2J1
ZmZlcik7CisKKyAgICAgICAgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplID0gMDsKKyAgICAg
ICAgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnMgPSBudWxscHRyOworICAgICAgICBmYXN0RnJlZShj
b2RlT3JpZ2luQ29tcHJlc3Nvci5tX2J1ZmZlcik7CisgICAgfQorfQorCitQQ1RvQ29kZU9yaWdp
bk1hcDo6flBDVG9Db2RlT3JpZ2luTWFwKCkKK3sKKyAgICBpZiAobV9jb21wcmVzc2VkUENzKQor
ICAgICAgICBmYXN0RnJlZShtX2NvbXByZXNzZWRQQ3MpOworICAgIGlmIChtX2NvbXByZXNzZWRD
b2RlT3JpZ2lucykKKyAgICAgICAgZmFzdEZyZWUobV9jb21wcmVzc2VkQ29kZU9yaWdpbnMpOwor
fQorCitkb3VibGUgUENUb0NvZGVPcmlnaW5NYXA6Om1lbW9yeVNpemUoKQoreworICAgIGRvdWJs
ZSBzaXplID0gMDsKKyAgICBzaXplICs9IG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZTsKKyAgICBz
aXplICs9IG1fY29tcHJlc3NlZENvZGVPcmlnaW5zU2l6ZTsKKyAgICByZXR1cm4gc2l6ZTsKK30K
KworT3B0aW9uYWw8Q29kZU9yaWdpbj4gUENUb0NvZGVPcmlnaW5NYXA6OmZpbmRQQyh2b2lkKiBw
YykgY29uc3QKK3sKKyAgICB1aW50cHRyX3QgcGNBc0ludCA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHBjKTsKKyAgICBpZiAoIShtX3BjUmFuZ2VTdGFydCA8PSBwY0FzSW50ICYmIHBjQXNJbnQg
PD0gbV9wY1JhbmdlRW5kKSkKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisKKyAgICB1aW50cHRy
X3QgY3VycmVudFBDID0gMDsKKyAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2RlT3JpZ2luKDAsIG51
bGxwdHIpOworICAgIENvZGVPcmlnaW4gcHJldmlvdXNPcmlnaW47CisKKyAgICBEZWx0YUNvbXBy
ZXNzZWlvblJlYWRlciBwY1JlYWRlcihtX2NvbXByZXNzZWRQQ3MsIG1fY29tcHJlc3NlZFBDQnVm
ZmVyU2l6ZSk7CisgICAgRGVsdGFDb21wcmVzc2Vpb25SZWFkZXIgY29kZU9yaWdpblJlYWRlciht
X2NvbXByZXNzZWRDb2RlT3JpZ2lucywgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplKTsKKyAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB1aW50cHRyX3QgcHJldmlvdXNQQyA9IGN1cnJlbnRQ
QzsKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhfdCB2YWx1ZSA9IHBjUmVhZGVyLnJlYWQ8
dWludDhfdD4oKTsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBkZWx0YTsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZSA9PSBzZW50aW5lbFBDRGVsdGEpCisgICAgICAgICAgICAgICAgZGVsdGEgPSBwY1Jl
YWRlci5yZWFkPHVpbnRwdHJfdD4oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBkZWx0YSA9IHZhbHVlOworICAgICAgICAgICAgY3VycmVudFBDICs9IGRlbHRhOworICAgICAg
ICB9CisKKyAgICAgICAgQ29kZU9yaWdpbiBwcmV2aW91c09yaWdpbiA9IGN1cnJlbnRDb2RlT3Jp
Z2luOworICAgICAgICB7CisgICAgICAgICAgICBpbnQ4X3QgdmFsdWUgPSBjb2RlT3JpZ2luUmVh
ZGVyLnJlYWQ8aW50OF90PigpOworICAgICAgICAgICAgaW50cHRyX3QgZGVsdGE7CisgICAgICAg
ICAgICBpZiAodmFsdWUgPT0gc2VudGluZWxCeXRlY29kZURlbHRhKQorICAgICAgICAgICAgICAg
IGRlbHRhID0gY29kZU9yaWdpblJlYWRlci5yZWFkPGludHB0cl90PigpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHZhbHVl
KTsKKworICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY3VycmVudENvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCkgKyBkZWx0YSk7CisKKyAgICAgICAgICAgIGludDhfdCBoYXNJbmxpbmVG
cmFtZSA9IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxpbnQ4X3Q+KCk7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChoYXNJbmxpbmVGcmFtZSA9PSAwIHx8IGhhc0lubGluZUZyYW1lID09IDEpOwor
ICAgICAgICAgICAgaWYgKGhhc0lubGluZUZyYW1lKQorICAgICAgICAgICAgICAgIGN1cnJlbnRD
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxJbmxpbmVD
YWxsRnJhbWUqPigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJlbnRD
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAocHJldmlvdXNQQykgeworICAgICAgICAgICAgdWludHB0cl90IHN0YXJ0T2ZSYW5nZSA9
IHByZXZpb3VzUEM7CisgICAgICAgICAgICAvLyBXZSBzdWJ0cmFjdCAxIGJlY2F1c2Ugd2UgZ2Vu
ZXJhdGUgZW5kIHBvaW50cyBpbmNsdXNpdmVseSBpbiB0aGlzIHRhYmxlLCBldmVuIHRob3VnaCB3
ZSBhcmUgaW50ZXJlc3RlZCBpbiByYW5nZXMgb2YgdGhlIGZvcm06IFtwcmV2aW91c1BDLCBjdXJy
ZW50UEMpCisgICAgICAgICAgICB1aW50cHRyX3QgZW5kT2ZSYW5nZSA9IGN1cnJlbnRQQyAtIDE7
CisgICAgICAgICAgICBpZiAoc3RhcnRPZlJhbmdlIDw9IHBjQXNJbnQgJiYgcGNBc0ludCA8PSBl
bmRPZlJhbmdlKQorICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihw
cmV2aW91c09yaWdpbik7IC8vIFdlIHJldHVybiBwcmV2aW91c09yaWdpbiBoZXJlIGJlY2F1c2Ug
Q29kZU9yaWdpbidzIGFyZSBtYXBwZWQgdG8gdGhlIHN0YXJ0VmFsdWUgb2YgdGhlIHJhbmdlLgor
ICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gTnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBQQ1RvQ29kZU9yaWdpbk1hcF9oCisjZGVmaW5lIFBDVG9D
b2RlT3JpZ2luTWFwX2gKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdD
b21tb24uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi9CYWcu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVkQmxhY2tUcmVl
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIEZU
TF9VU0VTX0IzCituYW1lc3BhY2UgQjMgeworICAgIGNsYXNzIFBDVG9PcmlnaW5NYXA7Cit9Cisj
ZW5kaWYKKworY2xhc3MgTGlua0J1ZmZlcjsKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjsKKworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOworICAgIGZyaWVuZCBjbGFzcyBQQ1Rv
Q29kZU9yaWdpbk1hcDsKKworcHVibGljOgorICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigp
CisgICAgeyB9CisKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoUENUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyJiYgb3RoZXIpCisgICAgICAgIDogbV9jb2RlUmFuZ2VzKFdURk1vdmUob3RoZXIu
bV9jb2RlUmFuZ2VzKSkKKyAgICB7IH0KKworI2lmIEZUTF9VU0VTX0IzCisgICAgUENUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyKEIzOjpQQ1RvT3JpZ2luTWFwJiYpOworI2VuZGlmCisKKyAgICB2b2lk
IGFwcGVuZEl0ZW0oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsLCBjb25zdCBDb2RlT3JpZ2luJik7CisK
K3ByaXZhdGU6CisKKyAgICBzdHJ1Y3QgQ29kZVJhbmdlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIHN0YXJ0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZW5kOworICAg
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAgfTsKKworICAgIFZlY3RvcjxDb2RlUmFu
Z2U+IG1fY29kZVJhbmdlczsKK307CisKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShQQ1RvQ29kZU9yaWdpbk1hcCk7CitwdWJsaWM6CisgICAgUENU
b0NvZGVPcmlnaW5NYXAoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiYsIExpbmtCdWZmZXImKTsK
KyAgICB+UENUb0NvZGVPcmlnaW5NYXAoKTsKKworICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+IGZp
bmRQQyh2b2lkKiBwYykgY29uc3Q7CisKKyAgICBkb3VibGUgbWVtb3J5U2l6ZSgpOworCitwcml2
YXRlOgorICAgIHNpemVfdCBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemU7CisgICAgc2l6ZV90IG1f
Y29tcHJlc3NlZENvZGVPcmlnaW5zU2l6ZTsKKyAgICB1aW50OF90KiBtX2NvbXByZXNzZWRQQ3M7
CisgICAgdWludDhfdCogbV9jb21wcmVzc2VkQ29kZU9yaWdpbnM7CisgICAgdWludHB0cl90IG1f
cGNSYW5nZVN0YXJ0OworICAgIHVpbnRwdHJfdCBtX3BjUmFuZ2VFbmQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFBDVG9Db2RlT3JpZ2luTWFwX2ggCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRQQ1Jhbmdlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFBDUmFuZ2VzLmgJKHJldmlzaW9uIDE5NTQ0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFBDUmFuZ2VzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDYgKzQ1LDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0xMSW50UEMo
dm9pZCogcGMpCiAgICAgcmV0dXJuIGxsaW50U3RhcnQgPD0gcGNBc0ludCAmJiBwY0FzSW50IDw9
IGxsaW50RW5kOwogfQogCisjaWYgRU5BQkxFKEpJVCkKK3N0YXRpYyBjb25zdCBHUFJSZWcgTExJ
bnRQQyA9IEdQUkluZm86OnJlZ1Q0OworI2VuZGlmCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpM
TEludAogCiAjZW5kaWYgLy8gTExJbnRQQ1Jhbmdlc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAx
OTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsNyBAQCBpZiBKU1ZBTFVFNjQKICAg
ICAjIC0gVGhlIFBDIGJhc2UgKG9yIFBCIGZvciBzaG9ydCkgbXVzdCBiZSBzdG9yZWQgaW4gYSBj
YWxsZWUtc2F2ZSByZWdpc3Rlci4KICAgICAjIC0gQyBjYWxscyBhcmUgc3RpbGwgZ2l2ZW4gdGhl
IEluc3RydWN0aW9uKiByYXRoZXIgdGhhbiB0aGUgUEMgaW5kZXguCiAgICAgIyAgIFRoaXMgcmVx
dWlyZXMgYW4gYWRkIGJlZm9yZSB0aGUgY2FsbCwgYW5kIGEgc3ViIGFmdGVyLgotICAgIGNvbnN0
IFBDID0gdDQKKyAgICBjb25zdCBQQyA9IHQ0ICMgV2hlbiBjaGFuZ2luZyB0aGlzLCBtYWtlIHN1
cmUgTExJbnRQQyBpcyB1cCB0byBkYXRlIGluIExMSW50UENSYW5nZXMuaAogICAgIGlmIEFSTTY0
CiAgICAgICAgIGNvbnN0IFBCID0gY3NyNwogICAgICAgICBjb25zdCB0YWdUeXBlTnVtYmVyID0g
Y3NyOApAQCAtMjkwLDcgKzI5MCw3IEBAIGlmIEpTVkFMVUU2NAogICAgIGVuZAogCiBlbHNlCi0g
ICAgY29uc3QgUEMgPSB0NAorICAgIGNvbnN0IFBDID0gdDQgIyBXaGVuIGNoYW5naW5nIHRoaXMs
IG1ha2Ugc3VyZSBMTEludFBDIGlzIHVwIHRvIGRhdGUgaW4gTExJbnRQQ1Jhbmdlcy5oCiAgICAg
bWFjcm8gbG9hZGlzRnJvbUluc3RydWN0aW9uKG9mZnNldCwgZGVzdCkKICAgICAgICAgbG9hZGlz
IG9mZnNldCAqIDRbUENdLCBkZXN0CiAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMTk1NDQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJMTEludFBDUmFuZ2Vz
LmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5o
IgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3Iu
aCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgpAQCAt
NDksNyArNTAsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBkb3VibGUgc051bVRvdGFs
U3RhY2tUcmFjZXMgPSAwOwotc3RhdGljIGRvdWJsZSBzTnVtVW52ZXJpZmllZFN0YWNrVHJhY2Vz
ID0gMDsKIHN0YXRpYyBkb3VibGUgc051bVRvdGFsV2Fsa3MgPSAwOwogc3RhdGljIGRvdWJsZSBz
TnVtRmFpbGVkV2Fsa3MgPSAwOwogc3RhdGljIGNvbnN0IHVpbnQzMl90IHNOdW1XYWxrUmVwb3J0
aW5nRnJlcXVlbmN5ID0gNTA7CkBAIC01OCw2ICs1OCw4IEBAIHN0YXRpYyBjb25zdCBib29sIHNS
ZXBvcnRTdGF0c09ubHlXaGVuVGgKIHN0YXRpYyBjb25zdCBib29sIHNSZXBvcnRTdGF0cyA9IGZh
bHNlOwogCiB1c2luZyBGcmFtZVR5cGUgPSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU7Cit1
c2luZyBVbnByb2Nlc3NlZEZyYW1lVHlwZSA9IFNhbXBsaW5nUHJvZmlsZXI6OlVucHJvY2Vzc2Vk
RnJhbWVUeXBlOwordXNpbmcgVW5wcm9jZXNzZWRTdGFja0ZyYW1lID0gU2FtcGxpbmdQcm9maWxl
cjo6VW5wcm9jZXNzZWRTdGFja0ZyYW1lOwogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHJl
cG9ydFN0YXRzKCkKIHsKQEAgLTY1LDggKzY3LDYgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9p
ZCByZXBvcnRTdGF0cygpCiAgICAgICAgIGlmICghc1JlcG9ydFN0YXRzT25seVdoZW5UaGV5cmVB
Ym92ZVRocmVzaG9sZCB8fCAoc051bUZhaWxlZFdhbGtzIC8gc051bVRvdGFsV2Fsa3MgPiBzV2Fs
a0Vycm9yUGVyY2VudGFnZSkpIHsKICAgICAgICAgICAgIGRhdGFMb2dGKCJOdW0gdG90YWwgd2Fs
a3M6ICVsbHUuIEZhaWxlZCB3YWxrcyBwZXJjZW50OiAlbGZcbiIsCiAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNOdW1Ub3RhbFdhbGtzKSwgc051bUZhaWxlZFdhbGtzIC8g
c051bVRvdGFsV2Fsa3MpOwotICAgICAgICAgICAgZGF0YUxvZ0YoIlRvdGFsIHN0YWNrIHRyYWNl
czogJWxsdS4gTmVlZHMgdmVyaWZpY2F0aW9uIHBlcmNlbnQ6ICVsZlxuIiwKLSAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc051bVRvdGFsU3RhY2tUcmFjZXMpLCBzTnVtVW52
ZXJpZmllZFN0YWNrVHJhY2VzIC8gc051bVRvdGFsU3RhY2tUcmFjZXMpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtODIsMzMgKzgyLDIzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAg
c2l6ZV90IHdhbGsoVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU+JiBzdGFja1Ry
YWNlLCBib29sJiBkaWRSdW5PdXRPZlNwYWNlLCBib29sJiBzdGFja3RyYWNlTmVlZHNWZXJpZmlj
YXRpb24pCisgICAgc2l6ZV90IHdhbGsoVmVjdG9yPFVucHJvY2Vzc2VkU3RhY2tGcmFtZT4mIHN0
YWNrVHJhY2UsIGJvb2wmIGRpZFJ1bk91dE9mU3BhY2UpCiAgICAgewotICAgICAgICBzdGFja3Ry
YWNlTmVlZHNWZXJpZmljYXRpb24gPSBmYWxzZTsKICAgICAgICAgaWYgKHNSZXBvcnRTdGF0cykK
ICAgICAgICAgICAgIHNOdW1Ub3RhbFdhbGtzKys7CiAgICAgICAgIHJlc2V0QXRNYWNoaW5lRnJh
bWUoKTsKICAgICAgICAgc2l6ZV90IG1heFN0YWNrVHJhY2VTaXplID0gc3RhY2tUcmFjZS5zaXpl
KCk7CiAgICAgICAgIHdoaWxlICghaXNBdFRvcCgpICYmICFtX2JhaWxpbmdPdXQgJiYgbV9kZXB0
aCA8IG1heFN0YWNrVHJhY2VTaXplKSB7Ci0gICAgICAgICAgICB3aGlsZSAobV9pbmxpbmVDYWxs
RnJhbWUgJiYgbV9kZXB0aCA8IG1heFN0YWNrVHJhY2VTaXplKSB7Ci0gICAgICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxv
Y2suZ2V0KCk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZENvZGVCbG9j
ayhjb2RlQmxvY2spKTsKLSAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gU2Ft
cGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZShTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU6OlZl
cmlmaWVkRXhlY3V0YWJsZSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7Ci0gICAgICAg
ICAgICAgICAgbV9kZXB0aCsrOwotICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0g
bV9pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgIGlmIChtX2RlcHRoID49IG1heFN0YWNrVHJhY2VTaXplKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgICAgIGlmIChpc1ZhbGlkQ29k
ZUJsb2NrKGNvZGVCbG9jaykpIHsKLSAgICAgICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhl
Y3V0YWJsZSA9IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7Ci0gICAgICAgICAgICAgICAg
c3RhY2tUcmFjZVttX2RlcHRoXSA9IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWUoRnJhbWVU
eXBlOjpWZXJpZmllZEV4ZWN1dGFibGUsZXhlY3V0YWJsZSk7CisgICAgICAgICAgICBpZiAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCkpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoaXNWYWxpZENvZGVCbG9jayhjb2RlQmxvY2spKTsKKyAgICAgICAgICAg
ICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gVW5wcm9jZXNzZWRTdGFja0ZyYW1lKGNvZGVCbG9j
aywgbV9jYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKSk7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbiA9IHRydWU7CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrID09IG51bGxwdHIpOwogICAgICAg
ICAgICAgICAgIEpTVmFsdWUgdW5zYWZlQ2FsbGVlID0gbV9jYWxsRnJhbWUtPnVuc2FmZUNhbGxl
ZSgpOwotICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0gPSBTYW1wbGluZ1Byb2Zp
bGVyOjpTdGFja0ZyYW1lKEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSwgSlNWYWx1ZTo6ZW5j
b2RlKHVuc2FmZUNhbGxlZSkpOworICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0g
PSBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoSlNWYWx1ZTo6ZW5jb2RlKHVuc2FmZUNhbGxlZSkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9kZXB0aCsrOwogICAgICAgICAgICAgYWR2YW5j
ZVRvUGFyZW50RnJhbWUoKTsKQEAgLTEzOCw4ICsxMjgsNiBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCByZXNldEF0TWFjaGluZUZyYW1lKCkKICAgICB7Ci0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1l
ID0gbnVsbHB0cjsKLQogICAgICAgICBpZiAoaXNBdFRvcCgpKQogICAgICAgICAgICAgcmV0dXJu
OwogCkBAIC0xNTEsOSArMTM5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIC8vIElmIHRoZSBmcmFtZSBk
b2Vzbid0IGhhdmUgYSBjb2RlIGJsb2NrLCB0aGVuIGl0J3Mgbm90IGEgCi0gICAgICAgIC8vIERG
Ry9GVEwgZnJhbWUgd2hpY2ggbWVhbnMgd2UncmUgbm90IGFuIGlubGluZWQgZnJhbWUuCiAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAg
ICAgICBpZiAoIWNvZGVCbG9jaykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2NCwyNSArMTQ5
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzTnVtRmFpbGVkV2Fsa3MrKzsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBjb2RlIGJsb2Nr
IGRvZXMgbm90IGhhdmUgYW55IGNvZGUgb3JpZ2lucywgdGhlbiB0aGVyZSdzIG5vCi0gICAgICAg
IC8vIGlubGluaW5nLiBIZW5jZSwgd2UncmUgbm90IGF0IGFuIGlubGluZWQgZnJhbWUuCi0gICAg
ICAgIGlmICghY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIENhbGxTaXRlSW5kZXggaW5kZXggPSBtX2NhbGxGcmFtZS0+Y2FsbFNpdGVJ
bmRleCgpOwotICAgICAgICBpZiAoIWNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRleCkp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOgotICAgICAgICAgICAgLy8gRm9yIHRoZSBtb3N0IHBh
cnQsIHdlIG9ubHkgZmFpbCBoZXJlIHdoZW4gd2UncmUgbG9va2luZwotICAgICAgICAgICAgLy8g
YXQgdGhlIHRvcCBtb3N0IGNhbGwgZnJhbWUuIEFsbCBvdGhlciBwYXJlbnQgY2FsbCBmcmFtZXMK
LSAgICAgICAgICAgIC8vIHNob3VsZCBoYXZlIHNldCB0aGUgQ2FsbFNpdGVJbmRleCB3aGVuIG1h
a2luZyBhIGNhbGwuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHJl
c29ydCB0byBnZXR0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIFBDPT5Db2RlT3JpZ2luIG1hcHBp
bmcKLSAgICAgICAgICAgIC8vIG9uY2Ugd2UgaW1wbGVtZW50IGl0OiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNjI5Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSBjb2RlQmxvY2stPmNvZGVPcmlnaW4o
aW5kZXgpLmlubGluZUNhbGxGcmFtZTsKLSNlbmRpZiAvLyAhRU5BQkxFKERGR19KSVQpCiAgICAg
fQogCiAgICAgYm9vbCBpc1ZhbGlkRnJhbWVQb2ludGVyKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTIx
MywxNCArMTc5LDEyIEBAIHByaXZhdGU6CiAgICAgY29uc3QgTG9ja0hvbGRlciYgbV9jb2RlQmxv
Y2tTZXRMb2NrZXI7CiAgICAgY29uc3QgTG9ja0hvbGRlciYgbV9tYWNoaW5lVGhyZWFkc0xvY2tl
cjsKICAgICBib29sIG1fYmFpbGluZ091dCB7IGZhbHNlIH07Ci0gICAgSW5saW5lQ2FsbEZyYW1l
KiBtX2lubGluZUNhbGxGcmFtZTsKICAgICBzaXplX3QgbV9kZXB0aCB7IDAgfTsKIH07CiAKIFNh
bXBsaW5nUHJvZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIoVk0mIHZtLCBSZWZQdHI8U3RvcHdhdGNo
PiYmIHN0b3B3YXRjaCkKICAgICA6IG1fdm0odm0pCiAgICAgLCBtX3N0b3B3YXRjaChXVEZNb3Zl
KHN0b3B3YXRjaCkpCi0gICAgLCBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5KDApCiAg
ICAgLCBtX3RpbWluZ0ludGVydmFsKHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMTAwMCkpCiAg
ICAgLCBtX3RvdGFsVGltZSgwKQogICAgICwgbV90aW1lclF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRl
KCJqc2Muc2FtcGxpbmctcHJvZmlsZXIucXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCwg
V29ya1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZSkpCkBAIC0yNTYsMjMgKzIyMCwyNyBAQCBT
YW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2CiAgICAgICAgICAgICAgICAg
Ly8gV2hpbGUgdGhlIEpTQyB0aHJlYWQgaXMgc3VzcGVuZGVkLCB3ZSBjYW4ndCBkbyB0aGluZ3Mg
bGlrZSBtYWxsb2MgYmVjYXVzZSB0aGUgSlNDIHRocmVhZAogICAgICAgICAgICAgICAgIC8vIG1h
eSBiZSBob2xkaW5nIHRoZSBtYWxsb2MgbG9jay4KICAgICAgICAgICAgICAgICBFeGVjU3RhdGUq
IGNhbGxGcmFtZTsKLSAgICAgICAgICAgICAgICB2b2lkKiBwYzsKKyAgICAgICAgICAgICAgICB2
b2lkKiBtYWNoaW5lUEM7CisgICAgICAgICAgICAgICAgYm9vbCB0b3BGcmFtZUlzTExJbnQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICB2b2lkKiBsbGludFBDOwogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzIHJl
Z2lzdGVyczsKICAgICAgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmdldFJl
Z2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBzdGF0
aWNfY2FzdDxFeGVjU3RhdGUqPihyZWdpc3RlcnMuZnJhbWVQb2ludGVyKCkpOwotICAgICAgICAg
ICAgICAgICAgICBwYyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbWFjaGluZVBDID0gcmVnaXN0ZXJzLmluc3RydWN0aW9uUG9pbnRlcigpOwor
ICAgICAgICAgICAgICAgICAgICBsbGludFBDID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKICAgICAg
ICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0
ZXJzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IExldHMg
aGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hlbiB3ZSdyZSBwYXJzaW5nIGNvZGUuCiAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2
MQotICAgICAgICAgICAgICAgIGlmIChtX3ZtLmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZEV4
ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlciwgcGMpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fdm0uZXhlY3V0YWJsZUFsbG9jYXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1l
bW9yeShleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyLCBtYWNoaW5lUEMpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX3ZtLmlzRXhlY3V0aW5nSW5SZWdFeHBKSVQpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSdyZSBleGVjdXRpbmcgYSByZWdleHAuIExldHMgZ2F0
aGVyIG1vcmUgaW50ZXJzdGluZyBkYXRhLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjcyOQogICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbEZyYW1lID0gbV92bS50b3BDYWxsRnJhbWU7IC8vIFdlIG5lZWQgdG8g
ZG8gdGhpcyBvciBlbHNlIHdlJ2QgZmFpbCBvdXIgYmFja3RyYWNlIHZhbGlkYXRpb24gYi9jIHRo
aXMgaXNuJ3QgYSBKUyBmcmFtZS4KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoTExJbnQ6OmlzTExJbnRQQyhwYykpIHsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKExMSW50Ojppc0xMSW50UEMobWFjaGluZVBDKSkgeworICAgICAgICAgICAgICAg
ICAgICB0b3BGcmFtZUlzTExJbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyBXZSdy
ZSBva2F5IHRvIHRha2UgYSBub3JtYWwgc3RhY2sgdHJhY2Ugd2hlbiB0aGUgUEMKICAgICAgICAg
ICAgICAgICAgICAgLy8gaXMgaW4gTExJbnQgY29kZS4KICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewpAQCAtMjg0LDEwICsyNTIsOSBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVy
KFZNJiB2CiAgICAgICAgICAgICAgICAgc2l6ZV90IHdhbGtTaXplOwogICAgICAgICAgICAgICAg
IGJvb2wgd2FzVmFsaWRXYWxrOwogICAgICAgICAgICAgICAgIGJvb2wgZGlkUnVuT3V0T2ZWZWN0
b3JTcGFjZTsKLSAgICAgICAgICAgICAgICBib29sIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlv
bjsKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIEZyYW1lV2Fsa2VyIHdh
bGtlcihjYWxsRnJhbWUsIG1fdm0sIGNvZGVCbG9ja1NldExvY2tlciwgbWFjaGluZVRocmVhZHNM
b2NrZXIpOwotICAgICAgICAgICAgICAgICAgICB3YWxrU2l6ZSA9IHdhbGtlci53YWxrKG1fY3Vy
cmVudEZyYW1lcywgZGlkUnVuT3V0T2ZWZWN0b3JTcGFjZSwgc3RhY2t0cmFjZU5lZWRzVmVyaWZp
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgd2Fsa1NpemUgPSB3YWxrZXIud2FsayhtX2N1
cnJlbnRGcmFtZXMsIGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UpOwogICAgICAgICAgICAgICAgICAg
ICB3YXNWYWxpZFdhbGsgPSB3YWxrZXIud2FzVmFsaWRXYWxrKCk7CiAgICAgICAgICAgICAgICAg
fQogCkBAIC0yOTgsMjEgKzI2NSwxNiBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2Zp
bGVyKFZNJiB2CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0J2QgYmUgaW50ZXJlc3Rpbmcg
dG8gdGFrZSBkYXRhIGFib3V0IHRoZSBwcm9ncmFtJ3Mgc3RhdGUgd2hlbgogICAgICAgICAgICAg
ICAgIC8vIHdlIGZhaWwgdG8gdGFrZSBhIHN0YWNrIHRyYWNlOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzU4CiAgICAgICAgICAgICAgICAgaWYgKHdhc1ZhbGlk
V2FsayAmJiB3YWxrU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc1JlcG9ydFN0YXRz
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzUmVwb3J0U3RhdHMpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBzTnVtVG90YWxTdGFja1RyYWNlcysrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzTnVtVW52ZXJpZmllZFN0YWNrVHJhY2VzKys7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Cisg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2U7CiAgICAgICAgICAgICAgICAgICAgIHN0YWNrVHJhY2UucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSh3YWxrU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
d2Fsa1NpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZSBmcmFt
ZSA9IG1fY3VycmVudEZyYW1lc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrVHJh
Y2UudW5jaGVja2VkQXBwZW5kKGZyYW1lKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZnJhbWUuZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc2VlbkV4ZWN1dGFibGVzLmFkZChmcmFtZS51LnZlcmlm
aWVkRXhlY3V0YWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBVbnByb2Nlc3NlZFN0YWNr
RnJhbWUgZnJhbWUgPSBtX2N1cnJlbnRGcmFtZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFja1RyYWNlLnVuY2hlY2tlZEFwcGVuZChmcmFtZSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICBtX3N0YWNrVHJhY2VzLmFwcGVuZChTdGFja1RyYWNl
eyBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24sIG5vd1RpbWUsIFdURk1vdmUoc3RhY2tUcmFj
ZSkgfSk7CisgICAgICAgICAgICAgICAgICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5hcHBl
bmQoVW5wcm9jZXNzZWRTdGFja1RyYWNlIHsgbm93VGltZSwgbWFjaGluZVBDLCB0b3BGcmFtZUlz
TExJbnQsIGxsaW50UEMsIFdURk1vdmUoc3RhY2tUcmFjZSkgfSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRGcmFtZXMuZ3JvdyhtX2N1cnJlbnRGcmFtZXMuc2l6ZSgpICogMS4yNSk7CkBA
IC0zMzIsNiArMjk0LDI3IEBAIFNhbXBsaW5nUHJvZmlsZXI6On5TYW1wbGluZ1Byb2ZpbGVyKCkK
IHsKIH0KIAorc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgdHJ5R2V0Qnl0ZWNvZGVJbmRl
eCh1bnNpZ25lZCBiaXRzLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgYm9vbCYgaXNWYWxpZCkKK3sK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBiaXRzOwor
ICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpIHsK
KyAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAgICAgIHJldHVybiBieXRlY29kZUluZGV4Owor
ICAgIH0KKyAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvbio+KGJpdHMp
OworICAgIGlmIChpbnN0cnVjdGlvbiA8PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2lu
KCkgJiYgaW5zdHJ1Y3Rpb24gPCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBj
b2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSkgeworICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5i
ZWdpbigpOworICAgIH0KKyAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgcmV0dXJuIDA7CisjZW5k
aWYKK30KKwogdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJh
Y2VzKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBmcm9tIHRo
ZSBKU0MgZXhlY3V0aW9uIHRocmVhZC4KQEAgLTM0MCwyMiArMzIzLDMyIEBAIHZvaWQgU2FtcGxp
bmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVy
ID0gbV92bS5oZWFwLm9iamVjdFNwYWNlKCkuYmxvY2tzKCkuZmlsdGVyKCk7CiAgICAgTWFya2Vk
QmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0ID0gbV92bS5oZWFwLm9iamVjdFNwYWNlKCkuYmxvY2tz
KCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVy
aWZ5OyBpIDwgbV9zdGFja1RyYWNlcy5zaXplKCk7IGkrKykgewotICAgICAgICBTdGFja1RyYWNl
JiBzdGFja1RyYWNlID0gbV9zdGFja1RyYWNlc1tpXTsgCi0gICAgICAgIGlmICghc3RhY2tUcmFj
ZS5uZWVkc1ZlcmlmaWNhdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGFj
a1RyYWNlLm5lZWRzVmVyaWZpY2F0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChTdGFja0Zy
YW1lJiBzdGFja0ZyYW1lIDogc3RhY2tUcmFjZS5mcmFtZXMpIHsKLSAgICAgICAgICAgIGlmIChz
dGFja0ZyYW1lLmZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpIHsKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFja0ZyYW1lLmZyYW1lVHlwZSA9PSBGcmFt
ZVR5cGU6OlZlcmlmaWVkRXhlY3V0YWJsZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgZm9yIChVbnByb2Nlc3NlZFN0YWNrVHJhY2UmIHVucHJvY2Vzc2VkU3RhY2tUcmFjZSA6IG1f
dW5wcm9jZXNzZWRTdGFja1RyYWNlcykgeworICAgICAgICBtX3N0YWNrVHJhY2VzLmFwcGVuZChT
dGFja1RyYWNlKCkpOworICAgICAgICBTdGFja1RyYWNlJiBzdGFja1RyYWNlID0gbV9zdGFja1Ry
YWNlcy5sYXN0KCk7CisgICAgICAgIHN0YWNrVHJhY2UudGltZXN0YW1wID0gdW5wcm9jZXNzZWRT
dGFja1RyYWNlLnRpbWVzdGFtcDsKKworICAgICAgICBhdXRvIGFwcGVuZENvZGVCbG9jayA9IFsm
XSAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIHsKKyAgICAg
ICAgICAgIHN0YWNrVHJhY2UuZnJhbWVzLmFwcGVuZChTdGFja0ZyYW1lKEZyYW1lVHlwZTo6VmVy
aWZpZWRFeGVjdXRhYmxlLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSk7CisKKyAgICAg
ICAgICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkp
IHsKKyAgICAgICAgICAgICAgICBpbnQgZGl2b3Q7CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0
T2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBlbmRPZmZzZXQ7CisgICAgICAgICAgICAgICAg
Y29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4
LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgc3Rh
Y2tUcmFjZS5mcmFtZXMubGFzdCgpLmxpbmVOdW1iZXIsIHN0YWNrVHJhY2UuZnJhbWVzLmxhc3Qo
KS5jb2x1bW5OdW1iZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCJHaXZlbiBiYWQgYnl0ZWNvZGUgaW5kZXhcbiIpOwogICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9zZWVuRXhlY3V0YWJsZXMuYWRkKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCkpOworICAgICAgICB9OwogCi0gICAgICAgICAgICBKU1ZhbHVlIGNhbGxlZSA9IEpTVmFsdWU6
OmRlY29kZShzdGFja0ZyYW1lLnUudW52ZXJpZmllZENhbGxlZSk7CisgICAgICAgIGF1dG8gYXBw
ZW5kVW52ZXJpZmllZENhbGxlZSA9IFsmXSAoSlNWYWx1ZSBjYWxsZWUpIHsKKyAgICAgICAgICAg
IHN0YWNrVHJhY2UuZnJhbWVzLmFwcGVuZChTdGFja0ZyYW1lKCkpOworICAgICAgICAgICAgU3Rh
Y2tGcmFtZSYgc3RhY2tGcmFtZSA9IHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKTsKICAgICAgICAg
ICAgIGlmICghSGVhcDo6aXNWYWx1ZUdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGNh
bGxlZSkpIHsKICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlw
ZTo6VW5rbm93bjsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEpTQ2VsbCogY2FsbGVlQ2VsbCA9
IGNhbGxlZS5hc0NlbGwoKTsKQEAgLTM3MiwyMiArMzY1LDEwMyBAQCB2b2lkIFNhbXBsaW5nUHJv
ZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAKICAgICAgICAgICAgIGlmIChjYWxsZWVDZWxsLT50
eXBlKCkgIT0gSlNGdW5jdGlvblR5cGUpIHsKICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZy
YW1lVHlwZSA9IGZyYW1lVHlwZUZyb21DYWxsRGF0YSgpOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGNh
bGxlZUNlbGwpLT5leGVjdXRhYmxlKCk7CiAgICAgICAgICAgICBpZiAoIWV4ZWN1dGFibGUpIHsK
ICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IGZyYW1lVHlwZUZyb21DYWxs
RGF0YSgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVhcDo6aXNQ
b2ludGVyR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgZXhlY3V0YWJsZSkpOwogICAg
ICAgICAgICAgc3RhY2tGcmFtZS5mcmFtZVR5cGUgPSBGcmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0
YWJsZTsKICAgICAgICAgICAgIHN0YWNrRnJhbWUudS52ZXJpZmllZEV4ZWN1dGFibGUgPSBleGVj
dXRhYmxlOwogICAgICAgICAgICAgbV9zZWVuRXhlY3V0YWJsZXMuYWRkKGV4ZWN1dGFibGUpOwor
ICAgICAgICB9OworCisgICAgICAgIC8vIFByZXBlbmQgaW5saW5lIGZyYW1lIGlmIG5lZWRlZC4K
KyAgICAgICAgLy8gQWxzbywgZ2F0aGVyIGxvY2F0aW9uIGluZm9ybWF0aW9uIGFib3V0CisgICAg
ICAgIC8vIHdoZXJlIHRoZSB0b3AgZnJhbWUgaXMgZXhlY3V0aW5nLgorICAgICAgICBzaXplX3Qg
c3RhcnRJbmRleCA9IDA7CisgICAgICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVz
LnNpemUoKSAmJiB1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzWzBdLmZyYW1lVHlwZSA9PSBV
bnByb2Nlc3NlZEZyYW1lVHlwZTo6VmVyaWZpZWRDb2RlQmxvY2spIHsKKyAgICAgICAgICAgIENv
ZGVCbG9jayogdG9wQ29kZUJsb2NrID0gdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXS51
LnZlcmlmaWVkQ29kZUJsb2NrOworICAgICAgICAgICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tUcmFj
ZS50b3BGcmFtZUlzTExJbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSByZXVzZSBMTEludCBD
b2RlQmxvY2tzIGZvciB0aGUgYmFzZWxpbmUgSklULCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBi
b3RoIGppdCB0eXBlcy4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFsc28gYmUgZmFs
c2UgZm9yIHZhcmlvdXMgcmVhc29ucyAoa25vd24gYW5kIHVua25vd24pLCBldmVuIHRob3VnaAor
ICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3VwZXIgdW5saWtlbHkuIE9uZSByZWFzb24gdGhhdCB0
aGlzIGNhbiBiZSBmYWxzZSBpcyB3aGVuIHdlIHRocm93IGZyb20gYSBERkcgZnJhbWUsCisgICAg
ICAgICAgICAgICAgLy8gYW5kIHdlIGVuZCB1cCBoYXZpbmcgdG8gdW53aW5kIHBhc3QgYSBWTUVu
dHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGluZworICAgICAgICAgICAgICAgIC8vIGlu
c2lkZSB0aGUgTExJbnQncyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90
ZWN0IGFnYWluc3QgdGhpcworICAgICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgorICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSAwOworICAgICAgICAgICAgICAg
IGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5r
IHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaXNWYWxpZFBDOworICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBiaXRzOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgICAgIGJp
dHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW5wcm9j
ZXNzZWRTdGFja1RyYWNlLmxsaW50UEMpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIGJp
dHMgPSBiaXR3aXNlX2Nhc3Q8dW5zaWduZWQ+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBD
KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0
ZWNvZGVJbmRleChiaXRzLCB0b3BDb2RlQmxvY2ssIGlzVmFsaWRQQyk7CisKKyAgICAgICAgICAg
ICAgICAgICAgVU5VU0VEX1BBUkFNKGlzVmFsaWRQQyk7IC8vIEZJWE1FOiBkbyBzb21ldGhpbmcg
d2l0aCB0aGlzIGluZm8gZm9yIHRoZSB3ZWIgaW5zcGVjdG9yOgorICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNWYWxpZFBDKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL2RhdGFMb2dGKCJJ
bnN0cnVjdGlvbnMgYXJlIHBhcnQgb2YgY29kZWJsb2NrOiAlbHVcbiIsIGJ5dGVjb2RlT2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vZGF0YUxvZygiSW5zdHJ1Y3Rpb25zIG5vdCBhY3R1YWxseSBwYXJ0IG9mIGNvZGVibG9ja1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBhcHBlbmRD
b2RlQmxvY2sodG9wQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhcnRJbmRleCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IGlmIChPcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gdG9wQ29kZUJsb2NrLT5maW5k
UEModW5wcm9jZXNzZWRTdGFja1RyYWNlLnRvcFBDKSkgeworICAgICAgICAgICAgICAgIGRhdGFM
b2coIkZvdW5kIGNvZGUgb3JpZ2luOiAiLCAqY29kZU9yaWdpbiwgIlxuIik7CisgICAgICAgICAg
ICAgICAgY29kZU9yaWdpbi0+d2Fsa1VwSW5saW5lU3RhY2soWyZdIChjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSA/IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNl
bGluZUNvZGVCbG9jay5nZXQoKSA6IHRvcENvZGVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0g
MTsKKyAgICAgICAgICAgIH0gCisgICAgICAgIH0KKworCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSBzdGFydEluZGV4OyBpIDwgdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lcy5zaXplKCk7IGkr
KykgeworICAgICAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lJiB1bnByb2Nlc3NlZFN0YWNr
RnJhbWUgPSB1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzW2ldOworICAgICAgICAgICAgaWYg
KHVucHJvY2Vzc2VkU3RhY2tGcmFtZS5mcmFtZVR5cGUgPT0gVW5wcm9jZXNzZWRGcmFtZVR5cGU6
OlZlcmlmaWVkQ29kZUJsb2NrKSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUudS52ZXJpZmllZENvZGVCbG9jazsKKyAgICAgICAg
ICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSB1bnByb2Nlc3NlZFN0YWNrRnJh
bWUuY2FsbFNpdGVJbmRleDsKKworICAgICAgICAgICAgICAgIGF1dG8gZ3Vlc3NBdEJ5dGVjb2Rl
SW5kZXhGcm9tQ2FsbFNpdGVJbmRleCA9IFsmXSAoKSAtPiB1bnNpZ25lZCB7CisjaWYgRU5BQkxF
KERGR19KSVQpCisgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc0NvZGVPcmln
aW5zKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghY29kZUJsb2NrLT5jYW5H
ZXRDb2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAgICAgICAg
ICAgICBib29sIGlzVmFsaWRQQzsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeUdldEJ5
dGVjb2RlSW5kZXgoY2FsbFNpdGVJbmRleC5iaXRzKCksIGNvZGVCbG9jaywgaXNWYWxpZFBDKTsK
KyAgICAgICAgICAgICAgICB9OworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgICAgICAg
ICAgaWYgKGNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSAmJiBjb2RlQmxvY2stPmNhbkdldENv
ZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LT5jb2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgpLndhbGtVcElubGluZVN0YWNrKFsmXSAoY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbikgeworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
Q29kZUJsb2NrKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID8gY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpIDogY29kZUJsb2NrLCBjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY29kZSBibG9jayBkb2Vz
IG5vdCBoYXZlIGFueSBjb2RlIG9yaWdpbnMsIHRoZW4gdGhlcmUncyBubworICAgICAgICAgICAg
ICAgICAgICAvLyBpbmxpbmluZy4gSGVuY2UsIHdlJ3JlIG5vdCBhdCBhbiBpbmxpbmVkIGZyYW1l
LgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCBndWVzc0F0
Qnl0ZWNvZGVJbmRleEZyb21DYWxsU2l0ZUluZGV4KCkpOworICAgICAgICAgICAgICAgIH0KKyNl
bHNlCisgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVCbG9jaywgZ3Vlc3NBdEJ5
dGVjb2RlSW5kZXhGcm9tQ2FsbFNpdGVJbmRleCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQodW5wcm9jZXNzZWRTdGFja0ZyYW1lLmZyYW1l
VHlwZSA9PSBVbnByb2Nlc3NlZEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kVW52ZXJpZmllZENhbGxlZShKU1ZhbHVlOjpkZWNvZGUodW5wcm9jZXNz
ZWRTdGFja0ZyYW1lLnUudW52ZXJpZmllZENhbGxlZSkpOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeSA9IG1fc3Rh
Y2tUcmFjZXMuc2l6ZSgpOworICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVhcigpOwog
fQogCiB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikKQEAgLTQ3OCwxOCArNTUyLDEyIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6bm90aWNlVk1F
bnRyeSgpCiAgICAgZGlzcGF0Y2hJZk5lY2Vzc2FyeShsb2NrZXIpOwogfQogCi12b2lkIFNhbXBs
aW5nUHJvZmlsZXI6OmNsZWFyRGF0YSgpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICBjbGVhckRhdGEobG9ja2VyKTsKLX0KLQogdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpj
bGVhckRhdGEoY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tl
ZCgpKTsKICAgICBtX3N0YWNrVHJhY2VzLmNsZWFyKCk7CiAgICAgbV9zZWVuRXhlY3V0YWJsZXMu
Y2xlYXIoKTsKLSAgICBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5ID0gMDsKKyAgICBt
X2N1cnJlbnRGcmFtZXMuY2xlYXIoKTsKIH0KIAogU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OlN0
YWNrRnJhbWU6OmRpc3BsYXlOYW1lKCkKQEAgLTU0NCw3ICs2MTIsNyBAQCBTdHJpbmcgU2FtcGxp
bmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1p
bnQgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6c3RhcnRMaW5lKCkKK2ludCBTYW1wbGlu
Z1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpmdW5jdGlvblN0YXJ0TGluZSgpCiB7CiAgICAgaWYgKGZy
YW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6
SG9zdCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNTU2LDcgKzYyNCw3IEBAIGludCBTYW1wbGlu
Z1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzdGFydEwKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2Ny
aXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5maXJzdExpbmUoKTsKIH0KIAotdW5zaWduZWQg
U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6c3RhcnRDb2x1bW4oKQordW5zaWduZWQgU2Ft
cGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZnVuY3Rpb25TdGFydENvbHVtbigpCiB7CiAgICAg
aWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1l
VHlwZTo6SG9zdCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNTk4LDcgKzY2Niw3IEBAIFN0cmlu
ZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjp1cmwKICAgICByZXR1cm4gdXJsOwogfQog
Ci1WZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZT4mIFNhbXBsaW5nUHJvZmlsZXI6
OnN0YWNrVHJhY2VzKGNvbnN0IExvY2tIb2xkZXImKQorVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6
OlN0YWNrVHJhY2U+IFNhbXBsaW5nUHJvZmlsZXI6OnJlbGVhc2VTdGFja1RyYWNlcyhjb25zdCBM
b2NrSG9sZGVyJiBsb2NrZXIpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsKICAg
ICB7CkBAIC02MDYsNyArNjc0LDkgQEAgVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJh
Y2U+JiBTYQogICAgICAgICBwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIG1fc3RhY2tUcmFjZXM7CisgICAgVmVjdG9yPFN0YWNrVHJhY2U+IHJlc3Vs
dChXVEZNb3ZlKG1fc3RhY2tUcmFjZXMpKTsKKyAgICBjbGVhckRhdGEobG9ja2VyKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6c3RhY2tUcmFjZXNB
c0pTT04oKQpAQCAtNjMyLDkgKzcwMiwxNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6c3Rh
Y2tUcmFjZXNBc0pTCiAgICAgICAgIGxvb3BlZE9uY2UgPSBmYWxzZTsKICAgICAgICAgZm9yIChT
dGFja0ZyYW1lJiBzdGFja0ZyYW1lIDogc3RhY2tUcmFjZS5mcmFtZXMpIHsKICAgICAgICAgICAg
IGNvbW1hKCk7CisgICAgICAgICAgICBqc29uLmFwcGVuZExpdGVyYWwoIntcImRpc3BsYXlOYW1l
XCI6Iik7CiAgICAgICAgICAgICBqc29uLmFwcGVuZExpdGVyYWwoIlwiIik7CiAgICAgICAgICAg
ICBqc29uLmFwcGVuZChzdGFja0ZyYW1lLmRpc3BsYXlOYW1lRm9ySlNPTlRlc3RzKCkpOwogICAg
ICAgICAgICAganNvbi5hcHBlbmRMaXRlcmFsKCJcIiIpOworICAgICAgICAgICAganNvbi5hcHBl
bmRMaXRlcmFsKCIsIik7CisgICAgICAgICAgICBqc29uLmFwcGVuZExpdGVyYWwoIlwibGluZU51
bWJlclwiOiIpOworICAgICAgICAgICAganNvbi5hcHBlbmROdW1iZXIoc3RhY2tGcmFtZS5saW5l
TnVtYmVyKTsKKyAgICAgICAgICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiLCIpOworICAgICAgICAg
ICAganNvbi5hcHBlbmRMaXRlcmFsKCJcImNvbHVtbk51bWJlclwiOiIpOworICAgICAgICAgICAg
anNvbi5hcHBlbmROdW1iZXIoc3RhY2tGcmFtZS5jb2x1bW5OdW1iZXIpOworICAgICAgICAgICAg
anNvbi5hcHBlbmRMaXRlcmFsKCJ9Iik7CiAgICAgICAgICAgICBsb29wZWRPbmNlID0gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICBqc29uLmFwcGVuZExpdGVyYWwoIl0iKTsKQEAgLTY0Myw2ICs3
MjEsOCBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6c3RhY2tUcmFjZXNBc0pTCiAKICAgICBq
c29uLmFwcGVuZExpdGVyYWwoIl0iKTsKIAorICAgIGNsZWFyRGF0YShsb2NrZXIpOworCiAgICAg
cmV0dXJuIGpzb24udG9TdHJpbmcoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNpb24gMTk1NDQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwxMyArNDQsNDQgQEAgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiBjbGFzcyBT
YW1wbGluZ1Byb2ZpbGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbXBsaW5nUHJv
ZmlsZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKworICAgIGVu
dW0gY2xhc3MgVW5wcm9jZXNzZWRGcmFtZVR5cGUgeyAKKyAgICAgICAgVW52ZXJpZmllZENhbGxl
ZSwKKyAgICAgICAgVmVyaWZpZWRDb2RlQmxvY2sKKyAgICB9OworCisgICAgc3RydWN0IFVucHJv
Y2Vzc2VkU3RhY2tGcmFtZSB7CisgICAgICAgIFVucHJvY2Vzc2VkU3RhY2tGcmFtZShFbmNvZGVk
SlNWYWx1ZSBjYWxsZWUpCisgICAgICAgICAgICA6IGZyYW1lVHlwZShVbnByb2Nlc3NlZEZyYW1l
VHlwZTo6VW52ZXJpZmllZENhbGxlZSkKKyAgICAgICAgeworICAgICAgICAgICAgdS51bnZlcmlm
aWVkQ2FsbGVlID0gY2FsbGVlOworICAgICAgICB9CisgICAgICAgIFVucHJvY2Vzc2VkU3RhY2tG
cmFtZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQor
ICAgICAgICAgICAgOiBmcmFtZVR5cGUoVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlZlcmlmaWVkQ29k
ZUJsb2NrKQorICAgICAgICAgICAgLCBjYWxsU2l0ZUluZGV4KGNhbGxTaXRlSW5kZXgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHUudmVyaWZpZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAg
ICAgIH0KKyAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lKCkKKyAgICAgICAgICAgIDogZnJh
bWVUeXBlKFVucHJvY2Vzc2VkRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKQorICAgICAgICB7
CisgICAgICAgICAgICB1LnZlcmlmaWVkQ29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgfQor
CisgICAgICAgIFVucHJvY2Vzc2VkRnJhbWVUeXBlIGZyYW1lVHlwZTsKKyAgICAgICAgdW5pb24g
eworICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUgdW52ZXJpZmllZENhbGxlZTsKKyAgICAgICAg
ICAgIENvZGVCbG9jayogdmVyaWZpZWRDb2RlQmxvY2s7CisgICAgICAgIH0gdTsKKyAgICAgICAg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4OworICAgIH07CisKICAgICBlbnVtIGNsYXNzIEZy
YW1lVHlwZSB7IAogICAgICAgICBWZXJpZmllZEV4ZWN1dGFibGUsIAogICAgICAgICBVbnZlcmlm
aWVkQ2FsbGVlLAogICAgICAgICBIb3N0LCAKICAgICAgICAgVW5rbm93biAKICAgICB9OwotCiAg
ICAgc3RydWN0IFN0YWNrRnJhbWUgewogICAgICAgICBTdGFja0ZyYW1lKEZyYW1lVHlwZSBmcmFt
ZVR5cGUsIEVuY29kZWRKU1ZhbHVlIGNhbGxlZSkKICAgICAgICAgICAgIDogZnJhbWVUeXBlKGZy
YW1lVHlwZSkKQEAgLTc0LDE4ICsxMDUsMzYgQEAgcHVibGljOgogICAgICAgICAgICAgRXhlY3V0
YWJsZUJhc2UqIHZlcmlmaWVkRXhlY3V0YWJsZTsKICAgICAgICAgfSB1OwogCisgICAgICAgIC8v
IFRoZXNlIGF0dGVtcHQgdG8gYmUgZXhwcmVzc2lvbi1sZXZlbCBsaW5lIGFuZCBjb2x1bW4gbnVt
YmVyLgorICAgICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyIHsgc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlciB7IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCisgICAgICAgIC8vIFRoZXNlIGFy
ZSBmdW5jdGlvbi1sZXZlbCBkYXRhLgogICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWUoKTsKICAg
ICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lRm9ySlNPTlRlc3RzKCk7IC8vIFVzZWQgZm9yIEpTQyBz
dHJlc3MgdGVzdHMgYmVjYXVzZSB0aGV5IHdhbnQgdGhlICIoYW5vbnltb3VzIGZ1bmN0aW9uKSIg
c3RyaW5nIGZvciBhbm9ueW1vdXMgZnVuY3Rpb25zIGFuZCB0aGV5IHdhbnQgIihldmFsKSIgZm9y
IGV2YWwnZCBjb2RlLgotICAgICAgICBpbnQgc3RhcnRMaW5lKCk7Ci0gICAgICAgIHVuc2lnbmVk
IHN0YXJ0Q29sdW1uKCk7CisgICAgICAgIGludCBmdW5jdGlvblN0YXJ0TGluZSgpOworICAgICAg
ICB1bnNpZ25lZCBmdW5jdGlvblN0YXJ0Q29sdW1uKCk7CiAgICAgICAgIGludHB0cl90IHNvdXJj
ZUlEKCk7CiAgICAgICAgIFN0cmluZyB1cmwoKTsKICAgICB9OwogCisgICAgc3RydWN0IFVucHJv
Y2Vzc2VkU3RhY2tUcmFjZSB7CisgICAgICAgIGRvdWJsZSB0aW1lc3RhbXA7CisgICAgICAgIHZv
aWQqIHRvcFBDOworICAgICAgICBib29sIHRvcEZyYW1lSXNMTEludDsKKyAgICAgICAgdm9pZCog
bGxpbnRQQzsKKyAgICAgICAgVmVjdG9yPFVucHJvY2Vzc2VkU3RhY2tGcmFtZT4gZnJhbWVzOwor
ICAgIH07CisKICAgICBzdHJ1Y3QgU3RhY2tUcmFjZSB7Ci0gICAgICAgIGJvb2wgbmVlZHNWZXJp
ZmljYXRpb247CiAgICAgICAgIGRvdWJsZSB0aW1lc3RhbXA7CiAgICAgICAgIFZlY3RvcjxTdGFj
a0ZyYW1lPiBmcmFtZXM7CisgICAgICAgIFN0YWNrVHJhY2UoKQorICAgICAgICB7IH0KKyAgICAg
ICAgU3RhY2tUcmFjZShTdGFja1RyYWNlJiYgb3RoZXIpCisgICAgICAgICAgICA6IHRpbWVzdGFt
cChvdGhlci50aW1lc3RhbXApCisgICAgICAgICAgICAgLCBmcmFtZXMoV1RGTW92ZShvdGhlci5m
cmFtZXMpKQorICAgICAgICB7IH0KICAgICB9OwogCiAgICAgU2FtcGxpbmdQcm9maWxlcihWTSYs
IFJlZlB0cjxTdG9wd2F0Y2g+JiYpOwpAQCAtMTAwLDEyICsxNDksMTAgQEAgcHVibGljOgogICAg
IHZvaWQgc3RhcnQoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIHZvaWQgc3RvcCgpOwogICAgIHZv
aWQgc3RvcChjb25zdCBMb2NrSG9sZGVyJik7Ci0gICAgVmVjdG9yPFN0YWNrVHJhY2U+JiBzdGFj
a1RyYWNlcyhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgVmVjdG9yPFN0YWNrVHJhY2U+IHJlbGVh
c2VTdGFja1RyYWNlcyhjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHN0YWNrVHJhY2VzQXNKU09OKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBu
b3RpY2VDdXJyZW50VGhyZWFkQXNKU0NFeGVjdXRpb25UaHJlYWQoKTsKICAgICB2b2lkIG5vdGlj
ZUN1cnJlbnRUaHJlYWRBc0pTQ0V4ZWN1dGlvblRocmVhZChjb25zdCBMb2NrSG9sZGVyJik7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhckRhdGEoKTsKLSAgICB2b2lkIGNsZWFyRGF0
YShjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgdm9pZCBwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJh
Y2VzKCk7IC8vIFlvdSBzaG91bGQgY2FsbCB0aGlzIG9ubHkgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBs
b2NrLgogICAgIGRvdWJsZSB0b3RhbFRpbWUoY29uc3QgTG9ja0hvbGRlciYpIHsgcmV0dXJuIG1f
dG90YWxUaW1lOyB9CiAgICAgdm9pZCBzZXRTdG9wV2F0Y2goY29uc3QgTG9ja0hvbGRlciYsIFJl
ZjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNoKSB7IG1fc3RvcHdhdGNoID0gV1RGTW92ZShzdG9wd2F0
Y2gpOyB9CkBAIC0xMTQsMTEgKzE2MSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzcGF0Y2hJ
Zk5lY2Vzc2FyeShjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9u
KGNvbnN0IExvY2tIb2xkZXImKTsKICAgICB2b2lkIHBhdXNlKCk7CisgICAgdm9pZCBjbGVhckRh
dGEoY29uc3QgTG9ja0hvbGRlciYpOwogCiAgICAgVk0mIG1fdm07CiAgICAgUmVmUHRyPFN0b3B3
YXRjaD4gbV9zdG9wd2F0Y2g7CiAgICAgVmVjdG9yPFN0YWNrVHJhY2U+IG1fc3RhY2tUcmFjZXM7
Ci0gICAgc2l6ZV90IG1faW5kZXhPZk5leHRTdGFja1RyYWNlVG9WZXJpZnk7CisgICAgVmVjdG9y
PFVucHJvY2Vzc2VkU3RhY2tUcmFjZT4gbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzOwogICAgIHN0
ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgbV90aW1pbmdJbnRlcnZhbDsKICAgICBkb3VibGUgbV9s
YXN0VGltZTsKICAgICBkb3VibGUgbV90b3RhbFRpbWU7CkBAIC0xMzAsNyArMTc4LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1faXNQYXVzZWQ7CiAgICAgYm9vbCBtX2hhc0Rpc3BhdGNoZWRGdW5j
dGlvbjsKICAgICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9zZWVuRXhlY3V0YWJsZXM7Ci0g
ICAgVmVjdG9yPFN0YWNrRnJhbWU+IG1fY3VycmVudEZyYW1lczsKKyAgICBWZWN0b3I8VW5wcm9j
ZXNzZWRTdGFja0ZyYW1lPiBtX2N1cnJlbnRGcmFtZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJv
ZmlsZXItYmFzaWMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci1iYXNpYy5qcwkocmV2aXNpb24gMTk1NDQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci1iYXNp
Yy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDggQEAgaWYgKHBsYXRmb3JtU3VwcG9y
dHNTYW1wbGluZ1Byb2ZpbGVyKCkpIAogICAgICAgICAgICAgeC0tOwogICAgICAgICB9CiAgICAg
fQotICAgIG5vSW5saW5lKHRvcCk7Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gY2FsbCB0b3Ao
KSB0byBnZXQgdGhlIENhbGxTaXRlSW5kZXggdG8gdXBkYXRlCi0gICAgLy8gaW5zaWRlIHRoZSBj
YWxsIGZyYW1lLiBXZSBuZWVkIHRvIGZpeCB0aGF0IGJ5IGhhdmluZyBhIFBDPT5Db2RlT3JpZ2lu
Ci0gICAgLy8gbWFwcGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MjYyOQotICAgIGZ1bmN0aW9uIGpheih4KSB7IHJldHVybiB4ICsgdG9wKCk7IH0gLy8gCisK
KyAgICBmdW5jdGlvbiBqYXooeCkgeyByZXR1cm4geCArIHRvcCgpOyB9CiAgICAgZnVuY3Rpb24g
a2F6KHkpIHsKICAgICAgICAgcmV0dXJuIGpheih5KSArIDU7CiAgICAgfQpJbmRleDogU291cmNl
L1dURi93dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUmVk
QmxhY2tUcmVlLmgJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9XVEYvd3RmL1JlZEJsYWNr
VHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NzAsNSArNTcwLDcgQEAgcHJpdmF0ZToKIAogfQog
Cit1c2luZyBXVEY6OlJlZEJsYWNrVHJlZTsKKwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRUaW1lbGluZVJlY29yZC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
U2NyaXB0VGltZWxpbmVSZWNvcmQuanMJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRUaW1lbGluZVJlY29yZC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0VGltZWxp
bmVSZWNvcmQgPSBjbGFzCiAgICAgICAgIHRoaXMuX2RldGFpbHMgPSBkZXRhaWxzIHx8ICIiOwog
ICAgICAgICB0aGlzLl9wcm9maWxlUGF5bG9hZCA9IHByb2ZpbGVQYXlsb2FkIHx8IG51bGw7CiAg
ICAgICAgIHRoaXMuX3Byb2ZpbGUgPSBudWxsOworICAgICAgICB0aGlzLl9zYW1wbGVzID0gMDsK
ICAgICB9CiAKICAgICAvLyBQdWJsaWMKQEAgLTE1OSw2ICsxNjAsOSBAQCBXZWJJbnNwZWN0b3Iu
U2NyaXB0VGltZWxpbmVSZWNvcmQgPSBjbGFzCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAor
ICAgICAgICBmb3IgKGxldCByb290IG9mIHJvb3ROb2RlcykKKyAgICAgICAgICAgIHRoaXMuX3Nh
bXBsZXMgKz0gcm9vdC5jYWxsSW5mby5jYWxsQ291bnQ7CisKICAgICAgICAgdGhpcy5fcHJvZmls
ZSA9IG5ldyBXZWJJbnNwZWN0b3IuUHJvZmlsZShyb290Tm9kZXMpOwogICAgIH0KIH07CkluZGV4
OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TY3JpcHRUaW1lbGlu
ZURhdGFHcmlkTm9kZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9TY3JpcHRUaW1lbGluZURhdGFHcmlkTm9kZS5qcwkocmV2aXNpb24g
MTk1NDQ2KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2Ny
aXB0VGltZWxpbmVEYXRhR3JpZE5vZGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDgg
QEAgV2ViSW5zcGVjdG9yLlNjcmlwdFRpbWVsaW5lRGF0YUdyaWROb2RlIAogICAgICAgICAgICAg
c2VsZlRpbWU6IGR1cmF0aW9uLAogICAgICAgICAgICAgdG90YWxUaW1lOiBkdXJhdGlvbiwKICAg
ICAgICAgICAgIGF2ZXJhZ2VUaW1lOiBkdXJhdGlvbiwKLSAgICAgICAgICAgIGNhbGxDb3VudDog
TmFOLAorICAgICAgICAgICAgY2FsbENvdW50OiB0aGlzLl9yZWNvcmQuX3NhbXBsZXMgPyB0aGlz
Ll9yZWNvcmQuX3NhbXBsZXMgOiBOYU4sCisgICAgICAgICAgICAvL2NhbGxDb3VudDogdGhpcy5f
cmVjb3JkLl9zYW1wbGVzID8gdGhpcy5fcmVjb3JkLl9zYW1wbGVzIDogTmFOLAogICAgICAgICAg
ICAgbG9jYXRpb246IGNhbGxGcmFtZU9yU291cmNlQ29kZUxvY2F0aW9uCiAgICAgICAgIH07CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb20uYXBwbGUuV2ViUHJvY2Vz
cy5zYi5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvbS5hcHBs
ZS5XZWJQcm9jZXNzLnNiLmluCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2NvbS5hcHBsZS5XZWJQcm9jZXNzLnNiLmluCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw3ICsyMiw3IEBACiA7IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogKHZlcnNp
b24gMSkKLShkZW55IGRlZmF1bHQgKHdpdGggcGFydGlhbC1zeW1ib2xpY2F0aW9uKSkKKyhhbGxv
dyBkZWZhdWx0ICh3aXRoIHBhcnRpYWwtc3ltYm9saWNhdGlvbikpCiAoYWxsb3cgc3lzdGVtLWF1
ZGl0IGZpbGUtcmVhZC1tZXRhZGF0YSkKIAogKGltcG9ydCAic3lzdGVtLnNiIikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269839</attachid>
            <date>2016-01-25 18:55:46 -0800</date>
            <delta_ts>2016-01-25 19:18:56 -0800</delta_ts>
            <desc>more cleanup</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>91282</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0Myw3ICsxNjQzLDYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNhbQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpKTsKICAgICBTdHJpbmcganNvblN0
cmluZyA9IGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNPTigp
OwotICAgIGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpLT5jbGVhckRhdGEoKTsKICAgICBF
bmNvZGVkSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpz
b25TdHJpbmcpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMDIsOSArMTMwMiwx
MiBAQAogCQk3MEVDQTYwNzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMjFB
RkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjA4
MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMzFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVD
QTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5MkNCMzQ5MUM0RUVENUMw
MEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0Nv
ZGVPcmlnaW5NYXAuY3BwICovOyB9OworCQk3OTJDQjM0QTFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5NjQ2NTZB
MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdB
NzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9
OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0Uw
N0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5OUVGN0M0MUM1
NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BD
VG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3OUM0QjE1RDFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUM0QjE1QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTky
RSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMzM0IxMDAw
MEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0z
NDk2LDkgKzM0OTksMTIgQEAKIAkJNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxh
dGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFG
REJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyog
UENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk5RUY3QzMx
QzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QjFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUMxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9u
UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDRkM2RUYxQzMzQjEwMDAw
Qzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTExJbnRQQ1Jhbmdlcy5oOyBwYXRoID0gbGxpbnQvTExJbnRQQ1Jhbmdlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDgzNyw2ICs0ODQzLDcgQEAKIAkJCQkwRkVDODREQzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAogCQkJCTBGRUM4NERE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0
REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJNzk5RUY3
QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovLAogCQkJCTBGRUM4NERG
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovLAogCQkJCTBGRUM4NEUwMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLywKIAkJCQkwRjM3MzA4QTFDMEJEMjkx
MDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgKi8sCkBAIC01MTQ2LDYgKzUxNTMsOCBAQAog
CQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCAqLywKKwkJCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmln
aW5NYXAuY3BwICovLAorCQkJCTc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9y
aWdpbk1hcC5oICovLAogCQkJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8q
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZBN0E4RTkxOEI0MTNDODAw
NTIzNzFEIC8qIFJlZy5jcHAgKi8sCkBAIC03MDIyLDYgKzcwMzEsOCBAQAogCQkJCTBGRUM4NTc2
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5
MzFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAu
aCBpbiBIZWFkZXJzICovLAorCQkJCTc5MkNCMzRBMUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29k
ZU9yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVB
IC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkw
MENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMz
MTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLApAQCAt
ODk2Nyw2ICs4OTc4LDcgQEAKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92
SGludFJlbW92YWxQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4
MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5N
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8qIERG
R05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMzg3OEYxQkZCQzQ0RDAwRTNBQjFFIC8q
IEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1
MEU5NTJDMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MDUsNiArNDA1LDggQEAgcHVibGljOgogICAgICAgICAgICAgbWFzbS0+aW52YWxpZGF0ZUFsbFRl
bXBSZWdpc3RlcnMoKTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwgPT0gb3RoZXIubV9sYWJlbDsg
fQorCiAgICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsLmlzU2V0KCk7
IH0KICAgICBwcml2YXRlOgogICAgICAgICBBc3NlbWJsZXJMYWJlbCBtX2xhYmVsOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5o
CShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fz
c2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVsKG1fb2Zmc2V0ICsgb2Zm
c2V0KTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBc3NlbWJs
ZXJMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0
OyB9CisKICAgICAgICAgdWludDMyX3QgbV9vZmZzZXQ7CiAgICAgfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1NDQ2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiQjNSZWR1Y2VTdHJlbmd0aC5oIgogI2luY2x1ZGUgIkIz
VGltaW5nU2NvcGUuaCIKICNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiAr
NDcsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3JpZ2luJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9kYXRhID09IG90aGVyLm1fZGF0YTsgfQorCiAgICAgLy8gWW91IHNob3Vs
ZCBhdm9pZCB1c2luZyB0aGlzLiBVc2UgT3JpZ2luRHVtcCBpbnN0ZWFkLgogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUENUb09yaWdpbk1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNQQ1RvT3JpZ2luTWFwX2gKKyNkZWZpbmUgQjNQQ1RvT3JpZ2luTWFwX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlICJCM09yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgUENUb09yaWdpbk1hcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUENUb09yaWdpbk1hcCk7CitwdWJsaWM6CisgICAgUENUb09yaWdpbk1hcCgpCisgICAgeyB9
CisKKyAgICBQQ1RvT3JpZ2luTWFwKFBDVG9PcmlnaW5NYXAmJiBvdGhlcikKKyAgICAgICAgOiBt
X3JhbmdlcyhXVEZNb3ZlKG90aGVyLm1fcmFuZ2VzKSkKKyAgICB7IH0KKworICAgIHN0cnVjdCBP
cmlnaW5SYW5nZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbDsKKyAgICAg
ICAgT3JpZ2luIG9yaWdpbjsKKyAgICB9OworCisgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsYWJlbCwgT3JpZ2luIG9yaWdpbikKKyAgICB7CisgICAgICAgIGlmICht
X3Jhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3Jhbmdlcy5sYXN0KCkubGFiZWwg
PT0gbGFiZWwpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG1fcmFu
Z2VzLmxhc3QoKS5vcmlnaW4gPT0gb3JpZ2luIHx8ICFvcmlnaW4pCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9yYW5nZXMuYXBwZW5kKE9yaWdpblJhbmdl
e2xhYmVsLCBvcmlnaW59KTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8T3JpZ2luUmFuZ2U+
JiByYW5nZXMoKSBjb25zdCAgeyByZXR1cm4gbV9yYW5nZXM7IH0KKworcHJpdmF0ZToKKyAgICBW
ZWN0b3I8T3JpZ2luUmFuZ2U+IG1fcmFuZ2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQQ1RvT3JpZ2lu
TWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lv
biAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1
Y3RzLmgiCiAjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAu
aCIKICNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCiAjaW5jbHVk
ZSAiUHVyZU5hTi5oIgpAQCAtMjc1LDYgKzI3Niw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdDsKICAgICBjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0OwogCisgICAgUENUb09yaWdp
bk1hcCYgcGNUb09yaWdpbk1hcCgpIHsgcmV0dXJuIG1fcGNUb09yaWdpbk1hcDsgfQorICAgIFBD
VG9PcmlnaW5NYXAgcmVsZWFzZVBDVG9PcmlnaW5NYXAoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGNU
b09yaWdpbk1hcCk7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvY2tJbnNlcnRp
b25TZXQ7CiAgICAgCkBAIC0yOTEsNiArMjk1LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWlyOjpDb2RlPiBtX2NvZGU7CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmlu
dFN0cmVhbSYsIE9yaWdpbik+PiBtX29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9m
cm9udGVuZERhdGE7CisgICAgUENUb09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSAr
NDcsMTIgQEAKICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkIzQ29tbW9uLmgi
CiAjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5j
bHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1
ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKQEAgLTE3MSwxMiArMTc0LDIzIEBAIHZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgYmxvY2tKdW1w
c1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKICAgICB9OwogCisgICAgUENUb09yaWdpbk1hcCYgcGNU
b09yaWdpbk1hcCA9IGNvZGUucHJvYygpLnBjVG9PcmlnaW5NYXAoKTsKKyAgICBhdXRvIGFkZEl0
ZW0gPSBbJl0gKEluc3QmIGluc3QpIHsKKyAgICAgICAgaWYgKCFpbnN0Lm9yaWdpbikgeworICAg
ICAgICAgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcGNUb09yaWdpbk1hcC5h
cHBlbmRJdGVtKGppdC5sYWJlbCgpLCBpbnN0Lm9yaWdpbi0+b3JpZ2luKCkpOworICAgIH07CisK
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAgICAgICBibG9ja0p1bXBz
W2Jsb2NrXS5saW5rKCZqaXQpOwogICAgICAgICBibG9ja0xhYmVsc1tibG9ja10gPSBqaXQubGFi
ZWwoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNv
bnRleHQpOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAg
ICAgIGFkZEl0ZW0oaW5zdCk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9
IGluc3QuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
anVtcCwgIWp1bXAuaXNTZXQoKSk7CiAgICAgICAgIH0KIApAQCAtMTg0LDYgKzE5OCw4IEBAIHZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgICYmIGJs
b2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQogICAg
ICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgYWRkSXRlbShibG9jay0+bGFzdCgpKTsKKwog
ICAgICAgICBpZiAoaXNSZXR1cm4oYmxvY2stPmxhc3QoKS5vcGNvZGUpKSB7CiAgICAgICAgICAg
ICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxv
Z3VlIGluIEFpciwgc28gd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJy
aWRlLgpAQCAtMTk4LDYgKzIxNCw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxI
ZWxwZXJzJiAKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZVdpdGhFbXB0eUZyYW1lKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7Cisg
ICAgICAgICAgICBhZGRJdGVtKGJsb2NrLT5sYXN0KCkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KIApAQCAtMjE4LDEwICsyMzUsMTMgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBj
b2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGFkZEl0ZW0oYmxv
Y2stPmxhc3QoKSk7CiAgICAgfQogCisgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5s
YWJlbCgpLCBPcmlnaW4oKSk7CiAgICAgZm9yIChhdXRvJiBsYXRlUGF0aCA6IGNvbnRleHQubGF0
ZVBhdGhzKQogICAgICAgICBsYXRlUGF0aC0+cnVuKGppdCwgY29udGV4dCk7CisgICAgcGNUb09y
aWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7CiB9CiAKIH0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiAr
NTIsNyBAQAogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkxvd0xldmVs
SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUg
IlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCkBAIC0y
NDgxLDYgKzI0ODIsMzMgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZQogCiB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKKy8vICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKSB7CisvLyNkZWZpbmUgQVModmVjdG9y
LCBpdGVtKSBzaXplICs9IHZlY3Rvci5zaXplKCkgKiBzaXplb2YoaXRlbSkKKy8vICAgICAgICBk
b3VibGUgc2l6ZSA9IDA7CisvLyAgICAgICAgc2l6ZSArPSBzaXplb2YoQ29kZUJsb2NrKTsKKy8v
ICAgICAgICBBUyhtX2xsaW50Q2FsbExpbmtJbmZvcywgTExJbnRDYWxsTGlua0luZm8pOworLy8g
ICAgICAgIEFTKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBWYWx1ZVByb2ZpbGUpOworLy8gICAg
ICAgIEFTKG1fdmFsdWVQcm9maWxlcywgVmFsdWVQcm9maWxlKTsKKy8vICAgICAgICBBUyhtX3Jh
cmVDYXNlUHJvZmlsZXMsIFJhcmVDYXNlUHJvZmlsZSk7CisvLyAgICAgICAgQVMobV9yZXN1bHRQ
cm9maWxlcywgUmVzdWx0UHJvZmlsZSk7CisvLyAgICAgICAgQVMobV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlcywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSk7CisvLyAgICAgICAgQVMobV9vYmplY3RB
bGxvY2F0aW9uUHJvZmlsZXMsIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKTsKKy8vICAgICAgICBB
UyhtX2NvbnN0YW50UmVnaXN0ZXJzLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworLy8gICAgICAg
IEFTKG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24pOworLy8gICAgICAgIEFTKG1fZnVuY3Rpb25EZWNscywgV3JpdGVCYXJyaWVyPEZ1
bmN0aW9uRXhlY3V0YWJsZT4pOworLy8gICAgICAgIEFTKG1fZnVuY3Rpb25FeHBycywgV3JpdGVC
YXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4pOworLy8gICAgICAgIEFTKG1faW5zdHJ1Y3Rpb25z
LCBJbnN0cnVjdGlvbik7CisvLyAgICAgICAgQVMobV91bmxpbmtlZENvZGUtPmV4cHJlc3Npb25J
bmZvKCksIEV4cHJlc3Npb25SYW5nZUluZm8pOworLy8KKy8vICAgICAgICBkYXRhTG9nRigiU2l6
ZVxuXHRCeXRlczolbGZcblx0S0I6JWxmXG5cdE1COiVsZlxuIiwgc2l6ZSwgc2l6ZS8xMDI0LjAs
IHNpemUvKDEwMjQuMCoxMDI0LjApKTsKKy8vICAgICAgICAvL2RvdWJsZSBwcm9qZWN0ZWRTaXpl
ID0gKDEuZiArIDkuZikqKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAvIDQuZik7CisvLyAgICAgICAg
ZG91YmxlIHByb2plY3RlZFNpemUgPSBtX3BjVG9Db2RlT3JpZ2luTWFwLT5tZW1vcnlTaXplKCk7
CisvLyAgICAgICAgZGF0YUxvZ0YoIlByb2plY3RlZCBzaXplXG5cdEJ5dGVzOiVsZlxuXHRLQjol
bGZcblx0TUI6JWxmXG4iLCBwcm9qZWN0ZWRTaXplLCBwcm9qZWN0ZWRTaXplLzEwMjQuMCwgcHJv
amVjdGVkU2l6ZS8oMTAyNC4wKjEwMjQuMCkpOworLy8gICAgICAgIGRhdGFMb2dGKCJQcm9qZWN0
ZWQgc2l6ZSBQZXJjZW50OiAlbGZcbiIsIChwcm9qZWN0ZWRTaXplLyhzaXplICsgcHJvamVjdGVk
U2l6ZSkqMTAwLmYpKTsKKy8vICAgICAgICBkYXRhTG9nKCJcblxuIik7CisvLyN1bmRlZiBBUwor
Ly8gICAgfQorCiAgICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29u
ZGl0aW9uYWwgZmluYWxpemVyczogaW5saW5lIGNhY2hlIGNsZWFyaW5nCiAgICAgLy8gYW5kIGpl
dHRpc29uaW5nLiBUaGUgcHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBv
bmUgb2YgdGhvc2UgdGhpbmdzCiAgICAgLy8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4g
U28gd2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdApAQCAtNDI3
NSw0ICs0MzAzLDUzIEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkK
ICAgICB9CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVu
aXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYgbWFwKSAKK3sgCisgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcCA9IFdURk1vdmUobWFwKTsKK30KKworZG91YmxlIENvZGVCbG9jazo6YXZlcmFnZU1l
bVNpemUoKSBjb25zdAoreworICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKSB7CisjZGVmaW5l
IEFTKHZlY3RvciwgaXRlbSkgc2l6ZSArPSB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKGl0ZW0pCisg
ICAgICAgIGRvdWJsZSBzaXplID0gMDsKKyAgICAgICAgc2l6ZSArPSBzaXplb2YoQ29kZUJsb2Nr
KTsKKyAgICAgICAgQVMobV9sbGludENhbGxMaW5rSW5mb3MsIExMSW50Q2FsbExpbmtJbmZvKTsK
KyAgICAgICAgQVMobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMsIFZhbHVlUHJvZmlsZSk7CisgICAg
ICAgIEFTKG1fdmFsdWVQcm9maWxlcywgVmFsdWVQcm9maWxlKTsKKyAgICAgICAgQVMobV9yYXJl
Q2FzZVByb2ZpbGVzLCBSYXJlQ2FzZVByb2ZpbGUpOworICAgICAgICBBUyhtX3Jlc3VsdFByb2Zp
bGVzLCBSZXN1bHRQcm9maWxlKTsKKyAgICAgICAgQVMobV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
cywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSk7CisgICAgICAgIEFTKG1fb2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVzLCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSk7CisgICAgICAgIEFTKG1fY29uc3Rh
bnRSZWdpc3RlcnMsIFdyaXRlQmFycmllcjxVbmtub3duPik7CisgICAgICAgIEFTKG1fY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOwor
ICAgICAgICBBUyhtX2Z1bmN0aW9uRGVjbHMsIFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFi
bGU+KTsKKyAgICAgICAgQVMobV9mdW5jdGlvbkV4cHJzLCBXcml0ZUJhcnJpZXI8RnVuY3Rpb25F
eGVjdXRhYmxlPik7CisgICAgICAgIEFTKG1faW5zdHJ1Y3Rpb25zLCBJbnN0cnVjdGlvbik7CisK
KyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgICAgIC8vcmV0dXJuIG1fcGNUb0NvZGVPcmlnaW5N
YXAtPm1lbW9yeVNpemUoKSAvIHNpemU7CisjdW5kZWYgQVMKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworT3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMp
Cit7CisgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApIHsKKyAgICAgICAgaWYgKE9wdGlvbmFs
PENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMp
KQorICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorI2lmIEVOQUJMRShKSVQp
CisgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHVi
SW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWIgPSAqaXRlcjsKKyAgICAgICAgaWYgKHN0dWItPmNvbnRhaW5zUEMocGMpKQorICAg
ICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+KHN0dWItPmNvZGVPcmlnaW4pOwor
ICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0Owog
Y2xhc3MgVHlwZUxvY2F0aW9uOwogY2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVudDsKK2NsYXNzIFBD
VG9Db2RlT3JpZ2luTWFwOwogCiBlbnVtIFJlb3B0aW1pemF0aW9uTW9kZSB7IERvbnRDb3VudFJl
b3B0aW1pemF0aW9uLCBDb3VudFJlb3B0aW1pemF0aW9uIH07CiAKQEAgLTI3NCw2ICsyNzUsOCBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwogICAg
IH0KKworICAgIGRvdWJsZSBhdmVyYWdlTWVtU2l6ZSgpIGNvbnN0OwogICAgIAogICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQogICAgIHsKQEAg
LTkyNyw2ICs5MzAsMTAgQEAgcHVibGljOgogCiAgICAgQ2FsbFNpdGVJbmRleCBuZXdFeGNlcHRp
b25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKTsK
IAorICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2Rl
T3JpZ2luTWFwPiYmKTsKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAo
KSBjb25zdCB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CisgICAgT3B0aW9u
YWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJ
VElubGluZUNhY2hlcygpOwpAQCAtMTA5Nyw2ICsxMTA0LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFC
TEUoSklUKQogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7
CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0Nv
ZGVPcmlnaW5NYXA7CiAKICAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25h
bEZpbmFsaXplcjsKICAgICBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIG1fd2Vha1JlZmVyZW5jZUhh
cnZlc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmln
aW4uaAkocmV2aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw5IEBAIHN0cnVjdCBD
b2RlT3JpZ2luIHsKICAgICBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgQ29kZU9y
aWdpbiYgb3RoZXIpIGNvbnN0OwogICAgIAogICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaCgp
IGNvbnN0OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgd2Fs
a1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKTsKICAgICAKICAgICAvLyBHZXQgdGhlIGlu
bGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBv
bmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0OwpAQCAtMTI3
LDcgKzEzMCw3IEBAIGlubGluZSBib29sIENvZGVPcmlnaW46Om9wZXJhdG9yPT0oY29uc3QKICAg
ICByZXR1cm4gYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5ieXRlY29kZUluZGV4CiAgICAgICAgICYm
IGlubGluZUNhbGxGcmFtZSA9PSBvdGhlci5pbmxpbmVDYWxsRnJhbWU7CiB9Ci0gICAgCisKIHN0
cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ29k
ZU9yaWdpbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29uc3QgQ29kZU9yaWdpbiYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZy
YW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUNhbGxGcmFtZS5oCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw2ICsyNDYs
MTkgQEAgaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcgogICAgIHJldHVy
biBiYXNlbGluZUNvZGVCbG9jazsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgor
aW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24m
IGZ1bmN0aW9uKQoreworICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9ICp0aGlzOworICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIGZ1bmN0aW9uKGNvZGVPcmlnaW4pOworICAgICAgICBpZiAo
IWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwor
ICAgIH0KK30KKyAgICAKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmgJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNiArMzI0LDE0
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zUEModm9pZCogcGMpIGNvbnN0
CisgICAgeyAKKyAgICAgICAgaWYgKCFtX3N0dWJSb3V0aW5lKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHVpbnRwdHJfdCBwY0FzSW50ID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4ocGMpOworICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS0+c3RhcnRBZGRyZXNzKCkg
PD0gcGNBc0ludCAmJiBwY0FzSW50IDw9IG1fc3R1YlJvdXRpbmUtPmVuZEFkZHJlc3MoKTsKKyAg
ICB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsMTMgQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIHJlc2V0KGNvZGVC
bG9jayk7CiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KKworYm9vbCBTdHJ1Y3R1cmVTdHViSW5m
bzo6Y29udGFpbnNQQyh2b2lkKiBwYykgY29uc3QKK3sKKyAgICBpZiAoY2FjaGVUeXBlICE9IENh
Y2hlVHlwZTo6U3R1YikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB1LnN0dWIt
PmNvbnRhaW5zUEMocGMpOworfQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDggQEAgcHVi
bGljOgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXg7CiAKKyAgICBib29sIGNvbnRhaW5zUEModm9pZCogcGMpIGNvbnN0OworCiAgICAg
dW5pb24gewogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxT
dHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTk1NDQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRU
eXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5z
aWduZWQgc3RhcnREaXZvdCwgdW5zaWduZWQgZW5kRGl2b3QpOwogCiAgICAgYm9vbCBoYXNFeHBy
ZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyB9CisgICAgY29u
c3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbygpIHsgcmV0dXJu
IG1fZXhwcmVzc2lvbkluZm87IH0KIAogICAgIC8vIFNwZWNpYWwgcmVnaXN0ZXJzCiAgICAgdm9p
ZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcikgeyBtX3RoaXNS
ZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV4cGVy
aW1lbnRhbCB0cmFuc2l0aW9uIGZyb20gTExWTSB0byBCMyBhcyB0aGUgYmFja2VuZCBmb3IgdGhl
IEZUTC4gV2UgZG9uJ3QKIC8vIHlldCBrbm93IGhvdyBpdCB3aWxsIHR1cm4gb3V0LiBGb3Igbm93
LCB0aGlzIGZsYWcgd2lsbCBjb250cm9sIHdoZXRoZXIgRlRMIHVzZXMgQjMuIFJlbWVtYmVyIHRv
IHNldCB0aGlzCiAvLyB0byAwIGJlZm9yZSBjb21taXR0aW5nIQotI2RlZmluZSBGVExfVVNFU19C
MyAwCisjZGVmaW5lIEZUTF9VU0VTX0IzIDEKIAogc3RydWN0IE5vZGU7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxOTU0
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA1LDYgKzMwNSw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25I
YW5kbGVyKG5ld0V4Y2VwdGlvbkhhbmRsZXIpOwogICAgICAgICB9CiAgICAgfQorCisgICAgbV9j
b2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVP
cmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVy
KSk7CiB9CiAKIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGUoKQpAQCAtMzM5LDcgKzM0MSw4IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGUoKQogICAgIG1fc3BlY3VsYXRpdmUtPmNhbGxPcGVy
YXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNr
T3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOwogCiAgICAgLy8gR2VuZXJhdGUgc2xvdyBwYXRo
IGNvZGUuCi0gICAgbV9zcGVjdWxhdGl2ZS0+cnVuU2xvd1BhdGhHZW5lcmF0b3JzKCk7CisgICAg
bV9zcGVjdWxhdGl2ZS0+cnVuU2xvd1BhdGhHZW5lcmF0b3JzKG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyKTsKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAgICAg
CiAgICAgY29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CiAgICAgbGlua09TUkV4aXRzKCk7CkBA
IC00MzIsNyArNDM1LDggQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAg
ICBqdW1wKGZyb21Bcml0eUNoZWNrKTsKICAgICAKICAgICAvLyBHZW5lcmF0ZSBzbG93IHBhdGgg
Y29kZS4KLSAgICBtX3NwZWN1bGF0aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICBt
X3NwZWN1bGF0aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRvcnMobV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIpOworICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwo
KSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKICAgICAK
ICAgICBjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKICAgICBsaW5rT1NSRXhpdHMoKTsKQEAg
LTU5OCw2ICs2MDIsMjIgQEAgQ2FsbFNpdGVJbmRleCBKSVRDb21waWxlcjo6cmVjb3JkQ2FsbFNp
dAogICAgIHJldHVybiBjYWxsU2l0ZTsKIH0KIAordm9pZCBKSVRDb21waWxlcjo6c2V0RW5kT2ZN
YWluUGF0aCgpCit7CisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgbV9zcGVjdWxhdGl2ZS0+bV9vcmlnaW4uc2VtYW50
aWMpOworICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZk1haW5QYXRoKGxhYmVsSWdub3JpbmdXYXRjaHBv
aW50cygpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6c2V0RW5kT2ZDb2RlKCkKK3sKKyAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsSWdub3JpbmdXYXRjaHBv
aW50cygpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwor
ICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOwor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJl
dmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIkpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRl
ICJUZW1wUmVnaXN0ZXJTZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMTgsNiArMTE5LDcg
QEAgcHVibGljOgogICAgIC8vIE1ldGhvZHMgdG8gc2V0IGxhYmVscyBmb3IgdGhlIGRpc2Fzc2Vt
Ymxlci4KICAgICB2b2lkIHNldFN0YXJ0T2ZDb2RlKCkKICAgICB7CisgICAgICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCks
IENvZGVPcmlnaW4oMCwgbnVsbHB0cikpOwogICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2Vt
YmxlcikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRT
dGFydE9mQ29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CkBAIC0xMzcsMTkgKzEzOSw4
IEBAIHB1YmxpYzoKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvck5vZGUobm9kZSwgbGFi
ZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEVuZE9m
TWFpblBhdGgoKQotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZNYWlu
UGF0aChsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c2V0RW5kT2ZDb2RlKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9m
Q29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7Ci0gICAgfQorICAgIHZvaWQgc2V0RW5k
T2ZNYWluUGF0aCgpOworICAgIHZvaWQgc2V0RW5kT2ZDb2RlKCk7CiAgICAgCiAgICAgQ2FsbFNp
dGVJbmRleCBhZGRDYWxsU2l0ZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewpAQCAtMjY1
LDYgKzI1Niw4IEBAIHB1YmxpYzoKIAogICAgIENhbGxTaXRlSW5kZXggcmVjb3JkQ2FsbFNpdGVB
bmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvbnN0IENvZGVPcmln
aW4mLCB1bnNpZ25lZCBldmVudFN0cmVhbUluZGV4KTsKIAorICAgIFBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlciYgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkgeyByZXR1cm4gbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgT1NSRXhpdEp1
bXBQbGFjZWhvbGRlcjsKICAgICAKQEAgLTMyOCw2ICszMjEsNyBAQCBwcml2YXRlOgogICAgIENh
bGwgbV9jYWxsQXJpdHlGaXh1cDsKICAgICBMYWJlbCBtX2FyaXR5Q2hlY2s7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFNwZWN1bGF0aXZlSklUPiBtX3NwZWN1bGF0aXZlOworICAgIFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlciBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKIH07CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xv
d1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNiArNjIsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIEJ5IGRlZmF1bHQgc2xvdyBwYXRoIGdlbmVyYXRvcnMgZG9uJ3QgaGF2ZSBhIGNhbGwu
CiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCgpOwogICAgIH0KKworICAgIGNv
bnN0IE5vZGVPcmlnaW4mIG9yaWdpbigpIGNvbnN0ICB7IHJldHVybiBtX29yaWdpbjsgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVK
SVQqKSA9IDA7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fbGFiZWw7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMCwxMCArMzMwLDEyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmFkZFNsb3dQYXRoR2VuZXJhdG8KICAgICBtX3Nsb3dQYXRoR2VuZXJhdG9ycy5hcHBl
bmQoV1RGTW92ZShzbG93UGF0aEdlbmVyYXRvcikpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
OjpydW5TbG93UGF0aEdlbmVyYXRvcnMoKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6cnVuU2xvd1Bh
dGhHZW5lcmF0b3JzKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYgcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3dQYXRoR2VuZXJh
dG9ycy5zaXplKCk7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zbG93UGF0
aEdlbmVyYXRvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyLmFwcGVuZEl0ZW0obV9qaXQubGFiZWwoKSwgbV9zbG93UGF0aEdlbmVyYXRvcnNbaV0tPm9y
aWdpbigpLnNlbWFudGljKTsKICAgICAgICAgbV9zbG93UGF0aEdlbmVyYXRvcnNbaV0tPmdlbmVy
YXRlKHRoaXMpOworICAgIH0KIH0KIAogLy8gT24gV2luZG93cyB3ZSBuZWVkIHRvIHdyYXAgZm1v
ZDsgb24gb3RoZXIgcGxhdGZvcm1zIHdlIGNhbiBjYWxsIGl0IGRpcmVjdGx5LgpAQCAtMTUwNCw2
ICsxNTA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAg
ICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpICYmIG1heUV4
aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSkgIT0gRG9lc05vdEV4aXQpCiAgICAgICAg
ICAgICBtX2ppdC5qaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAorICAgICAgICBtX2pp
dC5wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKS5hcHBlbmRJdGVtKG1faml0LmxhYmVsKCksIG1f
b3JpZ2luLnNlbWFudGljKTsKKwogICAgICAgICBjb21waWxlKG1fY3VycmVudE5vZGUpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgobV9jdXJyZW50Tm9kZS0+
b3AoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw3ICszMTcsNyBAQCBwdWJs
aWM6CiAgICAgR2VuZXJhdGVkT3BlcmFuZFR5cGUgY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQz
MihOb2RlKik7CiAKICAgICB2b2lkIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6dW5pcXVlX3B0
cjxTbG93UGF0aEdlbmVyYXRvcj4pOwotICAgIHZvaWQgcnVuU2xvd1BhdGhHZW5lcmF0b3JzKCk7
CisgICAgdm9pZCBydW5TbG93UGF0aEdlbmVyYXRvcnMoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
Jik7CiAgICAgCiAgICAgdm9pZCBjb21waWxlKE5vZGUqKTsKICAgICB2b2lkIG5vdGljZU9TUkJp
cnRoKE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGls
ZS5jcHAJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QjNDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUg
IkZUTFVud2luZEluZm8uaCIKICNpbmNsdWRlICJKSVRTdWJHZW5lcmF0b3IuaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRl
ICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgewpAQCAtMTM0LDYgKzEzNSw5IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNh
ZmVwb2ludDo6UmUKICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFw
ID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKKyAgICBjb2RlQmxvY2stPnNl
dFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcihXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxp
emVyLT5iM0NvZGVMaW5rQnVmZmVyKSk7CiAKICAgICBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiA9
IGJpdHdpc2VfY2FzdDxHZW5lcmF0ZWRGdW5jdGlvbj4oCiAgICAgICAgIHN0YXRlLmZpbmFsaXpl
ci0+YjNDb2RlTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE5NTQ0NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw2ICs1NCw4IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9S
QU1TaXplLmg+CiAKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEwODYsNiArMTA4OCwzMiBAQCBORVZF
Ul9JTkxJTkUgdm9pZCBIZWFwOjpjb2xsZWN0SW1wbChIZWFwCiAgICAgd2lsbFN0YXJ0Q29sbGVj
dGlvbihjb2xsZWN0aW9uVHlwZSk7CiAgICAgR0NQSEFTRShDb2xsZWN0KTsKIAorICAgIC8vewor
ICAgIC8vICAgIGNsYXNzIEl0ZXJhdG9yIHsKKyAgICAvLyAgICBwdWJsaWM6CisgICAgLy8gICAg
ICAgIGJvb2wgb3BlcmF0b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICAvLyAgICAgICAg
eworICAgIC8vICAgICAgICAgICAgZG91YmxlIGF2ZyA9IGNvZGVCbG9jay0+YXZlcmFnZU1lbVNp
emUoKTsKKyAgICAvLyAgICAgICAgICAgIGlmIChQQ1RvQ29kZU9yaWdpbk1hcCogbSA9IGNvZGVC
bG9jay0+cGNUb0NvZGVPcmlnaW5NYXAoKSkKKyAgICAvLyAgICAgICAgICAgICAgICB0b3RhbE1h
cHBpbmcgKz0gbS0+bWVtb3J5U2l6ZSgpOworICAgIC8vICAgICAgICAgICAgdG90YWwgKz0gYXZn
OworICAgIC8vICAgICAgICAgICAgbnVtU2VlbisrOworICAgIC8vICAgICAgICAgICAgLy9pZiAo
YXZnID4gMCkgeworICAgIC8vICAgICAgICAgICAgLy8gICAgbnVtU2VlbiArPSAxOworICAgIC8v
ICAgICAgICAgICAgLy8gICAgdG90YWwgKz0gYXZnOworICAgIC8vICAgICAgICAgICAgLy99Cisg
ICAgLy8gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gICAgICAgIH0KKyAgICAvLyAg
ICAgICAgZG91YmxlIG51bVNlZW4geyAwIH07CisgICAgLy8gICAgICAgIGRvdWJsZSB0b3RhbCB7
IDAgfTsKKyAgICAvLyAgICAgICAgZG91YmxlIHRvdGFsTWFwcGluZyB7IDAgfTsKKyAgICAvLyAg
ICB9OworICAgIC8vICAgIEl0ZXJhdG9yIGl0OworICAgIC8vICAgIG1fY29kZUJsb2Nrcy5pdGVy
YXRlPEl0ZXJhdG9yPihpdCk7CisgICAgLy8gICAgLy9pZiAoaXQubnVtU2VlbiA+IDApCisgICAg
Ly8gICAgLy8gICAgZGF0YUxvZ0YoIlBlcmNlbnQgb2YgdG90YWwgc2l6ZTogJWxmXG4iLCAxMDAq
KGl0LnRvdGFsTWFwcGluZy8oaXQudG90YWwgKyBpdC50b3RhbE1hcHBpbmcpKSk7CisgICAgLy99
CisKICAgICBkb3VibGUgZ2NTdGFydFRpbWUgPSBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOwogICAgIGlmIChtX3ZlcmlmaWVyKSB7CiAgICAgICAgIC8vIFZlcmlmeSB0aGF0IGxp
dmUgb2JqZWN0cyBmcm9tIHRoZSBsYXN0IEdDIGN5Y2xlIGhhdmVuJ3QgYmVlbiBjb3JydXB0ZWQg
YnkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNr
TWFya2VyLmNwcAkocmV2aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsMTEg
QEAKIAogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgor
I2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorI2luY2x1ZGUgIkxMSW50UENSYW5nZXMuaCIKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlci5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVk
ZSA8c3RkbGliLmg+CkBAIC01NzcsNiArNTgwLDY0IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpU
aHJlYWQ6OlJlZ2lzdGVyczoKICNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aGUgaW5zdHJ1Y3Rp
b24gcG9pbnRlciBmb3IgYW5vdGhlciB0aHJlYWQgb24gdGhpcyBwbGF0Zm9ybQogI2VuZGlmCiB9
Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25z
dAoreworICAgIC8vIExMSW50IHVzZXMgcmVnVDQgYXMgUEMuCisjaWYgT1MoREFSV0lOKQorCisj
aWYgX19EQVJXSU5fVU5JWDAzCisKKyNpZiBDUFUoWDg2KQorICAgIHN0YXRpY19hc3NlcnQoTExJ
bnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0ZXJzOjplc2ksICJXcm9uZyBMTEludCBQQy4iKTsKKyAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVncy5fX2VzaSk7CisjZWxpZiBDUFUo
WDg2XzY0KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0ZXJz
OjpyOCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWdzLl9fcjgpOworI2VsaWYgQ1BVKEFSTSkKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50
OjpMTEludFBDID09IEFSTVJlZ2lzdGVyczo6cjgsICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVncy5fX3JbOF0pOworI2VsaWYgQ1BVKEFS
TTY0KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gQVJNNjRSZWdpc3RlcnM6
Ong0LCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlZ3MuX194WzRdKTsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNl
bmRpZgorCisjZWxzZSAvLyAhX19EQVJXSU5fVU5JWDAzCisjaWYgQ1BVKFg4NikKKyAgICBzdGF0
aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6ZXNpLCAiV3JvbmcgTExJ
bnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuZXNpKTsK
KyNlbGlmIENQVShYODZfNjQpCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBY
ODZSZWdpc3RlcnM6OnI4LCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHJlZ3MucjgpOworI2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVj
dHVyZQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0RBUldJTl9VTklYMDMKKworLy8gZW5kIE9TKERB
UldJTikKKyNlbGlmIE9TKFdJTkRPV1MpCisKKyNpZiBDUFUoQVJNKQorICAgIHN0YXRpY19hc3Nl
cnQoTExJbnQ6OkxMSW50UEMgPT0gQVJNUmVnaXN0ZXJzOjpyOCwgIldyb25nIExMSW50IFBDLiIp
OworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPigodWludHB0cl90KSByZWdzLlI4
KTsKKyNlbGlmIENQVShNSVBTKQorI2Vycm9yIERvbnQga25vdyB3aGF0IHRvIGRvIHdpdGggbWlw
cy4gRG8gd2UgZXZlbiBuZWVkIHRoaXM/CisjZWxpZiBDUFUoWDg2KQorICAgIHN0YXRpY19hc3Nl
cnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0ZXJzOjplc2ksICJXcm9uZyBMTEludCBQQy4i
KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHVpbnRwdHJfdCkgcmVncy5F
c2kpOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBD
ID09IFg4NlJlZ2lzdGVyczo6cjEwLCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCh1aW50cHRyX3QpIHJlZ3MuUjEwKTsKKyNlbHNlCisjZXJy
b3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxzZQorI2Vycm9yIE5lZWQgYSB3
YXkgdG8gZ2V0IHRoZSBMTEludFBDIGZvciBhbm90aGVyIHRocmVhZCBvbiB0aGlzIHBsYXRmb3Jt
CisjZW5kaWYKK30KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKIHZvaWQg
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6ZnJlZVJlZ2lzdGVycyhUaHJlYWQ6OlJlZ2lzdGVycyYg
cmVnaXN0ZXJzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNr
TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmgJKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3
IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICB2
b2lkKiBmcmFtZVBvaW50ZXIoKSBjb25zdDsKICAgICAgICAgICAgIHZvaWQqIGluc3RydWN0aW9u
UG9pbnRlcigpIGNvbnN0OworICAgICAgICAgICAgdm9pZCogbGxpbnRQQygpIGNvbnN0OwogI2Vu
ZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgICAgIAogI2lmIE9TKERB
UldJTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3Bw
CShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU3LDcgKzE1Nyw3IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6YWRkRXYK
IH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLXN0YXRpYyBSZWY8UHJvdG9jb2w6
OlNjcmlwdFByb2ZpbGVyOjpTYW1wbGVzPiBidWlsZFNhbXBsZXMoVmVjdG9yPFNhbXBsaW5nUHJv
ZmlsZXI6OlN0YWNrVHJhY2U+JiBzYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMsIGRvdWJsZSB0
b3RhbFRpbWUpCitzdGF0aWMgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U2FtcGxlcz4g
YnVpbGRTYW1wbGVzKFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiYmIHNhbXBs
aW5nUHJvZmlsZXJTdGFja1RyYWNlcywgZG91YmxlIHRvdGFsVGltZSkKIHsKICAgICBSZWY8UHJv
dG9jb2w6OkFycmF5PFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U3RhY2tUcmFjZT4+IHN0YWNr
VHJhY2VzID0gUHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U3RhY2tU
cmFjZT46OmNyZWF0ZSgpOwogICAgIGZvciAoU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZSYg
c3RhY2tUcmFjZSA6IHNhbXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcykgewpAQCAtMTY2LDggKzE2
Niw4IEBAIHN0YXRpYyBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW0KICAgICAgICAg
ICAgIFJlZjxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlN0YWNrRnJhbWU+IGZyYW1lID0gUHJv
dG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTdGFja0ZyYW1lOjpjcmVhdGUoKQogICAgICAgICAgICAg
ICAgIC5zZXRTb3VyY2VJRChTdHJpbmc6Om51bWJlcihzdGFja0ZyYW1lLnNvdXJjZUlEKCkpKQog
ICAgICAgICAgICAgICAgIC5zZXROYW1lKHN0YWNrRnJhbWUuZGlzcGxheU5hbWUoKSkKLSAgICAg
ICAgICAgICAgICAuc2V0TGluZShzdGFja0ZyYW1lLnN0YXJ0TGluZSgpKQotICAgICAgICAgICAg
ICAgIC5zZXRDb2x1bW4oc3RhY2tGcmFtZS5zdGFydENvbHVtbigpKQorICAgICAgICAgICAgICAg
IC5zZXRMaW5lKHN0YWNrRnJhbWUuZnVuY3Rpb25TdGFydExpbmUoKSkKKyAgICAgICAgICAgICAg
ICAuc2V0Q29sdW1uKHN0YWNrRnJhbWUuZnVuY3Rpb25TdGFydENvbHVtbigpKQogICAgICAgICAg
ICAgICAgIC5zZXRVcmwoc3RhY2tGcmFtZS51cmwoKSkKICAgICAgICAgICAgICAgICAucmVsZWFz
ZSgpOwogICAgICAgICAgICAgZnJhbWVzLT5hZGRJdGVtKFdURk1vdmUoZnJhbWUpKTsKQEAgLTE5
NCw4ICsxOTQsOCBAQCB2b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnRyYWNrCiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHNhbXBsaW5nUHJvZmlsZXIpOwogICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwogICAgICAgICBzYW1wbGlu
Z1Byb2ZpbGVyLT5zdG9wKGxvY2tlcik7Ci0gICAgICAgIFJlZjxQcm90b2NvbDo6U2NyaXB0UHJv
ZmlsZXI6OlNhbXBsZXM+IHNhbXBsZXMgPSBidWlsZFNhbXBsZXMoc2FtcGxpbmdQcm9maWxlci0+
c3RhY2tUcmFjZXMobG9ja2VyKSwgc2FtcGxpbmdQcm9maWxlci0+dG90YWxUaW1lKGxvY2tlcikp
OwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5jbGVhckRhdGEobG9ja2VyKTsKKyAgICAgICAg
VmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+IHN0YWNrVHJhY2VzID0gc2FtcGxp
bmdQcm9maWxlci0+cmVsZWFzZVN0YWNrVHJhY2VzKGxvY2tlcik7CisgICAgICAgIFJlZjxQcm90
b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlNhbXBsZXM+IHNhbXBsZXMgPSBidWlsZFNhbXBsZXMoV1RG
TW92ZShzdGFja1RyYWNlcyksIHNhbXBsaW5nUHJvZmlsZXItPnRvdGFsVGltZShsb2NrZXIpKTsK
IAogICAgICAgICBsb2NrZXIudW5sb2NrRWFybHkoKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkocmV2aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAj
aW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNp
bmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKQEAgLTE0Miw3ICsxNDMsNyBAQCB2b2lkIEpJVDo6YXNz
ZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAgICAgICAgTkVYVF9PUENPREUobmFtZSk7IFwKICAg
ICB9CiAKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKK3ZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYgcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKQogewogICAgIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0QXNz
ZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKQEAgLTE1OCw2ICsxNTksOCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBpbnN0cnVjdGlvbnNCZWdpbiArIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UobV9pbnRlcnByZXRlci0+aXNPcGNvZGUoY3VycmVudEluc3RydWN0
aW9uLT51Lm9wY29kZSksICJwcml2YXRlQ29tcGlsZU1haW5QYXNzIGdvbmUgYmFkIEAgJWQiLCBt
X2J5dGVjb2RlT2Zmc2V0KTsKIAorICAgICAgICBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKwogI2lmIEVO
QUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2J5dGVjb2RlT2Zmc2V0ID4gMCkg
Ly8gQXZvaWQgdGhlIG92ZXJoZWFkIG9mIHNhbXBsaW5nIG9wX2VudGVyIHR3aWNlLgogICAgICAg
ICAgICAgc2FtcGxlSW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTM0NSw3ICsz
NDgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpCiAgICAgbV9qbXBUYWJs
ZS5jbGVhcigpOwogfQogCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQordm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYg
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKQogewogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bnNCZWdpbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogCkBAIC0zNjUs
NiArMzY4LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBmb3Ig
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2lu
KCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7CiAgICAgICAgIG1fYnl0ZWNvZGVPZmZz
ZXQgPSBpdGVyLT50bzsKIAorICAgICAgICBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5k
SXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKwogICAgICAgICB1
bnNpZ25lZCBmaXJzdFRvID0gbV9ieXRlY29kZU9mZnNldDsKIAogICAgICAgICBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBtX2J5dGVjb2RlT2Zm
c2V0OwpAQCAtNTE5LDYgKzUyNCw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNv
bXBpbGUoSkkKICAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOwogICAgIH0KICAgICAKKyAg
ICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOworICAg
IHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CisKICAgICBpZiAobV9kaXNhc3Nl
bWJsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbCgpKTsK
IApAQCAtNTY1LDEyICs1NzMsMTMgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29t
cGlsZShKSQogICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKICAgICBlbWl0TWF0ZXJpYWxpemVU
YWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOworICAg
IHByaXZhdGVDb21waWxlTWFpblBhc3MocGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKTsKICAgICBw
cml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7Ci0gICAgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsK
KyAgICBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyhwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOwog
ICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNl
dEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CisgICAgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9y
aWdpbigpKTsKIAogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2Rl
T2Zmc2V0ID0gMDsKQEAgLTYxMiw2ICs2MjEsOCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnBy
aXZhdGVDb21waWxlKEpJCiAgICAgCiAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOworICAgIHBjVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6
ZGVmYXVsdENvZGVPcmlnaW4oKSk7CisKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
dm0sICp0aGlzLCBtX2NvZGVCbG9jaywgZWZmb3J0KTsKICAgICBpZiAocGF0Y2hCdWZmZXIuZGlk
RmFpbFRvQWxsb2NhdGUoKSkKQEAgLTcwOCw2ICs3MTksOCBAQCBDb21waWxhdGlvblJlc3VsdCBK
SVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1By
b2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKICAgICAgICAgbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvbXBpbGF0aW9uKTsKICAg
ICB9CisKKyAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtlX3Vu
aXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIp
LCBwYXRjaEJ1ZmZlcikpOwogICAgIAogICAgIENvZGVSZWYgcmVzdWx0ID0gRklOQUxJWkVfQ09E
RSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCkBAIC03MTYsNyArNzI5LDcgQEAgQ29tcGlsYXRpb25S
ZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQ
ZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRv
dWJsZT4ocmVzdWx0LnNpemUoKSkgLwogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKLSAgICAKKwogICAgIG1fY29kZUJsb2Nr
LT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogICAgIG1fY29kZUJsb2NrLT5z
ZXRKSVRDb2RlKAogICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdp
dGhBcml0eUNoZWNrLCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBKU1Njb3BlOwogICAgIGNsYXNzIEpTU3RhY2s7CiAgICAgY2xhc3MgTWFya2Vk
QWxsb2NhdG9yOworICAgIGNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKICAgICBjbGFz
cyBSZWdpc3RlcjsKICAgICBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKICAgICBjbGFzcyBTdHJ1Y3R1
cmVTdHViSW5mbzsKQEAgLTI1OCw5ICsyNTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2
YXRlOgogICAgICAgICBKSVQoVk0qLCBDb2RlQmxvY2sqID0gMCk7CiAKLSAgICAgICAgdm9pZCBw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyhQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZUxpbmtQYXNzKCk7Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsK
KyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyhQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXImKTsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29t
cGlsYXRpb25FZmZvcnQpOwogICAgICAgICAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5N
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorCisjaW5jbHVkZSAiQjNQQ1RvT3JpZ2luTWFwLmgi
CisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIERlbHRhQ29tcHJlc3Npb25CdWlsZGVy
IHsKK3B1YmxpYzoKKyAgICBEZWx0YUNvbXByZXNzaW9uQnVpbGRlcihzaXplX3QgbWF4U2l6ZSkK
KyAgICAgICAgOiBtX29mZnNldCgwKQorICAgICAgICAsIG1fbWF4U2l6ZShtYXhTaXplKQorICAg
IHsKKyAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyht
X21heFNpemUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB2b2lk
IHdyaXRlKFQgaXRlbSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb2Zmc2V0ICsg
c2l6ZW9mKFQpIDw9IG1fbWF4U2l6ZSk7CisgICAgICAgICpiaXR3aXNlX2Nhc3Q8VCo+KG1fYnVm
ZmVyICsgbV9vZmZzZXQpID0gaXRlbTsKKyAgICAgICAgbV9vZmZzZXQgKz0gc2l6ZW9mKFQpOwor
ICAgIH0KKworICAgIHVpbnQ4X3QqIG1fYnVmZmVyOyAKKyAgICBzaXplX3QgbV9vZmZzZXQ7Cisg
ICAgc2l6ZV90IG1fbWF4U2l6ZTsKK307CisKK2NsYXNzIERlbHRhQ29tcHJlc3NlaW9uUmVhZGVy
IHsKK3B1YmxpYzoKKyAgICBEZWx0YUNvbXByZXNzZWlvblJlYWRlcih1aW50OF90KiBidWZmZXIs
IHNpemVfdCBzaXplKQorICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAgICAgLCBtX3Np
emUoc2l6ZSkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgVCByZWFkKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fb2Zmc2V0ICsgc2l6ZW9mKFQpIDw9IG1fc2l6ZSk7CisgICAgICAgIFQgcmVzdWx0ID0gKmJp
dHdpc2VfY2FzdDxUKj4obV9idWZmZXIgKyBtX29mZnNldCk7CisgICAgICAgIG1fb2Zmc2V0ICs9
IHNpemVvZihUKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdWludDhfdCogbV9idWZmZXI7CisgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICBzaXplX3QgbV9v
ZmZzZXQ7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI6OmFwcGVuZEl0ZW0oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsLCBj
b25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQoreworICAgIGlmIChtX2NvZGVSYW5nZXMuc2l6
ZSgpKSB7CisgICAgICAgIGlmIChtX2NvZGVSYW5nZXMubGFzdCgpLmVuZCA9PSBsYWJlbCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9jb2RlUmFuZ2VzLmxhc3QoKS5lbmQgPSBsYWJl
bDsKKyAgICAgICAgaWYgKG1fY29kZVJhbmdlcy5sYXN0KCkuY29kZU9yaWdpbiA9PSBjb2RlT3Jp
Z2luIHx8ICFjb2RlT3JpZ2luKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
Y29kZVJhbmdlcy5hcHBlbmQoQ29kZVJhbmdle2xhYmVsLCBsYWJlbCwgY29kZU9yaWdpbn0pOwor
fQorCisjaWYgRlRMX1VTRVNfQjMKK1BDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6UENUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyKEIzOjpQQ1RvT3JpZ2luTWFwJiYgYjNQQ1RvT3JpZ2luTWFwKQorewor
ICAgIGZvciAoY29uc3QgQjM6OlBDVG9PcmlnaW5NYXA6Ok9yaWdpblJhbmdlJiBvcmlnaW5SYW5n
ZSA6IGIzUENUb09yaWdpbk1hcC5yYW5nZXMoKSkgeworICAgICAgICBERkc6Ok5vZGUqIG5vZGUg
PSBiaXR3aXNlX2Nhc3Q8REZHOjpOb2RlKj4ob3JpZ2luUmFuZ2Uub3JpZ2luLmRhdGEoKSk7Cisg
ICAgICAgIGlmIChub2RlKQorICAgICAgICAgICAgYXBwZW5kSXRlbShvcmlnaW5SYW5nZS5sYWJl
bCwgbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXBw
ZW5kSXRlbShvcmlnaW5SYW5nZS5sYWJlbCwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZh
dWx0Q29kZU9yaWdpbigpKTsKKyAgICB9Cit9CisjZW5kaWYKKworCitzdGF0aWMgY29uc3QgdWlu
dDhfdCBzZW50aW5lbFBDRGVsdGEgPSAwOworc3RhdGljIGNvbnN0IGludDhfdCBzZW50aW5lbEJ5
dGVjb2RlRGVsdGEgPSAwOworCitQQ1RvQ29kZU9yaWdpbk1hcDo6UENUb0NvZGVPcmlnaW5NYXAo
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiYgYnVpbGRlciwgTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikKK3sKKworICAgIGlmICghYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpKSB7CisgICAgICAg
IG1fcGNSYW5nZVN0YXJ0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKTsK
KyAgICAgICAgbV9wY1JhbmdlRW5kID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+Ojpt
YXgoKTsKKworICAgICAgICBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemUgPSAwOworICAgICAgICBt
X2NvbXByZXNzZWRQQ3MgPSBudWxscHRyOworCisgICAgICAgIG1fY29tcHJlc3NlZENvZGVPcmln
aW5zU2l6ZSA9IDA7CisgICAgICAgIG1fY29tcHJlc3NlZENvZGVPcmlnaW5zID0gbnVsbHB0cjsK
KworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG8gYSBmaW5hbCB0b3VjaC11
cCBvbiB0aGUgbGFzdCByYW5nZSBoZXJlIGJlY2F1c2Ugb2YgaG93IHdlIGdlbmVyYXRlIHRoZSB0
YWJsZS4KKyAgICAvLyBUaGUgZmluYWwgcmFuZ2UgKGlmIG5vbiBlbXB0eSkgd291bGQgYmUgaWdu
b3JlZCBpZiB3ZSBkaWRuJ3QgYXBwZW5kIGFueSAoYXJiaXRyYXJ5KQorICAgIC8vIHJhbmdlIGFz
IHRoZSBsYXN0IGl0ZW0gb2YgdGhlIHZlY3Rvci4KKyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXI6OkNvZGVSYW5nZSYgbGFzdCA9IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmxhc3QoKTsKKyAgICBp
ZiAoIShsYXN0LnN0YXJ0ID09IGxhc3QuZW5kKSkKKyAgICAgICAgYnVpbGRlci5tX2NvZGVSYW5n
ZXMuYXBwZW5kKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6Q29kZVJhbmdleyBsYXN0LmVuZCwg
bGFzdC5lbmQsIGxhc3QuY29kZU9yaWdpbiB9KTsgLy8gVGhpcyByYW5nZSB3aWxsIG5ldmVyIGFj
dHVhbGx5IGJlIGZvdW5kLCBidXQgaXQgZW5zdXJlcyB0aGUgcmVhbCBsYXN0IHJhbmdlIGlzIGZv
dW5kLgorCisgICAgRGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIgcGNDb21wcmVzc29yKChzaXplb2Yo
dWludHB0cl90KSArIHNpemVvZih1aW50OF90KSkgKiBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXpl
KCkpOworICAgIHZvaWQqIGxhc3RQQ1ZhbHVlID0gbnVsbHB0cjsKKyAgICBhdXRvIGJ1aWxkUENU
YWJsZSA9IFsmXSAodm9pZCogcGNWYWx1ZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChwY1Zh
bHVlID4gbGFzdFBDVmFsdWUpOworICAgICAgICB1aW50cHRyX3QgZGVsdGEgPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihwY1ZhbHVlKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxhc3RQQ1Zh
bHVlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGVsdGEgIT0gc2VudGluZWxQQ0RlbHRhKTsK
KyAgICAgICAgbGFzdFBDVmFsdWUgPSBwY1ZhbHVlOworICAgICAgICBpZiAoZGVsdGEgPiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+OjptYXgoKSkgeworICAgICAgICAgICAgcGNDb21wcmVz
c29yLndyaXRlPHVpbnQ4X3Q+KHNlbnRpbmVsUENEZWx0YSk7CisgICAgICAgICAgICBwY0NvbXBy
ZXNzb3Iud3JpdGU8dWludHB0cl90PihkZWx0YSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBwY0NvbXByZXNzb3Iud3JpdGU8dWludDhfdD4oc3RhdGljX2Nhc3Q8
dWludDhfdD4oZGVsdGEpKTsKKyAgICB9OworCisgICAgRGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIg
Y29kZU9yaWdpbkNvbXByZXNzb3IoKHNpemVvZihpbnRwdHJfdCkgKyBzaXplb2YoaW50OF90KSAr
IHNpemVvZihpbnQ4X3QpICsgc2l6ZW9mKElubGluZUNhbGxGcmFtZSopKSAqIGJ1aWxkZXIubV9j
b2RlUmFuZ2VzLnNpemUoKSk7CisgICAgQ29kZU9yaWdpbiBsYXN0Q29kZU9yaWdpbigwLCBudWxs
cHRyKTsKKyAgICBhdXRvIGJ1aWxkQ29kZU9yaWdpblRhYmxlID0gWyZdIChjb25zdCBDb2RlT3Jp
Z2luJiBjb2RlT3JpZ2luKSB7CisgICAgICAgIGludHB0cl90IGRlbHRhID0gc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkgLSBzdGF0aWNfY2FzdDxpbnRwdHJf
dD4obGFzdENvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGxhc3RDb2RlT3JpZ2lu
ID0gY29kZU9yaWdpbjsKKyAgICAgICAgaWYgKGRlbHRhID4gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ4X3Q+OjptYXgoKSB8fCBkZWx0YSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWlu
KCkgfHwgZGVsdGEgPT0gc2VudGluZWxCeXRlY29kZURlbHRhKSB7CisgICAgICAgICAgICBjb2Rl
T3JpZ2luQ29tcHJlc3Nvci53cml0ZTxpbnQ4X3Q+KHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSk7Cisg
ICAgICAgICAgICBjb2RlT3JpZ2luQ29tcHJlc3Nvci53cml0ZTxpbnRwdHJfdD4oZGVsdGEpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPGlu
dDhfdD4oc3RhdGljX2Nhc3Q8aW50OF90PihkZWx0YSkpOworCisgICAgICAgIGludDhfdCBoYXNJ
bmxpbmVDYWxsRnJhbWVCeXRlID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPyAxIDogMDsK
KyAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50OF90PihoYXNJbmxpbmVDYWxs
RnJhbWVCeXRlKTsKKyAgICAgICAgaWYgKGhhc0lubGluZUNhbGxGcmFtZUJ5dGUpIHsKKyAgICAg
ICAgICAgIGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPElubGluZUNhbGxGcmFtZSo+KGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBtX3BjUmFu
Z2VTdGFydCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxpbmtCdWZmZXIubG9jYXRpb25PZihi
dWlsZGVyLm1fY29kZVJhbmdlcy5maXJzdCgpLnN0YXJ0KS5kYXRhTG9jYXRpb24oKSk7CisgICAg
bV9wY1JhbmdlRW5kID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obGlua0J1ZmZlci5sb2NhdGlv
bk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmxhc3QoKS5lbmQpLmRhdGFMb2NhdGlvbigpKTsKKyAg
ICBtX3BjUmFuZ2VFbmQgLT0gMTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWls
ZGVyLm1fY29kZVJhbmdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBQQ1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXI6OkNvZGVSYW5nZSYgY29kZVJhbmdlID0gYnVpbGRlci5tX2NvZGVSYW5nZXNbaV07
CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVSYW5nZS5z
dGFydCkuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgIHZvaWQqIGVuZCA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZihjb2RlUmFuZ2UuZW5kKS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAgQVNTRVJUKG1f
cGNSYW5nZVN0YXJ0IDw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSk7CisgICAgICAg
IEFTU0VSVChtX3BjUmFuZ2VFbmQgPj0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kKSAtIDEp
OworICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQorICAgICAgICAgICAgQVNTRVJUKGkgPT0gYnVp
bGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpIC0gMSk7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAg
ICAgICAgIEFTU0VSVChsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYnVpbGRlci5tX2NvZGVSYW5nZXNb
aSAtIDFdLmVuZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3RhcnQpOworCisgICAgICAgIGJ1aWxkUENU
YWJsZShzdGFydCk7CisgICAgICAgIGJ1aWxkQ29kZU9yaWdpblRhYmxlKGNvZGVSYW5nZS5jb2Rl
T3JpZ2luKTsKKyAgICB9CisKKyAgICBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemUgPSBwY0NvbXBy
ZXNzb3IubV9vZmZzZXQ7CisgICAgbV9jb21wcmVzc2VkUENzID0gc3RhdGljX2Nhc3Q8dWludDhf
dCo+KGZhc3RSZWFsbG9jKHBjQ29tcHJlc3Nvci5tX2J1ZmZlciwgbV9jb21wcmVzc2VkUENCdWZm
ZXJTaXplKSk7CisKKyAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemUgPSBjb2RlT3JpZ2lu
Q29tcHJlc3Nvci5tX29mZnNldDsKKyAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2lucyA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhjb2RlT3JpZ2luQ29tcHJlc3Nvci5tX2J1ZmZl
ciwgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplKSk7Cit9CisKK1BDVG9Db2RlT3JpZ2luTWFw
Ojp+UENUb0NvZGVPcmlnaW5NYXAoKQoreworICAgIGlmIChtX2NvbXByZXNzZWRQQ3MpCisgICAg
ICAgIGZhc3RGcmVlKG1fY29tcHJlc3NlZFBDcyk7CisgICAgaWYgKG1fY29tcHJlc3NlZENvZGVP
cmlnaW5zKQorICAgICAgICBmYXN0RnJlZShtX2NvbXByZXNzZWRDb2RlT3JpZ2lucyk7Cit9CisK
K2RvdWJsZSBQQ1RvQ29kZU9yaWdpbk1hcDo6bWVtb3J5U2l6ZSgpCit7CisgICAgZG91YmxlIHNp
emUgPSAwOworICAgIHNpemUgKz0gbV9jb21wcmVzc2VkUENCdWZmZXJTaXplOworICAgIHNpemUg
Kz0gbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplOworICAgIHJldHVybiBzaXplOworfQorCitP
cHRpb25hbDxDb2RlT3JpZ2luPiBQQ1RvQ29kZU9yaWdpbk1hcDo6ZmluZFBDKHZvaWQqIHBjKSBj
b25zdAoreworICAgIHVpbnRwdHJfdCBwY0FzSW50ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
cGMpOworICAgIGlmICghKG1fcGNSYW5nZVN0YXJ0IDw9IHBjQXNJbnQgJiYgcGNBc0ludCA8PSBt
X3BjUmFuZ2VFbmQpKQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKworICAgIHVpbnRwdHJfdCBj
dXJyZW50UEMgPSAwOworICAgIENvZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oMCwgbnVsbHB0
cik7CisgICAgQ29kZU9yaWdpbiBwcmV2aW91c09yaWdpbjsKKworICAgIERlbHRhQ29tcHJlc3Nl
aW9uUmVhZGVyIHBjUmVhZGVyKG1fY29tcHJlc3NlZFBDcywgbV9jb21wcmVzc2VkUENCdWZmZXJT
aXplKTsKKyAgICBEZWx0YUNvbXByZXNzZWlvblJlYWRlciBjb2RlT3JpZ2luUmVhZGVyKG1fY29t
cHJlc3NlZENvZGVPcmlnaW5zLCBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemUpOworICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIHVpbnRwdHJfdCBwcmV2aW91c1BDID0gY3VycmVudFBDOwor
ICAgICAgICB7CisgICAgICAgICAgICB1aW50OF90IHZhbHVlID0gcGNSZWFkZXIucmVhZDx1aW50
OF90PigpOworICAgICAgICAgICAgdWludHB0cl90IGRlbHRhOworICAgICAgICAgICAgaWYgKHZh
bHVlID09IHNlbnRpbmVsUENEZWx0YSkKKyAgICAgICAgICAgICAgICBkZWx0YSA9IHBjUmVhZGVy
LnJlYWQ8dWludHB0cl90PigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRl
bHRhID0gdmFsdWU7CisgICAgICAgICAgICBjdXJyZW50UEMgKz0gZGVsdGE7CisgICAgICAgIH0K
KworICAgICAgICBDb2RlT3JpZ2luIHByZXZpb3VzT3JpZ2luID0gY3VycmVudENvZGVPcmlnaW47
CisgICAgICAgIHsKKyAgICAgICAgICAgIGludDhfdCB2YWx1ZSA9IGNvZGVPcmlnaW5SZWFkZXIu
cmVhZDxpbnQ4X3Q+KCk7CisgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZSA9PSBzZW50aW5lbEJ5dGVjb2RlRGVsdGEpCisgICAgICAgICAgICAgICAgZGVs
dGEgPSBjb2RlT3JpZ2luUmVhZGVyLnJlYWQ8aW50cHRyX3Q+KCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZGVsdGEgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4odmFsdWUpOwor
CisgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbi5ieXRlY29kZUluZGV4ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRpY19jYXN0PGludHB0cl90PihjdXJyZW50Q29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KSArIGRlbHRhKTsKKworICAgICAgICAgICAgaW50OF90IGhhc0lubGluZUZyYW1l
ID0gY29kZU9yaWdpblJlYWRlci5yZWFkPGludDhfdD4oKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGhhc0lubGluZUZyYW1lID09IDAgfHwgaGFzSW5saW5lRnJhbWUgPT0gMSk7CisgICAg
ICAgICAgICBpZiAoaGFzSW5saW5lRnJhbWUpCisgICAgICAgICAgICAgICAgY3VycmVudENvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblJlYWRlci5yZWFkPElubGluZUNhbGxG
cmFtZSo+KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3VycmVudENvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChwcmV2aW91c1BDKSB7CisgICAgICAgICAgICB1aW50cHRyX3Qgc3RhcnRPZlJhbmdlID0gcHJl
dmlvdXNQQzsKKyAgICAgICAgICAgIC8vIFdlIHN1YnRyYWN0IDEgYmVjYXVzZSB3ZSBnZW5lcmF0
ZSBlbmQgcG9pbnRzIGluY2x1c2l2ZWx5IGluIHRoaXMgdGFibGUsIGV2ZW4gdGhvdWdoIHdlIGFy
ZSBpbnRlcmVzdGVkIGluIHJhbmdlcyBvZiB0aGUgZm9ybTogW3ByZXZpb3VzUEMsIGN1cnJlbnRQ
QykKKyAgICAgICAgICAgIHVpbnRwdHJfdCBlbmRPZlJhbmdlID0gY3VycmVudFBDIC0gMTsKKyAg
ICAgICAgICAgIGlmIChzdGFydE9mUmFuZ2UgPD0gcGNBc0ludCAmJiBwY0FzSW50IDw9IGVuZE9m
UmFuZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+KHByZXZp
b3VzT3JpZ2luKTsgLy8gV2UgcmV0dXJuIHByZXZpb3VzT3JpZ2luIGhlcmUgYmVjYXVzZSBDb2Rl
T3JpZ2luJ3MgYXJlIG1hcHBlZCB0byB0aGUgc3RhcnRWYWx1ZSBvZiB0aGUgcmFuZ2UuCisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBOdWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFBDVG9Db2RlT3JpZ2luTWFwX2gKKyNkZWZpbmUgUENUb0NvZGVP
cmlnaW5NYXBfaAorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSA8d3RmL0JhZy5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgRlRMX1VT
RVNfQjMKK25hbWVzcGFjZSBCMyB7CisgICAgY2xhc3MgUENUb09yaWdpbk1hcDsKK30KKyNlbmRp
ZgorCitjbGFzcyBMaW5rQnVmZmVyOworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwor
CitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik7CisgICAgZnJpZW5kIGNsYXNzIFBDVG9Db2Rl
T3JpZ2luTWFwOworCitwdWJsaWM6CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkKKyAg
ICB7IH0KKworICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXImJiBvdGhlcikKKyAgICAgICAgOiBtX2NvZGVSYW5nZXMoV1RGTW92ZShvdGhlci5tX2Nv
ZGVSYW5nZXMpKQorICAgIHsgfQorCisjaWYgRlRMX1VTRVNfQjMKKyAgICBQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIoQjM6OlBDVG9PcmlnaW5NYXAmJik7CisjZW5kaWYKKworICAgIHZvaWQgYXBw
ZW5kSXRlbShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwsIGNvbnN0IENvZGVPcmlnaW4mKTsKKyAgICBz
dGF0aWMgQ29kZU9yaWdpbiBkZWZhdWx0Q29kZU9yaWdpbigpIHsgcmV0dXJuIENvZGVPcmlnaW4o
MCwgbnVsbHB0cik7IH0KKworcHJpdmF0ZToKKworICAgIHN0cnVjdCBDb2RlUmFuZ2UgeworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc3RhcnQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBlbmQ7CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICB9OworCisg
ICAgVmVjdG9yPENvZGVSYW5nZT4gbV9jb2RlUmFuZ2VzOworfTsKKworY2xhc3MgUENUb0NvZGVP
cmlnaW5NYXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBDVG9Db2RlT3JpZ2luTWFwKTsK
K3B1YmxpYzoKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcChQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIm
JiwgTGlua0J1ZmZlciYpOworICAgIH5QQ1RvQ29kZU9yaWdpbk1hcCgpOworCisgICAgT3B0aW9u
YWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKSBjb25zdDsKKworICAgIGRvdWJsZSBtZW1v
cnlTaXplKCk7CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6
ZTsKKyAgICBzaXplX3QgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplOworICAgIHVpbnQ4X3Qq
IG1fY29tcHJlc3NlZFBDczsKKyAgICB1aW50OF90KiBtX2NvbXByZXNzZWRDb2RlT3JpZ2luczsK
KyAgICB1aW50cHRyX3QgbV9wY1JhbmdlU3RhcnQ7CisgICAgdWludHB0cl90IG1fcGNSYW5nZUVu
ZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUENUb0NvZGVPcmlnaW5N
YXBfaCAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFBDUmFuZ2VzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50UENSYW5nZXMu
aAkocmV2aXNpb24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
UENSYW5nZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTAgQEAgQUxXQVlTX0lOTElO
RSBib29sIGlzTExJbnRQQyh2b2lkKiBwYykKICAgICByZXR1cm4gbGxpbnRTdGFydCA8PSBwY0Fz
SW50ICYmIHBjQXNJbnQgPD0gbGxpbnRFbmQ7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorc3RhdGlj
IGNvbnN0IEdQUlJlZyBMTEludFBDID0gR1BSSW5mbzo6cmVnVDQ7CisjZW5kaWYKKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkxMSW50CiAKICNlbmRpZiAvLyBMTEludFBDUmFuZ2VzX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20JKHJldmlzaW9uIDE5NTQ0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw3IEBA
IGlmIEpTVkFMVUU2NAogICAgICMgLSBUaGUgUEMgYmFzZSAob3IgUEIgZm9yIHNob3J0KSBtdXN0
IGJlIHN0b3JlZCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyLgogICAgICMgLSBDIGNhbGxzIGFy
ZSBzdGlsbCBnaXZlbiB0aGUgSW5zdHJ1Y3Rpb24qIHJhdGhlciB0aGFuIHRoZSBQQyBpbmRleC4K
ICAgICAjICAgVGhpcyByZXF1aXJlcyBhbiBhZGQgYmVmb3JlIHRoZSBjYWxsLCBhbmQgYSBzdWIg
YWZ0ZXIuCi0gICAgY29uc3QgUEMgPSB0NAorICAgIGNvbnN0IFBDID0gdDQgIyBXaGVuIGNoYW5n
aW5nIHRoaXMsIG1ha2Ugc3VyZSBMTEludFBDIGlzIHVwIHRvIGRhdGUgaW4gTExJbnRQQ1Jhbmdl
cy5oCiAgICAgaWYgQVJNNjQKICAgICAgICAgY29uc3QgUEIgPSBjc3I3CiAgICAgICAgIGNvbnN0
IHRhZ1R5cGVOdW1iZXIgPSBjc3I4CkBAIC0yOTAsNyArMjkwLDcgQEAgaWYgSlNWQUxVRTY0CiAg
ICAgZW5kCiAKIGVsc2UKLSAgICBjb25zdCBQQyA9IHQ0CisgICAgY29uc3QgUEMgPSB0NCAjIFdo
ZW4gY2hhbmdpbmcgdGhpcywgbWFrZSBzdXJlIExMSW50UEMgaXMgdXAgdG8gZGF0ZSBpbiBMTElu
dFBDUmFuZ2VzLmgKICAgICBtYWNybyBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24ob2Zmc2V0LCBkZXN0
KQogICAgICAgICBsb2FkaXMgb2Zmc2V0ICogNFtQQ10sIGRlc3QKICAgICBlbmQKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3Bw
CShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1
ZGUgIkxMSW50UENSYW5nZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrU2V0LmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNs
dWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlZNLmgiCkBAIC00OSw3ICs1MCw2IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogc3RhdGlj
IGRvdWJsZSBzTnVtVG90YWxTdGFja1RyYWNlcyA9IDA7Ci1zdGF0aWMgZG91YmxlIHNOdW1VbnZl
cmlmaWVkU3RhY2tUcmFjZXMgPSAwOwogc3RhdGljIGRvdWJsZSBzTnVtVG90YWxXYWxrcyA9IDA7
CiBzdGF0aWMgZG91YmxlIHNOdW1GYWlsZWRXYWxrcyA9IDA7CiBzdGF0aWMgY29uc3QgdWludDMy
X3Qgc051bVdhbGtSZXBvcnRpbmdGcmVxdWVuY3kgPSA1MDsKQEAgLTU4LDYgKzU4LDggQEAgc3Rh
dGljIGNvbnN0IGJvb2wgc1JlcG9ydFN0YXRzT25seVdoZW5UaAogc3RhdGljIGNvbnN0IGJvb2wg
c1JlcG9ydFN0YXRzID0gZmFsc2U7CiAKIHVzaW5nIEZyYW1lVHlwZSA9IFNhbXBsaW5nUHJvZmls
ZXI6OkZyYW1lVHlwZTsKK3VzaW5nIFVucHJvY2Vzc2VkRnJhbWVUeXBlID0gU2FtcGxpbmdQcm9m
aWxlcjo6VW5wcm9jZXNzZWRGcmFtZVR5cGU7Cit1c2luZyBVbnByb2Nlc3NlZFN0YWNrRnJhbWUg
PSBTYW1wbGluZ1Byb2ZpbGVyOjpVbnByb2Nlc3NlZFN0YWNrRnJhbWU7CiAKIEFMV0FZU19JTkxJ
TkUgc3RhdGljIHZvaWQgcmVwb3J0U3RhdHMoKQogewpAQCAtNjUsOCArNjcsNiBAQCBBTFdBWVNf
SU5MSU5FIHN0YXRpYyB2b2lkIHJlcG9ydFN0YXRzKCkKICAgICAgICAgaWYgKCFzUmVwb3J0U3Rh
dHNPbmx5V2hlblRoZXlyZUFib3ZlVGhyZXNob2xkIHx8IChzTnVtRmFpbGVkV2Fsa3MgLyBzTnVt
VG90YWxXYWxrcyA+IHNXYWxrRXJyb3JQZXJjZW50YWdlKSkgewogICAgICAgICAgICAgZGF0YUxv
Z0YoIk51bSB0b3RhbCB3YWxrczogJWxsdS4gRmFpbGVkIHdhbGtzIHBlcmNlbnQ6ICVsZlxuIiwK
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc051bVRvdGFsV2Fsa3MpLCBz
TnVtRmFpbGVkV2Fsa3MgLyBzTnVtVG90YWxXYWxrcyk7Ci0gICAgICAgICAgICBkYXRhTG9nRigi
VG90YWwgc3RhY2sgdHJhY2VzOiAlbGx1LiBOZWVkcyB2ZXJpZmljYXRpb24gcGVyY2VudDogJWxm
XG4iLAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzTnVtVG90YWxTdGFj
a1RyYWNlcyksIHNOdW1VbnZlcmlmaWVkU3RhY2tUcmFjZXMgLyBzTnVtVG90YWxTdGFja1RyYWNl
cyk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04MiwzMyArODIsMjAgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAKLSAgICBzaXplX3Qgd2FsayhWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZT4mIHN0YWNrVHJhY2UsIGJvb2wmIGRpZFJ1bk91dE9mU3BhY2UsIGJvb2wmIHN0YWNr
dHJhY2VOZWVkc1ZlcmlmaWNhdGlvbikKKyAgICBzaXplX3Qgd2FsayhWZWN0b3I8VW5wcm9jZXNz
ZWRTdGFja0ZyYW1lPiYgc3RhY2tUcmFjZSwgYm9vbCYgZGlkUnVuT3V0T2ZTcGFjZSkKICAgICB7
Ci0gICAgICAgIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICBp
ZiAoc1JlcG9ydFN0YXRzKQogICAgICAgICAgICAgc051bVRvdGFsV2Fsa3MrKzsKICAgICAgICAg
cmVzZXRBdE1hY2hpbmVGcmFtZSgpOwogICAgICAgICBzaXplX3QgbWF4U3RhY2tUcmFjZVNpemUg
PSBzdGFja1RyYWNlLnNpemUoKTsKICAgICAgICAgd2hpbGUgKCFpc0F0VG9wKCkgJiYgIW1fYmFp
bGluZ091dCAmJiBtX2RlcHRoIDwgbWF4U3RhY2tUcmFjZVNpemUpIHsKLSAgICAgICAgICAgIHdo
aWxlIChtX2lubGluZUNhbGxGcmFtZSAmJiBtX2RlcHRoIDwgbWF4U3RhY2tUcmFjZVNpemUpIHsK
LSAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5saW5lQ2FsbEZyYW1l
LT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChpc1ZhbGlkQ29kZUJsb2NrKGNvZGVCbG9jaykpOwotICAgICAgICAgICAgICAgIHN0YWNrVHJh
Y2VbbV9kZXB0aF0gPSBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lKFNhbXBsaW5nUHJvZmls
ZXI6OkZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpKTsKLSAgICAgICAgICAgICAgICBtX2RlcHRoKys7Ci0gICAgICAgICAgICAgICAgbV9p
bmxpbmVDYWxsRnJhbWUgPSBtX2lubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNh
bGxGcmFtZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fZGVwdGggPj0gbWF4
U3RhY2tUcmFjZVNpemUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICAg
ICAgaWYgKGlzVmFsaWRDb2RlQmxvY2soY29kZUJsb2NrKSkgewotICAgICAgICAgICAgICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsK
LSAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gU2FtcGxpbmdQcm9maWxlcjo6
U3RhY2tGcmFtZShGcmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0YWJsZSxleGVjdXRhYmxlKTsKKyAg
ICAgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkQ29kZUJsb2NrKGNvZGVCbG9j
aykpOworICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0gPSBVbnByb2Nlc3NlZFN0
YWNrRnJhbWUoY29kZUJsb2NrLCBtX2NhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0
aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2sgPT0g
bnVsbHB0cik7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB1bnNhZmVDYWxsZWUgPSBtX2NhbGxG
cmFtZS0+dW5zYWZlQ2FsbGVlKCk7Ci0gICAgICAgICAgICAgICAgc3RhY2tUcmFjZVttX2RlcHRo
XSA9IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWUoRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2Fs
bGVlLCBKU1ZhbHVlOjplbmNvZGUodW5zYWZlQ2FsbGVlKSk7CisgICAgICAgICAgICAgICAgc3Rh
Y2tUcmFjZVttX2RlcHRoXSA9IFVucHJvY2Vzc2VkU3RhY2tGcmFtZShKU1ZhbHVlOjplbmNvZGUo
dW5zYWZlQ2FsbGVlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2RlcHRoKys7CiAg
ICAgICAgICAgICBhZHZhbmNlVG9QYXJlbnRGcmFtZSgpOwpAQCAtMTM4LDggKzEyNSw2IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHJlc2V0QXRNYWNoaW5lRnJhbWUoKQogICAgIHsKLSAgICAgICAg
bV9pbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyOwotCiAgICAgICAgIGlmIChpc0F0VG9wKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKQEAgLTE1MSw5ICsxMzYsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAg
Ly8gSWYgdGhlIGZyYW1lIGRvZXNuJ3QgaGF2ZSBhIGNvZGUgYmxvY2ssIHRoZW4gaXQncyBub3Qg
YSAKLSAgICAgICAgLy8gREZHL0ZUTCBmcmFtZSB3aGljaCBtZWFucyB3ZSdyZSBub3QgYW4gaW5s
aW5lZCBmcmFtZS4KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CiAgICAgICAgIGlmICghY29kZUJsb2NrKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTY0LDI1ICsxNDYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNOdW1GYWls
ZWRXYWxrcysrOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8g
SWYgdGhlIGNvZGUgYmxvY2sgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBvcmlnaW5zLCB0aGVuIHRo
ZXJlJ3Mgbm8KLSAgICAgICAgLy8gaW5saW5pbmcuIEhlbmNlLCB3ZSdyZSBub3QgYXQgYW4gaW5s
aW5lZCBmcmFtZS4KLSAgICAgICAgaWYgKCFjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ2FsbFNpdGVJbmRleCBpbmRleCA9IG1fY2Fs
bEZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7Ci0gICAgICAgIGlmICghY29kZUJsb2NrLT5jYW5HZXRD
b2RlT3JpZ2luKGluZGV4KSkgewotICAgICAgICAgICAgLy8gRklYTUU6Ci0gICAgICAgICAgICAv
LyBGb3IgdGhlIG1vc3QgcGFydCwgd2Ugb25seSBmYWlsIGhlcmUgd2hlbiB3ZSdyZSBsb29raW5n
Ci0gICAgICAgICAgICAvLyBhdCB0aGUgdG9wIG1vc3QgY2FsbCBmcmFtZS4gQWxsIG90aGVyIHBh
cmVudCBjYWxsIGZyYW1lcwotICAgICAgICAgICAgLy8gc2hvdWxkIGhhdmUgc2V0IHRoZSBDYWxs
U2l0ZUluZGV4IHdoZW4gbWFraW5nIGEgY2FsbC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyBXZSBzaG91bGQgcmVzb3J0IHRvIGdldHRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgUEM9
PkNvZGVPcmlnaW4gbWFwcGluZwotICAgICAgICAgICAgLy8gb25jZSB3ZSBpbXBsZW1lbnQgaXQ6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI2MjkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2lubGluZUNhbGxGcmFtZSA9IGNvZGVC
bG9jay0+Y29kZU9yaWdpbihpbmRleCkuaW5saW5lQ2FsbEZyYW1lOwotI2VuZGlmIC8vICFFTkFC
TEUoREZHX0pJVCkKICAgICB9CiAKICAgICBib29sIGlzVmFsaWRGcmFtZVBvaW50ZXIoRXhlY1N0
YXRlKiBleGVjKQpAQCAtMjEzLDE0ICsxNzYsMTIgQEAgcHJpdmF0ZToKICAgICBjb25zdCBMb2Nr
SG9sZGVyJiBtX2NvZGVCbG9ja1NldExvY2tlcjsKICAgICBjb25zdCBMb2NrSG9sZGVyJiBtX21h
Y2hpbmVUaHJlYWRzTG9ja2VyOwogICAgIGJvb2wgbV9iYWlsaW5nT3V0IHsgZmFsc2UgfTsKLSAg
ICBJbmxpbmVDYWxsRnJhbWUqIG1faW5saW5lQ2FsbEZyYW1lOwogICAgIHNpemVfdCBtX2RlcHRo
IHsgMCB9OwogfTsKIAogU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihWTSYgdm0s
IFJlZlB0cjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNoKQogICAgIDogbV92bSh2bSkKICAgICAsIG1f
c3RvcHdhdGNoKFdURk1vdmUoc3RvcHdhdGNoKSkKLSAgICAsIG1faW5kZXhPZk5leHRTdGFja1Ry
YWNlVG9WZXJpZnkoMCkKICAgICAsIG1fdGltaW5nSW50ZXJ2YWwoc3RkOjpjaHJvbm86Om1pY3Jv
c2Vjb25kcygxMDAwKSkKICAgICAsIG1fdG90YWxUaW1lKDApCiAgICAgLCBtX3RpbWVyUXVldWUo
V29ya1F1ZXVlOjpjcmVhdGUoImpzYy5zYW1wbGluZy1wcm9maWxlci5xdWV1ZSIsIFdvcmtRdWV1
ZTo6VHlwZTo6U2VyaWFsLCBXb3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlKSkKQEAgLTI1
NiwyMyArMjE3LDI3IEBAIFNhbXBsaW5nUHJvZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIoVk0mIHYK
ICAgICAgICAgICAgICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5kZWQsIHdl
IGNhbid0IGRvIHRoaW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFkCiAgICAg
ICAgICAgICAgICAgLy8gbWF5IGJlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2NrLgogICAgICAgICAg
ICAgICAgIEV4ZWNTdGF0ZSogY2FsbEZyYW1lOwotICAgICAgICAgICAgICAgIHZvaWQqIHBjOwor
ICAgICAgICAgICAgICAgIHZvaWQqIG1hY2hpbmVQQzsKKyAgICAgICAgICAgICAgICBib29sIHRv
cEZyYW1lSXNMTEludCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHZvaWQqIGxsaW50UEM7CiAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgICAgICAgICAgICAgICAgICBtX2pzY0V4ZWN1
dGlvblRocmVhZC0+Z2V0UmVnaXN0ZXJzKHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAgICAgICAg
IGNhbGxGcmFtZSA9IHN0YXRpY19jYXN0PEV4ZWNTdGF0ZSo+KHJlZ2lzdGVycy5mcmFtZVBvaW50
ZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBjID0gcmVnaXN0ZXJzLmluc3RydWN0aW9uUG9p
bnRlcigpOworICAgICAgICAgICAgICAgICAgICBtYWNoaW5lUEMgPSByZWdpc3RlcnMuaW5zdHJ1
Y3Rpb25Qb2ludGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGxsaW50UEMgPSByZWdpc3RlcnMu
bGxpbnRQQygpOwogICAgICAgICAgICAgICAgICAgICBtX2pzY0V4ZWN1dGlvblRocmVhZC0+ZnJl
ZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogTGV0cyBoYXZlIGEgd2F5IG9mIGRldGVjdGluZyB3aGVuIHdlJ3JlIHBhcnNp
bmcgY29kZS4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUyNzYxCi0gICAgICAgICAgICAgICAgaWYgKG1fdm0uZXhlY3V0YWJsZUFs
bG9jYXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2Vy
LCBwYykpIHsKKyAgICAgICAgICAgICAgICBpZiAobV92bS5leGVjdXRhYmxlQWxsb2NhdG9yLmlz
VmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIsIG1hY2hpbmVQ
QykpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdm0uaXNFeGVjdXRpbmdJblJlZ0V4cEpJ
VCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIGV4ZWN1dGluZyBh
IHJlZ2V4cC4gTGV0cyBnYXRoZXIgbW9yZSBpbnRlcnN0aW5nIGRhdGEuCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUy
NzI5CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBtX3ZtLnRvcENhbGxGcmFt
ZTsgLy8gV2UgbmVlZCB0byBkbyB0aGlzIG9yIGVsc2Ugd2UnZCBmYWlsIG91ciBiYWNrdHJhY2Ug
dmFsaWRhdGlvbiBiL2MgdGhpcyBpc24ndCBhIEpTIGZyYW1lLgogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChMTEludDo6aXNMTEludFBDKHBjKSkgewor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTExJbnQ6OmlzTExJbnRQQyhtYWNoaW5lUEMpKSB7
CisgICAgICAgICAgICAgICAgICAgIHRvcEZyYW1lSXNMTEludCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlJ3JlIG9rYXkgdG8gdGFrZSBhIG5vcm1hbCBzdGFjayB0cmFjZSB3aGVu
IHRoZSBQQwogICAgICAgICAgICAgICAgICAgICAvLyBpcyBpbiBMTEludCBjb2RlLgogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CkBAIC0yODQsMTAgKzI0OSw5IEBAIFNhbXBsaW5nUHJvZmlsZXI6
OlNhbXBsaW5nUHJvZmlsZXIoVk0mIHYKICAgICAgICAgICAgICAgICBzaXplX3Qgd2Fsa1NpemU7
CiAgICAgICAgICAgICAgICAgYm9vbCB3YXNWYWxpZFdhbGs7CiAgICAgICAgICAgICAgICAgYm9v
bCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlOwotICAgICAgICAgICAgICAgIGJvb2wgc3RhY2t0cmFj
ZU5lZWRzVmVyaWZpY2F0aW9uOwogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgRnJhbWVXYWxrZXIgd2Fsa2VyKGNhbGxGcmFtZSwgbV92bSwgY29kZUJsb2NrU2V0TG9ja2Vy
LCBtYWNoaW5lVGhyZWFkc0xvY2tlcik7Ci0gICAgICAgICAgICAgICAgICAgIHdhbGtTaXplID0g
d2Fsa2VyLndhbGsobV9jdXJyZW50RnJhbWVzLCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlLCBzdGFj
a3RyYWNlTmVlZHNWZXJpZmljYXRpb24pOworICAgICAgICAgICAgICAgICAgICB3YWxrU2l6ZSA9
IHdhbGtlci53YWxrKG1fY3VycmVudEZyYW1lcywgZGlkUnVuT3V0T2ZWZWN0b3JTcGFjZSk7CiAg
ICAgICAgICAgICAgICAgICAgIHdhc1ZhbGlkV2FsayA9IHdhbGtlci53YXNWYWxpZFdhbGsoKTsK
ICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5OCwyMSArMjYyLDE2IEBAIFNhbXBsaW5nUHJvZmls
ZXI6OlNhbXBsaW5nUHJvZmlsZXIoVk0mIHYKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQn
ZCBiZSBpbnRlcmVzdGluZyB0byB0YWtlIGRhdGEgYWJvdXQgdGhlIHByb2dyYW0ncyBzdGF0ZSB3
aGVuCiAgICAgICAgICAgICAgICAgLy8gd2UgZmFpbCB0byB0YWtlIGEgc3RhY2sgdHJhY2U6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NTgKICAgICAgICAgICAg
ICAgICBpZiAod2FzVmFsaWRXYWxrICYmIHdhbGtTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzUmVwb3J0U3RhdHMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNSZXBvcnRTdGF0
cykKICAgICAgICAgICAgICAgICAgICAgICAgIHNOdW1Ub3RhbFN0YWNrVHJhY2VzKys7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNOdW1VbnZlcmlmaWVkU3RhY2tUcmFjZXMrKzsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8U3RhY2tGcmFt
ZT4gc3RhY2tUcmFjZTsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFVucHJvY2Vzc2VkU3Rh
Y2tGcmFtZT4gc3RhY2tUcmFjZTsKICAgICAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZS5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHdhbGtTaXplKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB3YWxrU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBTdGFja0ZyYW1lIGZyYW1lID0gbV9jdXJyZW50RnJhbWVzW2ldOwotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhY2tUcmFjZS51bmNoZWNrZWRBcHBlbmQoZnJhbWUpOyAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChmcmFtZS5mcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpWZXJpZmllZEV4
ZWN1dGFibGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWVuRXhlY3V0YWJsZXMu
YWRkKGZyYW1lLnUudmVyaWZpZWRFeGVjdXRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFVucHJvY2Vzc2VkU3RhY2tGcmFtZSBmcmFtZSA9IG1fY3VycmVudEZyYW1lc1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YWNrVHJhY2UudW5jaGVja2VkQXBwZW5kKGZyYW1lKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhY2tUcmFjZXMu
YXBwZW5kKFN0YWNrVHJhY2V7IHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbiwgbm93VGltZSwg
V1RGTW92ZShzdGFja1RyYWNlKSB9KTsKKyAgICAgICAgICAgICAgICAgICAgbV91bnByb2Nlc3Nl
ZFN0YWNrVHJhY2VzLmFwcGVuZChVbnByb2Nlc3NlZFN0YWNrVHJhY2UgeyBub3dUaW1lLCBtYWNo
aW5lUEMsIHRvcEZyYW1lSXNMTEludCwgbGxpbnRQQywgV1RGTW92ZShzdGFja1RyYWNlKSB9KTsK
IAogICAgICAgICAgICAgICAgICAgICBpZiAoZGlkUnVuT3V0T2ZWZWN0b3JTcGFjZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lcy5ncm93KG1fY3VycmVudEZyYW1lcy5z
aXplKCkgKiAxLjI1KTsKQEAgLTMzMiw2ICsyOTEsMjkgQEAgU2FtcGxpbmdQcm9maWxlcjo6flNh
bXBsaW5nUHJvZmlsZXIoKQogewogfQogCitzdGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCB0
cnlHZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJpdHMsIENvZGVCbG9jayogY29kZUJsb2NrLCBi
b29sJiBpc1ZhbGlkKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFjb2RlQmxvY2stPmhhc0NvZGVP
cmlnaW5zKCkpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4ID0gYml0czsKKyAgICBpZiAoYnl0ZWNvZGVJbmRleCA8IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25Db3VudCgpKSB7CisgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAgICByZXR1cm4gYnl0
ZWNvZGVJbmRleDsKKyAgICB9CisgICAgaXNWYWxpZCA9IGZhbHNlOworICAgIHJldHVybiAwOwor
I2Vsc2UKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8SW5zdHJ1
Y3Rpb24qPihiaXRzKTsKKyAgICBpZiAoaW5zdHJ1Y3Rpb24gPD0gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICYmIGluc3RydWN0aW9uIDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5iZWdpbigpICsgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpIHsKKyAgICAgICAgaXNW
YWxpZCA9IHRydWU7CisgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICB9CisgICAgaXNWYWxpZCA9IGZhbHNlOworICAgIHJl
dHVybiAwOworI2VuZGlmCit9CisKIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcygpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBj
YWxsZWQgZnJvbSB0aGUgSlNDIGV4ZWN1dGlvbiB0aHJlYWQuCkBAIC0zNDAsMjIgKzMyMiwzMCBA
QCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgVGlueUJsb29t
RmlsdGVyIGZpbHRlciA9IG1fdm0uaGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLmZpbHRlcigp
OwogICAgIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1NldCA9IG1fdm0uaGVhcC5vYmplY3RT
cGFjZSgpLmJsb2NrcygpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleE9mTmV4dFN0
YWNrVHJhY2VUb1ZlcmlmeTsgaSA8IG1fc3RhY2tUcmFjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAg
ICAgU3RhY2tUcmFjZSYgc3RhY2tUcmFjZSA9IG1fc3RhY2tUcmFjZXNbaV07IAotICAgICAgICBp
ZiAoIXN0YWNrVHJhY2UubmVlZHNWZXJpZmljYXRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgc3RhY2tUcmFjZS5uZWVkc1ZlcmlmaWNhdGlvbiA9IGZhbHNlOwotCi0gICAgICAg
IGZvciAoU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA6IHN0YWNrVHJhY2UuZnJhbWVzKSB7Ci0gICAg
ICAgICAgICBpZiAoc3RhY2tGcmFtZS5mcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVk
Q2FsbGVlKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tGcmFtZS5mcmFt
ZVR5cGUgPT0gRnJhbWVUeXBlOjpWZXJpZmllZEV4ZWN1dGFibGUpOwotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgIGZvciAoVW5wcm9jZXNzZWRTdGFja1RyYWNlJiB1bnByb2Nlc3NlZFN0
YWNrVHJhY2UgOiBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMpIHsKKyAgICAgICAgbV9zdGFja1Ry
YWNlcy5hcHBlbmQoU3RhY2tUcmFjZSgpKTsKKyAgICAgICAgU3RhY2tUcmFjZSYgc3RhY2tUcmFj
ZSA9IG1fc3RhY2tUcmFjZXMubGFzdCgpOworICAgICAgICBzdGFja1RyYWNlLnRpbWVzdGFtcCA9
IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS50aW1lc3RhbXA7CisKKyAgICAgICAgYXV0byBhcHBlbmRD
b2RlQmxvY2sgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KSB7CisgICAgICAgICAgICBzdGFja1RyYWNlLmZyYW1lcy5hcHBlbmQoU3RhY2tGcmFtZShj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSk7CisKKyAgICAgICAgICAgIGlmIChieXRlY29k
ZUluZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBpbnQgZGl2b3Q7CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0OworICAgICAgICAg
ICAgICAgIGludCBlbmRPZmZzZXQ7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5leHByZXNz
aW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4LCBkaXZvdCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZS5mcmFtZXMubGFz
dCgpLmxpbmVOdW1iZXIsIHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKS5jb2x1bW5OdW1iZXIpOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zZWVuRXhlY3V0YWJsZXMuYWRkKGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCkpOworICAgICAgICB9OwogCi0gICAgICAgICAgICBKU1ZhbHVl
IGNhbGxlZSA9IEpTVmFsdWU6OmRlY29kZShzdGFja0ZyYW1lLnUudW52ZXJpZmllZENhbGxlZSk7
CisgICAgICAgIGF1dG8gYXBwZW5kVW52ZXJpZmllZENhbGxlZSA9IFsmXSAoSlNWYWx1ZSBjYWxs
ZWUpIHsKKyAgICAgICAgICAgIHN0YWNrVHJhY2UuZnJhbWVzLmFwcGVuZChTdGFja0ZyYW1lKCkp
OworICAgICAgICAgICAgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA9IHN0YWNrVHJhY2UuZnJhbWVz
Lmxhc3QoKTsKICAgICAgICAgICAgIGlmICghSGVhcDo6aXNWYWx1ZUdDT2JqZWN0KGZpbHRlciwg
bWFya2VkQmxvY2tTZXQsIGNhbGxlZSkpIHsKICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZy
YW1lVHlwZSA9IEZyYW1lVHlwZTo6VW5rbm93bjsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEpT
Q2VsbCogY2FsbGVlQ2VsbCA9IGNhbGxlZS5hc0NlbGwoKTsKQEAgLTM3MiwyMiArMzYyLDkwIEBA
IHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKIAogICAgICAgICAgICAg
aWYgKGNhbGxlZUNlbGwtPnR5cGUoKSAhPSBKU0Z1bmN0aW9uVHlwZSkgewogICAgICAgICAgICAg
ICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gZnJhbWVUeXBlRnJvbUNhbGxEYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBzdGF0aWNfY2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbGVlQ2VsbCktPmV4ZWN1dGFibGUoKTsKICAgICAgICAgICAgIGlm
ICghZXhlY3V0YWJsZSkgewogICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0g
ZnJhbWVUeXBlRnJvbUNhbGxEYXRhKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBl
eGVjdXRhYmxlKSk7Ci0gICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlw
ZTo6VmVyaWZpZWRFeGVjdXRhYmxlOwotICAgICAgICAgICAgc3RhY2tGcmFtZS51LnZlcmlmaWVk
RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlw
ZSA9IEZyYW1lVHlwZTo6RXhlY3V0YWJsZTsKKyAgICAgICAgICAgIHN0YWNrRnJhbWUuZXhlY3V0
YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBtX3NlZW5FeGVjdXRhYmxlcy5hZGQoZXhl
Y3V0YWJsZSk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gUHJlcGVuZCBpbmxpbmUgZnJhbWUg
aWYgbmVlZGVkLgorICAgICAgICAvLyBBbHNvLCBnYXRoZXIgbG9jYXRpb24gaW5mb3JtYXRpb24g
YWJvdXQKKyAgICAgICAgLy8gd2hlcmUgdGhlIHRvcCBmcmFtZSBpcyBleGVjdXRpbmcuCisgICAg
ICAgIHNpemVfdCBzdGFydEluZGV4ID0gMDsKKyAgICAgICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tU
cmFjZS5mcmFtZXMuc2l6ZSgpICYmIHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXNbMF0uZnJh
bWVUeXBlID09IFVucHJvY2Vzc2VkRnJhbWVUeXBlOjpWZXJpZmllZENvZGVCbG9jaykgeworICAg
ICAgICAgICAgQ29kZUJsb2NrKiB0b3BDb2RlQmxvY2sgPSB1bnByb2Nlc3NlZFN0YWNrVHJhY2Uu
ZnJhbWVzWzBdLnUudmVyaWZpZWRDb2RlQmxvY2s7CisgICAgICAgICAgICBpZiAodW5wcm9jZXNz
ZWRTdGFja1RyYWNlLnRvcEZyYW1lSXNMTEludCkgeworICAgICAgICAgICAgICAgIC8vIFdlIHJl
dXNlIExMSW50IENvZGVCbG9ja3MgZm9yIHRoZSBiYXNlbGluZSBKSVQsIHNvIHdlIG5lZWQgdG8g
Y2hlY2sgZm9yIGJvdGggaml0IHR5cGVzLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQg
YWxzbyBiZSBmYWxzZSBmb3IgdmFyaW91cyByZWFzb25zIChrbm93biBhbmQgdW5rbm93biksIGV2
ZW4gdGhvdWdoCisgICAgICAgICAgICAgICAgLy8gaXQncyBzdXBlciB1bmxpa2VseS4gT25lIHJl
YXNvbiB0aGF0IHRoaXMgY2FuIGJlIGZhbHNlIGlzIHdoZW4gd2UgdGhyb3cgZnJvbSBhIERGRyBm
cmFtZSwKKyAgICAgICAgICAgICAgICAvLyBhbmQgd2UgZW5kIHVwIGhhdmluZyB0byB1bndpbmQg
cGFzdCBhIFZNRW50cnlGcmFtZSwgd2Ugd2lsbCBlbmQgdXAgZXhlY3V0aW5nCisgICAgICAgICAg
ICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uLiBTbyB3
ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCisgICAgICAgICAgICAgICAgLy8gYnkgaWdub3Jp
bmcgaXQuCisgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IDA7CisgICAg
ICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkludGVy
cHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1ZhbGlkUEM7CisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGJpdHM7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAg
ICAgICAgICAgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOworI2Vsc2UKKyAgICAgICAgICAg
ICAgICAgICAgYml0cyA9IGJpdHdpc2VfY2FzdDx1bnNpZ25lZD4odW5wcm9jZXNzZWRTdGFja1Ry
YWNlLmxsaW50UEMpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXgg
PSB0cnlHZXRCeXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9jaywgaXNWYWxpZFBDKTsKKwor
ICAgICAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0oaXNWYWxpZFBDKTsgLy8gRklYTUU6IGRv
IHNvbWV0aGluZyB3aXRoIHRoaXMgaW5mbyBmb3IgdGhlIHdlYiBpbnNwZWN0b3I6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM0NTUKKworICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRDb2RlQmxvY2sodG9wQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIGlmIChPcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gdG9wQ29k
ZUJsb2NrLT5maW5kUEModW5wcm9jZXNzZWRTdGFja1RyYWNlLnRvcFBDKSkgeworICAgICAgICAg
ICAgICAgIC8vZGF0YUxvZygiRm91bmQgY29kZSBvcmlnaW46ICIsICpjb2RlT3JpZ2luLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLT53YWxrVXBJbmxpbmVTdGFjayhbJl0gKGNv
bnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
Q29kZUJsb2NrKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID8gY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpIDogdG9wQ29kZUJsb2NrLCBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IHN0YXJ0SW5kZXggPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCB1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVz
LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUmIHVucHJv
Y2Vzc2VkU3RhY2tGcmFtZSA9IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXNbaV07CisgICAg
ICAgICAgICBpZiAodW5wcm9jZXNzZWRTdGFja0ZyYW1lLmZyYW1lVHlwZSA9PSBVbnByb2Nlc3Nl
ZEZyYW1lVHlwZTo6VmVyaWZpZWRDb2RlQmxvY2spIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHVucHJvY2Vzc2VkU3RhY2tGcmFtZS51LnZlcmlmaWVkQ29kZUJsb2Nr
OworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHVucHJvY2Vz
c2VkU3RhY2tGcmFtZS5jYWxsU2l0ZUluZGV4OworCisgICAgICAgICAgICAgICAgYXV0byBhcHBl
bmRDb2RlQmxvY2tOb0lubGluaW5nID0gWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c1ZhbGlkUEM7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2RlQmxvY2ss
IHRyeUdldEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVJbmRleC5iaXRzKCksIGNvZGVCbG9jaywgaXNW
YWxpZFBDKSk7CisgICAgICAgICAgICAgICAgfTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAg
ICAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5jb2RlT3JpZ2luKGNhbGxT
aXRlSW5kZXgpLndhbGtVcElubGluZVN0YWNrKFsmXSAoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9y
aWdpbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSA/IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNl
bGluZUNvZGVCbG9jay5nZXQoKSA6IGNvZGVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2RlQmxvY2ssIHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9ja05vSW5saW5pbmcoKTsKKyNl
bHNlCisgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrTm9JbmxpbmluZygpOworI2VuZGlm
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVCh1bnByb2Nlc3Nl
ZFN0YWNrRnJhbWUuZnJhbWVUeXBlID09IFVucHJvY2Vzc2VkRnJhbWVUeXBlOjpVbnZlcmlmaWVk
Q2FsbGVlKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRVbnZlcmlmaWVkQ2FsbGVlKEpTVmFsdWU6
OmRlY29kZSh1bnByb2Nlc3NlZFN0YWNrRnJhbWUudS51bnZlcmlmaWVkQ2FsbGVlKSk7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2luZGV4T2ZOZXh0U3RhY2tUcmFj
ZVRvVmVyaWZ5ID0gbV9zdGFja1RyYWNlcy5zaXplKCk7CisgICAgbV91bnByb2Nlc3NlZFN0YWNr
VHJhY2VzLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yKQpAQCAtNDc4LDE4ICs1MzYsMTIgQEAgdm9pZCBTYW1wbGluZ1By
b2ZpbGVyOjpub3RpY2VWTUVudHJ5KCkKICAgICBkaXNwYXRjaElmTmVjZXNzYXJ5KGxvY2tlcik7
CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6Y2xlYXJEYXRhKCkKLXsKLSAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX2xvY2spOwotICAgIGNsZWFyRGF0YShsb2NrZXIpOwotfQotCiB2b2lkIFNh
bXBsaW5nUHJvZmlsZXI6OmNsZWFyRGF0YShjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBBU1NF
UlQobV9sb2NrLmlzTG9ja2VkKCkpOwogICAgIG1fc3RhY2tUcmFjZXMuY2xlYXIoKTsKICAgICBt
X3NlZW5FeGVjdXRhYmxlcy5jbGVhcigpOwotICAgIG1faW5kZXhPZk5leHRTdGFja1RyYWNlVG9W
ZXJpZnkgPSAwOworICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVhcigpOwogfQogCiBT
dHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzcGxheU5hbWUoKQpAQCAtNDk4
LDkgKzU1MCw3IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXMKICAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiKHVua25vd24pIik7CiAgICAgaWYgKGZyYW1lVHlw
ZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIihob3N0
KSIpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZp
ZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVk
RXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+bmFt
ZSgpOwogCkBAIC01MjEsOSArNTcxLDcgQEAgU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNr
RnJhbWU6OmRpcwogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIodW5rbm93bikiKTsKICAg
ICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgiKGhvc3QpIik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBlICE9IEZyYW1l
VHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJs
ZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5j
dGlvbigpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpLT5uYW1lKCk7CiAKQEAgLTU0NCwyNSArNTkyLDIxIEBAIFN0cmluZyBTYW1wbGlu
Z1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXMKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLWlu
dCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzdGFydExpbmUoKQoraW50IFNhbXBsaW5n
UHJvZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9uU3RhcnRMaW5lKCkKIHsKICAgICBpZiAoZnJh
bWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpI
b3N0KQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBlICE9
IEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhl
Y3V0YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hv
c3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFNjcmlwdEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Zmlyc3RMaW5lKCk7CiB9CiAKLXVuc2ln
bmVkIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnN0YXJ0Q29sdW1uKCkKK3Vuc2lnbmVk
IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9uU3RhcnRDb2x1bW4oKQogewog
ICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpVbmtub3duIHx8IGZyYW1lVHlwZSA9PSBG
cmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBSRUxFQVNFX0FTU0VSVChm
cmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKIAotICAgIEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1dGFibGU7CiAgICAgaWYgKGV4ZWN1
dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNTczLDkg
KzYxNyw3IEBAIGludHB0cl90IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnMKIHsKICAg
ICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJh
bWVUeXBlOjpIb3N0KQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJh
bWVUeXBlICE9IEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxl
QmFzZSogZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRh
YmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTU4Niw5ICs2
MjgsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6dXJsCiB7CiAgICAg
aWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1l
VHlwZTo6SG9zdCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CiAKLSAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxlOwogICAgIGlm
IChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKIApAQCAtNTk4LDcgKzYzOCw3IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFj
a0ZyYW1lOjp1cmwKICAgICByZXR1cm4gdXJsOwogfQogCi1WZWN0b3I8U2FtcGxpbmdQcm9maWxl
cjo6U3RhY2tUcmFjZT4mIFNhbXBsaW5nUHJvZmlsZXI6OnN0YWNrVHJhY2VzKGNvbnN0IExvY2tI
b2xkZXImKQorVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+IFNhbXBsaW5nUHJv
ZmlsZXI6OnJlbGVhc2VTdGFja1RyYWNlcyhjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCiB7CiAg
ICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsKICAgICB7CkBAIC02MDYsNyArNjQ2LDkgQEAg
VmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+JiBTYQogICAgICAgICBwcm9jZXNz
VW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fc3RhY2tUcmFj
ZXM7CisgICAgVmVjdG9yPFN0YWNrVHJhY2U+IHJlc3VsdChXVEZNb3ZlKG1fc3RhY2tUcmFjZXMp
KTsKKyAgICBjbGVhckRhdGEobG9ja2VyKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBTdHJp
bmcgU2FtcGxpbmdQcm9maWxlcjo6c3RhY2tUcmFjZXNBc0pTT04oKQpAQCAtNjMyLDkgKzY3NCwx
NyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6c3RhY2tUcmFjZXNBc0pTCiAgICAgICAgIGxv
b3BlZE9uY2UgPSBmYWxzZTsKICAgICAgICAgZm9yIChTdGFja0ZyYW1lJiBzdGFja0ZyYW1lIDog
c3RhY2tUcmFjZS5mcmFtZXMpIHsKICAgICAgICAgICAgIGNvbW1hKCk7CisgICAgICAgICAgICAv
L2pzb24uYXBwZW5kTGl0ZXJhbCgie1wiZGlzcGxheU5hbWVcIjoiKTsKICAgICAgICAgICAgIGpz
b24uYXBwZW5kTGl0ZXJhbCgiXCIiKTsKICAgICAgICAgICAgIGpzb24uYXBwZW5kKHN0YWNrRnJh
bWUuZGlzcGxheU5hbWVGb3JKU09OVGVzdHMoKSk7CiAgICAgICAgICAgICBqc29uLmFwcGVuZExp
dGVyYWwoIlwiIik7CisgICAgICAgICAgICAvL2pzb24uYXBwZW5kTGl0ZXJhbCgiLCIpOworICAg
ICAgICAgICAgLy9qc29uLmFwcGVuZExpdGVyYWwoIlwibGluZU51bWJlclwiOiIpOworICAgICAg
ICAgICAgLy9qc29uLmFwcGVuZE51bWJlcihzdGFja0ZyYW1lLmxpbmVOdW1iZXIpOworICAgICAg
ICAgICAgLy9qc29uLmFwcGVuZExpdGVyYWwoIiwiKTsKKyAgICAgICAgICAgIC8vanNvbi5hcHBl
bmRMaXRlcmFsKCJcImNvbHVtbk51bWJlclwiOiIpOworICAgICAgICAgICAgLy9qc29uLmFwcGVu
ZE51bWJlcihzdGFja0ZyYW1lLmNvbHVtbk51bWJlcik7CisgICAgICAgICAgICAvL2pzb24uYXBw
ZW5kTGl0ZXJhbCgifSIpOwogICAgICAgICAgICAgbG9vcGVkT25jZSA9IHRydWU7CiAgICAgICAg
IH0KICAgICAgICAganNvbi5hcHBlbmRMaXRlcmFsKCJdIik7CkBAIC02NDMsNiArNjkzLDggQEAg
U3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OnN0YWNrVHJhY2VzQXNKUwogCiAgICAganNvbi5hcHBl
bmRMaXRlcmFsKCJdIik7CiAKKyAgICBjbGVhckRhdGEobG9ja2VyKTsKKwogICAgIHJldHVybiBq
c29uLnRvU3RyaW5nKCk7CiB9CiAKQEAgLTY1NSwxMSArNzA3LDggQEAgdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTYW1wbGluZ1Byb2Zp
bGVyOjpGcmFtZVR5cGUgZnJhbWVUeXBlKQogewogICAgIHN3aXRjaCAoZnJhbWVUeXBlKSB7Ci0g
ICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0YWJsZToK
LSAgICAgICAgb3V0LnByaW50KCJWZXJpZmllZEV4ZWN1dGFibGUiKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWU6
Ci0gICAgICAgIG91dC5wcmludCgiVW52ZXJpZmllZENhbGxlZSIpOworICAgIGNhc2UgU2FtcGxp
bmdQcm9maWxlcjo6RnJhbWVUeXBlOjpFeGVjdXRhYmxlOgorICAgICAgICBvdXQucHJpbnQoIkV4
ZWN1dGFibGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpG
cmFtZVR5cGU6Okhvc3Q6CiAgICAgICAgIG91dC5wcmludCgiSG9zdCIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNp
b24gMTk1NDQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw0OCArNDQsODggQEAgY2xhc3MgRXhlY3V0YWJs
ZUJhc2U7CiBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFNhbXBsaW5nUHJvZmlsZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBlbnVtIGNsYXNzIEZyYW1lVHlwZSB7IAotICAgICAgICBWZXJpZmllZEV4ZWN1
dGFibGUsIAorCisgICAgZW51bSBjbGFzcyBVbnByb2Nlc3NlZEZyYW1lVHlwZSB7IAogICAgICAg
ICBVbnZlcmlmaWVkQ2FsbGVlLAotICAgICAgICBIb3N0LCAKLSAgICAgICAgVW5rbm93biAKKyAg
ICAgICAgVmVyaWZpZWRDb2RlQmxvY2sKICAgICB9OwogCi0gICAgc3RydWN0IFN0YWNrRnJhbWUg
ewotICAgICAgICBTdGFja0ZyYW1lKEZyYW1lVHlwZSBmcmFtZVR5cGUsIEVuY29kZWRKU1ZhbHVl
IGNhbGxlZSkKLSAgICAgICAgICAgIDogZnJhbWVUeXBlKGZyYW1lVHlwZSkKKyAgICBzdHJ1Y3Qg
VW5wcm9jZXNzZWRTdGFja0ZyYW1lIHsKKyAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lKEVu
Y29kZWRKU1ZhbHVlIGNhbGxlZSkKKyAgICAgICAgICAgIDogZnJhbWVUeXBlKFVucHJvY2Vzc2Vk
RnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKQogICAgICAgICB7CiAgICAgICAgICAgICB1LnVu
dmVyaWZpZWRDYWxsZWUgPSBjYWxsZWU7CiAgICAgICAgIH0KLSAgICAgICAgU3RhY2tGcmFtZShG
cmFtZVR5cGUgZnJhbWVUeXBlLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKLSAgICAgICAg
ICAgIDogZnJhbWVUeXBlKGZyYW1lVHlwZSkKKyAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1l
KENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCisgICAg
ICAgICAgICA6IGZyYW1lVHlwZShVbnByb2Nlc3NlZEZyYW1lVHlwZTo6VmVyaWZpZWRDb2RlQmxv
Y2spCisgICAgICAgICAgICAsIGNhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCkKICAgICAgICAg
ewotICAgICAgICAgICAgdS52ZXJpZmllZEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOworICAgICAg
ICAgICAgdS51bnZlcmlmaWVkQ2FsbGVlID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgICAgICAgICB1LnZlcmlmaWVkQ29kZUJsb2NrID0gY29kZUJsb2NrOwogICAgICAgICB9Ci0g
ICAgICAgIFN0YWNrRnJhbWUoKQotICAgICAgICAgICAgOiBmcmFtZVR5cGUoRnJhbWVUeXBlOjpV
bmtub3duKQorICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoKQorICAgICAgICAgICAgOiBm
cmFtZVR5cGUoVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHUudmVyaWZpZWRFeGVjdXRhYmxlID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgIHUudW52ZXJpZmllZENhbGxlZSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgRnJhbWVUeXBlIGZyYW1lVHlwZTsKKyAgICAgICAgVW5wcm9jZXNz
ZWRGcmFtZVR5cGUgZnJhbWVUeXBlOwogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBFbmNv
ZGVkSlNWYWx1ZSB1bnZlcmlmaWVkQ2FsbGVlOwotICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2Uq
IHZlcmlmaWVkRXhlY3V0YWJsZTsKKyAgICAgICAgICAgIENvZGVCbG9jayogdmVyaWZpZWRDb2Rl
QmxvY2s7CiAgICAgICAgIH0gdTsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
OworICAgIH07CisKKyAgICBlbnVtIGNsYXNzIEZyYW1lVHlwZSB7IAorICAgICAgICBFeGVjdXRh
YmxlLAorICAgICAgICBIb3N0LAorICAgICAgICBVbmtub3duIAorICAgIH07CiAKKyAgICBzdHJ1
Y3QgU3RhY2tGcmFtZSB7CisgICAgICAgIFN0YWNrRnJhbWUoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1
dGFibGUpCisgICAgICAgICAgICA6IGZyYW1lVHlwZShGcmFtZVR5cGU6OkV4ZWN1dGFibGUpCisg
ICAgICAgICAgICAsIGV4ZWN1dGFibGUoZXhlY3V0YWJsZSkKKyAgICAgICAgeyB9CisgICAgICAg
IFN0YWNrRnJhbWUoKQorICAgICAgICAgICAgOiBmcmFtZVR5cGUoRnJhbWVUeXBlOjpVbmtub3du
KQorICAgICAgICAgICAgLCBleGVjdXRhYmxlKG51bGxwdHIpCisgICAgICAgIHsgfQorCisgICAg
ICAgIEZyYW1lVHlwZSBmcmFtZVR5cGU7CisgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlOworCisgICAgICAgIC8vIFRoZXNlIGF0dGVtcHQgdG8gYmUgZXhwcmVzc2lvbi1sZXZlbCBs
aW5lIGFuZCBjb2x1bW4gbnVtYmVyLgorICAgICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyIHsgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIHVuc2lnbmVkIGNv
bHVtbk51bWJlciB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCisg
ICAgICAgIC8vIFRoZXNlIGFyZSBmdW5jdGlvbi1sZXZlbCBkYXRhLgogICAgICAgICBTdHJpbmcg
ZGlzcGxheU5hbWUoKTsKICAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lRm9ySlNPTlRlc3RzKCk7
IC8vIFVzZWQgZm9yIEpTQyBzdHJlc3MgdGVzdHMgYmVjYXVzZSB0aGV5IHdhbnQgdGhlICIoYW5v
bnltb3VzIGZ1bmN0aW9uKSIgc3RyaW5nIGZvciBhbm9ueW1vdXMgZnVuY3Rpb25zIGFuZCB0aGV5
IHdhbnQgIihldmFsKSIgZm9yIGV2YWwnZCBjb2RlLgotICAgICAgICBpbnQgc3RhcnRMaW5lKCk7
Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCk7CisgICAgICAgIGludCBmdW5jdGlvblN0
YXJ0TGluZSgpOworICAgICAgICB1bnNpZ25lZCBmdW5jdGlvblN0YXJ0Q29sdW1uKCk7CiAgICAg
ICAgIGludHB0cl90IHNvdXJjZUlEKCk7CiAgICAgICAgIFN0cmluZyB1cmwoKTsKICAgICB9Owog
CisgICAgc3RydWN0IFVucHJvY2Vzc2VkU3RhY2tUcmFjZSB7CisgICAgICAgIGRvdWJsZSB0aW1l
c3RhbXA7CisgICAgICAgIHZvaWQqIHRvcFBDOworICAgICAgICBib29sIHRvcEZyYW1lSXNMTElu
dDsKKyAgICAgICAgdm9pZCogbGxpbnRQQzsKKyAgICAgICAgVmVjdG9yPFVucHJvY2Vzc2VkU3Rh
Y2tGcmFtZT4gZnJhbWVzOworICAgIH07CisKICAgICBzdHJ1Y3QgU3RhY2tUcmFjZSB7Ci0gICAg
ICAgIGJvb2wgbmVlZHNWZXJpZmljYXRpb247CiAgICAgICAgIGRvdWJsZSB0aW1lc3RhbXA7CiAg
ICAgICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBmcmFtZXM7CisgICAgICAgIFN0YWNrVHJhY2UoKQor
ICAgICAgICB7IH0KKyAgICAgICAgU3RhY2tUcmFjZShTdGFja1RyYWNlJiYgb3RoZXIpCisgICAg
ICAgICAgICA6IHRpbWVzdGFtcChvdGhlci50aW1lc3RhbXApCisgICAgICAgICAgICAsIGZyYW1l
cyhXVEZNb3ZlKG90aGVyLmZyYW1lcykpCisgICAgICAgIHsgfQogICAgIH07CiAKICAgICBTYW1w
bGluZ1Byb2ZpbGVyKFZNJiwgUmVmUHRyPFN0b3B3YXRjaD4mJik7CkBAIC0xMDAsMTIgKzE0MCwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydChjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgdm9p
ZCBzdG9wKCk7CiAgICAgdm9pZCBzdG9wKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICBWZWN0b3I8
U3RhY2tUcmFjZT4mIHN0YWNrVHJhY2VzKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICBWZWN0b3I8
U3RhY2tUcmFjZT4gcmVsZWFzZVN0YWNrVHJhY2VzKGNvbnN0IExvY2tIb2xkZXImKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc3RhY2tUcmFjZXNBc0pTT04oKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIG5vdGljZUN1cnJlbnRUaHJlYWRBc0pTQ0V4ZWN1dGlvblRocmVhZCgp
OwogICAgIHZvaWQgbm90aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9uVGhyZWFkKGNvbnN0
IExvY2tIb2xkZXImKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyRGF0YSgpOwot
ICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IExvY2tIb2xkZXImKTsKICAgICB2b2lkIHByb2Nlc3NV
bnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsgLy8gWW91IHNob3VsZCBjYWxsIHRoaXMgb25seSBhZnRl
ciBhY3F1aXJpbmcgdGhlIGxvY2suCiAgICAgZG91YmxlIHRvdGFsVGltZShjb25zdCBMb2NrSG9s
ZGVyJikgeyByZXR1cm4gbV90b3RhbFRpbWU7IH0KICAgICB2b2lkIHNldFN0b3BXYXRjaChjb25z
dCBMb2NrSG9sZGVyJiwgUmVmPFN0b3B3YXRjaD4mJiBzdG9wd2F0Y2gpIHsgbV9zdG9wd2F0Y2gg
PSBXVEZNb3ZlKHN0b3B3YXRjaCk7IH0KQEAgLTExNCwxMSArMTUyLDEyIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBkaXNwYXRjaElmTmVjZXNzYXJ5KGNvbnN0IExvY2tIb2xkZXImKTsKICAgICB2b2lk
IGRpc3BhdGNoRnVuY3Rpb24oY29uc3QgTG9ja0hvbGRlciYpOwogICAgIHZvaWQgcGF1c2UoKTsK
KyAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBMb2NrSG9sZGVyJik7CiAKICAgICBWTSYgbV92bTsK
ICAgICBSZWZQdHI8U3RvcHdhdGNoPiBtX3N0b3B3YXRjaDsKICAgICBWZWN0b3I8U3RhY2tUcmFj
ZT4gbV9zdGFja1RyYWNlczsKLSAgICBzaXplX3QgbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1Zl
cmlmeTsKKyAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFja1RyYWNlPiBtX3VucHJvY2Vzc2VkU3Rh
Y2tUcmFjZXM7CiAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBtX3RpbWluZ0ludGVydmFs
OwogICAgIGRvdWJsZSBtX2xhc3RUaW1lOwogICAgIGRvdWJsZSBtX3RvdGFsVGltZTsKQEAgLTEz
MCw3ICsxNjksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1BhdXNlZDsKICAgICBib29sIG1f
aGFzRGlzcGF0Y2hlZEZ1bmN0aW9uOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX3Nl
ZW5FeGVjdXRhYmxlczsKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gbV9jdXJyZW50RnJhbWVzOwor
ICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IG1fY3VycmVudEZyYW1lczsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9zYW1wbGluZy1wcm9maWxlci1iYXNpYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLWJhc2ljLmpzCShyZXZp
c2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NhbXBs
aW5nLXByb2ZpbGVyLWJhc2ljLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsOCBAQCBp
ZiAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIoKSkgCiAgICAgICAgICAgICB4LS07
CiAgICAgICAgIH0KICAgICB9Ci0gICAgbm9JbmxpbmUodG9wKTsKLSAgICAvLyBGSVhNRTogV2Ug
bmVlZCB0byBjYWxsIHRvcCgpIHRvIGdldCB0aGUgQ2FsbFNpdGVJbmRleCB0byB1cGRhdGUKLSAg
ICAvLyBpbnNpZGUgdGhlIGNhbGwgZnJhbWUuIFdlIG5lZWQgdG8gZml4IHRoYXQgYnkgaGF2aW5n
IGEgUEM9PkNvZGVPcmlnaW4KLSAgICAvLyBtYXBwaW5nOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNjI5Ci0gICAgZnVuY3Rpb24gamF6KHgpIHsgcmV0dXJuIHgg
KyB0b3AoKTsgfSAvLyAKKworICAgIGZ1bmN0aW9uIGpheih4KSB7IHJldHVybiB4ICsgdG9wKCk7
IH0KICAgICBmdW5jdGlvbiBrYXooeSkgewogICAgICAgICByZXR1cm4gamF6KHkpICsgNTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NhbXBsaW5nLXBy
b2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpz
CShyZXZpc2lvbiAxOTU0NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDggKzQ2LDEwIEBAIGZ1bmN0aW9uIGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2UodHJlZSwgc3QK
ICAgICBmb3IgKGxldCBpID0gc3RhY2tUcmFjZS5sZW5ndGg7IGktLTsgKSB7CiAgICAgICAgIG5v
ZGUgPSBub2RlLmNoaWxkcmVuW3N0YWNrVHJhY2VbaV1dOwogICAgICAgICBpZiAoIW5vZGUpIHsK
LSAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAg
ICAgICAgICAgICAgICBwcmludChKU09OLnN0cmluZ2lmeShzdGFja1RyYWNlKSk7CiAgICAgICAg
ICAgICAgICAgcHJpbnQoImZhaWxpbmcgb24gIiArIGkgKyAiIDogIiArIHN0YWNrVHJhY2VbaV0p
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNjQsNyArNjYsNyBAQCBjb25zdCBWRVJCT1NFID0gZmFsc2U7CiAvLyBUaGlzIHRl
c3Qgc3VpdGUgYXNzdW1lcyB0aGF0ICJydW5UZXN0IiBpcyBiZWluZyBjYWxsZWQKIC8vIGZyb20g
dGhlIGdsb2JhbCBzY29wZS4KIGZ1bmN0aW9uIHJ1blRlc3QoZnVuYywgc3RhY2tUcmFjZSkgewot
ICAgIGNvbnN0IHRpbWVUb0ZhaWwgPSA1MDAwMDsKKyAgICBjb25zdCB0aW1lVG9GYWlsID0gNTAw
MDsKICAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgICBsZXQgcm9vdCA9IG1ha2VO
b2RlKCI8cm9vdD4iKTsKICAgICBkbyB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269843</attachid>
            <date>2016-01-25 19:18:56 -0800</date>
            <delta_ts>2016-01-26 13:35:08 -0800</delta_ts>
            <desc>more cleanup</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>83479</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0Myw3ICsxNjQzLDYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNhbQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpKTsKICAgICBTdHJpbmcganNvblN0
cmluZyA9IGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNPTigp
OwotICAgIGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpLT5jbGVhckRhdGEoKTsKICAgICBF
bmNvZGVkSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpz
b25TdHJpbmcpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMDMsOSArMTMwMywx
MiBAQAogCQk3MEVDQTYwNzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMjFB
RkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjA4
MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMzFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVD
QTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5MkNCMzQ5MUM0RUVENUMw
MEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0Nv
ZGVPcmlnaW5NYXAuY3BwICovOyB9OworCQk3OTJDQjM0QTFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5NjQ2NTZB
MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdB
NzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9
OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0Uw
N0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5OUVGN0M0MUM1
NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BD
VG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3OUM0QjE1RDFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUM0QjE1QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTky
RSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMzM0IxMDAw
MEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0z
NDk4LDkgKzM1MDEsMTIgQEAKIAkJNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxh
dGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFG
REJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyog
UENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk5RUY3QzMx
QzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QjFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUMxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9u
UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDRkM2RUYxQzMzQjEwMDAw
Qzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTExJbnRQQ1Jhbmdlcy5oOyBwYXRoID0gbGxpbnQvTExJbnRQQ1Jhbmdlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg0MCw2ICs0ODQ2LDcgQEAKIAkJCQkwRkVDODREQzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAogCQkJCTBGRUM4NERE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0
REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJNzk5RUY3
QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovLAogCQkJCTBGRUM4NERG
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovLAogCQkJCTBGRUM4NEUwMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLywKIAkJCQkwRjM3MzA4QTFDMEJEMjkx
MDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgKi8sCkBAIC01MTQ5LDYgKzUxNTYsOCBAQAog
CQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCAqLywKKwkJCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmln
aW5NYXAuY3BwICovLAorCQkJCTc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9y
aWdpbk1hcC5oICovLAogCQkJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8q
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZBN0E4RTkxOEI0MTNDODAw
NTIzNzFEIC8qIFJlZy5jcHAgKi8sCkBAIC03MDI1LDYgKzcwMzQsOCBAQAogCQkJCTBGRUM4NTc2
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5
MzFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAu
aCBpbiBIZWFkZXJzICovLAorCQkJCTc5MkNCMzRBMUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29k
ZU9yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVB
IC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkw
MENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMz
MTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLApAQCAt
ODk3MSw2ICs4OTgyLDcgQEAKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92
SGludFJlbW92YWxQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4
MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5N
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8qIERG
R05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMzg3OEYxQkZCQzQ0RDAwRTNBQjFFIC8q
IEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1
MEU5NTJDMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MDUsNiArNDA1LDggQEAgcHVibGljOgogICAgICAgICAgICAgbWFzbS0+aW52YWxpZGF0ZUFsbFRl
bXBSZWdpc3RlcnMoKTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwgPT0gb3RoZXIubV9sYWJlbDsg
fQorCiAgICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsLmlzU2V0KCk7
IH0KICAgICBwcml2YXRlOgogICAgICAgICBBc3NlbWJsZXJMYWJlbCBtX2xhYmVsOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5o
CShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fz
c2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVsKG1fb2Zmc2V0ICsgb2Zm
c2V0KTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBc3NlbWJs
ZXJMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0
OyB9CisKICAgICAgICAgdWludDMyX3QgbV9vZmZzZXQ7CiAgICAgfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1NTc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiQjNSZWR1Y2VTdHJlbmd0aC5oIgogI2luY2x1ZGUgIkIz
VGltaW5nU2NvcGUuaCIKICNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiAr
NDcsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3JpZ2luJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9kYXRhID09IG90aGVyLm1fZGF0YTsgfQorCiAgICAgLy8gWW91IHNob3Vs
ZCBhdm9pZCB1c2luZyB0aGlzLiBVc2UgT3JpZ2luRHVtcCBpbnN0ZWFkLgogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUENUb09yaWdpbk1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNQQ1RvT3JpZ2luTWFwX2gKKyNkZWZpbmUgQjNQQ1RvT3JpZ2luTWFwX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlICJCM09yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgUENUb09yaWdpbk1hcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUENUb09yaWdpbk1hcCk7CitwdWJsaWM6CisgICAgUENUb09yaWdpbk1hcCgpCisgICAgeyB9
CisKKyAgICBQQ1RvT3JpZ2luTWFwKFBDVG9PcmlnaW5NYXAmJiBvdGhlcikKKyAgICAgICAgOiBt
X3JhbmdlcyhXVEZNb3ZlKG90aGVyLm1fcmFuZ2VzKSkKKyAgICB7IH0KKworICAgIHN0cnVjdCBP
cmlnaW5SYW5nZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbDsKKyAgICAg
ICAgT3JpZ2luIG9yaWdpbjsKKyAgICB9OworCisgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsYWJlbCwgT3JpZ2luIG9yaWdpbikKKyAgICB7CisgICAgICAgIGlmICht
X3Jhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3Jhbmdlcy5sYXN0KCkubGFiZWwg
PT0gbGFiZWwpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG1fcmFu
Z2VzLmxhc3QoKS5vcmlnaW4gPT0gb3JpZ2luIHx8ICFvcmlnaW4pCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9yYW5nZXMuYXBwZW5kKE9yaWdpblJhbmdl
e2xhYmVsLCBvcmlnaW59KTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8T3JpZ2luUmFuZ2U+
JiByYW5nZXMoKSBjb25zdCAgeyByZXR1cm4gbV9yYW5nZXM7IH0KKworcHJpdmF0ZToKKyAgICBW
ZWN0b3I8T3JpZ2luUmFuZ2U+IG1fcmFuZ2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQQ1RvT3JpZ2lu
TWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lv
biAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1
Y3RzLmgiCiAjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAu
aCIKICNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCiAjaW5jbHVk
ZSAiUHVyZU5hTi5oIgpAQCAtMjc1LDYgKzI3Niw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdDsKICAgICBjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0OwogCisgICAgUENUb09yaWdp
bk1hcCYgcGNUb09yaWdpbk1hcCgpIHsgcmV0dXJuIG1fcGNUb09yaWdpbk1hcDsgfQorICAgIFBD
VG9PcmlnaW5NYXAgcmVsZWFzZVBDVG9PcmlnaW5NYXAoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGNU
b09yaWdpbk1hcCk7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvY2tJbnNlcnRp
b25TZXQ7CiAgICAgCkBAIC0yOTEsNiArMjk1LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWlyOjpDb2RlPiBtX2NvZGU7CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmlu
dFN0cmVhbSYsIE9yaWdpbik+PiBtX29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9m
cm9udGVuZERhdGE7CisgICAgUENUb09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSAr
NDcsMTIgQEAKICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkIzQ29tbW9uLmgi
CiAjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5j
bHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1
ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKQEAgLTE3MSwxMiArMTc0LDIzIEBAIHZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgYmxvY2tKdW1w
c1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKICAgICB9OwogCisgICAgUENUb09yaWdpbk1hcCYgcGNU
b09yaWdpbk1hcCA9IGNvZGUucHJvYygpLnBjVG9PcmlnaW5NYXAoKTsKKyAgICBhdXRvIGFkZEl0
ZW0gPSBbJl0gKEluc3QmIGluc3QpIHsKKyAgICAgICAgaWYgKCFpbnN0Lm9yaWdpbikgeworICAg
ICAgICAgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcGNUb09yaWdpbk1hcC5h
cHBlbmRJdGVtKGppdC5sYWJlbCgpLCBpbnN0Lm9yaWdpbi0+b3JpZ2luKCkpOworICAgIH07CisK
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAgICAgICBibG9ja0p1bXBz
W2Jsb2NrXS5saW5rKCZqaXQpOwogICAgICAgICBibG9ja0xhYmVsc1tibG9ja10gPSBqaXQubGFi
ZWwoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNv
bnRleHQpOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAg
ICAgIGFkZEl0ZW0oaW5zdCk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9
IGluc3QuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
anVtcCwgIWp1bXAuaXNTZXQoKSk7CiAgICAgICAgIH0KIApAQCAtMTg0LDYgKzE5OCw4IEBAIHZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgICYmIGJs
b2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQogICAg
ICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgYWRkSXRlbShibG9jay0+bGFzdCgpKTsKKwog
ICAgICAgICBpZiAoaXNSZXR1cm4oYmxvY2stPmxhc3QoKS5vcGNvZGUpKSB7CiAgICAgICAgICAg
ICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxv
Z3VlIGluIEFpciwgc28gd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJy
aWRlLgpAQCAtMTk4LDYgKzIxNCw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxI
ZWxwZXJzJiAKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZVdpdGhFbXB0eUZyYW1lKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7Cisg
ICAgICAgICAgICBhZGRJdGVtKGJsb2NrLT5sYXN0KCkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KIApAQCAtMjE4LDEwICsyMzUsMTMgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBj
b2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGFkZEl0ZW0oYmxv
Y2stPmxhc3QoKSk7CiAgICAgfQogCisgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5s
YWJlbCgpLCBPcmlnaW4oKSk7CiAgICAgZm9yIChhdXRvJiBsYXRlUGF0aCA6IGNvbnRleHQubGF0
ZVBhdGhzKQogICAgICAgICBsYXRlUGF0aC0+cnVuKGppdCwgY29udGV4dCk7CisgICAgcGNUb09y
aWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7CiB9CiAKIH0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiAr
NTIsNyBAQAogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkxvd0xldmVs
SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUg
IlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCkBAIC00
Mjc1LDQgKzQyNzYsMjYgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFy
aQogICAgIH0KIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6
dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBtYXApIAoreyAKKyAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwID0gV1RGTW92ZShtYXApOworfQorCitPcHRpb25hbDxDb2RlT3JpZ2luPiBDb2Rl
QmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKK3sKKyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkg
eworICAgICAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1fcGNUb0Nv
ZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCisgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsK
KyAgICB9CisjaWYgRU5BQkxFKEpJVCkKKyAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewor
ICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOworICAgICAgICBpZiAoc3R1
Yi0+Y29udGFpbnNQQyhwYykpCisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdp
bj4oc3R1Yi0+Y29kZU9yaWdpbik7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyAg
ICByZXR1cm4gTnVsbG9wdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxOTU1NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDYgKzg0LDcgQEAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3Mg
UmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBUeXBlTG9jYXRpb247CiBjbGFzcyBKU01vZHVs
ZUVudmlyb25tZW50OworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiAKIGVudW0gUmVvcHRpbWl6
YXRpb25Nb2RlIHsgRG9udENvdW50UmVvcHRpbWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24g
fTsKIApAQCAtMjc0LDcgKzI3NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBt
X2ppdENvZGVNYXAuZ2V0KCk7CiAgICAgfQotICAgIAorCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCiAgICAgewogICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXR1cm5BZGRyZXNzID49IGluc3RydWN0aW9ucygpLmJlZ2luKCkgJiYgcmV0dXJu
QWRkcmVzcyA8IGluc3RydWN0aW9ucygpLmVuZCgpKTsKQEAgLTkyNyw2ICs5MjgsOSBAQCBwdWJs
aWM6CiAKICAgICBDYWxsU2l0ZUluZGV4IG5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRl
eChDYWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGUpOwogCisgICAgdm9pZCBzZXRQQ1RvQ29k
ZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOworICAgIE9w
dGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7CisKIHByb3RlY3RlZDoKICAgICB2
b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKICAgICB2b2lkIGZpbmFsaXplQmFzZWxp
bmVKSVRJbmxpbmVDYWNoZXMoKTsKQEAgLTEwOTcsNiArMTEwMSw3IEBAIHByaXZhdGU6CiAjaWYg
RU5BQkxFKEpJVCkKICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBtX2NhcGFiaWxpdHlMZXZlbFN0
YXRlOwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3Bj
VG9Db2RlT3JpZ2luTWFwOwogCiAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0
aW9uYWxGaW5hbGl6ZXI7CiAgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciBtX3dlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9y
aWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsOSBAQCBzdHJ1
Y3QgQ29kZU9yaWdpbiB7CiAgICAgYm9vbCBpc0FwcHJveGltYXRlbHlFcXVhbFRvKGNvbnN0IENv
ZGVPcmlnaW4mIG90aGVyKSBjb25zdDsKICAgICAKICAgICB1bnNpZ25lZCBhcHByb3hpbWF0ZUhh
c2goKSBjb25zdDsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lk
IHdhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJik7CiAgICAgCiAgICAgLy8gR2V0IHRo
ZSBpbmxpbmUgc3RhY2suIFRoaXMgaXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dp
bmcgb25seS4KICAgICBWZWN0b3I8Q29kZU9yaWdpbj4gaW5saW5lU3RhY2soKSBjb25zdDsKQEAg
LTEyNyw3ICsxMzAsNyBAQCBpbmxpbmUgYm9vbCBDb2RlT3JpZ2luOjpvcGVyYXRvcj09KGNvbnN0
CiAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXggPT0gb3RoZXIuYnl0ZWNvZGVJbmRleAogICAgICAg
ICAmJiBpbmxpbmVDYWxsRnJhbWUgPT0gb3RoZXIuaW5saW5lQ2FsbEZyYW1lOwogfQotICAgIAor
CiBzdHJ1Y3QgQ29kZU9yaWdpbkhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IENvZGVPcmlnaW4mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQogICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IENvZGVPcmlnaW4mIGEsIGNvbnN0IENvZGVPcmlnaW4mIGIpIHsgcmV0dXJu
IGEgPT0gYjsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNh
bGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVDYWxsRnJhbWUuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNiAr
MjQ2LDE4IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3IKICAgICBy
ZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2s7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlv
bj4KK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0
aW9uJiBmdW5jdGlvbikKK3sKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAqdGhpczsKKyAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBmdW5jdGlvbihjb2RlT3JpZ2luKTsKKyAgICAgICAg
aWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxl
cjsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYgKzMyNCwxNCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Q7CisgICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdAor
ICAgIHsgCisgICAgICAgIGlmICghbV9zdHViUm91dGluZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICB1aW50cHRyX3QgcGNBc0ludCA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHBjKTsKKyAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUtPnN0YXJ0QWRkcmVzcygpIDw9
IHBjQXNJbnQgJiYgcGNBc0ludCA8PSBtX3N0dWJSb3V0aW5lLT5lbmRBZGRyZXNzKCk7CisgICAg
fQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NDYXNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
CShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDEzIEBAIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICByZXNldChjb2RlQmxv
Y2spOwogICAgIHJlc2V0QnlHQyA9IHRydWU7CiB9CisKK2Jvb2wgU3RydWN0dXJlU3R1YkluZm86
OmNvbnRhaW5zUEModm9pZCogcGMpIGNvbnN0Cit7CisgICAgaWYgKGNhY2hlVHlwZSAhPSBDYWNo
ZVR5cGU6OlN0dWIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdS5zdHViLT5j
b250YWluc1BDKHBjKTsKK30KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
CShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw4IEBAIHB1Ymxp
YzoKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4OwogCisgICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdDsKKwogICAgIHVu
aW9uIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3Ry
dWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE5NTU3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVHlw
ZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2ln
bmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KTsKIAogICAgIGJvb2wgaGFzRXhwcmVz
c2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQorICAgIGNvbnN0
IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBt
X2V4cHJlc3Npb25JbmZvOyB9CiAKICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQg
c2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVn
aXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDYg
KzMwNSw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25IYW5kbGVyKG5ld0V4Y2VwdGlvbkhh
bmRsZXIpOwogICAgICAgICB9CiAgICAgfQorCisgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2Rl
T3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVyKSk7CiB9CiAKIHZvaWQgSklUQ29t
cGlsZXI6OmNvbXBpbGUoKQpAQCAtMzM5LDcgKzM0MSw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNv
bXBpbGUoKQogICAgIG1fc3BlY3VsYXRpdmUtPmNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9s
bGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2Rl
QmxvY2spOwogCiAgICAgLy8gR2VuZXJhdGUgc2xvdyBwYXRoIGNvZGUuCi0gICAgbV9zcGVjdWxh
dGl2ZS0+cnVuU2xvd1BhdGhHZW5lcmF0b3JzKCk7CisgICAgbV9zcGVjdWxhdGl2ZS0+cnVuU2xv
d1BhdGhHZW5lcmF0b3JzKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKTsKKyAgICBtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAgICAgCiAgICAgY29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCk7CiAgICAgbGlua09TUkV4aXRzKCk7CkBAIC00MzIsNyArNDM1LDggQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICBqdW1wKGZyb21Bcml0eUNoZWNr
KTsKICAgICAKICAgICAvLyBHZW5lcmF0ZSBzbG93IHBhdGggY29kZS4KLSAgICBtX3NwZWN1bGF0
aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICBtX3NwZWN1bGF0aXZlLT5ydW5TbG93
UGF0aEdlbmVyYXRvcnMobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOworICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKICAgICAKICAgICBjb21waWxlRXhjZXB0aW9u
SGFuZGxlcnMoKTsKICAgICBsaW5rT1NSRXhpdHMoKTsKQEAgLTU5OCw2ICs2MDIsMjIgQEAgQ2Fs
bFNpdGVJbmRleCBKSVRDb21waWxlcjo6cmVjb3JkQ2FsbFNpdAogICAgIHJldHVybiBjYWxsU2l0
ZTsKIH0KIAordm9pZCBKSVRDb21waWxlcjo6c2V0RW5kT2ZNYWluUGF0aCgpCit7CisgICAgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2lu
dHMoKSwgbV9zcGVjdWxhdGl2ZS0+bV9vcmlnaW4uc2VtYW50aWMpOworICAgIGlmIChMSUtFTFko
IW1fZGlzYXNzZW1ibGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGlzYXNzZW1ibGVyLT5z
ZXRFbmRPZk1haW5QYXRoKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKK30KKwordm9pZCBK
SVRDb21waWxlcjo6c2V0RW5kT2ZDb2RlKCkKK3sKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlci5hcHBlbmRJdGVtKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOworICAgIGlmIChMSUtFTFkoIW1fZGlz
YXNzZW1ibGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRP
ZkNvZGUobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5j
bHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJUZW1wUmVnaXN0ZXJTZXQuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMTgsNiArMTE5LDcgQEAgcHVibGljOgogICAgIC8vIE1l
dGhvZHMgdG8gc2V0IGxhYmVscyBmb3IgdGhlIGRpc2Fzc2VtYmxlci4KICAgICB2b2lkIHNldFN0
YXJ0T2ZDb2RlKCkKICAgICB7CisgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCksIENvZGVPcmlnaW4oMCwgbnVsbHB0
cikpOwogICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbElnbm9y
aW5nV2F0Y2hwb2ludHMoKSk7CkBAIC0xMzcsMTkgKzEzOSw4IEBAIHB1YmxpYzoKICAgICAgICAg
bV9kaXNhc3NlbWJsZXItPnNldEZvck5vZGUobm9kZSwgbGFiZWxJZ25vcmluZ1dhdGNocG9pbnRz
KCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEVuZE9mTWFpblBhdGgoKQotICAgIHsKLSAg
ICAgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZNYWluUGF0aChsYWJlbElnbm9yaW5nV2F0
Y2hwb2ludHMoKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0RW5kT2ZDb2RlKCkKLSAgICB7
Ci0gICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbElnbm9yaW5nV2F0
Y2hwb2ludHMoKSk7Ci0gICAgfQorICAgIHZvaWQgc2V0RW5kT2ZNYWluUGF0aCgpOworICAgIHZv
aWQgc2V0RW5kT2ZDb2RlKCk7CiAgICAgCiAgICAgQ2FsbFNpdGVJbmRleCBhZGRDYWxsU2l0ZShD
b2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewpAQCAtMjY1LDYgKzI1Niw4IEBAIHB1YmxpYzoK
IAogICAgIENhbGxTaXRlSW5kZXggcmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhh
bmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvbnN0IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBldmVudFN0
cmVhbUluZGV4KTsKIAorICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYgcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKCkgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7IH0KKwog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgT1NSRXhpdEp1bXBQbGFjZWhvbGRlcjsKICAgICAK
QEAgLTMyOCw2ICszMjEsNyBAQCBwcml2YXRlOgogICAgIENhbGwgbV9jYWxsQXJpdHlGaXh1cDsK
ICAgICBMYWJlbCBtX2FyaXR5Q2hlY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNwZWN1bGF0aXZl
SklUPiBtX3NwZWN1bGF0aXZlOworICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciBtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcjsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9y
LmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xv
d1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQCBwdWJsaWM6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEJ5IGRlZmF1bHQgc2xv
dyBwYXRoIGdlbmVyYXRvcnMgZG9uJ3QgaGF2ZSBhIGNhbGwuCiAgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCgpOwogICAgIH0KKworICAgIGNvbnN0IE5vZGVPcmlnaW4mIG9yaWdp
bigpIGNvbnN0ICB7IHJldHVybiBtX29yaWdpbjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqKSA9IDA7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fbGFiZWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzMCwxMCArMzMwLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFkZFNsb3dQYXRoR2Vu
ZXJhdG8KICAgICBtX3Nsb3dQYXRoR2VuZXJhdG9ycy5hcHBlbmQoV1RGTW92ZShzbG93UGF0aEdl
bmVyYXRvcikpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpydW5TbG93UGF0aEdlbmVyYXRv
cnMoKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6cnVuU2xvd1BhdGhHZW5lcmF0b3JzKFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlciYgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKQogewotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3dQYXRoR2VuZXJhdG9ycy5zaXplKCk7ICsraSkKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zbG93UGF0aEdlbmVyYXRvcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obV9qaXQu
bGFiZWwoKSwgbV9zbG93UGF0aEdlbmVyYXRvcnNbaV0tPm9yaWdpbigpLnNlbWFudGljKTsKICAg
ICAgICAgbV9zbG93UGF0aEdlbmVyYXRvcnNbaV0tPmdlbmVyYXRlKHRoaXMpOworICAgIH0KIH0K
IAogLy8gT24gV2luZG93cyB3ZSBuZWVkIHRvIHdyYXAgZm1vZDsgb24gb3RoZXIgcGxhdGZvcm1z
IHdlIGNhbiBjYWxsIGl0IGRpcmVjdGx5LgpAQCAtMTUwNCw2ICsxNTA2LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICBpZiAoT3B0aW9uczo6dmFs
aWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpICYmIG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9j
dXJyZW50Tm9kZSkgIT0gRG9lc05vdEV4aXQpCiAgICAgICAgICAgICBtX2ppdC5qaXRSZWxlYXNl
QXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAorICAgICAgICBtX2ppdC5wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIoKS5hcHBlbmRJdGVtKG1faml0LmxhYmVsKCksIG1fb3JpZ2luLnNlbWFudGljKTsKKwog
ICAgICAgICBjb21waWxlKG1fY3VycmVudE5vZGUpOwogICAgICAgICAKICAgICAgICAgaWYgKGJl
bG9uZ3NJbk1pbmlmaWVkR3JhcGgobV9jdXJyZW50Tm9kZS0+b3AoKSkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxOTU1
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxNyw3ICszMTcsNyBAQCBwdWJsaWM6CiAgICAgR2VuZXJhdGVkT3Bl
cmFuZFR5cGUgY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihOb2RlKik7CiAKICAgICB2b2lk
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4p
OwotICAgIHZvaWQgcnVuU2xvd1BhdGhHZW5lcmF0b3JzKCk7CisgICAgdm9pZCBydW5TbG93UGF0
aEdlbmVyYXRvcnMoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJik7CiAgICAgCiAgICAgdm9pZCBj
b21waWxlKE5vZGUqKTsKICAgICB2b2lkIG5vdGljZU9TUkJpcnRoKE5vZGUqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE5NTU3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIKICNp
bmNsdWRlICJKSVRTdWJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5j
bHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtMTM0LDYgKzEz
NSw5IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAg
c3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9Cisg
ICAgCisgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFz
ZVBDVG9PcmlnaW5NYXAoKTsKKyAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0
ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cihXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVy
KSk7CiAKICAgICBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxHZW5lcmF0
ZWRGdW5jdGlvbj4oCiAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+
ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCShyZXZpc2lvbiAxOTU1
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCwxMSBAQAogCiAjaW5jbHVkZSAiQ29uc2VydmF0
aXZlUm9vdHMuaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgogI2lu
Y2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTExJ
bnRQQ1Jhbmdlcy5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiVk0u
aCIKICNpbmNsdWRlIDxzZXRqbXAuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTU3Nyw2ICs1
ODAsNjQgQEAgdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOgogI2Vycm9y
IE5lZWQgYSB3YXkgdG8gZ2V0IHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIGZvciBhbm90aGVyIHRo
cmVhZCBvbiB0aGlzIHBsYXRmb3JtCiAjZW5kaWYKIH0KK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpU
aHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0Cit7CisgICAgLy8gTExJbnQgdXNlcyBy
ZWdUNCBhcyBQQy4KKyNpZiBPUyhEQVJXSU4pCisKKyNpZiBfX0RBUldJTl9VTklYMDMKKworI2lm
IENQVShYODYpCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBYODZSZWdpc3Rl
cnM6OmVzaSwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWdzLl9fZXNpKTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgc3RhdGljX2Fzc2Vy
dChMTEludDo6TExJbnRQQyA9PSBYODZSZWdpc3RlcnM6OnI4LCAiV3JvbmcgTExJbnQgUEMuIik7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX19yOCk7CisjZWxpZiBD
UFUoQVJNKQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gQVJNUmVnaXN0ZXJz
OjpyOCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWdzLl9fcls4XSk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgc3RhdGljX2Fzc2VydChM
TEludDo6TExJbnRQQyA9PSBBUk02NFJlZ2lzdGVyczo6eDQsICJXcm9uZyBMTEludCBQQy4iKTsK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVncy5fX3hbNF0pOworI2Vsc2UK
KyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyNlbHNlIC8vICFfX0RBUldJ
Tl9VTklYMDMKKyNpZiBDUFUoWDg2KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMg
PT0gWDg2UmVnaXN0ZXJzOjplc2ksICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVncy5lc2kpOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICBz
dGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6cjgsICJXcm9uZyBM
TEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVncy5yOCk7
CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworI2VuZGlmIC8v
IF9fREFSV0lOX1VOSVgwMworCisvLyBlbmQgT1MoREFSV0lOKQorI2VsaWYgT1MoV0lORE9XUykK
KworI2lmIENQVShBUk0pCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBBUk1S
ZWdpc3RlcnM6OnI4LCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KCh1aW50cHRyX3QpIHJlZ3MuUjgpOworI2VsaWYgQ1BVKE1JUFMpCisjZXJy
b3IgRG9udCBrbm93IHdoYXQgdG8gZG8gd2l0aCBtaXBzLiBEbyB3ZSBldmVuIG5lZWQgdGhpcz8K
KyNlbGlmIENQVShYODYpCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBYODZS
ZWdpc3RlcnM6OmVzaSwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PHZvaWQqPigodWludHB0cl90KSByZWdzLkVzaSk7CisjZWxpZiBDUFUoWDg2XzY0KQor
ICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0ZXJzOjpyMTAsICJX
cm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHVp
bnRwdHJfdCkgcmVncy5SMTApOworI2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQor
I2VuZGlmCisKKyNlbHNlCisjZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIExMSW50UEMgZm9y
IGFub3RoZXIgdGhyZWFkIG9uIHRoaXMgcGxhdGZvcm0KKyNlbmRpZgorfQogI2VuZGlmIC8vIEVO
QUJMRShTQU1QTElOR19QUk9GSUxFUikKIAogdm9pZCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpm
cmVlUmVnaXN0ZXJzKFRocmVhZDo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkocmV2aXNpb24g
MTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShT
QU1QTElOR19QUk9GSUxFUikKICAgICAgICAgICAgIHZvaWQqIGZyYW1lUG9pbnRlcigpIGNvbnN0
OwogICAgICAgICAgICAgdm9pZCogaW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3Q7CisgICAgICAg
ICAgICB2b2lkKiBsbGludFBDKCkgY29uc3Q7CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BS
T0ZJTEVSKQogICAgICAgICAgICAgCiAjaWYgT1MoREFSV0lOKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAJKHJldmlzaW9uIDE5NTU3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2Zp
bGVyQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBJbnNw
ZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjphZGRFdgogfQogCiAjaWYgRU5BQkxFKFNBTVBMSU5H
X1BST0ZJTEVSKQotc3RhdGljIFJlZjxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlNhbXBsZXM+
IGJ1aWxkU2FtcGxlcyhWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZT4mIHNhbXBs
aW5nUHJvZmlsZXJTdGFja1RyYWNlcywgZG91YmxlIHRvdGFsVGltZSkKK3N0YXRpYyBSZWY8UHJv
dG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW1wbGVzPiBidWlsZFNhbXBsZXMoVmVjdG9yPFNhbXBs
aW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+JiYgc2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzLCBk
b3VibGUgdG90YWxUaW1lKQogewogICAgIFJlZjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlNj
cmlwdFByb2ZpbGVyOjpTdGFja1RyYWNlPj4gc3RhY2tUcmFjZXMgPSBQcm90b2NvbDo6QXJyYXk8
UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTdGFja1RyYWNlPjo6Y3JlYXRlKCk7CiAgICAgZm9y
IChTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlJiBzdGFja1RyYWNlIDogc2FtcGxpbmdQcm9m
aWxlclN0YWNrVHJhY2VzKSB7CkBAIC0xNjYsOCArMTY2LDggQEAgc3RhdGljIFJlZjxQcm90b2Nv
bDo6U2NyaXB0UHJvZmlsZXI6OlNhbQogICAgICAgICAgICAgUmVmPFByb3RvY29sOjpTY3JpcHRQ
cm9maWxlcjo6U3RhY2tGcmFtZT4gZnJhbWUgPSBQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlN0
YWNrRnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgLnNldFNvdXJjZUlEKFN0cmluZzo6
bnVtYmVyKHN0YWNrRnJhbWUuc291cmNlSUQoKSkpCiAgICAgICAgICAgICAgICAgLnNldE5hbWUo
c3RhY2tGcmFtZS5kaXNwbGF5TmFtZSgpKQotICAgICAgICAgICAgICAgIC5zZXRMaW5lKHN0YWNr
RnJhbWUuc3RhcnRMaW5lKCkpCi0gICAgICAgICAgICAgICAgLnNldENvbHVtbihzdGFja0ZyYW1l
LnN0YXJ0Q29sdW1uKCkpCisgICAgICAgICAgICAgICAgLnNldExpbmUoc3RhY2tGcmFtZS5mdW5j
dGlvblN0YXJ0TGluZSgpKQorICAgICAgICAgICAgICAgIC5zZXRDb2x1bW4oc3RhY2tGcmFtZS5m
dW5jdGlvblN0YXJ0Q29sdW1uKCkpCiAgICAgICAgICAgICAgICAgLnNldFVybChzdGFja0ZyYW1l
LnVybCgpKQogICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICBmcmFtZXMt
PmFkZEl0ZW0oV1RGTW92ZShmcmFtZSkpOwpAQCAtMTk0LDggKzE5NCw4IEBAIHZvaWQgSW5zcGVj
dG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6dHJhY2sKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2Ft
cGxpbmdQcm9maWxlcik7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmls
ZXItPmdldExvY2soKSk7CiAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnN0b3AobG9ja2VyKTsK
LSAgICAgICAgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U2FtcGxlcz4gc2FtcGxlcyA9
IGJ1aWxkU2FtcGxlcyhzYW1wbGluZ1Byb2ZpbGVyLT5zdGFja1RyYWNlcyhsb2NrZXIpLCBzYW1w
bGluZ1Byb2ZpbGVyLT50b3RhbFRpbWUobG9ja2VyKSk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmls
ZXItPmNsZWFyRGF0YShsb2NrZXIpOworICAgICAgICBWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6
U3RhY2tUcmFjZT4gc3RhY2tUcmFjZXMgPSBzYW1wbGluZ1Byb2ZpbGVyLT5yZWxlYXNlU3RhY2tU
cmFjZXMobG9ja2VyKTsKKyAgICAgICAgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U2Ft
cGxlcz4gc2FtcGxlcyA9IGJ1aWxkU2FtcGxlcyhXVEZNb3ZlKHN0YWNrVHJhY2VzKSwgc2FtcGxp
bmdQcm9maWxlci0+dG90YWxUaW1lKGxvY2tlcikpOwogCiAgICAgICAgIGxvY2tlci51bmxvY2tF
YXJseSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxOTU1
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNl
LmgiCiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgpA
QCAtMTU4LDYgKzE1OSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2lu
ICsgbV9ieXRlY29kZU9mZnNldDsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2ludGVy
cHJldGVyLT5pc09wY29kZShjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSwgInByaXZhdGVD
b21waWxlTWFpblBhc3MgZ29uZSBiYWQgQCAlZCIsIG1fYnl0ZWNvZGVPZmZzZXQpOwogCisgICAg
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlT2Zmc2V0KSk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQog
ICAgICAgICBpZiAobV9ieXRlY29kZU9mZnNldCA+IDApIC8vIEF2b2lkIHRoZSBvdmVyaGVhZCBv
ZiBzYW1wbGluZyBvcF9lbnRlciB0d2ljZS4KICAgICAgICAgICAgIHNhbXBsZUluc3RydWN0aW9u
KGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0zNjUsNiArMzY4LDggQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5k
KCk7KSB7CiAgICAgICAgIG1fYnl0ZWNvZGVPZmZzZXQgPSBpdGVyLT50bzsKIAorICAgICAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4o
bV9ieXRlY29kZU9mZnNldCkpOworCiAgICAgICAgIHVuc2lnbmVkIGZpcnN0VG8gPSBtX2J5dGVj
b2RlT2Zmc2V0OwogCiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBp
bnN0cnVjdGlvbnNCZWdpbiArIG1fYnl0ZWNvZGVPZmZzZXQ7CkBAIC01MTksNiArNTI0LDggQEAg
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICBtX2NvbXBp
bGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LCBtX2NvZGVCbG9jayk7CiAgICAgfQogICAgIAorICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbigwLCBudWxscHRyKSk7CisKICAgICBp
ZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29k
ZShsYWJlbCgpKTsKIApAQCAtNTY1LDEyICs1NzIsMTMgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklU
Ojpwcml2YXRlQ29tcGlsZShKSQogICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKICAgICBlbWl0
TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgcHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpOworICAgIHByaXZhdGVDb21waWxlTWFpblBhc3MobV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIpOwogICAgIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKLSAgICBwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpOworICAgIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKTsKICAgICAKICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOworICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlz
KTsKICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gMDsKQEAgLTYxMiw2ICs2MjAsOCBAQCBDb21waWxh
dGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgCiAgICAgaWYgKG1fZGlzYXNz
ZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwor
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKKwogCiAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpOwogICAg
IGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQpAQCAtNzA4LDYgKzcxOCw4IEBA
IENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZm
ZXIpOwogICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9u
KG1fY29tcGlsYXRpb24pOwogICAgIH0KKworICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9y
aWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpKTsKICAgICAKICAgICBDb2RlUmVm
IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLApAQCAtNzE2LDcg
KzcyOCw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICBt
X3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQuYWRkKAog
ICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KHJlc3VsdC5zaXplKCkpIC8KICAgICAgICAgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Ci0g
ICAgCisKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpMYXRlU2hyaW5r
KTsKICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKICAgICAgICAgYWRvcHRSZWYobmV3IERp
cmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxpbmVKSVQp
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDcgQEAKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5j
bHVkZSAiU2FtcGxpbmdUb29sLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNp
bmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtOTEzLDYgKzkx
NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXZWFrUmFuZG9tIG1fcmFuZG9tR2VuZXJh
dG9yOwogICAgICAgICBzdGF0aWMgQ29kZVJlZiBzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3Io
Vk0qKTsKIAorICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXI7CisKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwogICAgICAgICBi
b29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0
UHJvZmlsaW5nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29k
ZU9yaWdpbk1hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKworI2luY2x1ZGUgIkIz
UENUb09yaWdpbk1hcC5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitjbGFzcyBEZWx0YUNv
bXByZXNzaW9uQnVpbGRlciB7CitwdWJsaWM6CisgICAgRGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIo
c2l6ZV90IG1heFNpemUpCisgICAgICAgIDogbV9vZmZzZXQoMCkKKyAgICAgICAgLCBtX21heFNp
emUobWF4U2l6ZSkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhf
dCo+KGZhc3RNYWxsb2MobV9tYXhTaXplKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgdm9pZCB3cml0ZShUIGl0ZW0pCisgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX29mZnNldCArIHNpemVvZihUKSA8PSBtX21heFNpemUpOworICAgICAgICAqYml0d2lz
ZV9jYXN0PFQqPihtX2J1ZmZlciArIG1fb2Zmc2V0KSA9IGl0ZW07CisgICAgICAgIG1fb2Zmc2V0
ICs9IHNpemVvZihUKTsKKyAgICB9CisKKyAgICB1aW50OF90KiBtX2J1ZmZlcjsgCisgICAgc2l6
ZV90IG1fb2Zmc2V0OworICAgIHNpemVfdCBtX21heFNpemU7Cit9OworCitjbGFzcyBEZWx0YUNv
bXByZXNzZWlvblJlYWRlciB7CitwdWJsaWM6CisgICAgRGVsdGFDb21wcmVzc2Vpb25SZWFkZXIo
dWludDhfdCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIp
CisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7IH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIFQgcmVhZCgpCisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX29mZnNldCArIHNpemVvZihUKSA8PSBtX3NpemUpOworICAgICAg
ICBUIHJlc3VsdCA9ICpiaXR3aXNlX2Nhc3Q8VCo+KG1fYnVmZmVyICsgbV9vZmZzZXQpOworICAg
ICAgICBtX29mZnNldCArPSBzaXplb2YoVCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworICAgIHNpemVfdCBtX3NpemU7
CisgICAgc2l6ZV90IG1fb2Zmc2V0OworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K3ZvaWQgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjphcHBlbmRJdGVtKE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBsYWJlbCwgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKK3sKKyAgICBpZiAo
bV9jb2RlUmFuZ2VzLnNpemUoKSkgeworICAgICAgICBpZiAobV9jb2RlUmFuZ2VzLmxhc3QoKS5l
bmQgPT0gbGFiZWwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fY29kZVJhbmdlcy5s
YXN0KCkuZW5kID0gbGFiZWw7CisgICAgICAgIGlmIChtX2NvZGVSYW5nZXMubGFzdCgpLmNvZGVP
cmlnaW4gPT0gY29kZU9yaWdpbiB8fCAhY29kZU9yaWdpbikKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX2NvZGVSYW5nZXMuYXBwZW5kKENvZGVSYW5nZXtsYWJlbCwgbGFiZWws
IGNvZGVPcmlnaW59KTsKK30KKworI2lmIEZUTF9VU0VTX0IzCitQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXI6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihCMzo6UENUb09yaWdpbk1hcCYmIGIzUENU
b09yaWdpbk1hcCkKK3sKKyAgICBmb3IgKGNvbnN0IEIzOjpQQ1RvT3JpZ2luTWFwOjpPcmlnaW5S
YW5nZSYgb3JpZ2luUmFuZ2UgOiBiM1BDVG9PcmlnaW5NYXAucmFuZ2VzKCkpIHsKKyAgICAgICAg
REZHOjpOb2RlKiBub2RlID0gYml0d2lzZV9jYXN0PERGRzo6Tm9kZSo+KG9yaWdpblJhbmdlLm9y
aWdpbi5kYXRhKCkpOworICAgICAgICBpZiAobm9kZSkKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0o
b3JpZ2luUmFuZ2UubGFiZWwsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFwcGVuZEl0ZW0ob3JpZ2luUmFuZ2UubGFiZWwsIFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CisgICAgfQorfQorI2VuZGlmCisKKwor
c3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2VudGluZWxQQ0RlbHRhID0gMDsKK3N0YXRpYyBjb25zdCBp
bnQ4X3Qgc2VudGluZWxCeXRlY29kZURlbHRhID0gMDsKKworUENUb0NvZGVPcmlnaW5NYXA6OlBD
VG9Db2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYmIGJ1aWxkZXIsIExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpCit7CisKKyAgICBpZiAoIWJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNp
emUoKSkgeworICAgICAgICBtX3BjUmFuZ2VTdGFydCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dHB0cl90Pjo6bWF4KCk7CisgICAgICAgIG1fcGNSYW5nZUVuZCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludHB0cl90Pjo6bWF4KCk7CisKKyAgICAgICAgbV9jb21wcmVzc2VkUENCdWZmZXJTaXpl
ID0gMDsKKyAgICAgICAgbV9jb21wcmVzc2VkUENzID0gbnVsbHB0cjsKKworICAgICAgICBtX2Nv
bXByZXNzZWRDb2RlT3JpZ2luc1NpemUgPSAwOworICAgICAgICBtX2NvbXByZXNzZWRDb2RlT3Jp
Z2lucyA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGRv
IGEgZmluYWwgdG91Y2gtdXAgb24gdGhlIGxhc3QgcmFuZ2UgaGVyZSBiZWNhdXNlIG9mIGhvdyB3
ZSBnZW5lcmF0ZSB0aGUgdGFibGUuCisgICAgLy8gVGhlIGZpbmFsIHJhbmdlIChpZiBub24gZW1w
dHkpIHdvdWxkIGJlIGlnbm9yZWQgaWYgd2UgZGlkbid0IGFwcGVuZCBhbnkgKGFyYml0cmFyeSkK
KyAgICAvLyByYW5nZSBhcyB0aGUgbGFzdCBpdGVtIG9mIHRoZSB2ZWN0b3IuCisgICAgUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2UmIGxhc3QgPSBidWlsZGVyLm1fY29kZVJhbmdl
cy5sYXN0KCk7CisgICAgaWYgKCEobGFzdC5zdGFydCA9PSBsYXN0LmVuZCkpCisgICAgICAgIGJ1
aWxkZXIubV9jb2RlUmFuZ2VzLmFwcGVuZChQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVS
YW5nZXsgbGFzdC5lbmQsIGxhc3QuZW5kLCBsYXN0LmNvZGVPcmlnaW4gfSk7IC8vIFRoaXMgcmFu
Z2Ugd2lsbCBuZXZlciBhY3R1YWxseSBiZSBmb3VuZCwgYnV0IGl0IGVuc3VyZXMgdGhlIHJlYWwg
bGFzdCByYW5nZSBpcyBmb3VuZC4KKworICAgIERlbHRhQ29tcHJlc3Npb25CdWlsZGVyIHBjQ29t
cHJlc3Nvcigoc2l6ZW9mKHVpbnRwdHJfdCkgKyBzaXplb2YodWludDhfdCkpICogYnVpbGRlci5t
X2NvZGVSYW5nZXMuc2l6ZSgpKTsKKyAgICB2b2lkKiBsYXN0UENWYWx1ZSA9IG51bGxwdHI7Cisg
ICAgYXV0byBidWlsZFBDVGFibGUgPSBbJl0gKHZvaWQqIHBjVmFsdWUpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQocGNWYWx1ZSA+IGxhc3RQQ1ZhbHVlKTsKKyAgICAgICAgdWludHB0cl90IGRl
bHRhID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocGNWYWx1ZSkgLSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihsYXN0UENWYWx1ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlbHRhICE9IHNl
bnRpbmVsUENEZWx0YSk7CisgICAgICAgIGxhc3RQQ1ZhbHVlID0gcGNWYWx1ZTsKKyAgICAgICAg
aWYgKGRlbHRhID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpIHsKKyAgICAg
ICAgICAgIHBjQ29tcHJlc3Nvci53cml0ZTx1aW50OF90PihzZW50aW5lbFBDRGVsdGEpOworICAg
ICAgICAgICAgcGNDb21wcmVzc29yLndyaXRlPHVpbnRwdHJfdD4oZGVsdGEpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcGNDb21wcmVzc29yLndyaXRlPHVpbnQ4
X3Q+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGRlbHRhKSk7CisgICAgfTsKKworICAgIERlbHRhQ29t
cHJlc3Npb25CdWlsZGVyIGNvZGVPcmlnaW5Db21wcmVzc29yKChzaXplb2YoaW50cHRyX3QpICsg
c2l6ZW9mKGludDhfdCkgKyBzaXplb2YoaW50OF90KSArIHNpemVvZihJbmxpbmVDYWxsRnJhbWUq
KSkgKiBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCkpOworICAgIENvZGVPcmlnaW4gbGFzdENv
ZGVPcmlnaW4oMCwgbnVsbHB0cik7CisgICAgYXV0byBidWlsZENvZGVPcmlnaW5UYWJsZSA9IFsm
XSAoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikgeworICAgICAgICBpbnRwdHJfdCBkZWx0
YSA9IHN0YXRpY19jYXN0PGludHB0cl90Pihjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpIC0gc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KGxhc3RDb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICBsYXN0Q29kZU9yaWdpbiA9IGNvZGVPcmlnaW47CisgICAgICAgIGlmIChkZWx0YSA+IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWF4KCkgfHwgZGVsdGEgPCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDhfdD46Om1pbigpIHx8IGRlbHRhID09IHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSkgewor
ICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50OF90PihzZW50aW5lbEJ5
dGVjb2RlRGVsdGEpOworICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50
cHRyX3Q+KGRlbHRhKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb2RlT3JpZ2luQ29t
cHJlc3Nvci53cml0ZTxpbnQ4X3Q+KHN0YXRpY19jYXN0PGludDhfdD4oZGVsdGEpKTsKKworICAg
ICAgICBpbnQ4X3QgaGFzSW5saW5lQ2FsbEZyYW1lQnl0ZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lID8gMSA6IDA7CisgICAgICAgIGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPGludDhf
dD4oaGFzSW5saW5lQ2FsbEZyYW1lQnl0ZSk7CisgICAgICAgIGlmIChoYXNJbmxpbmVDYWxsRnJh
bWVCeXRlKQorICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8SW5saW5lQ2Fs
bEZyYW1lKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgIH07CisKKyAgICBtX3Bj
UmFuZ2VTdGFydCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxpbmtCdWZmZXIubG9jYXRpb25P
ZihidWlsZGVyLm1fY29kZVJhbmdlcy5maXJzdCgpLnN0YXJ0KS5kYXRhTG9jYXRpb24oKSk7Cisg
ICAgbV9wY1JhbmdlRW5kID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obGlua0J1ZmZlci5sb2Nh
dGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmxhc3QoKS5lbmQpLmRhdGFMb2NhdGlvbigpKTsK
KyAgICBtX3BjUmFuZ2VFbmQgLT0gMTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
dWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXI6OkNvZGVSYW5nZSYgY29kZVJhbmdlID0gYnVpbGRlci5tX2NvZGVSYW5nZXNb
aV07CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVSYW5n
ZS5zdGFydCkuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgIHZvaWQqIGVuZCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihjb2RlUmFuZ2UuZW5kKS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAgQVNTRVJU
KG1fcGNSYW5nZVN0YXJ0IDw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSk7CisgICAg
ICAgIEFTU0VSVChtX3BjUmFuZ2VFbmQgPj0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kKSAt
IDEpOworICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQorICAgICAgICAgICAgQVNTRVJUKGkgPT0g
YnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpIC0gMSk7CisgICAgICAgIGlmIChpID4gMCkKKyAg
ICAgICAgICAgIEFTU0VSVChsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYnVpbGRlci5tX2NvZGVSYW5n
ZXNbaSAtIDFdLmVuZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3RhcnQpOworCisgICAgICAgIGJ1aWxk
UENUYWJsZShzdGFydCk7CisgICAgICAgIGJ1aWxkQ29kZU9yaWdpblRhYmxlKGNvZGVSYW5nZS5j
b2RlT3JpZ2luKTsKKyAgICB9CisKKyAgICBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemUgPSBwY0Nv
bXByZXNzb3IubV9vZmZzZXQ7CisgICAgbV9jb21wcmVzc2VkUENzID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KGZhc3RSZWFsbG9jKHBjQ29tcHJlc3Nvci5tX2J1ZmZlciwgbV9jb21wcmVzc2VkUENC
dWZmZXJTaXplKSk7CisKKyAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemUgPSBjb2RlT3Jp
Z2luQ29tcHJlc3Nvci5tX29mZnNldDsKKyAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2lucyA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhjb2RlT3JpZ2luQ29tcHJlc3Nvci5tX2J1
ZmZlciwgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplKSk7Cit9CisKK1BDVG9Db2RlT3JpZ2lu
TWFwOjp+UENUb0NvZGVPcmlnaW5NYXAoKQoreworICAgIGlmIChtX2NvbXByZXNzZWRQQ3MpCisg
ICAgICAgIGZhc3RGcmVlKG1fY29tcHJlc3NlZFBDcyk7CisgICAgaWYgKG1fY29tcHJlc3NlZENv
ZGVPcmlnaW5zKQorICAgICAgICBmYXN0RnJlZShtX2NvbXByZXNzZWRDb2RlT3JpZ2lucyk7Cit9
CisKK2RvdWJsZSBQQ1RvQ29kZU9yaWdpbk1hcDo6bWVtb3J5U2l6ZSgpCit7CisgICAgZG91Ymxl
IHNpemUgPSAwOworICAgIHNpemUgKz0gbV9jb21wcmVzc2VkUENCdWZmZXJTaXplOworICAgIHNp
emUgKz0gbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplOworICAgIHJldHVybiBzaXplOworfQor
CitPcHRpb25hbDxDb2RlT3JpZ2luPiBQQ1RvQ29kZU9yaWdpbk1hcDo6ZmluZFBDKHZvaWQqIHBj
KSBjb25zdAoreworICAgIHVpbnRwdHJfdCBwY0FzSW50ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4ocGMpOworICAgIGlmICghKG1fcGNSYW5nZVN0YXJ0IDw9IHBjQXNJbnQgJiYgcGNBc0ludCA8
PSBtX3BjUmFuZ2VFbmQpKQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKworICAgIHVpbnRwdHJf
dCBjdXJyZW50UEMgPSAwOworICAgIENvZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oMCwgbnVs
bHB0cik7CisKKyAgICBEZWx0YUNvbXByZXNzZWlvblJlYWRlciBwY1JlYWRlcihtX2NvbXByZXNz
ZWRQQ3MsIG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZSk7CisgICAgRGVsdGFDb21wcmVzc2Vpb25S
ZWFkZXIgY29kZU9yaWdpblJlYWRlcihtX2NvbXByZXNzZWRDb2RlT3JpZ2lucywgbV9jb21wcmVz
c2VkQ29kZU9yaWdpbnNTaXplKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB1aW50cHRy
X3QgcHJldmlvdXNQQyA9IGN1cnJlbnRQQzsKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhf
dCB2YWx1ZSA9IHBjUmVhZGVyLnJlYWQ8dWludDhfdD4oKTsKKyAgICAgICAgICAgIHVpbnRwdHJf
dCBkZWx0YTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBzZW50aW5lbFBDRGVsdGEpCisgICAg
ICAgICAgICAgICAgZGVsdGEgPSBwY1JlYWRlci5yZWFkPHVpbnRwdHJfdD4oKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZWx0YSA9IHZhbHVlOworICAgICAgICAgICAgY3Vy
cmVudFBDICs9IGRlbHRhOworICAgICAgICB9CisKKyAgICAgICAgQ29kZU9yaWdpbiBwcmV2aW91
c09yaWdpbiA9IGN1cnJlbnRDb2RlT3JpZ2luOworICAgICAgICB7CisgICAgICAgICAgICBpbnQ4
X3QgdmFsdWUgPSBjb2RlT3JpZ2luUmVhZGVyLnJlYWQ8aW50OF90PigpOworICAgICAgICAgICAg
aW50cHRyX3QgZGVsdGE7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gc2VudGluZWxCeXRlY29k
ZURlbHRhKQorICAgICAgICAgICAgICAgIGRlbHRhID0gY29kZU9yaWdpblJlYWRlci5yZWFkPGlu
dHB0cl90PigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRlbHRhID0gc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKKworICAgICAgICAgICAgY3VycmVudENvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4oY3VycmVudENvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkgKyBkZWx0YSk7CisKKyAgICAg
ICAgICAgIGludDhfdCBoYXNJbmxpbmVGcmFtZSA9IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxpbnQ4
X3Q+KCk7CisgICAgICAgICAgICBBU1NFUlQoaGFzSW5saW5lRnJhbWUgPT0gMCB8fCBoYXNJbmxp
bmVGcmFtZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChoYXNJbmxpbmVGcmFtZSkKKyAgICAgICAg
ICAgICAgICBjdXJyZW50Q29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUmVh
ZGVyLnJlYWQ8SW5saW5lQ2FsbEZyYW1lKj4oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBjdXJyZW50Q29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHByZXZpb3VzUEMpIHsKKyAgICAgICAgICAgIHVpbnRwdHJf
dCBzdGFydE9mUmFuZ2UgPSBwcmV2aW91c1BDOworICAgICAgICAgICAgLy8gV2Ugc3VidHJhY3Qg
MSBiZWNhdXNlIHdlIGdlbmVyYXRlIGVuZCBwb2ludHMgaW5jbHVzaXZlbHkgaW4gdGhpcyB0YWJs
ZSwgZXZlbiB0aG91Z2ggd2UgYXJlIGludGVyZXN0ZWQgaW4gcmFuZ2VzIG9mIHRoZSBmb3JtOiBb
cHJldmlvdXNQQywgY3VycmVudFBDKQorICAgICAgICAgICAgdWludHB0cl90IGVuZE9mUmFuZ2Ug
PSBjdXJyZW50UEMgLSAxOworICAgICAgICAgICAgaWYgKHN0YXJ0T2ZSYW5nZSA8PSBwY0FzSW50
ICYmIHBjQXNJbnQgPD0gZW5kT2ZSYW5nZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9u
YWw8Q29kZU9yaWdpbj4ocHJldmlvdXNPcmlnaW4pOyAvLyBXZSByZXR1cm4gcHJldmlvdXNPcmln
aW4gaGVyZSBiZWNhdXNlIENvZGVPcmlnaW4ncyBhcmUgbWFwcGVkIHRvIHRoZSBzdGFydFZhbHVl
IG9mIHRoZSByYW5nZS4KKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmln
aW5NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUENUb0NvZGVPcmlnaW5NYXBf
aAorI2RlZmluZSBQQ1RvQ29kZU9yaWdpbk1hcF9oCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgi
CisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNp
bmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKKyNpZiBGVExfVVNFU19CMworbmFtZXNwYWNlIEIzIHsKKyAgICBjbGFzcyBQQ1Rv
T3JpZ2luTWFwOworfQorI2VuZGlmCisKK2NsYXNzIExpbmtCdWZmZXI7CitjbGFzcyBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI7CisKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKTsKKyAgICBm
cmllbmQgY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CisKK3B1YmxpYzoKKyAgICBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIoKQorICAgIHsgfQorCisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYmIG90aGVyKQorICAgICAgICA6IG1fY29kZVJhbmdl
cyhXVEZNb3ZlKG90aGVyLm1fY29kZVJhbmdlcykpCisgICAgeyB9CisKKyNpZiBGVExfVVNFU19C
MworICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihCMzo6UENUb09yaWdpbk1hcCYmKTsKKyNl
bmRpZgorCisgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCwgY29uc3Qg
Q29kZU9yaWdpbiYpOworICAgIHN0YXRpYyBDb2RlT3JpZ2luIGRlZmF1bHRDb2RlT3JpZ2luKCkg
eyByZXR1cm4gQ29kZU9yaWdpbigwLCBudWxscHRyKTsgfQorCitwcml2YXRlOgorCisgICAgc3Ry
dWN0IENvZGVSYW5nZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzdGFydDsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGVuZDsKKyAgICAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOworICAgIH07CisKKyAgICBWZWN0b3I8Q29kZVJhbmdlPiBtX2NvZGVSYW5nZXM7Cit9
OworCitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UENUb0NvZGVPcmlnaW5NYXApOworcHVibGljOgorICAgIFBDVG9Db2RlT3JpZ2luTWFwKFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlciYmLCBMaW5rQnVmZmVyJik7CisgICAgflBDVG9Db2RlT3JpZ2lu
TWFwKCk7CisKKyAgICBPcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpIGNvbnN0
OworCisgICAgZG91YmxlIG1lbW9yeVNpemUoKTsKKworcHJpdmF0ZToKKyAgICBzaXplX3QgbV9j
b21wcmVzc2VkUENCdWZmZXJTaXplOworICAgIHNpemVfdCBtX2NvbXByZXNzZWRDb2RlT3JpZ2lu
c1NpemU7CisgICAgdWludDhfdCogbV9jb21wcmVzc2VkUENzOworICAgIHVpbnQ4X3QqIG1fY29t
cHJlc3NlZENvZGVPcmlnaW5zOworICAgIHVpbnRwdHJfdCBtX3BjUmFuZ2VTdGFydDsKKyAgICB1
aW50cHRyX3QgbV9wY1JhbmdlRW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBQQ1RvQ29kZU9yaWdpbk1hcF9oIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50UENSYW5nZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRQQ1Jhbmdlcy5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRQQ1Jhbmdlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0
NSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNMTEludFBDKHZvaWQqIHBjKQogICAgIHJldHVy
biBsbGludFN0YXJ0IDw9IHBjQXNJbnQgJiYgcGNBc0ludCA8PSBsbGludEVuZDsKIH0KIAorI2lm
IEVOQUJMRShKSVQpCitzdGF0aWMgY29uc3QgR1BSUmVnIExMSW50UEMgPSBHUFJJbmZvOjpyZWdU
NDsKKyNlbmRpZgorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6TExJbnQKIAogI2VuZGlmIC8vIExM
SW50UENSYW5nZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTgsNyArMjU4LDcgQEAgaWYgSlNWQUxVRTY0CiAgICAgIyAtIFRoZSBQQyBiYXNlIChv
ciBQQiBmb3Igc2hvcnQpIG11c3QgYmUgc3RvcmVkIGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIu
CiAgICAgIyAtIEMgY2FsbHMgYXJlIHN0aWxsIGdpdmVuIHRoZSBJbnN0cnVjdGlvbiogcmF0aGVy
IHRoYW4gdGhlIFBDIGluZGV4LgogICAgICMgICBUaGlzIHJlcXVpcmVzIGFuIGFkZCBiZWZvcmUg
dGhlIGNhbGwsIGFuZCBhIHN1YiBhZnRlci4KLSAgICBjb25zdCBQQyA9IHQ0CisgICAgY29uc3Qg
UEMgPSB0NCAjIFdoZW4gY2hhbmdpbmcgdGhpcywgbWFrZSBzdXJlIExMSW50UEMgaXMgdXAgdG8g
ZGF0ZSBpbiBMTEludFBDUmFuZ2VzLmgKICAgICBpZiBBUk02NAogICAgICAgICBjb25zdCBQQiA9
IGNzcjcKICAgICAgICAgY29uc3QgdGFnVHlwZU51bWJlciA9IGNzcjgKQEAgLTI5MCw3ICsyOTAs
NyBAQCBpZiBKU1ZBTFVFNjQKICAgICBlbmQKIAogZWxzZQotICAgIGNvbnN0IFBDID0gdDQKKyAg
ICBjb25zdCBQQyA9IHQ0ICMgV2hlbiBjaGFuZ2luZyB0aGlzLCBtYWtlIHN1cmUgTExJbnRQQyBp
cyB1cCB0byBkYXRlIGluIExMSW50UENSYW5nZXMuaAogICAgIG1hY3JvIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbihvZmZzZXQsIGRlc3QpCiAgICAgICAgIGxvYWRpcyBvZmZzZXQgKiA0W1BDXSwgZGVz
dAogICAgIGVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiTExJbnRQQ1Jhbmdlcy5oIgogI2luY2x1ZGUgIk1hcmtl
ZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJQQ1RvQ29k
ZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZp
c2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQ5LDcgKzUwLDYgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiBzdGF0aWMgZG91YmxlIHNOdW1Ub3RhbFN0YWNrVHJhY2VzID0gMDsKLXN0
YXRpYyBkb3VibGUgc051bVVudmVyaWZpZWRTdGFja1RyYWNlcyA9IDA7CiBzdGF0aWMgZG91Ymxl
IHNOdW1Ub3RhbFdhbGtzID0gMDsKIHN0YXRpYyBkb3VibGUgc051bUZhaWxlZFdhbGtzID0gMDsK
IHN0YXRpYyBjb25zdCB1aW50MzJfdCBzTnVtV2Fsa1JlcG9ydGluZ0ZyZXF1ZW5jeSA9IDUwOwpA
QCAtNTgsNiArNTgsOCBAQCBzdGF0aWMgY29uc3QgYm9vbCBzUmVwb3J0U3RhdHNPbmx5V2hlblRo
CiBzdGF0aWMgY29uc3QgYm9vbCBzUmVwb3J0U3RhdHMgPSBmYWxzZTsKIAogdXNpbmcgRnJhbWVU
eXBlID0gU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOwordXNpbmcgVW5wcm9jZXNzZWRGcmFt
ZVR5cGUgPSBTYW1wbGluZ1Byb2ZpbGVyOjpVbnByb2Nlc3NlZEZyYW1lVHlwZTsKK3VzaW5nIFVu
cHJvY2Vzc2VkU3RhY2tGcmFtZSA9IFNhbXBsaW5nUHJvZmlsZXI6OlVucHJvY2Vzc2VkU3RhY2tG
cmFtZTsKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCByZXBvcnRTdGF0cygpCiB7CkBAIC02
NSw4ICs2Nyw2IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgcmVwb3J0U3RhdHMoKQogICAg
ICAgICBpZiAoIXNSZXBvcnRTdGF0c09ubHlXaGVuVGhleXJlQWJvdmVUaHJlc2hvbGQgfHwgKHNO
dW1GYWlsZWRXYWxrcyAvIHNOdW1Ub3RhbFdhbGtzID4gc1dhbGtFcnJvclBlcmNlbnRhZ2UpKSB7
CiAgICAgICAgICAgICBkYXRhTG9nRigiTnVtIHRvdGFsIHdhbGtzOiAlbGx1LiBGYWlsZWQgd2Fs
a3MgcGVyY2VudDogJWxmXG4iLAogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90
PihzTnVtVG90YWxXYWxrcyksIHNOdW1GYWlsZWRXYWxrcyAvIHNOdW1Ub3RhbFdhbGtzKTsKLSAg
ICAgICAgICAgIGRhdGFMb2dGKCJUb3RhbCBzdGFjayB0cmFjZXM6ICVsbHUuIE5lZWRzIHZlcmlm
aWNhdGlvbiBwZXJjZW50OiAlbGZcbiIsCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHNOdW1Ub3RhbFN0YWNrVHJhY2VzKSwgc051bVVudmVyaWZpZWRTdGFja1RyYWNlcyAv
IHNOdW1Ub3RhbFN0YWNrVHJhY2VzKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTgyLDMzICs4
MiwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHNpemVfdCB3YWxrKFZlY3RvcjxT
YW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lPiYgc3RhY2tUcmFjZSwgYm9vbCYgZGlkUnVuT3V0
T2ZTcGFjZSwgYm9vbCYgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uKQorICAgIHNpemVfdCB3
YWxrKFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+JiBzdGFja1RyYWNlLCBib29sJiBkaWRS
dW5PdXRPZlNwYWNlKQogICAgIHsKLSAgICAgICAgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9u
ID0gZmFsc2U7CiAgICAgICAgIGlmIChzUmVwb3J0U3RhdHMpCiAgICAgICAgICAgICBzTnVtVG90
YWxXYWxrcysrOwogICAgICAgICByZXNldEF0TWFjaGluZUZyYW1lKCk7CiAgICAgICAgIHNpemVf
dCBtYXhTdGFja1RyYWNlU2l6ZSA9IHN0YWNrVHJhY2Uuc2l6ZSgpOwogICAgICAgICB3aGlsZSAo
IWlzQXRUb3AoKSAmJiAhbV9iYWlsaW5nT3V0ICYmIG1fZGVwdGggPCBtYXhTdGFja1RyYWNlU2l6
ZSkgewotICAgICAgICAgICAgd2hpbGUgKG1faW5saW5lQ2FsbEZyYW1lICYmIG1fZGVwdGggPCBt
YXhTdGFja1RyYWNlU2l6ZSkgewotICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOwotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRDb2RlQmxvY2soY29kZUJsb2NrKSk7Ci0gICAg
ICAgICAgICAgICAgc3RhY2tUcmFjZVttX2RlcHRoXSA9IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNr
RnJhbWUoU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpWZXJpZmllZEV4ZWN1dGFibGUsIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwotICAgICAgICAgICAgICAgIG1fZGVwdGgrKzsK
LSAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZSA9IG1faW5saW5lQ2FsbEZyYW1lLT5k
aXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAobV9kZXB0aCA+PSBtYXhTdGFja1RyYWNlU2l6ZSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZENvZGVCbG9jayhjb2RlQmxvY2spKSB7
Ci0gICAgICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpOwotICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0g
PSBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lKEZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRh
YmxlLGV4ZWN1dGFibGUpOworICAgICAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFs
aWRDb2RlQmxvY2soY29kZUJsb2NrKSk7CisgICAgICAgICAgICAgICAgc3RhY2tUcmFjZVttX2Rl
cHRoXSA9IFVucHJvY2Vzc2VkU3RhY2tGcmFtZShjb2RlQmxvY2ssIG1fY2FsbEZyYW1lLT5jYWxs
U2l0ZUluZGV4KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdGFj
a3RyYWNlTmVlZHNWZXJpZmljYXRpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvZGVCbG9jayA9PSBudWxscHRyKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHVu
c2FmZUNhbGxlZSA9IG1fY2FsbEZyYW1lLT51bnNhZmVDYWxsZWUoKTsKLSAgICAgICAgICAgICAg
ICBzdGFja1RyYWNlW21fZGVwdGhdID0gU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZShGcmFt
ZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUsIEpTVmFsdWU6OmVuY29kZSh1bnNhZmVDYWxsZWUpKTsK
KyAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gVW5wcm9jZXNzZWRTdGFja0Zy
YW1lKEpTVmFsdWU6OmVuY29kZSh1bnNhZmVDYWxsZWUpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIG1fZGVwdGgrKzsKICAgICAgICAgICAgIGFkdmFuY2VUb1BhcmVudEZyYW1lKCk7CkBA
IC0xMzgsOCArMTI1LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVzZXRBdE1hY2hpbmVGcmFt
ZSgpCiAgICAgewotICAgICAgICBtX2lubGluZUNhbGxGcmFtZSA9IG51bGxwdHI7Ci0KICAgICAg
ICAgaWYgKGlzQXRUb3AoKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTUxLDkgKzEzNiw2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotI2lmIEVOQUJM
RShERkdfSklUKQotICAgICAgICAvLyBJZiB0aGUgZnJhbWUgZG9lc24ndCBoYXZlIGEgY29kZSBi
bG9jaywgdGhlbiBpdCdzIG5vdCBhIAotICAgICAgICAvLyBERkcvRlRMIGZyYW1lIHdoaWNoIG1l
YW5zIHdlJ3JlIG5vdCBhbiBpbmxpbmVkIGZyYW1lLgogICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgaWYgKCFjb2RlQmxvY2sp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjQsMjUgKzE0Niw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgc051bUZhaWxlZFdhbGtzKys7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgY29kZSBibG9jayBkb2VzIG5vdCBoYXZlIGFueSBj
b2RlIG9yaWdpbnMsIHRoZW4gdGhlcmUncyBubwotICAgICAgICAvLyBpbmxpbmluZy4gSGVuY2Us
IHdlJ3JlIG5vdCBhdCBhbiBpbmxpbmVkIGZyYW1lLgotICAgICAgICBpZiAoIWNvZGVCbG9jay0+
aGFzQ29kZU9yaWdpbnMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBDYWxsU2l0
ZUluZGV4IGluZGV4ID0gbV9jYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsKLSAgICAgICAgaWYg
KCFjb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRToKLSAgICAgICAgICAgIC8vIEZvciB0aGUgbW9zdCBwYXJ0LCB3ZSBvbmx5IGZhaWwgaGVy
ZSB3aGVuIHdlJ3JlIGxvb2tpbmcKLSAgICAgICAgICAgIC8vIGF0IHRoZSB0b3AgbW9zdCBjYWxs
IGZyYW1lLiBBbGwgb3RoZXIgcGFyZW50IGNhbGwgZnJhbWVzCi0gICAgICAgICAgICAvLyBzaG91
bGQgaGF2ZSBzZXQgdGhlIENhbGxTaXRlSW5kZXggd2hlbiBtYWtpbmcgYSBjYWxsLgotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCByZXNvcnQgdG8gZ2V0dGluZyBpbmZv
cm1hdGlvbiBmcm9tIHRoZSBQQz0+Q29kZU9yaWdpbiBtYXBwaW5nCi0gICAgICAgICAgICAvLyBv
bmNlIHdlIGltcGxlbWVudCBpdDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MjYyOQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1faW5s
aW5lQ2FsbEZyYW1lID0gY29kZUJsb2NrLT5jb2RlT3JpZ2luKGluZGV4KS5pbmxpbmVDYWxsRnJh
bWU7Ci0jZW5kaWYgLy8gIUVOQUJMRShERkdfSklUKQogICAgIH0KIAogICAgIGJvb2wgaXNWYWxp
ZEZyYW1lUG9pbnRlcihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0yMTMsMTQgKzE3NiwxMiBAQCBwcml2
YXRlOgogICAgIGNvbnN0IExvY2tIb2xkZXImIG1fY29kZUJsb2NrU2V0TG9ja2VyOwogICAgIGNv
bnN0IExvY2tIb2xkZXImIG1fbWFjaGluZVRocmVhZHNMb2NrZXI7CiAgICAgYm9vbCBtX2JhaWxp
bmdPdXQgeyBmYWxzZSB9OwotICAgIElubGluZUNhbGxGcmFtZSogbV9pbmxpbmVDYWxsRnJhbWU7
CiAgICAgc2l6ZV90IG1fZGVwdGggeyAwIH07CiB9OwogCiBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1w
bGluZ1Byb2ZpbGVyKFZNJiB2bSwgUmVmUHRyPFN0b3B3YXRjaD4mJiBzdG9wd2F0Y2gpCiAgICAg
OiBtX3ZtKHZtKQogICAgICwgbV9zdG9wd2F0Y2goV1RGTW92ZShzdG9wd2F0Y2gpKQotICAgICwg
bV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeSgwKQogICAgICwgbV90aW1pbmdJbnRlcnZh
bChzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDEwMDApKQogICAgICwgbV90b3RhbFRpbWUoMCkK
ICAgICAsIG1fdGltZXJRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgianNjLnNhbXBsaW5nLXByb2Zp
bGVyLnF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpVc2Vy
SW50ZXJhY3RpdmUpKQpAQCAtMjU2LDIzICsyMTcsMjcgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2Ft
cGxpbmdQcm9maWxlcihWTSYgdgogICAgICAgICAgICAgICAgIC8vIFdoaWxlIHRoZSBKU0MgdGhy
ZWFkIGlzIHN1c3BlbmRlZCwgd2UgY2FuJ3QgZG8gdGhpbmdzIGxpa2UgbWFsbG9jIGJlY2F1c2Ug
dGhlIEpTQyB0aHJlYWQKICAgICAgICAgICAgICAgICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFs
bG9jIGxvY2suCiAgICAgICAgICAgICAgICAgRXhlY1N0YXRlKiBjYWxsRnJhbWU7Ci0gICAgICAg
ICAgICAgICAgdm9pZCogcGM7CisgICAgICAgICAgICAgICAgdm9pZCogbWFjaGluZVBDOworICAg
ICAgICAgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgdm9pZCogbGxpbnRQQzsKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAgICAgICAg
ICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsK
ICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4o
cmVnaXN0ZXJzLmZyYW1lUG9pbnRlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgcGMgPSByZWdp
c3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVQ
QyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
bGxpbnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fanNj
RXhlY3V0aW9uVGhyZWFkLT5mcmVlUmVnaXN0ZXJzKHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0
aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NjEKLSAgICAgICAgICAgICAgICBp
ZiAobV92bS5leGVjdXRhYmxlQWxsb2NhdG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1
dGFibGVBbGxvY2F0b3JMb2NrZXIsIHBjKSkgeworICAgICAgICAgICAgICAgIGlmIChtX3ZtLmV4
ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFsbG9j
YXRvckxvY2tlciwgbWFjaGluZVBDKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobV92bS5p
c0V4ZWN1dGluZ0luUmVnRXhwSklUKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2UncmUgZXhlY3V0aW5nIGEgcmVnZXhwLiBMZXRzIGdhdGhlciBtb3JlIGludGVyc3Rpbmcg
ZGF0YS4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI3MjkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFt
ZSA9IG1fdm0udG9wQ2FsbEZyYW1lOyAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgb3IgZWxzZSB3ZSdk
IGZhaWwgb3VyIGJhY2t0cmFjZSB2YWxpZGF0aW9uIGIvYyB0aGlzIGlzbid0IGEgSlMgZnJhbWUu
CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKExMSW50
Ojppc0xMSW50UEMocGMpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChMTEludDo6aXNM
TEludFBDKG1hY2hpbmVQQykpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9wRnJhbWVJc0xMSW50
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUgb2theSB0byB0YWtlIGEgbm9y
bWFsIHN0YWNrIHRyYWNlIHdoZW4gdGhlIFBDCiAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGlu
IExMSW50IGNvZGUuCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI4NCwxMCArMjQ5LDkg
QEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihWTSYgdgogICAgICAgICAgICAg
ICAgIHNpemVfdCB3YWxrU2l6ZTsKICAgICAgICAgICAgICAgICBib29sIHdhc1ZhbGlkV2FsazsK
ICAgICAgICAgICAgICAgICBib29sIGRpZFJ1bk91dE9mVmVjdG9yU3BhY2U7Ci0gICAgICAgICAg
ICAgICAgYm9vbCBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb247CiAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICBGcmFtZVdhbGtlciB3YWxrZXIoY2FsbEZyYW1lLCBtX3Zt
LCBjb2RlQmxvY2tTZXRMb2NrZXIsIG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsKLSAgICAgICAgICAg
ICAgICAgICAgd2Fsa1NpemUgPSB3YWxrZXIud2FsayhtX2N1cnJlbnRGcmFtZXMsIGRpZFJ1bk91
dE9mVmVjdG9yU3BhY2UsIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIHdhbGtTaXplID0gd2Fsa2VyLndhbGsobV9jdXJyZW50RnJhbWVzLCBkaWRSdW5P
dXRPZlZlY3RvclNwYWNlKTsKICAgICAgICAgICAgICAgICAgICAgd2FzVmFsaWRXYWxrID0gd2Fs
a2VyLndhc1ZhbGlkV2FsaygpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjk4LDIxICsyNjIs
MTYgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihWTSYgdgogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIGludGVyZXN0aW5nIHRvIHRha2UgZGF0YSBhYm91dCB0
aGUgcHJvZ3JhbSdzIHN0YXRlIHdoZW4KICAgICAgICAgICAgICAgICAvLyB3ZSBmYWlsIHRvIHRh
a2UgYSBzdGFjayB0cmFjZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1Mjc1OAogICAgICAgICAgICAgICAgIGlmICh3YXNWYWxpZFdhbGsgJiYgd2Fsa1NpemUpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHNSZXBvcnRTdGF0cykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoc1JlcG9ydFN0YXRzKQogICAgICAgICAgICAgICAgICAgICAgICAgc051bVRvdGFs
U3RhY2tUcmFjZXMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja3RyYWNlTmVl
ZHNWZXJpZmljYXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc051bVVudmVyaWZp
ZWRTdGFja1RyYWNlcysrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOworICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8VW5wcm9jZXNzZWRTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwogICAgICAgICAgICAgICAg
ICAgICBzdGFja1RyYWNlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkod2Fsa1NpemUpOwogICAgICAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdhbGtTaXplOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFN0YWNrRnJhbWUgZnJhbWUgPSBtX2N1cnJlbnRGcmFtZXNb
aV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLnVuY2hlY2tlZEFwcGVuZChm
cmFtZSk7IAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lLmZyYW1lVHlwZSA9PSBG
cmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0YWJsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3NlZW5FeGVjdXRhYmxlcy5hZGQoZnJhbWUudS52ZXJpZmllZEV4ZWN1dGFibGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lIGZyYW1lID0gbV9jdXJy
ZW50RnJhbWVzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZS51bmNoZWNr
ZWRBcHBlbmQoZnJhbWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgbV9zdGFja1RyYWNlcy5hcHBlbmQoU3RhY2tUcmFjZXsgc3RhY2t0cmFjZU5lZWRzVmVy
aWZpY2F0aW9uLCBub3dUaW1lLCBXVEZNb3ZlKHN0YWNrVHJhY2UpIH0pOworICAgICAgICAgICAg
ICAgICAgICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMuYXBwZW5kKFVucHJvY2Vzc2VkU3RhY2tU
cmFjZSB7IG5vd1RpbWUsIG1hY2hpbmVQQywgdG9wRnJhbWVJc0xMSW50LCBsbGludFBDLCBXVEZN
b3ZlKHN0YWNrVHJhY2UpIH0pOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChkaWRSdW5PdXRP
ZlZlY3RvclNwYWNlKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50RnJhbWVzLmdy
b3cobV9jdXJyZW50RnJhbWVzLnNpemUoKSAqIDEuMjUpOwpAQCAtMzMyLDYgKzI5MSwzMCBAQCBT
YW1wbGluZ1Byb2ZpbGVyOjp+U2FtcGxpbmdQcm9maWxlcigpCiB7CiB9CiAKK3N0YXRpYyBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIHRyeUdldEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgbGxpbnRQQywg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIGJvb2wmIGlzVmFsaWQpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoIWNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBsbGludFBDOworICAgIGlmIChieXRlY29kZUlu
ZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpIHsKKyAgICAgICAgaXNWYWxpZCA9
IHRydWU7CisgICAgICAgIHJldHVybiBieXRlY29kZUluZGV4OworICAgIH0KKyAgICBpc1ZhbGlk
ID0gZmFsc2U7CisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvbio+KGxsaW50UEMpOworICAgIGlmIChpbnN0
cnVjdGlvbiA+PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgJiYgaW5zdHJ1Y3Rp
b24gPCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBjb2RlQmxvY2stPmluc3Ry
dWN0aW9uQ291bnQoKSkgeworICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCA9IGluc3RydWN0aW9uIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5iZWdpbigpOworICAgICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKKyAgICB9CisgICAgaXNW
YWxpZCA9IGZhbHNlOworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKIHZvaWQgU2FtcGxpbmdQ
cm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiB7CiAgICAgLy8gVGhpcyBm
dW5jdGlvbiBuZWVkcyB0byBiZSBjYWxsZWQgZnJvbSB0aGUgSlNDIGV4ZWN1dGlvbiB0aHJlYWQu
CkBAIC0zNDAsMjIgKzMyMywzMCBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZl
cmlmaWVkCiAgICAgVGlueUJsb29tRmlsdGVyIGZpbHRlciA9IG1fdm0uaGVhcC5vYmplY3RTcGFj
ZSgpLmJsb2NrcygpLmZpbHRlcigpOwogICAgIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1Nl
dCA9IG1fdm0uaGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpOwogCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeTsgaSA8IG1fc3RhY2tUcmFjZXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgU3RhY2tUcmFjZSYgc3RhY2tUcmFjZSA9IG1fc3RhY2tU
cmFjZXNbaV07IAotICAgICAgICBpZiAoIXN0YWNrVHJhY2UubmVlZHNWZXJpZmljYXRpb24pCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhY2tUcmFjZS5uZWVkc1ZlcmlmaWNhdGlv
biA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA6IHN0YWNr
VHJhY2UuZnJhbWVzKSB7Ci0gICAgICAgICAgICBpZiAoc3RhY2tGcmFtZS5mcmFtZVR5cGUgIT0g
RnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc3RhY2tGcmFtZS5mcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpWZXJpZmllZEV4ZWN1dGFi
bGUpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGZvciAoVW5wcm9jZXNzZWRTdGFj
a1RyYWNlJiB1bnByb2Nlc3NlZFN0YWNrVHJhY2UgOiBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMp
IHsKKyAgICAgICAgbV9zdGFja1RyYWNlcy5hcHBlbmQoU3RhY2tUcmFjZSgpKTsKKyAgICAgICAg
U3RhY2tUcmFjZSYgc3RhY2tUcmFjZSA9IG1fc3RhY2tUcmFjZXMubGFzdCgpOworICAgICAgICBz
dGFja1RyYWNlLnRpbWVzdGFtcCA9IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS50aW1lc3RhbXA7CisK
KyAgICAgICAgYXV0byBhcHBlbmRDb2RlQmxvY2sgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2Nr
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBzdGFja1RyYWNlLmZyYW1l
cy5hcHBlbmQoU3RhY2tGcmFtZShjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSk7CisKKyAg
ICAgICAgICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50
KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgZGl2b3Q7CisgICAgICAgICAgICAgICAgaW50IHN0
YXJ0T2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBlbmRPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUlu
ZGV4LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg
c3RhY2tUcmFjZS5mcmFtZXMubGFzdCgpLmxpbmVOdW1iZXIsIHN0YWNrVHJhY2UuZnJhbWVzLmxh
c3QoKS5jb2x1bW5OdW1iZXIpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zZWVuRXhl
Y3V0YWJsZXMuYWRkKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOworICAgICAgICB9Owog
Ci0gICAgICAgICAgICBKU1ZhbHVlIGNhbGxlZSA9IEpTVmFsdWU6OmRlY29kZShzdGFja0ZyYW1l
LnUudW52ZXJpZmllZENhbGxlZSk7CisgICAgICAgIGF1dG8gYXBwZW5kVW52ZXJpZmllZENhbGxl
ZSA9IFsmXSAoSlNWYWx1ZSBjYWxsZWUpIHsKKyAgICAgICAgICAgIHN0YWNrVHJhY2UuZnJhbWVz
LmFwcGVuZChTdGFja0ZyYW1lKCkpOworICAgICAgICAgICAgU3RhY2tGcmFtZSYgc3RhY2tGcmFt
ZSA9IHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKTsKICAgICAgICAgICAgIGlmICghSGVhcDo6aXNW
YWx1ZUdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGNhbGxlZSkpIHsKICAgICAgICAg
ICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6VW5rbm93bjsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIEpTQ2VsbCogY2FsbGVlQ2VsbCA9IGNhbGxlZS5hc0NlbGwoKTsK
QEAgLTM3MiwyMiArMzYzLDg5IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVy
aWZpZWQKIAogICAgICAgICAgICAgaWYgKGNhbGxlZUNlbGwtPnR5cGUoKSAhPSBKU0Z1bmN0aW9u
VHlwZSkgewogICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gZnJhbWVUeXBl
RnJvbUNhbGxEYXRhKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQ2VsbCktPmV4ZWN1dGFi
bGUoKTsKICAgICAgICAgICAgIGlmICghZXhlY3V0YWJsZSkgewogICAgICAgICAgICAgICAgIHN0
YWNrRnJhbWUuZnJhbWVUeXBlID0gZnJhbWVUeXBlRnJvbUNhbGxEYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0
ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVjdXRhYmxlKSk7Ci0gICAgICAgICAgICBzdGFja0ZyYW1l
LmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlOwotICAgICAgICAgICAg
c3RhY2tGcmFtZS51LnZlcmlmaWVkRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgICAgICAg
ICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6RXhlY3V0YWJsZTsKKyAgICAgICAg
ICAgIHN0YWNrRnJhbWUuZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBtX3Nl
ZW5FeGVjdXRhYmxlcy5hZGQoZXhlY3V0YWJsZSk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8g
UHJlcGVuZCB0aGUgdG9wLW1vc3QgaW5saW5lZCBmcmFtZSBpZiBuZWVkZWQuIEFsc28sIGdhdGhl
cgorICAgICAgICAvLyBsb2NhdGlvbiBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGUgdG9wIGZy
YW1lIGlzIGV4ZWN1dGluZy4KKyAgICAgICAgc2l6ZV90IHN0YXJ0SW5kZXggPSAwOworICAgICAg
ICBpZiAodW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lcy5zaXplKCkgJiYgdW5wcm9jZXNzZWRT
dGFja1RyYWNlLmZyYW1lc1swXS5mcmFtZVR5cGUgPT0gVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlZl
cmlmaWVkQ29kZUJsb2NrKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHRvcENvZGVCbG9jayA9
IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXNbMF0udS52ZXJpZmllZENvZGVCbG9jazsKKyAg
ICAgICAgICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrVHJhY2UudG9wRnJhbWVJc0xMSW50KSB7Cisg
ICAgICAgICAgICAgICAgLy8gV2UgcmV1c2UgTExJbnQgQ29kZUJsb2NrcyBmb3IgdGhlIGJhc2Vs
aW5lIEpJVCwgc28gd2UgbmVlZCB0byBjaGVjayBmb3IgYm90aCBqaXQgdHlwZXMuCisgICAgICAg
ICAgICAgICAgLy8gVGhpcyBtaWdodCBhbHNvIGJlIGZhbHNlIGZvciB2YXJpb3VzIHJlYXNvbnMg
KGtub3duIGFuZCB1bmtub3duKSwgZXZlbiB0aG91Z2gKKyAgICAgICAgICAgICAgICAvLyBpdCdz
IHN1cGVyIHVubGlrZWx5LiBPbmUgcmVhc29uIHRoYXQgdGhpcyBjYW4gYmUgZmFsc2UgaXMgd2hl
biB3ZSB0aHJvdyBmcm9tIGEgREZHIGZyYW1lLAorICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBl
bmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0IGEgVk1FbnRyeUZyYW1lLCB3ZSB3aWxsIGVuZCB1
cCBleGVjdXRpbmcKKyAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgaGFuZGxl
VW5jYXVnaHRFeGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2FpbnN0IHRoaXMKKyAgICAg
ICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZUluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAgICAgICAgICAgICBib29s
IGlzVmFsaWRQQzsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYml0czsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgICAgICAgICBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBD
KSk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBiaXRzID0gYml0d2lzZV9jYXN0PHVuc2ln
bmVkPih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQyk7CisjZW5kaWYKKyAgICAgICAgICAg
ICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHRyeUdldEJ5dGVjb2RlSW5kZXgoYml0cywgdG9wQ29k
ZUJsb2NrLCBpc1ZhbGlkUEMpOworCisgICAgICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShp
c1ZhbGlkUEMpOyAvLyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGggdGhpcyBpbmZvIGZvciB0aGUg
d2ViIGluc3BlY3RvcjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MzQ1NQorCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayh0b3BDb2RlQmxvY2ss
IGJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gMTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKE9wdGlvbmFsPENvZGVPcmln
aW4+IGNvZGVPcmlnaW4gPSB0b3BDb2RlQmxvY2stPmZpbmRQQyh1bnByb2Nlc3NlZFN0YWNrVHJh
Y2UudG9wUEMpKSB7CisgICAgICAgICAgICAgICAgLy9kYXRhTG9nKCJGb3VuZCBjb2RlIG9yaWdp
bjogIiwgKmNvZGVPcmlnaW4sICJcbiIpOworICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4tPndh
bGtVcElubGluZVN0YWNrKFsmXSAoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikgeworICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUgPyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkg
OiB0b3BDb2RlQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IDE7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IHVucHJv
Y2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIFVucHJv
Y2Vzc2VkU3RhY2tGcmFtZSYgdW5wcm9jZXNzZWRTdGFja0ZyYW1lID0gdW5wcm9jZXNzZWRTdGFj
a1RyYWNlLmZyYW1lc1tpXTsKKyAgICAgICAgICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrRnJhbWUu
ZnJhbWVUeXBlID09IFVucHJvY2Vzc2VkRnJhbWVUeXBlOjpWZXJpZmllZENvZGVCbG9jaykgewor
ICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdW5wcm9jZXNzZWRTdGFja0Zy
YW1lLnUudmVyaWZpZWRDb2RlQmxvY2s7CisgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4ID0gdW5wcm9jZXNzZWRTdGFja0ZyYW1lLmNhbGxTaXRlSW5kZXg7CisKKyAg
ICAgICAgICAgICAgICBhdXRvIGFwcGVuZENvZGVCbG9ja05vSW5saW5pbmcgPSBbJl0geworICAg
ICAgICAgICAgICAgICAgICBib29sIGlzVmFsaWRQQzsKKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kQ29kZUJsb2NrKGNvZGVCbG9jaywgdHJ5R2V0Qnl0ZWNvZGVJbmRleChjYWxsU2l0ZUluZGV4
LmJpdHMoKSwgY29kZUJsb2NrLCBpc1ZhbGlkUEMpKTsKKyAgICAgICAgICAgICAgICB9OworCisj
aWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzQ29k
ZU9yaWdpbnMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5jYW5HZXRD
b2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
QmxvY2stPmNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkud2Fsa1VwSW5saW5lU3RhY2soWyZdIChj
b25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID8gY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpIDogY29kZUJsb2NrLCBj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
Q29kZUJsb2NrKGNvZGVCbG9jaywgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29k
ZUJsb2NrTm9JbmxpbmluZygpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxv
Y2tOb0lubGluaW5nKCk7CisjZW5kaWYKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHVucHJvY2Vzc2VkU3RhY2tGcmFtZS5mcmFtZVR5cGUgPT0gVW5wcm9jZXNz
ZWRGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpOworICAgICAgICAgICAgICAgIGFwcGVuZFVu
dmVyaWZpZWRDYWxsZWUoSlNWYWx1ZTo6ZGVjb2RlKHVucHJvY2Vzc2VkU3RhY2tGcmFtZS51LnVu
dmVyaWZpZWRDYWxsZWUpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAg
IG1faW5kZXhPZk5leHRTdGFja1RyYWNlVG9WZXJpZnkgPSBtX3N0YWNrVHJhY2VzLnNpemUoKTsK
KyAgICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMuY2xlYXIoKTsKIH0KIAogdm9pZCBTYW1wbGlu
Z1Byb2ZpbGVyOjp2aXNpdChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCkBAIC00NzgsMTggKzUz
NiwxMiBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6Om5vdGljZVZNRW50cnkoKQogICAgIGRpc3Bh
dGNoSWZOZWNlc3NhcnkobG9ja2VyKTsKIH0KIAotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjbGVh
ckRhdGEoKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgY2xlYXJEYXRh
KGxvY2tlcik7Ci19Ci0KIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6Y2xlYXJEYXRhKGNvbnN0IExv
Y2tIb2xkZXImKQogewogICAgIEFTU0VSVChtX2xvY2suaXNMb2NrZWQoKSk7CiAgICAgbV9zdGFj
a1RyYWNlcy5jbGVhcigpOwogICAgIG1fc2VlbkV4ZWN1dGFibGVzLmNsZWFyKCk7Ci0gICAgbV9p
bmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeSA9IDA7CisgICAgbV91bnByb2Nlc3NlZFN0YWNr
VHJhY2VzLmNsZWFyKCk7CiB9CiAKIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1l
OjpkaXNwbGF5TmFtZSgpCkBAIC00OTgsOSArNTUwLDcgQEAgU3RyaW5nIFNhbXBsaW5nUHJvZmls
ZXI6OlN0YWNrRnJhbWU6OmRpcwogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIodW5rbm93
bikiKTsKICAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiKGhvc3QpIik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBl
ICE9IEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRhYmxlLT5p
c0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0
YWJsZSo+KGV4ZWN1dGFibGUpLT5uYW1lKCk7CiAKQEAgLTUyMSw5ICs1NzEsNyBAQCBTdHJpbmcg
U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzCiAgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoIih1bmtub3duKSIpOwogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0
KQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIoaG9zdCkiKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChmcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKIAotICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1dGFibGU7CiAgICAgaWYg
KGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxOYXRpdmVFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPm5hbWUoKTsKIApAQCAtNTQ0LDI1ICs1
OTIsMjEgQEAgU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRpcwogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAotaW50IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnN0
YXJ0TGluZSgpCitpbnQgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZnVuY3Rpb25TdGFy
dExpbmUoKQogewogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpVbmtub3duIHx8IGZy
YW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBSRUxF
QVNFX0FTU0VSVChmcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKIAot
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1dGFibGU7CiAg
ICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiAtMTsK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5m
aXJzdExpbmUoKTsKIH0KIAotdW5zaWduZWQgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6
c3RhcnRDb2x1bW4oKQordW5zaWduZWQgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZnVu
Y3Rpb25TdGFydENvbHVtbigpCiB7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVu
a25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAgcmV0dXJuIC0x
OwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZpZWRD
YWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVkRXhl
Y3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAg
cmV0dXJuIC0xOwogCkBAIC01NzMsOSArNjE3LDcgQEAgaW50cHRyX3QgU2FtcGxpbmdQcm9maWxl
cjo6U3RhY2tGcmFtZTo6cwogewogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpVbmtu
b3duIHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVybiAtMTsK
LSAgICBSRUxFQVNFX0FTU0VSVChmcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2Fs
bGVlKTsKIAotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1
dGFibGU7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJl
dHVybiAtMTsKIApAQCAtNTg2LDkgKzYyOCw3IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpT
dGFja0ZyYW1lOjp1cmwKIHsKICAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93
biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0KQogICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZl
cmlmaWVkQ2FsbGVlKTsKIAotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdS52ZXJp
ZmllZEV4ZWN1dGFibGU7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCkBAIC01OTgsNyArNjM4LDcgQEAgU3RyaW5n
IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnVybAogICAgIHJldHVybiB1cmw7CiB9CiAK
LVZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiYgU2FtcGxpbmdQcm9maWxlcjo6
c3RhY2tUcmFjZXMoY29uc3QgTG9ja0hvbGRlciYpCitWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6
U3RhY2tUcmFjZT4gU2FtcGxpbmdQcm9maWxlcjo6cmVsZWFzZVN0YWNrVHJhY2VzKGNvbnN0IExv
Y2tIb2xkZXImIGxvY2tlcikKIHsKICAgICBBU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwogICAg
IHsKQEAgLTYwNiw3ICs2NDYsOSBAQCBWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFj
ZT4mIFNhCiAgICAgICAgIHByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsKICAgICB9CiAK
LSAgICByZXR1cm4gbV9zdGFja1RyYWNlczsKKyAgICBWZWN0b3I8U3RhY2tUcmFjZT4gcmVzdWx0
KFdURk1vdmUobV9zdGFja1RyYWNlcykpOworICAgIGNsZWFyRGF0YShsb2NrZXIpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpzdGFja1RyYWNlc0Fz
SlNPTigpCkBAIC02NDMsNiArNjg1LDggQEAgU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OnN0YWNr
VHJhY2VzQXNKUwogCiAgICAganNvbi5hcHBlbmRMaXRlcmFsKCJdIik7CiAKKyAgICBjbGVhckRh
dGEobG9ja2VyKTsKKwogICAgIHJldHVybiBqc29uLnRvU3RyaW5nKCk7CiB9CiAKQEAgLTY1NSwx
MSArNjk5LDggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGUgZnJhbWVUeXBlKQogewog
ICAgIHN3aXRjaCAoZnJhbWVUeXBlKSB7Ci0gICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFt
ZVR5cGU6OlZlcmlmaWVkRXhlY3V0YWJsZToKLSAgICAgICAgb3V0LnByaW50KCJWZXJpZmllZEV4
ZWN1dGFibGUiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpG
cmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWU6Ci0gICAgICAgIG91dC5wcmludCgiVW52ZXJpZmll
ZENhbGxlZSIpOworICAgIGNhc2UgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpFeGVjdXRh
YmxlOgorICAgICAgICBvdXQucHJpbnQoIkV4ZWN1dGFibGUiKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU6Okhvc3Q6CiAgICAgICAgIG91dC5w
cmludCgiSG9zdCIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw0
OCArNDQsODggQEAgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVy
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbXBsaW5nUHJvZmlsZXI+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIEZyYW1lVHlw
ZSB7IAotICAgICAgICBWZXJpZmllZEV4ZWN1dGFibGUsIAorCisgICAgZW51bSBjbGFzcyBVbnBy
b2Nlc3NlZEZyYW1lVHlwZSB7IAogICAgICAgICBVbnZlcmlmaWVkQ2FsbGVlLAotICAgICAgICBI
b3N0LCAKLSAgICAgICAgVW5rbm93biAKKyAgICAgICAgVmVyaWZpZWRDb2RlQmxvY2sKICAgICB9
OwogCi0gICAgc3RydWN0IFN0YWNrRnJhbWUgewotICAgICAgICBTdGFja0ZyYW1lKEZyYW1lVHlw
ZSBmcmFtZVR5cGUsIEVuY29kZWRKU1ZhbHVlIGNhbGxlZSkKLSAgICAgICAgICAgIDogZnJhbWVU
eXBlKGZyYW1lVHlwZSkKKyAgICBzdHJ1Y3QgVW5wcm9jZXNzZWRTdGFja0ZyYW1lIHsKKyAgICAg
ICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lKEVuY29kZWRKU1ZhbHVlIGNhbGxlZSkKKyAgICAgICAg
ICAgIDogZnJhbWVUeXBlKFVucHJvY2Vzc2VkRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKQog
ICAgICAgICB7CiAgICAgICAgICAgICB1LnVudmVyaWZpZWRDYWxsZWUgPSBjYWxsZWU7CiAgICAg
ICAgIH0KLSAgICAgICAgU3RhY2tGcmFtZShGcmFtZVR5cGUgZnJhbWVUeXBlLCBFeGVjdXRhYmxl
QmFzZSogZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIDogZnJhbWVUeXBlKGZyYW1lVHlwZSkKKyAg
ICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgpCisgICAgICAgICAgICA6IGZyYW1lVHlwZShVbnByb2Nlc3Nl
ZEZyYW1lVHlwZTo6VmVyaWZpZWRDb2RlQmxvY2spCisgICAgICAgICAgICAsIGNhbGxTaXRlSW5k
ZXgoY2FsbFNpdGVJbmRleCkKICAgICAgICAgewotICAgICAgICAgICAgdS52ZXJpZmllZEV4ZWN1
dGFibGUgPSBleGVjdXRhYmxlOworICAgICAgICAgICAgdS51bnZlcmlmaWVkQ2FsbGVlID0gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgICAgICB1LnZlcmlmaWVkQ29kZUJsb2Nr
ID0gY29kZUJsb2NrOwogICAgICAgICB9Ci0gICAgICAgIFN0YWNrRnJhbWUoKQotICAgICAgICAg
ICAgOiBmcmFtZVR5cGUoRnJhbWVUeXBlOjpVbmtub3duKQorICAgICAgICBVbnByb2Nlc3NlZFN0
YWNrRnJhbWUoKQorICAgICAgICAgICAgOiBmcmFtZVR5cGUoVW5wcm9jZXNzZWRGcmFtZVR5cGU6
OlVudmVyaWZpZWRDYWxsZWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHUudmVyaWZpZWRFeGVj
dXRhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHUudW52ZXJpZmllZENhbGxlZSA9IEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgRnJhbWVUeXBlIGZy
YW1lVHlwZTsKKyAgICAgICAgVW5wcm9jZXNzZWRGcmFtZVR5cGUgZnJhbWVUeXBlOwogICAgICAg
ICB1bmlvbiB7CiAgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB1bnZlcmlmaWVkQ2FsbGVlOwot
ICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIHZlcmlmaWVkRXhlY3V0YWJsZTsKKyAgICAgICAg
ICAgIENvZGVCbG9jayogdmVyaWZpZWRDb2RlQmxvY2s7CiAgICAgICAgIH0gdTsKKyAgICAgICAg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4OworICAgIH07CisKKyAgICBlbnVtIGNsYXNzIEZy
YW1lVHlwZSB7IAorICAgICAgICBFeGVjdXRhYmxlLAorICAgICAgICBIb3N0LAorICAgICAgICBV
bmtub3duIAorICAgIH07CiAKKyAgICBzdHJ1Y3QgU3RhY2tGcmFtZSB7CisgICAgICAgIFN0YWNr
RnJhbWUoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCisgICAgICAgICAgICA6IGZyYW1lVHlw
ZShGcmFtZVR5cGU6OkV4ZWN1dGFibGUpCisgICAgICAgICAgICAsIGV4ZWN1dGFibGUoZXhlY3V0
YWJsZSkKKyAgICAgICAgeyB9CisgICAgICAgIFN0YWNrRnJhbWUoKQorICAgICAgICAgICAgOiBm
cmFtZVR5cGUoRnJhbWVUeXBlOjpVbmtub3duKQorICAgICAgICAgICAgLCBleGVjdXRhYmxlKG51
bGxwdHIpCisgICAgICAgIHsgfQorCisgICAgICAgIEZyYW1lVHlwZSBmcmFtZVR5cGU7CisgICAg
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlOworCisgICAgICAgIC8vIFRoZXNlIGF0dGVt
cHQgdG8gYmUgZXhwcmVzc2lvbi1sZXZlbCBsaW5lIGFuZCBjb2x1bW4gbnVtYmVyLgorICAgICAg
ICB1bnNpZ25lZCBsaW5lTnVtYmVyIHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIH07CisgICAgICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlciB7IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSB9OworCisgICAgICAgIC8vIFRoZXNlIGFyZSBmdW5jdGlvbi1s
ZXZlbCBkYXRhLgogICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWUoKTsKICAgICAgICAgU3RyaW5n
IGRpc3BsYXlOYW1lRm9ySlNPTlRlc3RzKCk7IC8vIFVzZWQgZm9yIEpTQyBzdHJlc3MgdGVzdHMg
YmVjYXVzZSB0aGV5IHdhbnQgdGhlICIoYW5vbnltb3VzIGZ1bmN0aW9uKSIgc3RyaW5nIGZvciBh
bm9ueW1vdXMgZnVuY3Rpb25zIGFuZCB0aGV5IHdhbnQgIihldmFsKSIgZm9yIGV2YWwnZCBjb2Rl
LgotICAgICAgICBpbnQgc3RhcnRMaW5lKCk7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
KCk7CisgICAgICAgIGludCBmdW5jdGlvblN0YXJ0TGluZSgpOworICAgICAgICB1bnNpZ25lZCBm
dW5jdGlvblN0YXJ0Q29sdW1uKCk7CiAgICAgICAgIGludHB0cl90IHNvdXJjZUlEKCk7CiAgICAg
ICAgIFN0cmluZyB1cmwoKTsKICAgICB9OwogCisgICAgc3RydWN0IFVucHJvY2Vzc2VkU3RhY2tU
cmFjZSB7CisgICAgICAgIGRvdWJsZSB0aW1lc3RhbXA7CisgICAgICAgIHZvaWQqIHRvcFBDOwor
ICAgICAgICBib29sIHRvcEZyYW1lSXNMTEludDsKKyAgICAgICAgdm9pZCogbGxpbnRQQzsKKyAg
ICAgICAgVmVjdG9yPFVucHJvY2Vzc2VkU3RhY2tGcmFtZT4gZnJhbWVzOworICAgIH07CisKICAg
ICBzdHJ1Y3QgU3RhY2tUcmFjZSB7Ci0gICAgICAgIGJvb2wgbmVlZHNWZXJpZmljYXRpb247CiAg
ICAgICAgIGRvdWJsZSB0aW1lc3RhbXA7CiAgICAgICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBmcmFt
ZXM7CisgICAgICAgIFN0YWNrVHJhY2UoKQorICAgICAgICB7IH0KKyAgICAgICAgU3RhY2tUcmFj
ZShTdGFja1RyYWNlJiYgb3RoZXIpCisgICAgICAgICAgICA6IHRpbWVzdGFtcChvdGhlci50aW1l
c3RhbXApCisgICAgICAgICAgICAsIGZyYW1lcyhXVEZNb3ZlKG90aGVyLmZyYW1lcykpCisgICAg
ICAgIHsgfQogICAgIH07CiAKICAgICBTYW1wbGluZ1Byb2ZpbGVyKFZNJiwgUmVmUHRyPFN0b3B3
YXRjaD4mJik7CkBAIC0xMDAsMTIgKzE0MCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydChj
b25zdCBMb2NrSG9sZGVyJik7CiAgICAgdm9pZCBzdG9wKCk7CiAgICAgdm9pZCBzdG9wKGNvbnN0
IExvY2tIb2xkZXImKTsKLSAgICBWZWN0b3I8U3RhY2tUcmFjZT4mIHN0YWNrVHJhY2VzKGNvbnN0
IExvY2tIb2xkZXImKTsKKyAgICBWZWN0b3I8U3RhY2tUcmFjZT4gcmVsZWFzZVN0YWNrVHJhY2Vz
KGNvbnN0IExvY2tIb2xkZXImKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc3RhY2tU
cmFjZXNBc0pTT04oKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG5vdGljZUN1cnJlbnRU
aHJlYWRBc0pTQ0V4ZWN1dGlvblRocmVhZCgpOwogICAgIHZvaWQgbm90aWNlQ3VycmVudFRocmVh
ZEFzSlNDRXhlY3V0aW9uVGhyZWFkKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGNsZWFyRGF0YSgpOwotICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IExvY2tI
b2xkZXImKTsKICAgICB2b2lkIHByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsgLy8gWW91
IHNob3VsZCBjYWxsIHRoaXMgb25seSBhZnRlciBhY3F1aXJpbmcgdGhlIGxvY2suCiAgICAgZG91
YmxlIHRvdGFsVGltZShjb25zdCBMb2NrSG9sZGVyJikgeyByZXR1cm4gbV90b3RhbFRpbWU7IH0K
ICAgICB2b2lkIHNldFN0b3BXYXRjaChjb25zdCBMb2NrSG9sZGVyJiwgUmVmPFN0b3B3YXRjaD4m
JiBzdG9wd2F0Y2gpIHsgbV9zdG9wd2F0Y2ggPSBXVEZNb3ZlKHN0b3B3YXRjaCk7IH0KQEAgLTEx
NCwxMSArMTUyLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNwYXRjaElmTmVjZXNzYXJ5KGNv
bnN0IExvY2tIb2xkZXImKTsKICAgICB2b2lkIGRpc3BhdGNoRnVuY3Rpb24oY29uc3QgTG9ja0hv
bGRlciYpOwogICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBMb2Nr
SG9sZGVyJik7CiAKICAgICBWTSYgbV92bTsKICAgICBSZWZQdHI8U3RvcHdhdGNoPiBtX3N0b3B3
YXRjaDsKICAgICBWZWN0b3I8U3RhY2tUcmFjZT4gbV9zdGFja1RyYWNlczsKLSAgICBzaXplX3Qg
bV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeTsKKyAgICBWZWN0b3I8VW5wcm9jZXNzZWRT
dGFja1RyYWNlPiBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXM7CiAgICAgc3RkOjpjaHJvbm86Om1p
Y3Jvc2Vjb25kcyBtX3RpbWluZ0ludGVydmFsOwogICAgIGRvdWJsZSBtX2xhc3RUaW1lOwogICAg
IGRvdWJsZSBtX3RvdGFsVGltZTsKQEAgLTEzMCw3ICsxNjksNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9pc1BhdXNlZDsKICAgICBib29sIG1faGFzRGlzcGF0Y2hlZEZ1bmN0aW9uOwogICAgIEhh
c2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX3NlZW5FeGVjdXRhYmxlczsKLSAgICBWZWN0b3I8U3Rh
Y2tGcmFtZT4gbV9jdXJyZW50RnJhbWVzOworICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJh
bWU+IG1fY3VycmVudEZyYW1lczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci1iYXNpYy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NhbXBs
aW5nLXByb2ZpbGVyLWJhc2ljLmpzCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLWJhc2ljLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMSArMjYsOCBAQCBpZiAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJv
ZmlsZXIoKSkgCiAgICAgICAgICAgICB4LS07CiAgICAgICAgIH0KICAgICB9Ci0gICAgbm9Jbmxp
bmUodG9wKTsKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBjYWxsIHRvcCgpIHRvIGdldCB0aGUg
Q2FsbFNpdGVJbmRleCB0byB1cGRhdGUKLSAgICAvLyBpbnNpZGUgdGhlIGNhbGwgZnJhbWUuIFdl
IG5lZWQgdG8gZml4IHRoYXQgYnkgaGF2aW5nIGEgUEM9PkNvZGVPcmlnaW4KLSAgICAvLyBtYXBw
aW5nOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNjI5Ci0gICAg
ZnVuY3Rpb24gamF6KHgpIHsgcmV0dXJuIHggKyB0b3AoKTsgfSAvLyAKKworICAgIGZ1bmN0aW9u
IGpheih4KSB7IHJldHVybiB4ICsgdG9wKCk7IH0KICAgICBmdW5jdGlvbiBrYXooeSkgewogICAg
ICAgICByZXR1cm4gamF6KHkpICsgNTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269911</attachid>
            <date>2016-01-26 13:35:08 -0800</date>
            <delta_ts>2016-01-26 13:50:56 -0800</delta_ts>
            <desc>make findPC find more PCs</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>90512</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0Myw3ICsxNjQzLDYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNhbQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpKTsKICAgICBTdHJpbmcganNvblN0
cmluZyA9IGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNPTigp
OwotICAgIGV4ZWMtPnZtKCkuc2FtcGxpbmdQcm9maWxlcigpLT5jbGVhckRhdGEoKTsKICAgICBF
bmNvZGVkSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpz
b25TdHJpbmcpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMDMsOSArMTMwMywx
MiBAQAogCQk3MEVDQTYwNzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMjFB
RkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjA4
MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMzFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVD
QTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5MkNCMzQ5MUM0RUVENUMw
MEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0Nv
ZGVPcmlnaW5NYXAuY3BwICovOyB9OworCQk3OTJDQjM0QTFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5NjQ2NTZB
MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdB
NzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9
OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0Uw
N0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5OUVGN0M0MUM1
NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BD
VG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3OUM0QjE1RDFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUM0QjE1QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTky
RSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMzM0IxMDAw
MEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0z
NDk4LDkgKzM1MDEsMTIgQEAKIAkJNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxh
dGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFG
REJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyog
UENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk5RUY3QzMx
QzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QjFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUMxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9u
UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDRkM2RUYxQzMzQjEwMDAw
Qzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTExJbnRQQ1Jhbmdlcy5oOyBwYXRoID0gbGxpbnQvTExJbnRQQ1Jhbmdlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg0MCw2ICs0ODQ2LDcgQEAKIAkJCQkwRkVDODREQzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAogCQkJCTBGRUM4NERE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0
REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJNzk5RUY3
QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovLAogCQkJCTBGRUM4NERG
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovLAogCQkJCTBGRUM4NEUwMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLywKIAkJCQkwRjM3MzA4QTFDMEJEMjkx
MDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgKi8sCkBAIC01MTQ5LDYgKzUxNTYsOCBAQAog
CQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCAqLywKKwkJCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmln
aW5NYXAuY3BwICovLAorCQkJCTc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9y
aWdpbk1hcC5oICovLAogCQkJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8q
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZBN0E4RTkxOEI0MTNDODAw
NTIzNzFEIC8qIFJlZy5jcHAgKi8sCkBAIC03MDI1LDYgKzcwMzQsOCBAQAogCQkJCTBGRUM4NTc2
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5
MzFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAu
aCBpbiBIZWFkZXJzICovLAorCQkJCTc5MkNCMzRBMUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29k
ZU9yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVB
IC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkw
MENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMz
MTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLApAQCAt
ODk3MSw2ICs4OTgyLDcgQEAKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92
SGludFJlbW92YWxQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4
MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5N
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8qIERG
R05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMzg3OEYxQkZCQzQ0RDAwRTNBQjFFIC8q
IEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1
MEU5NTJDMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MDUsNiArNDA1LDggQEAgcHVibGljOgogICAgICAgICAgICAgbWFzbS0+aW52YWxpZGF0ZUFsbFRl
bXBSZWdpc3RlcnMoKTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwgPT0gb3RoZXIubV9sYWJlbDsg
fQorCiAgICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsLmlzU2V0KCk7
IH0KICAgICBwcml2YXRlOgogICAgICAgICBBc3NlbWJsZXJMYWJlbCBtX2xhYmVsOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5o
CShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fz
c2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVsKG1fb2Zmc2V0ICsgb2Zm
c2V0KTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBc3NlbWJs
ZXJMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0
OyB9CisKICAgICAgICAgdWludDMyX3QgbV9vZmZzZXQ7CiAgICAgfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1NTc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiQjNSZWR1Y2VTdHJlbmd0aC5oIgogI2luY2x1ZGUgIkIz
VGltaW5nU2NvcGUuaCIKICNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiAr
NDcsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3JpZ2luJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9kYXRhID09IG90aGVyLm1fZGF0YTsgfQorCiAgICAgLy8gWW91IHNob3Vs
ZCBhdm9pZCB1c2luZyB0aGlzLiBVc2UgT3JpZ2luRHVtcCBpbnN0ZWFkLgogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUENUb09yaWdpbk1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNQQ1RvT3JpZ2luTWFwX2gKKyNkZWZpbmUgQjNQQ1RvT3JpZ2luTWFwX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlICJCM09yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgUENUb09yaWdpbk1hcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUENUb09yaWdpbk1hcCk7CitwdWJsaWM6CisgICAgUENUb09yaWdpbk1hcCgpCisgICAgeyB9
CisKKyAgICBQQ1RvT3JpZ2luTWFwKFBDVG9PcmlnaW5NYXAmJiBvdGhlcikKKyAgICAgICAgOiBt
X3JhbmdlcyhXVEZNb3ZlKG90aGVyLm1fcmFuZ2VzKSkKKyAgICB7IH0KKworICAgIHN0cnVjdCBP
cmlnaW5SYW5nZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbDsKKyAgICAg
ICAgT3JpZ2luIG9yaWdpbjsKKyAgICB9OworCisgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsYWJlbCwgT3JpZ2luIG9yaWdpbikKKyAgICB7CisgICAgICAgIGlmICht
X3Jhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3Jhbmdlcy5sYXN0KCkubGFiZWwg
PT0gbGFiZWwpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG1fcmFu
Z2VzLmxhc3QoKS5vcmlnaW4gPT0gb3JpZ2luIHx8ICFvcmlnaW4pCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9yYW5nZXMuYXBwZW5kKE9yaWdpblJhbmdl
e2xhYmVsLCBvcmlnaW59KTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8T3JpZ2luUmFuZ2U+
JiByYW5nZXMoKSBjb25zdCAgeyByZXR1cm4gbV9yYW5nZXM7IH0KKworcHJpdmF0ZToKKyAgICBW
ZWN0b3I8T3JpZ2luUmFuZ2U+IG1fcmFuZ2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQQ1RvT3JpZ2lu
TWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lv
biAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1
Y3RzLmgiCiAjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAu
aCIKICNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCiAjaW5jbHVk
ZSAiUHVyZU5hTi5oIgpAQCAtMjc1LDYgKzI3Niw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdDsKICAgICBjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0OwogCisgICAgUENUb09yaWdp
bk1hcCYgcGNUb09yaWdpbk1hcCgpIHsgcmV0dXJuIG1fcGNUb09yaWdpbk1hcDsgfQorICAgIFBD
VG9PcmlnaW5NYXAgcmVsZWFzZVBDVG9PcmlnaW5NYXAoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGNU
b09yaWdpbk1hcCk7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvY2tJbnNlcnRp
b25TZXQ7CiAgICAgCkBAIC0yOTEsNiArMjk1LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWlyOjpDb2RlPiBtX2NvZGU7CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmlu
dFN0cmVhbSYsIE9yaWdpbik+PiBtX29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9m
cm9udGVuZERhdGE7CisgICAgUENUb09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSAr
NDcsMTIgQEAKICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkIzQ29tbW9uLmgi
CiAjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5j
bHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1
ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKQEAgLTE3MSwxMiArMTc0LDIzIEBAIHZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgYmxvY2tKdW1w
c1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKICAgICB9OwogCisgICAgUENUb09yaWdpbk1hcCYgcGNU
b09yaWdpbk1hcCA9IGNvZGUucHJvYygpLnBjVG9PcmlnaW5NYXAoKTsKKyAgICBhdXRvIGFkZEl0
ZW0gPSBbJl0gKEluc3QmIGluc3QpIHsKKyAgICAgICAgaWYgKCFpbnN0Lm9yaWdpbikgeworICAg
ICAgICAgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcGNUb09yaWdpbk1hcC5h
cHBlbmRJdGVtKGppdC5sYWJlbCgpLCBpbnN0Lm9yaWdpbi0+b3JpZ2luKCkpOworICAgIH07CisK
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAgICAgICBibG9ja0p1bXBz
W2Jsb2NrXS5saW5rKCZqaXQpOwogICAgICAgICBibG9ja0xhYmVsc1tibG9ja10gPSBqaXQubGFi
ZWwoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNv
bnRleHQpOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAg
ICAgIGFkZEl0ZW0oaW5zdCk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9
IGluc3QuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
anVtcCwgIWp1bXAuaXNTZXQoKSk7CiAgICAgICAgIH0KIApAQCAtMTg0LDYgKzE5OCw4IEBAIHZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgICYmIGJs
b2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQogICAg
ICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgYWRkSXRlbShibG9jay0+bGFzdCgpKTsKKwog
ICAgICAgICBpZiAoaXNSZXR1cm4oYmxvY2stPmxhc3QoKS5vcGNvZGUpKSB7CiAgICAgICAgICAg
ICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxv
Z3VlIGluIEFpciwgc28gd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJy
aWRlLgpAQCAtMTk4LDYgKzIxNCw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxI
ZWxwZXJzJiAKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZVdpdGhFbXB0eUZyYW1lKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7Cisg
ICAgICAgICAgICBhZGRJdGVtKGJsb2NrLT5sYXN0KCkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KIApAQCAtMjE4LDEwICsyMzUsMTMgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBj
b2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGFkZEl0ZW0oYmxv
Y2stPmxhc3QoKSk7CiAgICAgfQogCisgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5s
YWJlbCgpLCBPcmlnaW4oKSk7CiAgICAgZm9yIChhdXRvJiBsYXRlUGF0aCA6IGNvbnRleHQubGF0
ZVBhdGhzKQogICAgICAgICBsYXRlUGF0aC0+cnVuKGppdCwgY29udGV4dCk7CisgICAgcGNUb09y
aWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7CiB9CiAKIH0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiAr
NTIsNyBAQAogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkxvd0xldmVs
SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUg
IlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCkBAIC00
Mjc1LDQgKzQyNzYsMjkgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFy
aQogICAgIH0KIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6
dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBtYXApIAoreyAKKyAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwID0gV1RGTW92ZShtYXApOworfQorCitPcHRpb25hbDxDb2RlT3JpZ2luPiBDb2Rl
QmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKK3sKKyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkg
eworICAgICAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1fcGNUb0Nv
ZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCisgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsK
KyAgICB9CisjaWYgRU5BQkxFKEpJVCkKKyAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewor
ICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOworICAgICAgICBpZiAoc3R1
Yi0+Y29udGFpbnNQQyhwYykpCisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdp
bj4oc3R1Yi0+Y29kZU9yaWdpbik7CisgICAgfQorCisgICAgaWYgKE9wdGlvbmFsPENvZGVPcmln
aW4+IGNvZGVPcmlnaW4gPSBtX2ppdENvZGUtPmZpbmRQQyh0aGlzLCBwYykpCisgICAgICAgIHJl
dHVybiBjb2RlT3JpZ2luOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyAgICByZXR1cm4gTnVs
bG9wdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYg
Kzg0LDcgQEAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUmVnaXN0ZXJBdE9m
ZnNldExpc3Q7CiBjbGFzcyBUeXBlTG9jYXRpb247CiBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50
OworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiAKIGVudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsg
RG9udENvdW50UmVvcHRpbWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKIApAQCAtMjc0
LDcgKzI3NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ppdENvZGVNYXAu
Z2V0KCk7CiAgICAgfQotICAgIAorCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5zdHJ1
Y3Rpb24qIHJldHVybkFkZHJlc3MpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXR1
cm5BZGRyZXNzID49IGluc3RydWN0aW9ucygpLmJlZ2luKCkgJiYgcmV0dXJuQWRkcmVzcyA8IGlu
c3RydWN0aW9ucygpLmVuZCgpKTsKQEAgLTkyNyw2ICs5MjgsOSBAQCBwdWJsaWM6CiAKICAgICBD
YWxsU2l0ZUluZGV4IG5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUlu
ZGV4IG9yaWdpbmFsQ2FsbFNpdGUpOwogCisgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChz
dGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOworICAgIE9wdGlvbmFsPENvZGVP
cmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXpl
TExJbnRJbmxpbmVDYWNoZXMoKTsKICAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVD
YWNoZXMoKTsKQEAgLTEwOTcsNiArMTEwMSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEpJVCkK
ICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlOwogI2VuZGlm
CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2lu
TWFwOwogCiAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6
ZXI7CiAgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJl
dmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsOSBAQCBzdHJ1Y3QgQ29kZU9yaWdp
biB7CiAgICAgYm9vbCBpc0FwcHJveGltYXRlbHlFcXVhbFRvKGNvbnN0IENvZGVPcmlnaW4mIG90
aGVyKSBjb25zdDsKICAgICAKICAgICB1bnNpZ25lZCBhcHByb3hpbWF0ZUhhc2goKSBjb25zdDsK
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIHdhbGtVcElubGlu
ZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJik7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBpbmxpbmUgc3Rh
Y2suIFRoaXMgaXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KICAg
ICBWZWN0b3I8Q29kZU9yaWdpbj4gaW5saW5lU3RhY2soKSBjb25zdDsKQEAgLTEyNyw3ICsxMzAs
NyBAQCBpbmxpbmUgYm9vbCBDb2RlT3JpZ2luOjpvcGVyYXRvcj09KGNvbnN0CiAgICAgcmV0dXJu
IGJ5dGVjb2RlSW5kZXggPT0gb3RoZXIuYnl0ZWNvZGVJbmRleAogICAgICAgICAmJiBpbmxpbmVD
YWxsRnJhbWUgPT0gb3RoZXIuaW5saW5lQ2FsbEZyYW1lOwogfQotICAgIAorCiBzdHJ1Y3QgQ29k
ZU9yaWdpbkhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENvZGVPcmlnaW4m
IGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IENvZGVPcmlnaW4mIGEsIGNvbnN0IENvZGVPcmlnaW4mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNiArMjQ2LDE4IEBAIGlu
bGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3IKICAgICByZXR1cm4gYmFzZWxp
bmVDb2RlQmxvY2s7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK2lubGluZSB2
b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlv
bikKK3sKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAqdGhpczsKKyAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICBmdW5jdGlvbihjb2RlT3JpZ2luKTsKKyAgICAgICAgaWYgKCFjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKKyAgICB9Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZp
c2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYgKzMyNCwxNCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBhYm91dFRvRGllKCk7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3Q7CisgICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdAorICAgIHsgCisgICAg
ICAgIGlmICghbV9zdHViUm91dGluZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICB1aW50cHRyX3QgcGNBc0ludCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBjKTsKKyAg
ICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUtPnN0YXJ0QWRkcmVzcygpIDw9IHBjQXNJbnQgJiYg
cGNBc0ludCA8PSBtX3N0dWJSb3V0aW5lLT5lbmRBZGRyZXNzKCk7CisgICAgfQogCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NDYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAx
OTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDEzIEBAIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICByZXNldChjb2RlQmxvY2spOwogICAgIHJl
c2V0QnlHQyA9IHRydWU7CiB9CisKK2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OmNvbnRhaW5zUEMo
dm9pZCogcGMpIGNvbnN0Cit7CisgICAgaWYgKGNhY2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdS5zdHViLT5jb250YWluc1BDKHBj
KTsKK30KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAx
OTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw4IEBAIHB1YmxpYzoKICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW47CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4OwogCisg
ICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdDsKKwogICAgIHVuaW9uIHsKICAgICAg
ICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNl
T2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzEsNiArMTMxLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVHlwZVByb2ZpbGVyRXhw
cmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2
b3QsIHVuc2lnbmVkIGVuZERpdm90KTsKIAogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7
IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxFeHBy
ZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25J
bmZvOyB9CiAKICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlz
UmVnaXN0ZXI7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNw
cAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDYgKzIxNSwxOCBAQCB2b2lkIEpJVENvZGU6
OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUCiAgICAgbWluaWZpZWRERkcudmFsaWRhdGVSZWZl
cmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAorT3B0aW9uYWw8Q29kZU9yaWdpbj4gSklU
Q29kZTo6ZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKQoreworICAgIGZvciAoT1NSRXhpdCYg
ZXhpdCA6IG9zckV4aXQpIHsKKyAgICAgICAgaWYgKEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGhh
bmRsZSA9IGV4aXQubV9jb2RlLmV4ZWN1dGFibGVNZW1vcnkoKSkgeworICAgICAgICAgICAgaWYg
KGhhbmRsZS0+c3RhcnQoKSA8PSBwYyAmJiBwYyA8IGhhbmRsZS0+ZW5kKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDE5NTU3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsNiArMTI0LDggQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBzdGF0aWMgcHRy
ZGlmZl90IGNvbW1vbkRhdGFPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklUQ29k
ZSwgY29tbW9uKTsgfQorCisgICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKENvZGVCbG9j
ayosIHZvaWQqIHBjKSBvdmVycmlkZTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IEpJVENvbXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBKSVRDb21waWxlcjo6SklU
Q29tcGlsZXIoR3JhcGgmIGRmZykKICAgICAsIG1fZ3JhcGgoZGZnKQogICAgICwgbV9qaXRDb2Rl
KGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpKQogICAgICwgbV9ibG9ja0hlYWRzKGRmZy5udW1CbG9j
a3MoKSkKKyAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKGRmZy5tX3ZtKQogewogICAg
IGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBtX2dyYXBoLm1fdm0ubV9wZXJCeXRlY29k
ZVByb2ZpbGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8RGlz
YXNzZW1ibGVyPihkZmcpOwpAQCAtMzA1LDYgKzMwNiw5IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hcHBlbmRFeGNl
cHRpb25IYW5kbGVyKG5ld0V4Y2VwdGlvbkhhbmRsZXIpOwogICAgICAgICB9CiAgICAgfQorCisg
ICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQorICAg
ICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQ
Q1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxp
bmtCdWZmZXIpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCkBAIC0zMzksNyAr
MzQzLDggQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgbV9zcGVjdWxhdGl2ZS0+
Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CiAKICAgICAvLyBHZW5lcmF0ZSBz
bG93IHBhdGggY29kZS4KLSAgICBtX3NwZWN1bGF0aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRvcnMo
KTsKKyAgICBtX3NwZWN1bGF0aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRvcnMobV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIpOworICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0
ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigp
KTsKICAgICAKICAgICBjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKICAgICBsaW5rT1NSRXhp
dHMoKTsKQEAgLTQzMiw3ICs0MzcsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rp
b24oKQogICAgIGp1bXAoZnJvbUFyaXR5Q2hlY2spOwogICAgIAogICAgIC8vIEdlbmVyYXRlIHNs
b3cgcGF0aCBjb2RlLgotICAgIG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycygp
OworICAgIG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycyhtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcik7CisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkp
OwogICAgIAogICAgIGNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOwogICAgIGxpbmtPU1JFeGl0
cygpOwpAQCAtNTk4LDYgKzYwNCwyMiBAQCBDYWxsU2l0ZUluZGV4IEpJVENvbXBpbGVyOjpyZWNv
cmRDYWxsU2l0CiAgICAgcmV0dXJuIGNhbGxTaXRlOwogfQogCit2b2lkIEpJVENvbXBpbGVyOjpz
ZXRFbmRPZk1haW5QYXRoKCkKK3sKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBl
bmRJdGVtKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBtX3NwZWN1bGF0aXZlLT5tX29yaWdp
bi5zZW1hbnRpYyk7CisgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mTWFpblBhdGgobGFiZWxJZ25vcmlu
Z1dhdGNocG9pbnRzKCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpzZXRFbmRPZkNvZGUoKQor
eworICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmlu
Z1dhdGNocG9pbnRzKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmln
aW4oKSk7CisgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQorICAgICAgICByZXR1cm47
CisgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2lu
dHMoKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAi
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgog
I2luY2x1ZGUgIlRlbXBSZWdpc3RlclNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTExOCw2
ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgLy8gTWV0aG9kcyB0byBzZXQgbGFiZWxzIGZvciB0aGUg
ZGlzYXNzZW1ibGVyLgogICAgIHZvaWQgc2V0U3RhcnRPZkNvZGUoKQogICAgIHsKKyAgICAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hw
b2ludHMoKSwgQ29kZU9yaWdpbigwLCBudWxscHRyKSk7CiAgICAgICAgIGlmIChMSUtFTFkoIW1f
ZGlzYXNzZW1ibGVyKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldFN0YXJ0T2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKQEAgLTEzNywx
OSArMTM5LDggQEAgcHVibGljOgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yTm9kZShu
b2RlLCBsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
c2V0RW5kT2ZNYWluUGF0aCgpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2Vt
YmxlcikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRF
bmRPZk1haW5QYXRoKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBzZXRFbmRPZkNvZGUoKQotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWSghbV9kaXNh
c3NlbWJsZXIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
c2V0RW5kT2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKLSAgICB9CisgICAgdm9p
ZCBzZXRFbmRPZk1haW5QYXRoKCk7CisgICAgdm9pZCBzZXRFbmRPZkNvZGUoKTsKICAgICAKICAg
ICBDYWxsU2l0ZUluZGV4IGFkZENhbGxTaXRlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7
CkBAIC0yNjUsNiArMjU2LDggQEAgcHVibGljOgogCiAgICAgQ2FsbFNpdGVJbmRleCByZWNvcmRD
YWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29uc3Qg
Q29kZU9yaWdpbiYsIHVuc2lnbmVkIGV2ZW50U3RyZWFtSW5kZXgpOwogCisgICAgUENUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKSB7IHJldHVybiBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBP
U1JFeGl0SnVtcFBsYWNlaG9sZGVyOwogICAgIApAQCAtMzI4LDYgKzMyMSw3IEBAIHByaXZhdGU6
CiAgICAgQ2FsbCBtX2NhbGxBcml0eUZpeHVwOwogICAgIExhYmVsIG1fYXJpdHlDaGVjazsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U3BlY3VsYXRpdmVKSVQ+IG1fc3BlY3VsYXRpdmU7CisgICAgUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwogfTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw2ICs2Miw5IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gQnkgZGVmYXVsdCBzbG93IHBhdGggZ2VuZXJhdG9ycyBkb24ndCBoYXZl
IGEgY2FsbC4KICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpDYWxsKCk7CiAgICAgfQor
CisgICAgY29uc3QgTm9kZU9yaWdpbiYgb3JpZ2luKCkgY29uc3QgIHsgcmV0dXJuIG1fb3JpZ2lu
OyB9CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVj
dWxhdGl2ZUpJVCopID0gMDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9sYWJlbDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMwLDEwICszMzAsMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6YWRkU2xvd1BhdGhHZW5lcmF0bwogICAgIG1fc2xvd1BhdGhHZW5lcmF0
b3JzLmFwcGVuZChXVEZNb3ZlKHNsb3dQYXRoR2VuZXJhdG9yKSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpy
dW5TbG93UGF0aEdlbmVyYXRvcnMoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2xvd1Bh
dGhHZW5lcmF0b3JzLnNpemUoKTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3Nsb3dQYXRoR2VuZXJhdG9ycy5zaXplKCk7ICsraSkgeworICAgICAgICBwY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShtX2ppdC5sYWJlbCgpLCBtX3Nsb3dQYXRoR2VuZXJhdG9y
c1tpXS0+b3JpZ2luKCkuc2VtYW50aWMpOwogICAgICAgICBtX3Nsb3dQYXRoR2VuZXJhdG9yc1tp
XS0+Z2VuZXJhdGUodGhpcyk7CisgICAgfQogfQogCiAvLyBPbiBXaW5kb3dzIHdlIG5lZWQgdG8g
d3JhcCBmbW9kOyBvbiBvdGhlciBwbGF0Zm9ybXMgd2UgY2FuIGNhbGwgaXQgZGlyZWN0bHkuCkBA
IC0xNTA0LDYgKzE1MDYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJs
b2NrCiAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkg
JiYgbWF5RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKSAhPSBEb2VzTm90RXhpdCkK
ICAgICAgICAgICAgIG1faml0LmppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwogCisgICAg
ICAgIG1faml0LnBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigpLmFwcGVuZEl0ZW0obV9qaXQubGFi
ZWwoKSwgbV9vcmlnaW4uc2VtYW50aWMpOworCiAgICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9k
ZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoYmVsb25nc0luTWluaWZpZWRHcmFwaChtX2N1cnJl
bnROb2RlLT5vcCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDcgKzMxNyw3
IEBAIHB1YmxpYzoKICAgICBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBjaGVja0dlbmVyYXRlZFR5cGVG
b3JUb0ludDMyKE5vZGUqKTsKIAogICAgIHZvaWQgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjp1
bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPik7Ci0gICAgdm9pZCBydW5TbG93UGF0aEdlbmVy
YXRvcnMoKTsKKyAgICB2b2lkIHJ1blNsb3dQYXRoR2VuZXJhdG9ycyhQQ1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXImKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGUoTm9kZSopOwogICAgIHZvaWQgbm90
aWNlT1NSQmlydGgoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExC
M0NvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QjNDb21waWxlLmNwcAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExCM0NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAj
aW5jbHVkZSAiRlRMVW53aW5kSW5mby5oIgogI2luY2x1ZGUgIkpJVFN1YkdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgog
I2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CkBAIC0xMzQsNiArMTM1LDEwIEBAIHZvaWQgY29tcGlsZShTdGF0ZSYg
c3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRy
dWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgQjM6OlBDVG9PcmlnaW5NYXAg
b3JpZ2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKKyAgICBpZiAo
dm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKQorICAgICAgICBjb2RlQmxv
Y2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5N
YXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0
YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikpOwogCiAgICAgc3RhdGUuZ2VuZXJhdGVk
RnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8R2VuZXJhdGVkRnVuY3Rpb24+KAogICAgICAgICBzdGF0
ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAko
cmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4NiwyNSBAQCBSZWdpc3RlclNldCBKSVRD
b2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVzCiAgICAgcmV0dXJuIFJlZ2lzdGVyU2V0KCk7CiB9CiAK
K09wdGlvbmFsPENvZGVPcmlnaW4+IEpJVENvZGU6OmZpbmRQQyhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgdm9pZCogcGMpCit7CisgICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgeworICAg
ICAgICBpZiAoRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gZXhpdC5tX2NvZGUuZXhl
Y3V0YWJsZU1lbW9yeSgpKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT5zdGFydCgpIDw9IHBj
ICYmIHBjIDw9IGhhbmRsZS0+ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFs
PENvZGVPcmlnaW4+KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUpOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8TGF6eVNsb3dQYXRoPiYgbGF6eVNs
b3dQYXRoIDogbGF6eVNsb3dQYXRocykgeworICAgICAgICBpZiAoRXhlY3V0YWJsZU1lbW9yeUhh
bmRsZSogaGFuZGxlID0gbGF6eVNsb3dQYXRoLT5zdHViKCkuZXhlY3V0YWJsZU1lbW9yeSgpKSB7
CisgICAgICAgICAgICBpZiAoaGFuZGxlLT5zdGFydCgpIDw9IHBjICYmIHBjIDwgaGFuZGxlLT5l
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oY29kZUJs
b2NrLT5jb2RlT3JpZ2luKGxhenlTbG93UGF0aC0+Y2FsbFNpdGVJbmRleCgpKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gTnVsbG9wdDsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDgg
QEAgcHVibGljOgogCiAgICAgUmVnaXN0ZXJTZXQgbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4
Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCkgb3ZlcnJp
ZGU7CiAKKyAgICBPcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCog
cGMpIG92ZXJyaWRlOworCiAjaWYgRlRMX1VTRVNfQjMKICAgICBDb2RlUmVmIGIzQ29kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYjNDb2RlOyB9CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCShyZXZpc2lvbiAxOTU1Nzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCwxMSBAQAogCiAjaW5jbHVkZSAiQ29uc2VydmF0aXZl
Um9vdHMuaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1
ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTExJbnRQ
Q1Jhbmdlcy5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlIDxzZXRqbXAuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTU3Nyw2ICs1ODAs
NjQgQEAgdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOgogI2Vycm9yIE5l
ZWQgYSB3YXkgdG8gZ2V0IHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIGZvciBhbm90aGVyIHRocmVh
ZCBvbiB0aGlzIHBsYXRmb3JtCiAjZW5kaWYKIH0KK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0Cit7CisgICAgLy8gTExJbnQgdXNlcyByZWdU
NCBhcyBQQy4KKyNpZiBPUyhEQVJXSU4pCisKKyNpZiBfX0RBUldJTl9VTklYMDMKKworI2lmIENQ
VShYODYpCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBYODZSZWdpc3RlcnM6
OmVzaSwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWdzLl9fZXNpKTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgc3RhdGljX2Fzc2VydChM
TEludDo6TExJbnRQQyA9PSBYODZSZWdpc3RlcnM6OnI4LCAiV3JvbmcgTExJbnQgUEMuIik7Cisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX19yOCk7CisjZWxpZiBDUFUo
QVJNKQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gQVJNUmVnaXN0ZXJzOjpy
OCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWdzLl9fcls4XSk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgc3RhdGljX2Fzc2VydChMTElu
dDo6TExJbnRQQyA9PSBBUk02NFJlZ2lzdGVyczo6eDQsICJXcm9uZyBMTEludCBQQy4iKTsKKyAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVncy5fX3hbNF0pOworI2Vsc2UKKyNl
cnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyNlbHNlIC8vICFfX0RBUldJTl9V
TklYMDMKKyNpZiBDUFUoWDg2KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0g
WDg2UmVnaXN0ZXJzOjplc2ksICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocmVncy5lc2kpOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICBzdGF0
aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6cjgsICJXcm9uZyBMTElu
dCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVncy5yOCk7Cisj
ZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworI2VuZGlmIC8vIF9f
REFSV0lOX1VOSVgwMworCisvLyBlbmQgT1MoREFSV0lOKQorI2VsaWYgT1MoV0lORE9XUykKKwor
I2lmIENQVShBUk0pCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBBUk1SZWdp
c3RlcnM6OnI4LCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KCh1aW50cHRyX3QpIHJlZ3MuUjgpOworI2VsaWYgQ1BVKE1JUFMpCisjZXJyb3Ig
RG9udCBrbm93IHdoYXQgdG8gZG8gd2l0aCBtaXBzLiBEbyB3ZSBldmVuIG5lZWQgdGhpcz8KKyNl
bGlmIENQVShYODYpCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBYODZSZWdp
c3RlcnM6OmVzaSwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPigodWludHB0cl90KSByZWdzLkVzaSk7CisjZWxpZiBDUFUoWDg2XzY0KQorICAg
IHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0ZXJzOjpyMTAsICJXcm9u
ZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHVpbnRw
dHJfdCkgcmVncy5SMTApOworI2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2Vu
ZGlmCisKKyNlbHNlCisjZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIExMSW50UEMgZm9yIGFu
b3RoZXIgdGhyZWFkIG9uIHRoaXMgcGxhdGZvcm0KKyNlbmRpZgorfQogI2VuZGlmIC8vIEVOQUJM
RShTQU1QTElOR19QUk9GSUxFUikKIAogdm9pZCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpmcmVl
UmVnaXN0ZXJzKFRocmVhZDo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkocmV2aXNpb24gMTk1
NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShTQU1Q
TElOR19QUk9GSUxFUikKICAgICAgICAgICAgIHZvaWQqIGZyYW1lUG9pbnRlcigpIGNvbnN0Owog
ICAgICAgICAgICAgdm9pZCogaW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3Q7CisgICAgICAgICAg
ICB2b2lkKiBsbGludFBDKCkgY29uc3Q7CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJ
TEVSKQogICAgICAgICAgICAgCiAjaWYgT1MoREFSV0lOKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdT
ZXJ2ZXI6OkpTR2xvYmEKIHZvaWQgSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlcjo6YXR0
YWNoRGVidWdnZXIoKQogewogICAgIGF0dGFjaCgmbV9nbG9iYWxPYmplY3QpOworICAgIG1fZ2xv
YmFsT2JqZWN0LnZtKCkuc2V0U2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKTsKICAg
ICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucygpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEluc3BlY3Rv
clNjcmlwdFByb2ZpbGVyQWdlbnQ6OmFkZEV2CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCi1zdGF0aWMgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U2FtcGxlcz4gYnVp
bGRTYW1wbGVzKFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiYgc2FtcGxpbmdQ
cm9maWxlclN0YWNrVHJhY2VzLCBkb3VibGUgdG90YWxUaW1lKQorc3RhdGljIFJlZjxQcm90b2Nv
bDo6U2NyaXB0UHJvZmlsZXI6OlNhbXBsZXM+IGJ1aWxkU2FtcGxlcyhWZWN0b3I8U2FtcGxpbmdQ
cm9maWxlcjo6U3RhY2tUcmFjZT4mJiBzYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMsIGRvdWJs
ZSB0b3RhbFRpbWUpCiB7CiAgICAgUmVmPFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6U2NyaXB0
UHJvZmlsZXI6OlN0YWNrVHJhY2U+PiBzdGFja1RyYWNlcyA9IFByb3RvY29sOjpBcnJheTxQcm90
b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlN0YWNrVHJhY2U+OjpjcmVhdGUoKTsKICAgICBmb3IgKFNh
bXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2UmIHN0YWNrVHJhY2UgOiBzYW1wbGluZ1Byb2ZpbGVy
U3RhY2tUcmFjZXMpIHsKQEAgLTE2Niw4ICsxNjYsOCBAQCBzdGF0aWMgUmVmPFByb3RvY29sOjpT
Y3JpcHRQcm9maWxlcjo6U2FtCiAgICAgICAgICAgICBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2Zp
bGVyOjpTdGFja0ZyYW1lPiBmcmFtZSA9IFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U3RhY2tG
cmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0U291cmNlSUQoU3RyaW5nOjpudW1i
ZXIoc3RhY2tGcmFtZS5zb3VyY2VJRCgpKSkKICAgICAgICAgICAgICAgICAuc2V0TmFtZShzdGFj
a0ZyYW1lLmRpc3BsYXlOYW1lKCkpCi0gICAgICAgICAgICAgICAgLnNldExpbmUoc3RhY2tGcmFt
ZS5zdGFydExpbmUoKSkKLSAgICAgICAgICAgICAgICAuc2V0Q29sdW1uKHN0YWNrRnJhbWUuc3Rh
cnRDb2x1bW4oKSkKKyAgICAgICAgICAgICAgICAuc2V0TGluZShzdGFja0ZyYW1lLmZ1bmN0aW9u
U3RhcnRMaW5lKCkpCisgICAgICAgICAgICAgICAgLnNldENvbHVtbihzdGFja0ZyYW1lLmZ1bmN0
aW9uU3RhcnRDb2x1bW4oKSkKICAgICAgICAgICAgICAgICAuc2V0VXJsKHN0YWNrRnJhbWUudXJs
KCkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgIGZyYW1lcy0+YWRk
SXRlbShXVEZNb3ZlKGZyYW1lKSk7CkBAIC0xOTQsOCArMTk0LDggQEAgdm9pZCBJbnNwZWN0b3JT
Y3JpcHRQcm9maWxlckFnZW50Ojp0cmFjawogICAgICAgICBSRUxFQVNFX0FTU0VSVChzYW1wbGlu
Z1Byb2ZpbGVyKTsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+
Z2V0TG9jaygpKTsKICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+c3RvcChsb2NrZXIpOwotICAg
ICAgICBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW1wbGVzPiBzYW1wbGVzID0gYnVp
bGRTYW1wbGVzKHNhbXBsaW5nUHJvZmlsZXItPnN0YWNrVHJhY2VzKGxvY2tlciksIHNhbXBsaW5n
UHJvZmlsZXItPnRvdGFsVGltZShsb2NrZXIpKTsKLSAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+
Y2xlYXJEYXRhKGxvY2tlcik7CisgICAgICAgIFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFj
a1RyYWNlPiBzdGFja1RyYWNlcyA9IHNhbXBsaW5nUHJvZmlsZXItPnJlbGVhc2VTdGFja1RyYWNl
cyhsb2NrZXIpOworICAgICAgICBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW1wbGVz
PiBzYW1wbGVzID0gYnVpbGRTYW1wbGVzKFdURk1vdmUoc3RhY2tUcmFjZXMpLCBzYW1wbGluZ1By
b2ZpbGVyLT50b3RhbFRpbWUobG9ja2VyKSk7CiAKICAgICAgICAgbG9ja2VyLnVubG9ja0Vhcmx5
KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE5NTU3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCkBAIC02
OSw2ICs3MCw3IEBAIEpJVDo6SklUKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAg
LCBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleChVSU5UX01BWCkKICAgICAsIG1fY2FsbExpbmtJbmZv
SW5kZXgoVUlOVF9NQVgpCiAgICAgLCBtX3JhbmRvbUdlbmVyYXRvcihjcnlwdG9ncmFwaGljYWxs
eVJhbmRvbU51bWJlcigpKQorICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKnZtKQog
ICAgICwgbV9jYW5CZU9wdGltaXplZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZyhmYWxzZSkKIHsKQEAgLTE1OCw2ICsxNjAsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0
cnVjdGlvbnNCZWdpbiArIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UobV9pbnRlcnByZXRlci0+aXNPcGNvZGUoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29k
ZSksICJwcml2YXRlQ29tcGlsZU1haW5QYXNzIGdvbmUgYmFkIEAgJWQiLCBtX2J5dGVjb2RlT2Zm
c2V0KTsKIAorICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxh
YmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCkpOworCiAjaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgPiAwKSAvLyBBdm9pZCB0
aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCiAgICAgICAgICAgICBzYW1w
bGVJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMzY1LDYgKzM2OSw4IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgZm9yIChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1f
c2xvd0Nhc2VzLmVuZCgpOykgewogICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gaXRlci0+dG87
CiAKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKwogICAgICAgICB1bnNpZ25lZCBmaXJz
dFRvID0gbV9ieXRlY29kZU9mZnNldDsKIAogICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBtX2J5dGVjb2RlT2Zmc2V0OwpAQCAtNTE5
LDYgKzUyNSw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAg
ICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOwogICAgIH0KICAgICAKKyAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oMCwgbnVsbHB0
cikpOworCiAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
c2V0U3RhcnRPZkNvZGUobGFiZWwoKSk7CiAKQEAgLTU3MSw2ICs1NzksNyBAQCBDb21waWxhdGlv
blJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgCiAgICAgaWYgKG1fZGlzYXNzZW1i
bGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsK
KyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKICAgICBzdGFja092
ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZU9mZnNldCA9IDA7CkBAIC02MTIsNiAr
NjIxLDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIAog
ICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9m
Q29kZShsYWJlbCgpKTsKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7
CisKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9j
aywgZWZmb3J0KTsKICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKQEAg
LTcwOCw2ICs3MTksOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJ
CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24u
Z2V0KCksIHBhdGNoQnVmZmVyKTsKICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LT5hZGRDb21waWxhdGlvbihtX2NvbXBpbGF0aW9uKTsKICAgICB9CisKKyAgICBpZiAobV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCisgICAgICAgIG1fY29kZUJs
b2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2lu
TWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpKTsK
ICAgICAKICAgICBDb2RlUmVmIHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNo
QnVmZmVyLApAQCAtNzE2LDcgKzczMCw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0
ZUNvbXBpbGUoSkkKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9y
QmFzZWxpbmVKSVQuYWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KHJlc3VsdC5zaXpl
KCkpIC8KICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKSk7Ci0gICAgCisKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoQ29k
ZUJsb2NrOjpMYXRlU2hyaW5rKTsKICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKICAgICAg
ICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklU
Q29kZTo6QmFzZWxpbmVKSVQpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJS
ZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCisjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtOTEzLDYgKzkxNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXZWFrUmFu
ZG9tIG1fcmFuZG9tR2VuZXJhdG9yOwogICAgICAgICBzdGF0aWMgQ29kZVJlZiBzdHJpbmdHZXRC
eVZhbFN0dWJHZW5lcmF0b3IoVk0qKTsKIAorICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CisKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0
aW1pemVkOwogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAg
IGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTIgQEAKIAogI2luY2x1ZGUg
IkFyaXR5Q2hlY2tNb2RlLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ29k
ZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFs
dWUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdp
c3RlclNldC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtMTk1LDYgKzE5Nyw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdmly
dHVhbCBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxp
bmdDYWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKyAgICB2aXJ0dWFsIE9wdGlv
bmFsPENvZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgeyBVTlVTRURfUEFS
QU0ocGMpOyByZXR1cm4gTnVsbG9wdDsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
Q1RvQ29kZU9yaWdpbk1hcC5oIgorCisjaW5jbHVkZSAiQjNQQ1RvT3JpZ2luTWFwLmgiCisjaW5j
bHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIERlbHRhQ29tcHJlc3Npb25CdWlsZGVyIHsKK3B1
YmxpYzoKKyAgICBEZWx0YUNvbXByZXNzaW9uQnVpbGRlcihzaXplX3QgbWF4U2l6ZSkKKyAgICAg
ICAgOiBtX29mZnNldCgwKQorICAgICAgICAsIG1fbWF4U2l6ZShtYXhTaXplKQorICAgIHsKKyAg
ICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhtX21heFNp
emUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHdyaXRl
KFQgaXRlbSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb2Zmc2V0ICsgc2l6ZW9m
KFQpIDw9IG1fbWF4U2l6ZSk7CisgICAgICAgICpiaXR3aXNlX2Nhc3Q8VCo+KG1fYnVmZmVyICsg
bV9vZmZzZXQpID0gaXRlbTsKKyAgICAgICAgbV9vZmZzZXQgKz0gc2l6ZW9mKFQpOworICAgIH0K
KworICAgIHVpbnQ4X3QqIG1fYnVmZmVyOyAKKyAgICBzaXplX3QgbV9vZmZzZXQ7CisgICAgc2l6
ZV90IG1fbWF4U2l6ZTsKK307CisKK2NsYXNzIERlbHRhQ29tcHJlc3NlaW9uUmVhZGVyIHsKK3B1
YmxpYzoKKyAgICBEZWx0YUNvbXByZXNzZWlvblJlYWRlcih1aW50OF90KiBidWZmZXIsIHNpemVf
dCBzaXplKQorICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAgICAgLCBtX3NpemUoc2l6
ZSkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgVCByZWFkKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb2Zm
c2V0ICsgc2l6ZW9mKFQpIDw9IG1fc2l6ZSk7CisgICAgICAgIFQgcmVzdWx0ID0gKmJpdHdpc2Vf
Y2FzdDxUKj4obV9idWZmZXIgKyBtX29mZnNldCk7CisgICAgICAgIG1fb2Zmc2V0ICs9IHNpemVv
ZihUKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWlu
dDhfdCogbV9idWZmZXI7CisgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICBzaXplX3QgbV9vZmZzZXQ7
Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoVk0mIHZtKQorICAgIDogbV92bSh2bSkKKyAg
ICAsIG1fc2hvdWxkQnVpbGRNYXBwaW5nKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29kZU9yaWdpbk1h
cHBpbmcoKSkKK3sgfQorCitQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImJiBvdGhlcikKKyAgICA6IG1fdm0o
b3RoZXIubV92bSkKKyAgICAsIG1fY29kZVJhbmdlcyhXVEZNb3ZlKG90aGVyLm1fY29kZVJhbmdl
cykpCisgICAgLCBtX3Nob3VsZEJ1aWxkTWFwcGluZyhvdGhlci5tX3Nob3VsZEJ1aWxkTWFwcGlu
ZykKK3sgfQorCisjaWYgRlRMX1VTRVNfQjMKK1BDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6UENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKFZNJiB2bSwgQjM6OlBDVG9PcmlnaW5NYXAmJiBiM1BDVG9P
cmlnaW5NYXApCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9zaG91bGRCdWlsZE1hcHBpbmcodm0u
c2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKQoreworICAgIGlmICghbV9zaG91
bGRCdWlsZE1hcHBpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoY29uc3QgQjM6OlBD
VG9PcmlnaW5NYXA6Ok9yaWdpblJhbmdlJiBvcmlnaW5SYW5nZSA6IGIzUENUb09yaWdpbk1hcC5y
YW5nZXMoKSkgeworICAgICAgICBERkc6Ok5vZGUqIG5vZGUgPSBiaXR3aXNlX2Nhc3Q8REZHOjpO
b2RlKj4ob3JpZ2luUmFuZ2Uub3JpZ2luLmRhdGEoKSk7CisgICAgICAgIGlmIChub2RlKQorICAg
ICAgICAgICAgYXBwZW5kSXRlbShvcmlnaW5SYW5nZS5sYWJlbCwgbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXBwZW5kSXRlbShvcmlnaW5SYW5nZS5s
YWJlbCwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKKyAg
ICB9Cit9CisjZW5kaWYKKwordm9pZCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmFwcGVuZEl0
ZW0oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsLCBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3Jp
Z2luKQoreworICAgIGlmICghbV9zaG91bGRCdWlsZE1hcHBpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2NvZGVSYW5nZXMuc2l6ZSgpKSB7CisgICAgICAgIGlmIChtX2NvZGVSYW5n
ZXMubGFzdCgpLmVuZCA9PSBsYWJlbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9j
b2RlUmFuZ2VzLmxhc3QoKS5lbmQgPSBsYWJlbDsKKyAgICAgICAgaWYgKG1fY29kZVJhbmdlcy5s
YXN0KCkuY29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luIHx8ICFjb2RlT3JpZ2luKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29kZVJhbmdlcy5hcHBlbmQoQ29kZVJhbmdle2xh
YmVsLCBsYWJlbCwgY29kZU9yaWdpbn0pOworfQorCisKK3N0YXRpYyBjb25zdCB1aW50OF90IHNl
bnRpbmVsUENEZWx0YSA9IDA7CitzdGF0aWMgY29uc3QgaW50OF90IHNlbnRpbmVsQnl0ZWNvZGVE
ZWx0YSA9IDA7CisKK1BDVG9Db2RlT3JpZ2luTWFwOjpQQ1RvQ29kZU9yaWdpbk1hcChQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXImJiBidWlsZGVyLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpOworCisgICAgaWYg
KCFidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgbV9wY1JhbmdlU3RhcnQg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpOworICAgICAgICBtX3BjUmFu
Z2VFbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpOworCisgICAgICAg
IG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZSA9IDA7CisgICAgICAgIG1fY29tcHJlc3NlZFBDcyA9
IG51bGxwdHI7CisKKyAgICAgICAgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplID0gMDsKKyAg
ICAgICAgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnMgPSBudWxscHRyOworCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBXZSBkbyBhIGZpbmFsIHRvdWNoLXVwIG9uIHRoZSBsYXN0IHJh
bmdlIGhlcmUgYmVjYXVzZSBvZiBob3cgd2UgZ2VuZXJhdGUgdGhlIHRhYmxlLgorICAgIC8vIFRo
ZSBmaW5hbCByYW5nZSAoaWYgbm9uIGVtcHR5KSB3b3VsZCBiZSBpZ25vcmVkIGlmIHdlIGRpZG4n
dCBhcHBlbmQgYW55IChhcmJpdHJhcnkpCisgICAgLy8gcmFuZ2UgYXMgdGhlIGxhc3QgaXRlbSBv
ZiB0aGUgdmVjdG9yLgorICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6Q29kZVJhbmdlJiBs
YXN0ID0gYnVpbGRlci5tX2NvZGVSYW5nZXMubGFzdCgpOworICAgIGlmICghKGxhc3Quc3RhcnQg
PT0gbGFzdC5lbmQpKQorICAgICAgICBidWlsZGVyLm1fY29kZVJhbmdlcy5hcHBlbmQoUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2V7IGxhc3QuZW5kLCBsYXN0LmVuZCwgbGFzdC5j
b2RlT3JpZ2luIH0pOyAvLyBUaGlzIHJhbmdlIHdpbGwgbmV2ZXIgYWN0dWFsbHkgYmUgZm91bmQs
IGJ1dCBpdCBlbnN1cmVzIHRoZSByZWFsIGxhc3QgcmFuZ2UgaXMgZm91bmQuCisKKyAgICBEZWx0
YUNvbXByZXNzaW9uQnVpbGRlciBwY0NvbXByZXNzb3IoKHNpemVvZih1aW50cHRyX3QpICsgc2l6
ZW9mKHVpbnQ4X3QpKSAqIGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSk7CisgICAgdm9pZCog
bGFzdFBDVmFsdWUgPSBudWxscHRyOworICAgIGF1dG8gYnVpbGRQQ1RhYmxlID0gWyZdICh2b2lk
KiBwY1ZhbHVlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBjVmFsdWUgPiBsYXN0UENWYWx1
ZSk7CisgICAgICAgIHVpbnRwdHJfdCBkZWx0YSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBj
VmFsdWUpIC0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obGFzdFBDVmFsdWUpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChkZWx0YSAhPSBzZW50aW5lbFBDRGVsdGEpOworICAgICAgICBsYXN0UENW
YWx1ZSA9IHBjVmFsdWU7CisgICAgICAgIGlmIChkZWx0YSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDhfdD46Om1heCgpKSB7CisgICAgICAgICAgICBwY0NvbXByZXNzb3Iud3JpdGU8dWludDhf
dD4oc2VudGluZWxQQ0RlbHRhKTsKKyAgICAgICAgICAgIHBjQ29tcHJlc3Nvci53cml0ZTx1aW50
cHRyX3Q+KGRlbHRhKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHBjQ29tcHJlc3Nvci53cml0ZTx1aW50OF90PihzdGF0aWNfY2FzdDx1aW50OF90PihkZWx0YSkp
OworICAgIH07CisKKyAgICBEZWx0YUNvbXByZXNzaW9uQnVpbGRlciBjb2RlT3JpZ2luQ29tcHJl
c3Nvcigoc2l6ZW9mKGludHB0cl90KSArIHNpemVvZihpbnQ4X3QpICsgc2l6ZW9mKGludDhfdCkg
KyBzaXplb2YoSW5saW5lQ2FsbEZyYW1lKikpICogYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgp
KTsKKyAgICBDb2RlT3JpZ2luIGxhc3RDb2RlT3JpZ2luKDAsIG51bGxwdHIpOworICAgIGF1dG8g
YnVpbGRDb2RlT3JpZ2luVGFibGUgPSBbJl0gKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4p
IHsKKyAgICAgICAgaW50cHRyX3QgZGVsdGEgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KSAtIHN0YXRpY19jYXN0PGludHB0cl90PihsYXN0Q29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgbGFzdENvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOwor
ICAgICAgICBpZiAoZGVsdGEgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDhfdD46Om1heCgpIHx8
IGRlbHRhIDwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ4X3Q+OjptaW4oKSB8fCBkZWx0YSA9PSBz
ZW50aW5lbEJ5dGVjb2RlRGVsdGEpIHsKKyAgICAgICAgICAgIGNvZGVPcmlnaW5Db21wcmVzc29y
LndyaXRlPGludDhfdD4oc2VudGluZWxCeXRlY29kZURlbHRhKTsKKyAgICAgICAgICAgIGNvZGVP
cmlnaW5Db21wcmVzc29yLndyaXRlPGludHB0cl90PihkZWx0YSk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50OF90PihzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KGRlbHRhKSk7CisKKyAgICAgICAgaW50OF90IGhhc0lubGluZUNhbGxGcmFtZUJ5
dGUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA/IDEgOiAwOworICAgICAgICBjb2RlT3Jp
Z2luQ29tcHJlc3Nvci53cml0ZTxpbnQ4X3Q+KGhhc0lubGluZUNhbGxGcmFtZUJ5dGUpOworICAg
ICAgICBpZiAoaGFzSW5saW5lQ2FsbEZyYW1lQnl0ZSkKKyAgICAgICAgICAgIGNvZGVPcmlnaW5D
b21wcmVzc29yLndyaXRlPElubGluZUNhbGxGcmFtZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKKyAgICB9OworCisgICAgbV9wY1JhbmdlU3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYnVpbGRlci5tX2NvZGVSYW5nZXMuZmlyc3QoKS5z
dGFydCkuZGF0YUxvY2F0aW9uKCkpOworICAgIG1fcGNSYW5nZUVuZCA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGxpbmtCdWZmZXIubG9jYXRpb25PZihidWlsZGVyLm1fY29kZVJhbmdlcy5sYXN0
KCkuZW5kKS5kYXRhTG9jYXRpb24oKSk7CisgICAgbV9wY1JhbmdlRW5kIC09IDE7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2UmIGNvZGVSYW5n
ZSA9IGJ1aWxkZXIubV9jb2RlUmFuZ2VzW2ldOworICAgICAgICB2b2lkKiBzdGFydCA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihjb2RlUmFuZ2Uuc3RhcnQpLmRhdGFMb2NhdGlvbigpOworICAgICAg
ICB2b2lkKiBlbmQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY29kZVJhbmdlLmVuZCkuZGF0YUxv
Y2F0aW9uKCk7CisgICAgICAgIEFTU0VSVChtX3BjUmFuZ2VTdGFydCA8PSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihzdGFydCkpOworICAgICAgICBBU1NFUlQobV9wY1JhbmdlRW5kID49IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGVuZCkgLSAxKTsKKyAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkK
KyAgICAgICAgICAgIEFTU0VSVChpID09IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSAtIDEp
OworICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICBBU1NFUlQobGlua0J1ZmZlci5sb2Nh
dGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzW2kgLSAxXS5lbmQpLmRhdGFMb2NhdGlvbigpID09
IHN0YXJ0KTsKKworICAgICAgICBidWlsZFBDVGFibGUoc3RhcnQpOworICAgICAgICBidWlsZENv
ZGVPcmlnaW5UYWJsZShjb2RlUmFuZ2UuY29kZU9yaWdpbik7CisgICAgfQorCisgICAgbV9jb21w
cmVzc2VkUENCdWZmZXJTaXplID0gcGNDb21wcmVzc29yLm1fb2Zmc2V0OworICAgIG1fY29tcHJl
c3NlZFBDcyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhwY0NvbXByZXNzb3Iu
bV9idWZmZXIsIG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZSkpOworCisgICAgbV9jb21wcmVzc2Vk
Q29kZU9yaWdpbnNTaXplID0gY29kZU9yaWdpbkNvbXByZXNzb3IubV9vZmZzZXQ7CisgICAgbV9j
b21wcmVzc2VkQ29kZU9yaWdpbnMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJlYWxsb2Mo
Y29kZU9yaWdpbkNvbXByZXNzb3IubV9idWZmZXIsIG1fY29tcHJlc3NlZENvZGVPcmlnaW5zU2l6
ZSkpOworfQorCitQQ1RvQ29kZU9yaWdpbk1hcDo6flBDVG9Db2RlT3JpZ2luTWFwKCkKK3sKKyAg
ICBpZiAobV9jb21wcmVzc2VkUENzKQorICAgICAgICBmYXN0RnJlZShtX2NvbXByZXNzZWRQQ3Mp
OworICAgIGlmIChtX2NvbXByZXNzZWRDb2RlT3JpZ2lucykKKyAgICAgICAgZmFzdEZyZWUobV9j
b21wcmVzc2VkQ29kZU9yaWdpbnMpOworfQorCitkb3VibGUgUENUb0NvZGVPcmlnaW5NYXA6Om1l
bW9yeVNpemUoKQoreworICAgIGRvdWJsZSBzaXplID0gMDsKKyAgICBzaXplICs9IG1fY29tcHJl
c3NlZFBDQnVmZmVyU2l6ZTsKKyAgICBzaXplICs9IG1fY29tcHJlc3NlZENvZGVPcmlnaW5zU2l6
ZTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKworT3B0aW9uYWw8Q29kZU9yaWdpbj4gUENUb0NvZGVP
cmlnaW5NYXA6OmZpbmRQQyh2b2lkKiBwYykgY29uc3QKK3sKKyAgICB1aW50cHRyX3QgcGNBc0lu
dCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBjKTsKKyAgICBpZiAoIShtX3BjUmFuZ2VTdGFy
dCA8PSBwY0FzSW50ICYmIHBjQXNJbnQgPD0gbV9wY1JhbmdlRW5kKSkKKyAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CisKKyAgICB1aW50cHRyX3QgY3VycmVudFBDID0gMDsKKyAgICBDb2RlT3JpZ2lu
IGN1cnJlbnRDb2RlT3JpZ2luKDAsIG51bGxwdHIpOworCisgICAgRGVsdGFDb21wcmVzc2Vpb25S
ZWFkZXIgcGNSZWFkZXIobV9jb21wcmVzc2VkUENzLCBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemUp
OworICAgIERlbHRhQ29tcHJlc3NlaW9uUmVhZGVyIGNvZGVPcmlnaW5SZWFkZXIobV9jb21wcmVz
c2VkQ29kZU9yaWdpbnMsIG1fY29tcHJlc3NlZENvZGVPcmlnaW5zU2l6ZSk7CisgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgdWludHB0cl90IHByZXZpb3VzUEMgPSBjdXJyZW50UEM7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgdmFsdWUgPSBwY1JlYWRlci5yZWFkPHVpbnQ4X3Q+
KCk7CisgICAgICAgICAgICB1aW50cHRyX3QgZGVsdGE7CisgICAgICAgICAgICBpZiAodmFsdWUg
PT0gc2VudGluZWxQQ0RlbHRhKQorICAgICAgICAgICAgICAgIGRlbHRhID0gcGNSZWFkZXIucmVh
ZDx1aW50cHRyX3Q+KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGVsdGEg
PSB2YWx1ZTsKKyAgICAgICAgICAgIGN1cnJlbnRQQyArPSBkZWx0YTsKKyAgICAgICAgfQorCisg
ICAgICAgIENvZGVPcmlnaW4gcHJldmlvdXNPcmlnaW4gPSBjdXJyZW50Q29kZU9yaWdpbjsKKyAg
ICAgICAgeworICAgICAgICAgICAgaW50OF90IHZhbHVlID0gY29kZU9yaWdpblJlYWRlci5yZWFk
PGludDhfdD4oKTsKKyAgICAgICAgICAgIGludHB0cl90IGRlbHRhOworICAgICAgICAgICAgaWYg
KHZhbHVlID09IHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSkKKyAgICAgICAgICAgICAgICBkZWx0YSA9
IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxpbnRwdHJfdD4oKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBkZWx0YSA9IHN0YXRpY19jYXN0PGludHB0cl90Pih2YWx1ZSk7CisKKyAg
ICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGN1cnJlbnRDb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgpICsgZGVsdGEpOworCisgICAgICAgICAgICBpbnQ4X3QgaGFzSW5saW5lRnJhbWUgPSBj
b2RlT3JpZ2luUmVhZGVyLnJlYWQ8aW50OF90PigpOworICAgICAgICAgICAgQVNTRVJUKGhhc0lu
bGluZUZyYW1lID09IDAgfHwgaGFzSW5saW5lRnJhbWUgPT0gMSk7CisgICAgICAgICAgICBpZiAo
aGFzSW5saW5lRnJhbWUpCisgICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lID0gY29kZU9yaWdpblJlYWRlci5yZWFkPElubGluZUNhbGxGcmFtZSo+KCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwcmV2aW91c1BD
KSB7CisgICAgICAgICAgICB1aW50cHRyX3Qgc3RhcnRPZlJhbmdlID0gcHJldmlvdXNQQzsKKyAg
ICAgICAgICAgIC8vIFdlIHN1YnRyYWN0IDEgYmVjYXVzZSB3ZSBnZW5lcmF0ZSBlbmQgcG9pbnRz
IGluY2x1c2l2ZWx5IGluIHRoaXMgdGFibGUsIGV2ZW4gdGhvdWdoIHdlIGFyZSBpbnRlcmVzdGVk
IGluIHJhbmdlcyBvZiB0aGUgZm9ybTogW3ByZXZpb3VzUEMsIGN1cnJlbnRQQykKKyAgICAgICAg
ICAgIHVpbnRwdHJfdCBlbmRPZlJhbmdlID0gY3VycmVudFBDIC0gMTsKKyAgICAgICAgICAgIGlm
IChzdGFydE9mUmFuZ2UgPD0gcGNBc0ludCAmJiBwY0FzSW50IDw9IGVuZE9mUmFuZ2UpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+KHByZXZpb3VzT3JpZ2luKTsg
Ly8gV2UgcmV0dXJuIHByZXZpb3VzT3JpZ2luIGhlcmUgYmVjYXVzZSBDb2RlT3JpZ2luJ3MgYXJl
IG1hcHBlZCB0byB0aGUgc3RhcnRWYWx1ZSBvZiB0aGUgcmFuZ2UuCisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBOdWxsb3B0
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUENUb0NvZGVPcmlnaW5NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBQQ1RvQ29kZU9yaWdpbk1hcF9oCisjZGVmaW5lIFBDVG9Db2RlT3JpZ2luTWFwX2gK
KworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8d3RmL0Jh
Zy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWRCbGFja1Ry
ZWUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisjaWYg
RlRMX1VTRVNfQjMKK25hbWVzcGFjZSBCMyB7CisgICAgY2xhc3MgUENUb09yaWdpbk1hcDsKK30K
KyNlbmRpZgorCitjbGFzcyBMaW5rQnVmZmVyOworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyOworCitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik7CisgICAgZnJpZW5kIGNsYXNzIFBD
VG9Db2RlT3JpZ2luTWFwOworCitwdWJsaWM6CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
KFZNJik7CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFBDVG9Db2RlT3JpZ2luTWFwQnVp
bGRlciYmIG90aGVyKTsKKworI2lmIEZUTF9VU0VTX0IzCisgICAgUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyKFZNJiwgQjM6OlBDVG9PcmlnaW5NYXAmJik7CisjZW5kaWYKKworICAgIHZvaWQgYXBw
ZW5kSXRlbShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwsIGNvbnN0IENvZGVPcmlnaW4mKTsKKyAgICBz
dGF0aWMgQ29kZU9yaWdpbiBkZWZhdWx0Q29kZU9yaWdpbigpIHsgcmV0dXJuIENvZGVPcmlnaW4o
MCwgbnVsbHB0cik7IH0KKworICAgIGJvb2wgZGlkQnVpbGRNYXBwaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zaG91bGRCdWlsZE1hcHBpbmc7IH0KKworcHJpdmF0ZToKKworICAgIHN0cnVjdCBDb2Rl
UmFuZ2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc3RhcnQ7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBlbmQ7CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsK
KyAgICB9OworCisgICAgVk0mIG1fdm07CisgICAgVmVjdG9yPENvZGVSYW5nZT4gbV9jb2RlUmFu
Z2VzOworICAgIGJvb2wgbV9zaG91bGRCdWlsZE1hcHBpbmc7Cit9OworCitjbGFzcyBQQ1RvQ29k
ZU9yaWdpbk1hcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUENUb0NvZGVPcmlnaW5NYXAp
OworcHVibGljOgorICAgIFBDVG9Db2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ciYmLCBMaW5rQnVmZmVyJik7CisgICAgflBDVG9Db2RlT3JpZ2luTWFwKCk7CisKKyAgICBPcHRp
b25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpIGNvbnN0OworCisgICAgZG91YmxlIG1l
bW9yeVNpemUoKTsKKworcHJpdmF0ZToKKyAgICBzaXplX3QgbV9jb21wcmVzc2VkUENCdWZmZXJT
aXplOworICAgIHNpemVfdCBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemU7CisgICAgdWludDhf
dCogbV9jb21wcmVzc2VkUENzOworICAgIHVpbnQ4X3QqIG1fY29tcHJlc3NlZENvZGVPcmlnaW5z
OworICAgIHVpbnRwdHJfdCBtX3BjUmFuZ2VTdGFydDsKKyAgICB1aW50cHRyX3QgbV9wY1Jhbmdl
RW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQQ1RvQ29kZU9yaWdp
bk1hcF9oIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50UENSYW5nZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRQQ1Jhbmdl
cy5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRQQ1Jhbmdlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMCBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgaXNMTEludFBDKHZvaWQqIHBjKQogICAgIHJldHVybiBsbGludFN0YXJ0IDw9IHBj
QXNJbnQgJiYgcGNBc0ludCA8PSBsbGludEVuZDsKIH0KIAorI2lmIEVOQUJMRShKSVQpCitzdGF0
aWMgY29uc3QgR1BSUmVnIExMSW50UEMgPSBHUFJJbmZvOjpyZWdUNDsKKyNlbmRpZgorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6TExJbnQKIAogI2VuZGlmIC8vIExMSW50UENSYW5nZXNfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNyArMjU4LDcg
QEAgaWYgSlNWQUxVRTY0CiAgICAgIyAtIFRoZSBQQyBiYXNlIChvciBQQiBmb3Igc2hvcnQpIG11
c3QgYmUgc3RvcmVkIGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIuCiAgICAgIyAtIEMgY2FsbHMg
YXJlIHN0aWxsIGdpdmVuIHRoZSBJbnN0cnVjdGlvbiogcmF0aGVyIHRoYW4gdGhlIFBDIGluZGV4
LgogICAgICMgICBUaGlzIHJlcXVpcmVzIGFuIGFkZCBiZWZvcmUgdGhlIGNhbGwsIGFuZCBhIHN1
YiBhZnRlci4KLSAgICBjb25zdCBQQyA9IHQ0CisgICAgY29uc3QgUEMgPSB0NCAjIFdoZW4gY2hh
bmdpbmcgdGhpcywgbWFrZSBzdXJlIExMSW50UEMgaXMgdXAgdG8gZGF0ZSBpbiBMTEludFBDUmFu
Z2VzLmgKICAgICBpZiBBUk02NAogICAgICAgICBjb25zdCBQQiA9IGNzcjcKICAgICAgICAgY29u
c3QgdGFnVHlwZU51bWJlciA9IGNzcjgKQEAgLTI5MCw3ICsyOTAsNyBAQCBpZiBKU1ZBTFVFNjQK
ICAgICBlbmQKIAogZWxzZQotICAgIGNvbnN0IFBDID0gdDQKKyAgICBjb25zdCBQQyA9IHQ0ICMg
V2hlbiBjaGFuZ2luZyB0aGlzLCBtYWtlIHN1cmUgTExJbnRQQyBpcyB1cCB0byBkYXRlIGluIExM
SW50UENSYW5nZXMuaAogICAgIG1hY3JvIGxvYWRpc0Zyb21JbnN0cnVjdGlvbihvZmZzZXQsIGRl
c3QpCiAgICAgICAgIGxvYWRpcyBvZmZzZXQgKiA0W1BDXSwgZGVzdAogICAgIGVuZApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5j
cHAJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5j
bHVkZSAiTExJbnRQQ1Jhbmdlcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVk
ZSAiTWFya2VkQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiVk0uaCIKQEAgLTQ5LDcgKzUwLDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0
aWMgZG91YmxlIHNOdW1Ub3RhbFN0YWNrVHJhY2VzID0gMDsKLXN0YXRpYyBkb3VibGUgc051bVVu
dmVyaWZpZWRTdGFja1RyYWNlcyA9IDA7CiBzdGF0aWMgZG91YmxlIHNOdW1Ub3RhbFdhbGtzID0g
MDsKIHN0YXRpYyBkb3VibGUgc051bUZhaWxlZFdhbGtzID0gMDsKIHN0YXRpYyBjb25zdCB1aW50
MzJfdCBzTnVtV2Fsa1JlcG9ydGluZ0ZyZXF1ZW5jeSA9IDUwOwpAQCAtNTgsNiArNTgsOCBAQCBz
dGF0aWMgY29uc3QgYm9vbCBzUmVwb3J0U3RhdHNPbmx5V2hlblRoCiBzdGF0aWMgY29uc3QgYm9v
bCBzUmVwb3J0U3RhdHMgPSBmYWxzZTsKIAogdXNpbmcgRnJhbWVUeXBlID0gU2FtcGxpbmdQcm9m
aWxlcjo6RnJhbWVUeXBlOwordXNpbmcgVW5wcm9jZXNzZWRGcmFtZVR5cGUgPSBTYW1wbGluZ1By
b2ZpbGVyOjpVbnByb2Nlc3NlZEZyYW1lVHlwZTsKK3VzaW5nIFVucHJvY2Vzc2VkU3RhY2tGcmFt
ZSA9IFNhbXBsaW5nUHJvZmlsZXI6OlVucHJvY2Vzc2VkU3RhY2tGcmFtZTsKIAogQUxXQVlTX0lO
TElORSBzdGF0aWMgdm9pZCByZXBvcnRTdGF0cygpCiB7CkBAIC02NSw4ICs2Nyw2IEBAIEFMV0FZ
U19JTkxJTkUgc3RhdGljIHZvaWQgcmVwb3J0U3RhdHMoKQogICAgICAgICBpZiAoIXNSZXBvcnRT
dGF0c09ubHlXaGVuVGhleXJlQWJvdmVUaHJlc2hvbGQgfHwgKHNOdW1GYWlsZWRXYWxrcyAvIHNO
dW1Ub3RhbFdhbGtzID4gc1dhbGtFcnJvclBlcmNlbnRhZ2UpKSB7CiAgICAgICAgICAgICBkYXRh
TG9nRigiTnVtIHRvdGFsIHdhbGtzOiAlbGx1LiBGYWlsZWQgd2Fsa3MgcGVyY2VudDogJWxmXG4i
LAogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzTnVtVG90YWxXYWxrcyks
IHNOdW1GYWlsZWRXYWxrcyAvIHNOdW1Ub3RhbFdhbGtzKTsKLSAgICAgICAgICAgIGRhdGFMb2dG
KCJUb3RhbCBzdGFjayB0cmFjZXM6ICVsbHUuIE5lZWRzIHZlcmlmaWNhdGlvbiBwZXJjZW50OiAl
bGZcbiIsCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNOdW1Ub3RhbFN0
YWNrVHJhY2VzKSwgc051bVVudmVyaWZpZWRTdGFja1RyYWNlcyAvIHNOdW1Ub3RhbFN0YWNrVHJh
Y2VzKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTgyLDMzICs4MiwyMCBAQCBwdWJsaWM6CiAg
ICAgewogICAgIH0KIAotICAgIHNpemVfdCB3YWxrKFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpT
dGFja0ZyYW1lPiYgc3RhY2tUcmFjZSwgYm9vbCYgZGlkUnVuT3V0T2ZTcGFjZSwgYm9vbCYgc3Rh
Y2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uKQorICAgIHNpemVfdCB3YWxrKFZlY3RvcjxVbnByb2Nl
c3NlZFN0YWNrRnJhbWU+JiBzdGFja1RyYWNlLCBib29sJiBkaWRSdW5PdXRPZlNwYWNlKQogICAg
IHsKLSAgICAgICAgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uID0gZmFsc2U7CiAgICAgICAg
IGlmIChzUmVwb3J0U3RhdHMpCiAgICAgICAgICAgICBzTnVtVG90YWxXYWxrcysrOwogICAgICAg
ICByZXNldEF0TWFjaGluZUZyYW1lKCk7CiAgICAgICAgIHNpemVfdCBtYXhTdGFja1RyYWNlU2l6
ZSA9IHN0YWNrVHJhY2Uuc2l6ZSgpOwogICAgICAgICB3aGlsZSAoIWlzQXRUb3AoKSAmJiAhbV9i
YWlsaW5nT3V0ICYmIG1fZGVwdGggPCBtYXhTdGFja1RyYWNlU2l6ZSkgewotICAgICAgICAgICAg
d2hpbGUgKG1faW5saW5lQ2FsbEZyYW1lICYmIG1fZGVwdGggPCBtYXhTdGFja1RyYWNlU2l6ZSkg
ewotICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVDYWxsRnJh
bWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGlzVmFsaWRDb2RlQmxvY2soY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICAgICAgc3RhY2tU
cmFjZVttX2RlcHRoXSA9IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWUoU2FtcGxpbmdQcm9m
aWxlcjo6RnJhbWVUeXBlOjpWZXJpZmllZEV4ZWN1dGFibGUsIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCkpOwotICAgICAgICAgICAgICAgIG1fZGVwdGgrKzsKLSAgICAgICAgICAgICAgICBt
X2lubGluZUNhbGxGcmFtZSA9IG1faW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5l
Q2FsbEZyYW1lOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV9kZXB0aCA+PSBt
YXhTdGFja1RyYWNlU2l6ZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAg
ICAgICBpZiAoaXNWYWxpZENvZGVCbG9jayhjb2RlQmxvY2spKSB7Ci0gICAgICAgICAgICAgICAg
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
OwotICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0gPSBTYW1wbGluZ1Byb2ZpbGVy
OjpTdGFja0ZyYW1lKEZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlLGV4ZWN1dGFibGUpOwor
ICAgICAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVC
bG9jaygpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRDb2RlQmxvY2soY29kZUJs
b2NrKSk7CisgICAgICAgICAgICAgICAgc3RhY2tUcmFjZVttX2RlcHRoXSA9IFVucHJvY2Vzc2Vk
U3RhY2tGcmFtZShjb2RlQmxvY2ssIG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdGFja3RyYWNlTmVlZHNWZXJpZmlj
YXRpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jayA9
PSBudWxscHRyKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHVuc2FmZUNhbGxlZSA9IG1fY2Fs
bEZyYW1lLT51bnNhZmVDYWxsZWUoKTsKLSAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVw
dGhdID0gU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZShGcmFtZVR5cGU6OlVudmVyaWZpZWRD
YWxsZWUsIEpTVmFsdWU6OmVuY29kZSh1bnNhZmVDYWxsZWUpKTsKKyAgICAgICAgICAgICAgICBz
dGFja1RyYWNlW21fZGVwdGhdID0gVW5wcm9jZXNzZWRTdGFja0ZyYW1lKEpTVmFsdWU6OmVuY29k
ZSh1bnNhZmVDYWxsZWUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fZGVwdGgrKzsK
ICAgICAgICAgICAgIGFkdmFuY2VUb1BhcmVudEZyYW1lKCk7CkBAIC0xMzgsOCArMTI1LDYgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgcmVzZXRBdE1hY2hpbmVGcmFtZSgpCiAgICAgewotICAgICAg
ICBtX2lubGluZUNhbGxGcmFtZSA9IG51bGxwdHI7Ci0KICAgICAgICAgaWYgKGlzQXRUb3AoKSkK
ICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTUxLDkgKzEzNiw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAg
ICAvLyBJZiB0aGUgZnJhbWUgZG9lc24ndCBoYXZlIGEgY29kZSBibG9jaywgdGhlbiBpdCdzIG5v
dCBhIAotICAgICAgICAvLyBERkcvRlRMIGZyYW1lIHdoaWNoIG1lYW5zIHdlJ3JlIG5vdCBhbiBp
bmxpbmVkIGZyYW1lLgogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKICAgICAgICAgaWYgKCFjb2RlQmxvY2spCiAgICAgICAgICAgICByZXR1
cm47CkBAIC0xNjQsMjUgKzE0Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc051bUZh
aWxlZFdhbGtzKys7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICAv
LyBJZiB0aGUgY29kZSBibG9jayBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIG9yaWdpbnMsIHRoZW4g
dGhlcmUncyBubwotICAgICAgICAvLyBpbmxpbmluZy4gSGVuY2UsIHdlJ3JlIG5vdCBhdCBhbiBp
bmxpbmVkIGZyYW1lLgotICAgICAgICBpZiAoIWNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBDYWxsU2l0ZUluZGV4IGluZGV4ID0gbV9j
YWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsKLSAgICAgICAgaWYgKCFjb2RlQmxvY2stPmNhbkdl
dENvZGVPcmlnaW4oaW5kZXgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRToKLSAgICAgICAgICAg
IC8vIEZvciB0aGUgbW9zdCBwYXJ0LCB3ZSBvbmx5IGZhaWwgaGVyZSB3aGVuIHdlJ3JlIGxvb2tp
bmcKLSAgICAgICAgICAgIC8vIGF0IHRoZSB0b3AgbW9zdCBjYWxsIGZyYW1lLiBBbGwgb3RoZXIg
cGFyZW50IGNhbGwgZnJhbWVzCi0gICAgICAgICAgICAvLyBzaG91bGQgaGF2ZSBzZXQgdGhlIENh
bGxTaXRlSW5kZXggd2hlbiBtYWtpbmcgYSBjYWxsLgotICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCByZXNvcnQgdG8gZ2V0dGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBQ
Qz0+Q29kZU9yaWdpbiBtYXBwaW5nCi0gICAgICAgICAgICAvLyBvbmNlIHdlIGltcGxlbWVudCBp
dDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjYyOQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gY29k
ZUJsb2NrLT5jb2RlT3JpZ2luKGluZGV4KS5pbmxpbmVDYWxsRnJhbWU7Ci0jZW5kaWYgLy8gIUVO
QUJMRShERkdfSklUKQogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZEZyYW1lUG9pbnRlcihFeGVj
U3RhdGUqIGV4ZWMpCkBAIC0yMTMsMTQgKzE3NiwxMiBAQCBwcml2YXRlOgogICAgIGNvbnN0IExv
Y2tIb2xkZXImIG1fY29kZUJsb2NrU2V0TG9ja2VyOwogICAgIGNvbnN0IExvY2tIb2xkZXImIG1f
bWFjaGluZVRocmVhZHNMb2NrZXI7CiAgICAgYm9vbCBtX2JhaWxpbmdPdXQgeyBmYWxzZSB9Owot
ICAgIElubGluZUNhbGxGcmFtZSogbV9pbmxpbmVDYWxsRnJhbWU7CiAgICAgc2l6ZV90IG1fZGVw
dGggeyAwIH07CiB9OwogCiBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2
bSwgUmVmUHRyPFN0b3B3YXRjaD4mJiBzdG9wd2F0Y2gpCiAgICAgOiBtX3ZtKHZtKQogICAgICwg
bV9zdG9wd2F0Y2goV1RGTW92ZShzdG9wd2F0Y2gpKQotICAgICwgbV9pbmRleE9mTmV4dFN0YWNr
VHJhY2VUb1ZlcmlmeSgwKQogICAgICwgbV90aW1pbmdJbnRlcnZhbChzdGQ6OmNocm9ubzo6bWlj
cm9zZWNvbmRzKDEwMDApKQogICAgICwgbV90b3RhbFRpbWUoMCkKICAgICAsIG1fdGltZXJRdWV1
ZShXb3JrUXVldWU6OmNyZWF0ZSgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnF1ZXVlIiwgV29ya1F1
ZXVlOjpUeXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQpAQCAt
MjU2LDIzICsyMTcsMjcgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihWTSYg
dgogICAgICAgICAgICAgICAgIC8vIFdoaWxlIHRoZSBKU0MgdGhyZWFkIGlzIHN1c3BlbmRlZCwg
d2UgY2FuJ3QgZG8gdGhpbmdzIGxpa2UgbWFsbG9jIGJlY2F1c2UgdGhlIEpTQyB0aHJlYWQKICAg
ICAgICAgICAgICAgICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCiAgICAgICAg
ICAgICAgICAgRXhlY1N0YXRlKiBjYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgdm9pZCogcGM7
CisgICAgICAgICAgICAgICAgdm9pZCogbWFjaGluZVBDOworICAgICAgICAgICAgICAgIGJvb2wg
dG9wRnJhbWVJc0xMSW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdm9pZCogbGxpbnRQQzsK
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpU
aHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAgICAgICAgICAgICAgICAgIG1fanNjRXhl
Y3V0aW9uVGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICAg
ICAgY2FsbEZyYW1lID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4ocmVnaXN0ZXJzLmZyYW1lUG9p
bnRlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgcGMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Q
b2ludGVyKCk7CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9IHJlZ2lzdGVycy5pbnN0
cnVjdGlvblBvaW50ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlZ2lzdGVy
cy5sbGludFBDKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5m
cmVlUmVnaXN0ZXJzKHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFy
c2luZyBjb2RlLgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTI3NjEKLSAgICAgICAgICAgICAgICBpZiAobV92bS5leGVjdXRhYmxl
QWxsb2NhdG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2Nr
ZXIsIHBjKSkgeworICAgICAgICAgICAgICAgIGlmIChtX3ZtLmV4ZWN1dGFibGVBbGxvY2F0b3Iu
aXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlciwgbWFjaGlu
ZVBDKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobV92bS5pc0V4ZWN1dGluZ0luUmVnRXhw
SklUKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UncmUgZXhlY3V0aW5n
IGEgcmVnZXhwLiBMZXRzIGdhdGhlciBtb3JlIGludGVyc3RpbmcgZGF0YS4KICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTI3MjkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IG1fdm0udG9wQ2FsbEZy
YW1lOyAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgb3IgZWxzZSB3ZSdkIGZhaWwgb3VyIGJhY2t0cmFj
ZSB2YWxpZGF0aW9uIGIvYyB0aGlzIGlzbid0IGEgSlMgZnJhbWUuCiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKExMSW50Ojppc0xMSW50UEMocGMpKSB7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChMTEludDo6aXNMTEludFBDKG1hY2hpbmVQQykp
IHsKKyAgICAgICAgICAgICAgICAgICAgdG9wRnJhbWVJc0xMSW50ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UncmUgb2theSB0byB0YWtlIGEgbm9ybWFsIHN0YWNrIHRyYWNlIHdo
ZW4gdGhlIFBDCiAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGluIExMSW50IGNvZGUuCiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI4NCwxMCArMjQ5LDkgQEAgU2FtcGxpbmdQcm9maWxl
cjo6U2FtcGxpbmdQcm9maWxlcihWTSYgdgogICAgICAgICAgICAgICAgIHNpemVfdCB3YWxrU2l6
ZTsKICAgICAgICAgICAgICAgICBib29sIHdhc1ZhbGlkV2FsazsKICAgICAgICAgICAgICAgICBi
b29sIGRpZFJ1bk91dE9mVmVjdG9yU3BhY2U7Ci0gICAgICAgICAgICAgICAgYm9vbCBzdGFja3Ry
YWNlTmVlZHNWZXJpZmljYXRpb247CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICBGcmFtZVdhbGtlciB3YWxrZXIoY2FsbEZyYW1lLCBtX3ZtLCBjb2RlQmxvY2tTZXRMb2Nr
ZXIsIG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgd2Fsa1NpemUg
PSB3YWxrZXIud2FsayhtX2N1cnJlbnRGcmFtZXMsIGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UsIHN0
YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHdhbGtTaXpl
ID0gd2Fsa2VyLndhbGsobV9jdXJyZW50RnJhbWVzLCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlKTsK
ICAgICAgICAgICAgICAgICAgICAgd2FzVmFsaWRXYWxrID0gd2Fsa2VyLndhc1ZhbGlkV2Fsaygp
OwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjk4LDIxICsyNjIsMTYgQEAgU2FtcGxpbmdQcm9m
aWxlcjo6U2FtcGxpbmdQcm9maWxlcihWTSYgdgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJ
dCdkIGJlIGludGVyZXN0aW5nIHRvIHRha2UgZGF0YSBhYm91dCB0aGUgcHJvZ3JhbSdzIHN0YXRl
IHdoZW4KICAgICAgICAgICAgICAgICAvLyB3ZSBmYWlsIHRvIHRha2UgYSBzdGFjayB0cmFjZTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc1OAogICAgICAgICAg
ICAgICAgIGlmICh3YXNWYWxpZFdhbGsgJiYgd2Fsa1NpemUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHNSZXBvcnRTdGF0cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc1JlcG9ydFN0
YXRzKQogICAgICAgICAgICAgICAgICAgICAgICAgc051bVRvdGFsU3RhY2tUcmFjZXMrKzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24pCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc051bVVudmVyaWZpZWRTdGFja1RyYWNlcysrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxTdGFja0Zy
YW1lPiBzdGFja1RyYWNlOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VW5wcm9jZXNzZWRT
dGFja0ZyYW1lPiBzdGFja1RyYWNlOwogICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkod2Fsa1NpemUpOwogICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHdhbGtTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrRnJhbWUgZnJhbWUgPSBtX2N1cnJlbnRGcmFtZXNbaV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdGFja1RyYWNlLnVuY2hlY2tlZEFwcGVuZChmcmFtZSk7IAotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGZyYW1lLmZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlZlcmlmaWVk
RXhlY3V0YWJsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NlZW5FeGVjdXRhYmxl
cy5hZGQoZnJhbWUudS52ZXJpZmllZEV4ZWN1dGFibGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lIGZyYW1lID0gbV9jdXJyZW50RnJhbWVzW2ldOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZS51bmNoZWNrZWRBcHBlbmQoZnJhbWUpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgbV9zdGFja1RyYWNl
cy5hcHBlbmQoU3RhY2tUcmFjZXsgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uLCBub3dUaW1l
LCBXVEZNb3ZlKHN0YWNrVHJhY2UpIH0pOworICAgICAgICAgICAgICAgICAgICBtX3VucHJvY2Vz
c2VkU3RhY2tUcmFjZXMuYXBwZW5kKFVucHJvY2Vzc2VkU3RhY2tUcmFjZSB7IG5vd1RpbWUsIG1h
Y2hpbmVQQywgdG9wRnJhbWVJc0xMSW50LCBsbGludFBDLCBXVEZNb3ZlKHN0YWNrVHJhY2UpIH0p
OwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChkaWRSdW5PdXRPZlZlY3RvclNwYWNlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50RnJhbWVzLmdyb3cobV9jdXJyZW50RnJhbWVz
LnNpemUoKSAqIDEuMjUpOwpAQCAtMzMyLDYgKzI5MSwzMCBAQCBTYW1wbGluZ1Byb2ZpbGVyOjp+
U2FtcGxpbmdQcm9maWxlcigpCiB7CiB9CiAKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVk
IHRyeUdldEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgbGxpbnRQQywgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGJvb2wmIGlzVmFsaWQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+aGFz
Q29kZU9yaWdpbnMoKSk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXggPSBsbGludFBDOworICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkNvdW50KCkpIHsKKyAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAgICAgIHJl
dHVybiBieXRlY29kZUluZGV4OworICAgIH0KKyAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgcmV0
dXJuIDA7CisjZWxzZQorICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJpdHdpc2VfY2Fz
dDxJbnN0cnVjdGlvbio+KGxsaW50UEMpOworICAgIGlmIChpbnN0cnVjdGlvbiA+PSBjb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgJiYgaW5zdHJ1Y3Rpb24gPCBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmJlZ2luKCkgKyBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSkgewor
ICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9
IGluc3RydWN0aW9uIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgICAg
ICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKKyAgICB9CisgICAgaXNWYWxpZCA9IGZhbHNlOworICAg
IHJldHVybiAwOworI2VuZGlmCit9CisKIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1Vu
dmVyaWZpZWRTdGFja1RyYWNlcygpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBi
ZSBjYWxsZWQgZnJvbSB0aGUgSlNDIGV4ZWN1dGlvbiB0aHJlYWQuCkBAIC0zNDAsMjIgKzMyMywz
MCBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgVGlueUJs
b29tRmlsdGVyIGZpbHRlciA9IG1fdm0uaGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLmZpbHRl
cigpOwogICAgIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1NldCA9IG1fdm0uaGVhcC5vYmpl
Y3RTcGFjZSgpLmJsb2NrcygpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleE9mTmV4
dFN0YWNrVHJhY2VUb1ZlcmlmeTsgaSA8IG1fc3RhY2tUcmFjZXMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgU3RhY2tUcmFjZSYgc3RhY2tUcmFjZSA9IG1fc3RhY2tUcmFjZXNbaV07IAotICAgICAg
ICBpZiAoIXN0YWNrVHJhY2UubmVlZHNWZXJpZmljYXRpb24pCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgc3RhY2tUcmFjZS5uZWVkc1ZlcmlmaWNhdGlvbiA9IGZhbHNlOwotCi0gICAg
ICAgIGZvciAoU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA6IHN0YWNrVHJhY2UuZnJhbWVzKSB7Ci0g
ICAgICAgICAgICBpZiAoc3RhY2tGcmFtZS5mcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlm
aWVkQ2FsbGVlKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tGcmFtZS5m
cmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpWZXJpZmllZEV4ZWN1dGFibGUpOwotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgIGZvciAoVW5wcm9jZXNzZWRTdGFja1RyYWNlJiB1bnByb2Nlc3Nl
ZFN0YWNrVHJhY2UgOiBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMpIHsKKyAgICAgICAgbV9zdGFj
a1RyYWNlcy5hcHBlbmQoU3RhY2tUcmFjZSgpKTsKKyAgICAgICAgU3RhY2tUcmFjZSYgc3RhY2tU
cmFjZSA9IG1fc3RhY2tUcmFjZXMubGFzdCgpOworICAgICAgICBzdGFja1RyYWNlLnRpbWVzdGFt
cCA9IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS50aW1lc3RhbXA7CisKKyAgICAgICAgYXV0byBhcHBl
bmRDb2RlQmxvY2sgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KSB7CisgICAgICAgICAgICBzdGFja1RyYWNlLmZyYW1lcy5hcHBlbmQoU3RhY2tGcmFt
ZShjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSk7CisKKyAgICAgICAgICAgIGlmIChieXRl
Y29kZUluZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBpbnQgZGl2b3Q7CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0OworICAgICAg
ICAgICAgICAgIGludCBlbmRPZmZzZXQ7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5leHBy
ZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4LCBkaXZvdCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZS5mcmFtZXMu
bGFzdCgpLmxpbmVOdW1iZXIsIHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKS5jb2x1bW5OdW1iZXIp
OwogICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zZWVuRXhlY3V0YWJsZXMuYWRkKGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOworICAgICAgICB9OwogCi0gICAgICAgICAgICBKU1Zh
bHVlIGNhbGxlZSA9IEpTVmFsdWU6OmRlY29kZShzdGFja0ZyYW1lLnUudW52ZXJpZmllZENhbGxl
ZSk7CisgICAgICAgIGF1dG8gYXBwZW5kVW52ZXJpZmllZENhbGxlZSA9IFsmXSAoSlNWYWx1ZSBj
YWxsZWUpIHsKKyAgICAgICAgICAgIHN0YWNrVHJhY2UuZnJhbWVzLmFwcGVuZChTdGFja0ZyYW1l
KCkpOworICAgICAgICAgICAgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA9IHN0YWNrVHJhY2UuZnJh
bWVzLmxhc3QoKTsKICAgICAgICAgICAgIGlmICghSGVhcDo6aXNWYWx1ZUdDT2JqZWN0KGZpbHRl
ciwgbWFya2VkQmxvY2tTZXQsIGNhbGxlZSkpIHsKICAgICAgICAgICAgICAgICBzdGFja0ZyYW1l
LmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6VW5rbm93bjsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IEpTQ2VsbCogY2FsbGVlQ2VsbCA9IGNhbGxlZS5hc0NlbGwoKTsKQEAgLTM3MiwyMiArMzYzLDg4
IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKIAogICAgICAgICAg
ICAgaWYgKGNhbGxlZUNlbGwtPnR5cGUoKSAhPSBKU0Z1bmN0aW9uVHlwZSkgewogICAgICAgICAg
ICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gZnJhbWVUeXBlRnJvbUNhbGxEYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBzdGF0aWNf
Y2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQ2VsbCktPmV4ZWN1dGFibGUoKTsKICAgICAgICAgICAg
IGlmICghZXhlY3V0YWJsZSkgewogICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBl
ID0gZnJhbWVUeXBlRnJvbUNhbGxEYXRhKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0
LCBleGVjdXRhYmxlKSk7Ci0gICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1l
VHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlOwotICAgICAgICAgICAgc3RhY2tGcmFtZS51LnZlcmlm
aWVkRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1l
VHlwZSA9IEZyYW1lVHlwZTo6RXhlY3V0YWJsZTsKKyAgICAgICAgICAgIHN0YWNrRnJhbWUuZXhl
Y3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBtX3NlZW5FeGVjdXRhYmxlcy5hZGQo
ZXhlY3V0YWJsZSk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gUHJlcGVuZCB0aGUgdG9wLW1v
c3QgaW5saW5lZCBmcmFtZSBpZiBuZWVkZWQuIEFsc28sIGdhdGhlcgorICAgICAgICAvLyBsb2Nh
dGlvbiBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGUgdG9wIGZyYW1lIGlzIGV4ZWN1dGluZy4K
KyAgICAgICAgc2l6ZV90IHN0YXJ0SW5kZXggPSAwOworICAgICAgICBpZiAodW5wcm9jZXNzZWRT
dGFja1RyYWNlLmZyYW1lcy5zaXplKCkgJiYgdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1sw
XS5mcmFtZVR5cGUgPT0gVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlZlcmlmaWVkQ29kZUJsb2NrKSB7
CisgICAgICAgICAgICBDb2RlQmxvY2sqIHRvcENvZGVCbG9jayA9IHVucHJvY2Vzc2VkU3RhY2tU
cmFjZS5mcmFtZXNbMF0udS52ZXJpZmllZENvZGVCbG9jazsKKyAgICAgICAgICAgIGlmICh1bnBy
b2Nlc3NlZFN0YWNrVHJhY2UudG9wRnJhbWVJc0xMSW50KSB7CisgICAgICAgICAgICAgICAgLy8g
V2UgcmV1c2UgTExJbnQgQ29kZUJsb2NrcyBmb3IgdGhlIGJhc2VsaW5lIEpJVCwgc28gd2UgbmVl
ZCB0byBjaGVjayBmb3IgYm90aCBqaXQgdHlwZXMuCisgICAgICAgICAgICAgICAgLy8gVGhpcyBt
aWdodCBhbHNvIGJlIGZhbHNlIGZvciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtub3du
KSwgZXZlbiB0aG91Z2gKKyAgICAgICAgICAgICAgICAvLyBpdCdzIHN1cGVyIHVubGlrZWx5LiBP
bmUgcmVhc29uIHRoYXQgdGhpcyBjYW4gYmUgZmFsc2UgaXMgd2hlbiB3ZSB0aHJvdyBmcm9tIGEg
REZHIGZyYW1lLAorICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVu
d2luZCBwYXN0IGEgVk1FbnRyeUZyYW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKKyAgICAg
ICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24u
IFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2FpbnN0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBieSBp
Z25vcmluZyBpdC4KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsK
KyAgICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpC
YXNlbGluZUpJVCkgeworICAgICAgICAgICAgICAgICAgICBib29sIGlzVmFsaWRQQzsKKyAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYml0czsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgICAgICAgICBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKSk7CisjZWxzZQorICAgICAg
ICAgICAgICAgICAgICBiaXRzID0gYml0d2lzZV9jYXN0PHVuc2lnbmVkPih1bnByb2Nlc3NlZFN0
YWNrVHJhY2UubGxpbnRQQyk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJ
bmRleCA9IHRyeUdldEJ5dGVjb2RlSW5kZXgoYml0cywgdG9wQ29kZUJsb2NrLCBpc1ZhbGlkUEMp
OworCisgICAgICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpc1ZhbGlkUEMpOyAvLyBGSVhN
RTogZG8gc29tZXRoaW5nIHdpdGggdGhpcyBpbmZvIGZvciB0aGUgd2ViIGluc3BlY3RvcjogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzQ1NQorCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZENvZGVCbG9jayh0b3BDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gMTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSB0
b3BDb2RlQmxvY2stPmZpbmRQQyh1bnByb2Nlc3NlZFN0YWNrVHJhY2UudG9wUEMpKSB7CisgICAg
ICAgICAgICAgICAgY29kZU9yaWdpbi0+d2Fsa1VwSW5saW5lU3RhY2soWyZdIChjb25zdCBDb2Rl
T3JpZ2luJiBjb2RlT3JpZ2luKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9j
ayhjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA/IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSA6IHRvcENvZGVCbG9jaywgY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBzdGFydElu
ZGV4ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBzdGFydEluZGV4OyBpIDwgdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lcy5zaXplKCk7
IGkrKykgeworICAgICAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lJiB1bnByb2Nlc3NlZFN0
YWNrRnJhbWUgPSB1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzW2ldOworICAgICAgICAgICAg
aWYgKHVucHJvY2Vzc2VkU3RhY2tGcmFtZS5mcmFtZVR5cGUgPT0gVW5wcm9jZXNzZWRGcmFtZVR5
cGU6OlZlcmlmaWVkQ29kZUJsb2NrKSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUudS52ZXJpZmllZENvZGVCbG9jazsKKyAgICAg
ICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSB1bnByb2Nlc3NlZFN0YWNr
RnJhbWUuY2FsbFNpdGVJbmRleDsKKworICAgICAgICAgICAgICAgIGF1dG8gYXBwZW5kQ29kZUJs
b2NrTm9JbmxpbmluZyA9IFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNWYWxpZFBD
OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCB0cnlHZXRC
eXRlY29kZUluZGV4KGNhbGxTaXRlSW5kZXguYml0cygpLCBjb2RlQmxvY2ssIGlzVmFsaWRQQykp
OworICAgICAgICAgICAgICAgIH07CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgICAg
ICAgICBpZiAoY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+Y29kZU9yaWdpbihjYWxsU2l0ZUluZGV4
KS53YWxrVXBJbmxpbmVTdGFjayhbJl0gKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUgPyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2Rl
QmxvY2suZ2V0KCkgOiBjb2RlQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2tOb0lubGluaW5nKCk7CisjZWxzZQorICAg
ICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9ja05vSW5saW5pbmcoKTsKKyNlbmRpZgorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQodW5wcm9jZXNzZWRTdGFja0Zy
YW1lLmZyYW1lVHlwZSA9PSBVbnByb2Nlc3NlZEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7
CisgICAgICAgICAgICAgICAgYXBwZW5kVW52ZXJpZmllZENhbGxlZShKU1ZhbHVlOjpkZWNvZGUo
dW5wcm9jZXNzZWRTdGFja0ZyYW1lLnUudW52ZXJpZmllZENhbGxlZSkpOworICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1Zlcmlm
eSA9IG1fc3RhY2tUcmFjZXMuc2l6ZSgpOworICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5j
bGVhcigpOwogfQogCiB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvcikKQEAgLTQ3OCwxOCArNTM1LDEyIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6
bm90aWNlVk1FbnRyeSgpCiAgICAgZGlzcGF0Y2hJZk5lY2Vzc2FyeShsb2NrZXIpOwogfQogCi12
b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmNsZWFyRGF0YSgpCi17Ci0gICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICBjbGVhckRhdGEobG9ja2VyKTsKLX0KLQogdm9pZCBTYW1wbGluZ1By
b2ZpbGVyOjpjbGVhckRhdGEoY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgQVNTRVJUKG1fbG9j
ay5pc0xvY2tlZCgpKTsKICAgICBtX3N0YWNrVHJhY2VzLmNsZWFyKCk7CiAgICAgbV9zZWVuRXhl
Y3V0YWJsZXMuY2xlYXIoKTsKLSAgICBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5ID0g
MDsKKyAgICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMuY2xlYXIoKTsKIH0KIAogU3RyaW5nIFNh
bXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRpc3BsYXlOYW1lKCkKQEAgLTQ5OCw5ICs1NDks
NyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzCiAgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoIih1bmtub3duKSIpOwogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJh
bWVUeXBlOjpIb3N0KQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIoaG9zdCkiKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChmcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVl
KTsKIAotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1dGFi
bGU7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPm5hbWUoKTsKIApA
QCAtNTIxLDkgKzU3MCw3IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpk
aXMKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiKHVua25vd24pIik7CiAgICAgaWYgKGZy
YW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
Iihob3N0KSIpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVu
dmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZl
cmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkK
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihleGVjdXRhYmxl
KS0+bmFtZSgpOwogCkBAIC01NDQsMjUgKzU5MSwyMSBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxl
cjo6U3RhY2tGcmFtZTo6ZGlzCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1pbnQgU2FtcGxp
bmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6c3RhcnRMaW5lKCkKK2ludCBTYW1wbGluZ1Byb2ZpbGVy
OjpTdGFja0ZyYW1lOjpmdW5jdGlvblN0YXJ0TGluZSgpCiB7CiAgICAgaWYgKGZyYW1lVHlwZSA9
PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAg
ICAgICAgcmV0dXJuIC0xOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5
cGU6OlVudmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUg
PSB1LnZlcmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rp
b24oKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JpcHRF
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmZpcnN0TGluZSgpOwogfQogCi11bnNpZ25lZCBTYW1w
bGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzdGFydENvbHVtbigpCit1bnNpZ25lZCBTYW1wbGlu
Z1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpmdW5jdGlvblN0YXJ0Q29sdW1uKCkKIHsKICAgICBpZiAo
ZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBl
OjpIb3N0KQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBl
ICE9IEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRhYmxlLT5p
c0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTU3Myw5ICs2MTYsNyBA
QCBpbnRwdHJfdCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzCiB7CiAgICAgaWYgKGZy
YW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6
SG9zdCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAh
PSBGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgPSB1LnZlcmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNI
b3N0RnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC01ODYsOSArNjI3LDcgQEAg
U3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnVybAogewogICAgIGlmIChmcmFt
ZVR5cGUgPT0gRnJhbWVUeXBlOjpVbmtub3duIHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhv
c3QpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZy
YW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJs
ZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0
YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAK
QEAgLTU5OCw3ICs2MzcsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6
dXJsCiAgICAgcmV0dXJuIHVybDsKIH0KIAotVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNr
VHJhY2U+JiBTYW1wbGluZ1Byb2ZpbGVyOjpzdGFja1RyYWNlcyhjb25zdCBMb2NrSG9sZGVyJikK
K1ZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiBTYW1wbGluZ1Byb2ZpbGVyOjpy
ZWxlYXNlU3RhY2tUcmFjZXMoY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyKQogewogICAgIEFTU0VS
VChtX2xvY2suaXNMb2NrZWQoKSk7CiAgICAgewpAQCAtNjA2LDcgKzY0NSw5IEBAIFZlY3RvcjxT
YW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiYgU2EKICAgICAgICAgcHJvY2Vzc1VudmVyaWZp
ZWRTdGFja1RyYWNlcygpOwogICAgIH0KIAotICAgIHJldHVybiBtX3N0YWNrVHJhY2VzOworICAg
IFZlY3RvcjxTdGFja1RyYWNlPiByZXN1bHQoV1RGTW92ZShtX3N0YWNrVHJhY2VzKSk7CisgICAg
Y2xlYXJEYXRhKGxvY2tlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogU3RyaW5nIFNhbXBs
aW5nUHJvZmlsZXI6OnN0YWNrVHJhY2VzQXNKU09OKCkKQEAgLTY0Myw2ICs2ODQsOCBAQCBTdHJp
bmcgU2FtcGxpbmdQcm9maWxlcjo6c3RhY2tUcmFjZXNBc0pTCiAKICAgICBqc29uLmFwcGVuZExp
dGVyYWwoIl0iKTsKIAorICAgIGNsZWFyRGF0YShsb2NrZXIpOworCiAgICAgcmV0dXJuIGpzb24u
dG9TdHJpbmcoKTsKIH0KIApAQCAtNjU1LDExICs2OTgsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlND
Owogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFNhbXBsaW5nUHJvZmlsZXI6
OkZyYW1lVHlwZSBmcmFtZVR5cGUpCiB7CiAgICAgc3dpdGNoIChmcmFtZVR5cGUpIHsKLSAgICBj
YXNlIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlOgotICAg
ICAgICBvdXQucHJpbnQoIlZlcmlmaWVkRXhlY3V0YWJsZSIpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZToKLSAg
ICAgICAgb3V0LnByaW50KCJVbnZlcmlmaWVkQ2FsbGVlIik7CisgICAgY2FzZSBTYW1wbGluZ1By
b2ZpbGVyOjpGcmFtZVR5cGU6OkV4ZWN1dGFibGU6CisgICAgICAgIG91dC5wcmludCgiRXhlY3V0
YWJsZSIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1l
VHlwZTo6SG9zdDoKICAgICAgICAgb3V0LnByaW50KCJIb3N0Iik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCShyZXZpc2lvbiAx
OTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDQ4ICs0NCw4OCBAQCBjbGFzcyBFeGVjdXRhYmxlQmFz
ZTsKIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
U2FtcGxpbmdQcm9maWxlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIGVudW0gY2xhc3MgRnJhbWVUeXBlIHsgCi0gICAgICAgIFZlcmlmaWVkRXhlY3V0YWJs
ZSwgCisKKyAgICBlbnVtIGNsYXNzIFVucHJvY2Vzc2VkRnJhbWVUeXBlIHsgCiAgICAgICAgIFVu
dmVyaWZpZWRDYWxsZWUsCi0gICAgICAgIEhvc3QsIAotICAgICAgICBVbmtub3duIAorICAgICAg
ICBWZXJpZmllZENvZGVCbG9jawogICAgIH07CiAKLSAgICBzdHJ1Y3QgU3RhY2tGcmFtZSB7Ci0g
ICAgICAgIFN0YWNrRnJhbWUoRnJhbWVUeXBlIGZyYW1lVHlwZSwgRW5jb2RlZEpTVmFsdWUgY2Fs
bGVlKQotICAgICAgICAgICAgOiBmcmFtZVR5cGUoZnJhbWVUeXBlKQorICAgIHN0cnVjdCBVbnBy
b2Nlc3NlZFN0YWNrRnJhbWUgeworICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoRW5jb2Rl
ZEpTVmFsdWUgY2FsbGVlKQorICAgICAgICAgICAgOiBmcmFtZVR5cGUoVW5wcm9jZXNzZWRGcmFt
ZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHUudW52ZXJp
ZmllZENhbGxlZSA9IGNhbGxlZTsKICAgICAgICAgfQotICAgICAgICBTdGFja0ZyYW1lKEZyYW1l
VHlwZSBmcmFtZVR5cGUsIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQotICAgICAgICAgICAg
OiBmcmFtZVR5cGUoZnJhbWVUeXBlKQorICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICAgICAg
ICAgIDogZnJhbWVUeXBlKFVucHJvY2Vzc2VkRnJhbWVUeXBlOjpWZXJpZmllZENvZGVCbG9jaykK
KyAgICAgICAgICAgICwgY2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KQogICAgICAgICB7Ci0g
ICAgICAgICAgICB1LnZlcmlmaWVkRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgICAgICAg
ICB1LnVudmVyaWZpZWRDYWxsZWUgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIHUudmVyaWZpZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgICAgIH0KLSAgICAg
ICAgU3RhY2tGcmFtZSgpCi0gICAgICAgICAgICA6IGZyYW1lVHlwZShGcmFtZVR5cGU6OlVua25v
d24pCisgICAgICAgIFVucHJvY2Vzc2VkU3RhY2tGcmFtZSgpCisgICAgICAgICAgICA6IGZyYW1l
VHlwZShVbnByb2Nlc3NlZEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSkKICAgICAgICAgewot
ICAgICAgICAgICAgdS52ZXJpZmllZEV4ZWN1dGFibGUgPSBudWxscHRyOworICAgICAgICAgICAg
dS51bnZlcmlmaWVkQ2FsbGVlID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBGcmFtZVR5cGUgZnJhbWVUeXBlOworICAgICAgICBVbnByb2Nlc3NlZEZy
YW1lVHlwZSBmcmFtZVR5cGU7CiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIEVuY29kZWRK
U1ZhbHVlIHVudmVyaWZpZWRDYWxsZWU7Ci0gICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogdmVy
aWZpZWRFeGVjdXRhYmxlOworICAgICAgICAgICAgQ29kZUJsb2NrKiB2ZXJpZmllZENvZGVCbG9j
azsKICAgICAgICAgfSB1OworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXg7Cisg
ICAgfTsKKworICAgIGVudW0gY2xhc3MgRnJhbWVUeXBlIHsgCisgICAgICAgIEV4ZWN1dGFibGUs
CisgICAgICAgIEhvc3QsCisgICAgICAgIFVua25vd24gCisgICAgfTsKIAorICAgIHN0cnVjdCBT
dGFja0ZyYW1lIHsKKyAgICAgICAgU3RhY2tGcmFtZShFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJs
ZSkKKyAgICAgICAgICAgIDogZnJhbWVUeXBlKEZyYW1lVHlwZTo6RXhlY3V0YWJsZSkKKyAgICAg
ICAgICAgICwgZXhlY3V0YWJsZShleGVjdXRhYmxlKQorICAgICAgICB7IH0KKyAgICAgICAgU3Rh
Y2tGcmFtZSgpCisgICAgICAgICAgICA6IGZyYW1lVHlwZShGcmFtZVR5cGU6OlVua25vd24pCisg
ICAgICAgICAgICAsIGV4ZWN1dGFibGUobnVsbHB0cikKKyAgICAgICAgeyB9CisKKyAgICAgICAg
RnJhbWVUeXBlIGZyYW1lVHlwZTsKKyAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGU7
CisKKyAgICAgICAgLy8gVGhlc2UgYXR0ZW1wdCB0byBiZSBleHByZXNzaW9uLWxldmVsIGxpbmUg
YW5kIGNvbHVtbiBudW1iZXIuCisgICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgeyBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgdW5zaWduZWQgY29sdW1u
TnVtYmVyIHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKKyAgICAg
ICAgLy8gVGhlc2UgYXJlIGZ1bmN0aW9uLWxldmVsIGRhdGEuCiAgICAgICAgIFN0cmluZyBkaXNw
bGF5TmFtZSgpOwogICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWVGb3JKU09OVGVzdHMoKTsgLy8g
VXNlZCBmb3IgSlNDIHN0cmVzcyB0ZXN0cyBiZWNhdXNlIHRoZXkgd2FudCB0aGUgIihhbm9ueW1v
dXMgZnVuY3Rpb24pIiBzdHJpbmcgZm9yIGFub255bW91cyBmdW5jdGlvbnMgYW5kIHRoZXkgd2Fu
dCAiKGV2YWwpIiBmb3IgZXZhbCdkIGNvZGUuCi0gICAgICAgIGludCBzdGFydExpbmUoKTsKLSAg
ICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4oKTsKKyAgICAgICAgaW50IGZ1bmN0aW9uU3RhcnRM
aW5lKCk7CisgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uU3RhcnRDb2x1bW4oKTsKICAgICAgICAg
aW50cHRyX3Qgc291cmNlSUQoKTsKICAgICAgICAgU3RyaW5nIHVybCgpOwogICAgIH07CiAKKyAg
ICBzdHJ1Y3QgVW5wcm9jZXNzZWRTdGFja1RyYWNlIHsKKyAgICAgICAgZG91YmxlIHRpbWVzdGFt
cDsKKyAgICAgICAgdm9pZCogdG9wUEM7CisgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50Owor
ICAgICAgICB2b2lkKiBsbGludFBDOworICAgICAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFja0Zy
YW1lPiBmcmFtZXM7CisgICAgfTsKKwogICAgIHN0cnVjdCBTdGFja1RyYWNlIHsKLSAgICAgICAg
Ym9vbCBuZWVkc1ZlcmlmaWNhdGlvbjsKICAgICAgICAgZG91YmxlIHRpbWVzdGFtcDsKICAgICAg
ICAgVmVjdG9yPFN0YWNrRnJhbWU+IGZyYW1lczsKKyAgICAgICAgU3RhY2tUcmFjZSgpCisgICAg
ICAgIHsgfQorICAgICAgICBTdGFja1RyYWNlKFN0YWNrVHJhY2UmJiBvdGhlcikKKyAgICAgICAg
ICAgIDogdGltZXN0YW1wKG90aGVyLnRpbWVzdGFtcCkKKyAgICAgICAgICAgICwgZnJhbWVzKFdU
Rk1vdmUob3RoZXIuZnJhbWVzKSkKKyAgICAgICAgeyB9CiAgICAgfTsKIAogICAgIFNhbXBsaW5n
UHJvZmlsZXIoVk0mLCBSZWZQdHI8U3RvcHdhdGNoPiYmKTsKQEAgLTEwMCwxMiArMTQwLDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0KGNvbnN0IExvY2tIb2xkZXImKTsKICAgICB2b2lkIHN0
b3AoKTsKICAgICB2b2lkIHN0b3AoY29uc3QgTG9ja0hvbGRlciYpOwotICAgIFZlY3RvcjxTdGFj
a1RyYWNlPiYgc3RhY2tUcmFjZXMoY29uc3QgTG9ja0hvbGRlciYpOworICAgIFZlY3RvcjxTdGFj
a1RyYWNlPiByZWxlYXNlU3RhY2tUcmFjZXMoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIFN0cmluZyBzdGFja1RyYWNlc0FzSlNPTigpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgbm90aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9uVGhyZWFkKCk7CiAg
ICAgdm9pZCBub3RpY2VDdXJyZW50VGhyZWFkQXNKU0NFeGVjdXRpb25UaHJlYWQoY29uc3QgTG9j
a0hvbGRlciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXJEYXRhKCk7Ci0gICAg
dm9pZCBjbGVhckRhdGEoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIHZvaWQgcHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcygpOyAvLyBZb3Ugc2hvdWxkIGNhbGwgdGhpcyBvbmx5IGFmdGVyIGFj
cXVpcmluZyB0aGUgbG9jay4KICAgICBkb3VibGUgdG90YWxUaW1lKGNvbnN0IExvY2tIb2xkZXIm
KSB7IHJldHVybiBtX3RvdGFsVGltZTsgfQogICAgIHZvaWQgc2V0U3RvcFdhdGNoKGNvbnN0IExv
Y2tIb2xkZXImLCBSZWY8U3RvcHdhdGNoPiYmIHN0b3B3YXRjaCkgeyBtX3N0b3B3YXRjaCA9IFdU
Rk1vdmUoc3RvcHdhdGNoKTsgfQpAQCAtMTE0LDExICsxNTIsMTIgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRpc3BhdGNoSWZOZWNlc3NhcnkoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIHZvaWQgZGlz
cGF0Y2hGdW5jdGlvbihjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgdm9pZCBwYXVzZSgpOworICAg
IHZvaWQgY2xlYXJEYXRhKGNvbnN0IExvY2tIb2xkZXImKTsKIAogICAgIFZNJiBtX3ZtOwogICAg
IFJlZlB0cjxTdG9wd2F0Y2g+IG1fc3RvcHdhdGNoOwogICAgIFZlY3RvcjxTdGFja1RyYWNlPiBt
X3N0YWNrVHJhY2VzOwotICAgIHNpemVfdCBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5
OworICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrVHJhY2U+IG1fdW5wcm9jZXNzZWRTdGFja1Ry
YWNlczsKICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAg
ICAgZG91YmxlIG1fbGFzdFRpbWU7CiAgICAgZG91YmxlIG1fdG90YWxUaW1lOwpAQCAtMTMwLDcg
KzE2OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzUGF1c2VkOwogICAgIGJvb2wgbV9oYXNE
aXNwYXRjaGVkRnVuY3Rpb247CiAgICAgSGFzaFNldDxFeGVjdXRhYmxlQmFzZSo+IG1fc2VlbkV4
ZWN1dGFibGVzOwotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBtX2N1cnJlbnRGcmFtZXM7CisgICAg
VmVjdG9yPFVucHJvY2Vzc2VkU3RhY2tGcmFtZT4gbV9jdXJyZW50RnJhbWVzOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShy
ZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxMiw2ICszMTIsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgICAgIGVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoKTsK
ICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgaWYgKE9wdGlvbnM6OnVzZVNhbXBs
aW5nUHJvZmlsZXIoKSkgeworICAgICAgICBzZXRTaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFw
cGluZygpOwogICAgICAgICBtX3NhbXBsaW5nUHJvZmlsZXIgPSBhZG9wdFJlZihuZXcgU2FtcGxp
bmdQcm9maWxlcigqdGhpcywgU3RvcHdhdGNoOjpjcmVhdGUoKSkpOwogICAgICAgICBtX3NhbXBs
aW5nUHJvZmlsZXItPnN0YXJ0KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OTcsNiArNTk3LDkgQEAgcHVibGljOgogCiAgICAg
aW5saW5lIGJvb2wgc2hvdWxkVHJpZ2dlclRlcm1pbmF0aW9uKEV4ZWNTdGF0ZSopOwogCisgICAg
dm9pZCBzZXRTaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZygpIHsgbV9zaG91bGRCdWls
ZFBDVG9Db2RlT3JpZ2luTWFwcGluZyA9IHRydWU7IH0KKyAgICBib29sIHNob3VsZEJ1aWxkZXJQ
Q1RvQ29kZU9yaWdpbk1hcHBpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEJ1aWxkUENUb0Nv
ZGVPcmlnaW5NYXBwaW5nOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgY2xhc3MgQ2xlYXJFeGNlcHRpb25TY29wZTsKQEAg
LTY0OCw2ICs2NTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9j
ayB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CiAgICAgYm9vbCBt
X3Nob3VsZFJld3JpdGVDb25zdEFzVmFyIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2hvdWxkQnVp
bGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcgeyBmYWxzZSB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxD
b2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJsZWRQcm9m
aWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0aW5F
eGVjdXRhYmxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXItYmFzaWMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci1iYXNpYy5qcwkocmV2aXNpb24gMTk1
NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9m
aWxlci1iYXNpYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDggQEAgaWYgKHBsYXRm
b3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyKCkpIAogICAgICAgICAgICAgeC0tOwogICAgICAg
ICB9CiAgICAgfQotICAgIG5vSW5saW5lKHRvcCk7Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
Y2FsbCB0b3AoKSB0byBnZXQgdGhlIENhbGxTaXRlSW5kZXggdG8gdXBkYXRlCi0gICAgLy8gaW5z
aWRlIHRoZSBjYWxsIGZyYW1lLiBXZSBuZWVkIHRvIGZpeCB0aGF0IGJ5IGhhdmluZyBhIFBDPT5D
b2RlT3JpZ2luCi0gICAgLy8gbWFwcGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MjYyOQotICAgIGZ1bmN0aW9uIGpheih4KSB7IHJldHVybiB4ICsgdG9wKCk7
IH0gLy8gCisKKyAgICBmdW5jdGlvbiBqYXooeCkgeyByZXR1cm4geCArIHRvcCgpOyB9CiAgICAg
ZnVuY3Rpb24ga2F6KHkpIHsKICAgICAgICAgcmV0dXJuIGpheih5KSArIDU7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269913</attachid>
            <date>2016-01-26 13:50:56 -0800</date>
            <delta_ts>2016-01-26 14:24:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>100237</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NjE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5OSBA
QAorMjAxNi0wMS0yNiAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBKU0MgU2FtcGxpbmcgUHJvZmlsZXI6IENvbWUgdXAgd2l0aCBhIChwcm9ncmFtIGNvdW50ZXIg
PT4gQ29kZU9yaWdpbikgbWFwcGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGEgbWFwcGluZyBmcm9tIFBDIHRv
IENvZGVPcmlnaW4KKyAgICAgICAgdGhhdCBsaXZlcyBvZmYgb2YgSklUZWQgQ29kZUJsb2Nrcy4g
V2UgYnVpbGQgdGhpcyBtYXBwaW5nCisgICAgICAgIHdoaWxlIEpJVGluZyBjb2RlLCBhbmQgdGhl
biB3ZSBjb21wcmVzcyBpdCBhbmQgc3RvcmUKKyAgICAgICAgaXQgb24gdGhlIENvZGVCbG9jay4g
V2Ugb25seSBidWlsZCB0aGUgbWFwcGluZyBpZiBhIGRlYnVnZ2VyCisgICAgICAgIGhhcyBldmVy
IGJlZW4gYXR0YWNoZWQgdG8gYW55IGdsb2JhbCBvYmplY3QuCisKKyAgICAgICAgQ29kZUJsb2Nr
IGNvbnN1bHRzIHRoaXMgbWFwcGluZyB3aGVuIHNlYXJjaGluZyBmb3IgYSBDb2RlT3JpZ2luCisg
ICAgICAgIGZvciBhIGdpdmVuIFBDLCBidXQgaXQgYWxzbyBjb25zdWx0cyBvdGhlciBjb2RlIHJh
bmdlcworICAgICAgICBvZmYgdGhlIG1haW4gcGF0aCB0aGF0IG1heSBvd24gdGhlIFBDLiBTcGVj
aWZpY2FsbHksIGl0IHNlYXJjaGVzCisgICAgICAgIHRocm91Z2ggaW5saW5lIGNhY2hlcywgT1NS
RXhpdHMsIGFuZCBMYXp5U2xvd1BhdGhzLgorCisgICAgICAgIFRvIGZpbmQgUEMgaW5mbyBmb3Ig
dGhlIExMSW50LCB3ZSBhbHNvIHNhdmUgdGhlIExMSW50IHBjIHdoZW4KKyAgICAgICAgdGFraW5n
IGEgc3RhY2sgdHJhY2Ugd2hlcmUgdGhlIHRvcCBmcmFtZSBpcyBpbiBMTEludCBjb2RlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgY29kZSBpbnNpZGUgdGhlIFNhbXBsaW5n
UHJvZmllci4KKyAgICAgICAgSSByZWFsaXplZCBhIGJ1ZyBpbiB0aGUgU2FtcGxpbmdQcm9maWxl
cidzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBXZSB1c2VkIHRvIHdhbGsgdGhlIGlubGluZSBz
dGFjayB3aGlsZSBnYXRoZXJpbmcgYSBzdGFjaworICAgICAgICB0cmFjZS4gVGhpcyBpcyB3cm9u
Zy4gSXQncyBzdXBlciBkYW5nZXJvdXMgdG8gZG8gdGhpcyBiZWNhdXNlCisgICAgICAgIHdlIG1p
Z2h0IHBhdXNlIHRoZSBKU0MgcHJvY2VzcyB3aGlsZSBpdCdzIG1vZGlmeWluZyBpdHMKKyAgICAg
ICAgQ29kZU9yaWdpbiB0YWJsZS4gV2UgdXNlZCB0byB3YWxrIHRoZSBpbmxpbmUgc3RhY2sgd2hp
bGUKKyAgICAgICAgdGFraW5nIGEgc3RhY2sgdHJhY2UgYmVjYXVzZSBkb2luZyBzbyBjb3VsZCBz
YXZlIHVzIGZyb20KKyAgICAgICAgaGF2aW5nIHRvIHZlcmlmeSBhIHBhcnRpY3VsYXIgc3RhY2sg
dHJhY2UuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGF0LgorICAgICAgICBXZSBub3cgaGF2ZSB0byB2
ZXJpZnkgYWxsIHN0YWNrIHRyYWNlcyB0YWtlbi4gVGhpcyB2ZXJpZmljYXRpb24gc3RlcAorICAg
ICAgICBpbmNsdWRlcyB3YWxraW5nIHRoZSBpbmxpbmUgc3RhY2suCisKKyAgICAgICAgQmVjYXVz
ZSB3ZSBoYXZlIGEgUEM9PkNvZGVPcmlnaW4gbWFwLCB3ZSBjYW4gbm93IGdhdGhlciBtb3JlCisg
ICAgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0b3AtZnJhbWUgd2UgcGF1c2Uu
IFRoaXMgYWxsb3dzCisgICAgICAgIHVzIHRvIGNvcnJlY3RseSBvYnNlcnZlIGlubGluaW5nLiBJ
dCBhbHNvIGFsbG93cyB1cyB0byBvYnNlcnZlCisgICAgICAgIGV4cHJlc3Npb24tbGV2ZWwgbGlu
ZS9jb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgZnJhbWUuCisgICAgICAgIFRoZSByZWFz
b24gd2UgZG9uJ3QgY29uc3VsdCB0aGlzIG1hcHBpbmcgZm9yIHBhcmVudCBmcmFtZXMgaXMgCisg
ICAgICAgIHRoYXQgYWxsIHBhcmVudCBmcmFtZXMgc2hvdWxkIHNldCB0aGUgQ2FsbFNpdGVJbmRl
eCBvbiB0aGUgY2FsbAorICAgICAgICBmcmFtZSBoZWFkZXIsIHdoaWNoIG1lYW5zIHdlIGNhbiBj
b25zdWx0IHRoYXQgdmFsdWUgdG8gZ2V0IGlubGluaW5nIAorICAgICAgICBhbmQgZXhwcmVzc2lv
bi1sZXZlbCBsaW5lL2NvbHVtbiBpbmZvcm1hdGlvbi4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxl
cjo6TGFiZWw6OkxhYmVsKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
TGFiZWw6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVy
OjpMYWJlbDo6aXNTZXQpOgorICAgICAgICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaDoK
KyAgICAgICAgKEpTQzo6QXNzZW1ibGVyTGFiZWw6OmxhYmVsQXRPZmZzZXQpOgorICAgICAgICAo
SlNDOjpBc3NlbWJsZXJMYWJlbDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogYjMvQjNHZW5lcmF0
ZS5jcHA6CisgICAgICAgICogYjMvQjNPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdp
bjo6ZGF0YSk6CisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46Om9wZXJhdG9yPT0pOgorICAgICAg
ICAqIGIzL0IzUENUb09yaWdpbk1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBDVG9P
cmlnaW5NYXA6OlBDVG9PcmlnaW5NYXApOgorICAgICAgICAoSlNDOjpCMzo6UENUb09yaWdpbk1h
cDo6YXBwZW5kSXRlbSk6CisgICAgICAgIChKU0M6OkIzOjpQQ1RvT3JpZ2luTWFwOjpyYW5nZXMp
OgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OnBjVG9PcmlnaW5NYXApOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpyZWxlYXNl
UENUb09yaWdpbk1hcCk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJp
ZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRQ
Q1RvQ29kZU9yaWdpbk1hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpq
aXRDb2RlTWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieXRlY29kZU9mZnNldCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbkhhc2g6Omhhc2gpOgorICAg
ICAgICAoSlNDOjpDb2RlT3JpZ2luSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL0lu
bGluZUNhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdp
bkFuZEJhc2VsaW5lQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1Vw
SW5saW5lU3RhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpjb250YWluc1BDKToKKyAgICAgICAgKiBi
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0
dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkluZm86OmNvbnRhaW5zUEMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0V4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OnNldFRoaXNSZWdpc3Rlcik6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6ZmluZFBDKToKKyAgICAgICAgKiBkZmcvREZHSklU
Q29kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmNvbW1vbkRhdGFPZmZzZXQpOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpyZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFu
ZGxpbmdPU1JFeGl0SWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpz
ZXRFbmRPZk1haW5QYXRoKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5k
T2ZDb2RlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6c2V0U3RhcnRPZkNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpzZXRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
YWRkQ2FsbFNpdGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpwY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpzZXRFbmRP
Zk1haW5QYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0
RW5kT2ZDb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3Iu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6Y2FsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6Om9yaWdpbik6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
YWRkU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpydW5TbG93UGF0aEdlbmVyYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKiBmdGwvRlRMQjNDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
Ojpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SklUQ29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5n
Q2FsbFNpdGUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmZpbmRQQyk6CisgICAgICAg
ICogZnRsL0ZUTEpJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpiM0NvZGUp
OgorICAgICAgICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgor
ICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3RlcnM6OmxsaW50UEMp
OgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKToK
KyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rv
cjo6SlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlcjo6YXR0YWNoRGVidWdnZXIpOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OmFkZEV2
ZW50KToKKyAgICAgICAgKEluc3BlY3Rvcjo6YnVpbGRTYW1wbGVzKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6dHJhY2tpbmdDb21wbGV0ZSk6Cisg
ICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAg
ICAgICAoSlNDOjpKSVRDb2RlOjpmaW5kUEMpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6
OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjo6YXBwZW5kSXRlbSk6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFw
OjpQQ1RvQ29kZU9yaWdpbk1hcCk6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjp+
UENUb0NvZGVPcmlnaW5NYXApOgorICAgICAgICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcDo6bWVt
b3J5U2l6ZSk6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpmaW5kUEMpOgorICAg
ICAgICAqIGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6
OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGlkQnVpbGRNYXBwaW5nKToKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMpOgor
ICAgICAgICAqIGxsaW50L0xMSW50UENSYW5nZXMuaDoKKyAgICAgICAgKEpTQzo6TExJbnQ6Omlz
TExJbnRQQyk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAg
ICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwb3J0
U3RhdHMpOgorICAgICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6RnJhbWVXYWxrZXIpOgorICAgICAg
ICAoSlNDOjpGcmFtZVdhbGtlcjo6d2Fsayk6CisgICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjpy
ZXNldEF0TWFjaGluZUZyYW1lKToKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmlzVmFsaWRG
cmFtZVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1By
b2ZpbGVyKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6flNhbXBsaW5nUHJvZmls
ZXIpOgorICAgICAgICAoSlNDOjp0cnlHZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6
U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyk6CisgICAgICAg
IChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQ
cm9maWxlcjo6bm90aWNlVk1FbnRyeSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6
OmNsZWFyRGF0YSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6
OmRpc3BsYXlOYW1lKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFt
ZTo6ZGlzcGxheU5hbWVGb3JKU09OVGVzdHMpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2Zp
bGVyOjpTdGFja0ZyYW1lOjpmdW5jdGlvblN0YXJ0TGluZSk6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9uU3RhcnRDb2x1bW4pOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzb3VyY2VJRCk6CisgICAgICAgIChK
U0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnVybCk6CisgICAgICAgIChKU0M6OlNh
bXBsaW5nUHJvZmlsZXI6OnJlbGVhc2VTdGFja1RyYWNlcyk6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUHJvZmlsZXI6OnN0YWNrVHJhY2VzQXNKU09OKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnN0YXJ0
TGluZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJh
bWU6OnN0YXJ0Q29sdW1uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxl
cjo6c3RhY2tUcmFjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpVbnByb2Nlc3NlZFN0YWNr
RnJhbWU6OlVucHJvY2Vzc2VkU3RhY2tGcmFtZSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlN0YWNrRnJhbWU6OlN0YWNrRnJhbWUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1By
b2ZpbGVyOjpTdGFja1RyYWNlOjpTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQ
cm9maWxlcjo6dG90YWxUaW1lKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6c2V0
U3RvcFdhdGNoKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06
OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpzZXRTaG91
bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyk6CisgICAgICAgIChKU0M6OlZNOjpzaG91bGRC
dWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXItYmFzaWMuanM6CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxp
bmdQcm9maWxlci50b3ApOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmls
ZXIuamF6KToKKyAgICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLmtheik6
CisKIDIwMTYtMDEtMjYgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbW92ZSBhIHVzZWxlc3MgI2luY2x1ZGUKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY0Myw3ICsxNjQzLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblNhbQogewogICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuc2Ft
cGxpbmdQcm9maWxlcigpKTsKICAgICBTdHJpbmcganNvblN0cmluZyA9IGV4ZWMtPnZtKCkuc2Ft
cGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNPTigpOwotICAgIGV4ZWMtPnZtKCkuc2Ft
cGxpbmdQcm9maWxlcigpLT5jbGVhckRhdGEoKTsKICAgICBFbmNvZGVkSlNWYWx1ZSByZXN1bHQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsKICAgICBSRUxF
QVNFX0FTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk1NTc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMDMsOSArMTMwMywxMiBAQAogCQk3MEVDQTYwNzFBRkRC
RUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMjFBRkRCRUEyMDA0NDk3MzkgLyogVGVt
cGxhdGVSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjA4MUFGREJFQTIwMDQ0OTczOSAvKiBU
ZW1wbGF0ZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MEVDQTYwMzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwRUNBNjA5
MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwNDFBRkRCRUEyMDA0NDk3Mzkg
LyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTc5MkNCMzQ5MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9y
aWdpbk1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovOyB9
OworCQk3OTJDQjM0QTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MkNCMzQ4MUM0RUVE
NUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBH
ZXRQdXRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0
MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyog
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5
MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAv
KiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BD
VG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUM0QjE1RDFCQTIx
NThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QjFC
QTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5j
cHAgKi87IH07CiAJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFy
aWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFu
Z2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUNG
QzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNDk4LDkgKzM1MDEsMTIgQEAKIAkJ
NzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1w
bGF0ZVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRl
UmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBFQ0E2MDQxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTJDQjM0ODFDNEVFRDVDMDBEMTNB
RjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2
NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBODFC
OEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIz
UENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BDVG9P
cmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3OUM0QjE1QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFy
aWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDsgcGF0aCA9
IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVD
YXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzlDRkM2RUYxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5n
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRQQ1Jhbmdlcy5oOyBw
YXRoID0gbGxpbnQvTExJbnRQQ1Jhbmdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNDg0MCw2ICs0ODQ2LDcgQEAKIAkJCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50U3BlY2lhbC5oICovLAogCQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8q
IEIzUENUb09yaWdpbk1hcC5oICovLAogCQkJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BoYXNlU2NvcGUuY3BwICovLAogCQkJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bo
YXNlU2NvcGUuaCAqLywKIAkJCQkwRjM3MzA4QTFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGls
ZHJlbi5jcHAgKi8sCkBAIC01MTQ5LDYgKzUxNTYsOCBAQAogCQkJCTBGQzcxMkUxMTdDRDg3OEYw
MDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJ
CUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQlB
NzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLywKKwkJCQk3OTJD
QjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovLAorCQkJCTc5
MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICovLAogCQkJCTBG
RTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAg
Ki8sCiAJCQkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmggKi8sCiAJCQkJMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi8s
CkBAIC03MDI1LDYgKzcwMzQsOCBAQAogCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5MzFDMEQ2N0VFMDAwNTJCRkEgLyog
QWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ1NzAzOTFCRTQ0QzkxMDA2MkE2
MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5OUVGN0M0
MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTc5MkNCMzRBMUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1By
b2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMzMTFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLApAQCAtODk3MSw2ICs4OTgyLDcgQEAKIAkJ
CQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAw
ODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OTJDQjM0
OTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZCMzg3OEYxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEyRDkgLyogREZH
Tm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlz
aW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDUsNiArNDA1LDggQEAgcHVibGlj
OgogICAgICAgICAgICAgbWFzbS0+aW52YWxpZGF0ZUFsbFRlbXBSZWdpc3RlcnMoKTsKICAgICAg
ICAgfQogCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYWJlbCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1fbGFiZWwgPT0gb3RoZXIubV9sYWJlbDsgfQorCiAgICAgICAgIGJvb2wgaXNT
ZXQoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsLmlzU2V0KCk7IH0KICAgICBwcml2YXRlOgogICAg
ICAgICBBc3NlbWJsZXJMYWJlbCBtX2xhYmVsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiAxOTU1NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
cmV0dXJuIEFzc2VtYmxlckxhYmVsKG1fb2Zmc2V0ICsgb2Zmc2V0KTsKICAgICAgICAgfQogCisg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBc3NlbWJsZXJMYWJlbCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0OyB9CisKICAgICAgICAgdWludDMy
X3QgbV9vZmZzZXQ7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmNwcAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVk
ZSAiQjNSZWR1Y2VTdHJlbmd0aC5oIgogI2luY2x1ZGUgIkIzVGltaW5nU2NvcGUuaCIKICNpbmNs
dWRlICJCM1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09yaWdpbi5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOCBAQCBwdWJsaWM6CiAKICAg
ICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgT3JpZ2luJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9kYXRhID09
IG90aGVyLm1fZGF0YTsgfQorCiAgICAgLy8gWW91IHNob3VsZCBhdm9pZCB1c2luZyB0aGlzLiBV
c2UgT3JpZ2luRHVtcCBpbnN0ZWFkLgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUENUb09yaWdpbk1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BDVG9PcmlnaW5NYXAu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BDVG9PcmlnaW5N
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQQ1RvT3JpZ2luTWFwX2gKKyNk
ZWZpbmUgQjNQQ1RvT3JpZ2luTWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJC
M09yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUENU
b09yaWdpbk1hcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUENUb09yaWdpbk1hcCk7Citw
dWJsaWM6CisgICAgUENUb09yaWdpbk1hcCgpCisgICAgeyB9CisKKyAgICBQQ1RvT3JpZ2luTWFw
KFBDVG9PcmlnaW5NYXAmJiBvdGhlcikKKyAgICAgICAgOiBtX3JhbmdlcyhXVEZNb3ZlKG90aGVy
Lm1fcmFuZ2VzKSkKKyAgICB7IH0KKworICAgIHN0cnVjdCBPcmlnaW5SYW5nZSB7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbDsKKyAgICAgICAgT3JpZ2luIG9yaWdpbjsKKyAg
ICB9OworCisgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCwg
T3JpZ2luIG9yaWdpbikKKyAgICB7CisgICAgICAgIGlmIChtX3Jhbmdlcy5zaXplKCkpIHsKKyAg
ICAgICAgICAgIGlmIChtX3Jhbmdlcy5sYXN0KCkubGFiZWwgPT0gbGFiZWwpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG1fcmFuZ2VzLmxhc3QoKS5vcmlnaW4gPT0g
b3JpZ2luIHx8ICFvcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgbV9yYW5nZXMuYXBwZW5kKE9yaWdpblJhbmdle2xhYmVsLCBvcmlnaW59KTsKKyAg
ICB9CisKKyAgICBjb25zdCBWZWN0b3I8T3JpZ2luUmFuZ2U+JiByYW5nZXMoKSBjb25zdCAgeyBy
ZXR1cm4gbV9yYW5nZXM7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8T3JpZ2luUmFuZ2U+IG1f
cmFuZ2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQQ1RvT3JpZ2luTWFwX2gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiQjNP
cmlnaW4uaCIKKyNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAuaCIKICNpbmNsdWRlICJCM1R5cGUu
aCIKICNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCiAjaW5jbHVkZSAiUHVyZU5hTi5oIgpAQCAtMjc1
LDYgKzI3Niw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBmcmFt
ZVNpemUoKSBjb25zdDsKICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVlU2F2
ZVJlZ2lzdGVycygpIGNvbnN0OwogCisgICAgUENUb09yaWdpbk1hcCYgcGNUb09yaWdpbk1hcCgp
IHsgcmV0dXJuIG1fcGNUb09yaWdpbk1hcDsgfQorICAgIFBDVG9PcmlnaW5NYXAgcmVsZWFzZVBD
VG9PcmlnaW5NYXAoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGNUb09yaWdpbk1hcCk7IH0KKwogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiAgICAgCkBAIC0yOTEs
NiArMjk1LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWlyOjpDb2RlPiBtX2Nv
ZGU7CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmludFN0cmVhbSYsIE9yaWdpbik+PiBt
X29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9mcm9udGVuZERhdGE7CisgICAgUENU
b09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3Bw
CShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsMTIgQEAKICNpbmNsdWRlICJB
aXJWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNJbmRleE1h
cC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5jbHVkZSAiQjNUaW1pbmdTY29wZS5o
IgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJQQ1Rv
Q29kZU9yaWdpbk1hcC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CiAKQEAgLTE3MSwxMiArMTc0LDIzIEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29k
ZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFwcGVuZChqdW1w
KTsKICAgICB9OwogCisgICAgUENUb09yaWdpbk1hcCYgcGNUb09yaWdpbk1hcCA9IGNvZGUucHJv
YygpLnBjVG9PcmlnaW5NYXAoKTsKKyAgICBhdXRvIGFkZEl0ZW0gPSBbJl0gKEluc3QmIGluc3Qp
IHsKKyAgICAgICAgaWYgKCFpbnN0Lm9yaWdpbikgeworICAgICAgICAgICAgcGNUb09yaWdpbk1h
cC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgp
LCBpbnN0Lm9yaWdpbi0+b3JpZ2luKCkpOworICAgIH07CisKICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgewogICAgICAgICBibG9ja0p1bXBzW2Jsb2NrXS5saW5rKCZqaXQpOwog
ICAgICAgICBibG9ja0xhYmVsc1tibG9ja10gPSBqaXQubGFiZWwoKTsKICAgICAgICAgQVNTRVJU
KGJsb2NrLT5zaXplKCkgPj0gMSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
bG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
anVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICAgICAg
SW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGFkZEl0ZW0oaW5zdCk7Cisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGluc3QuZ2VuZXJhdGUoaml0LCBj
b250ZXh0KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7
CiAgICAgICAgIH0KIApAQCAtMTg0LDYgKzE5OCw4IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29k
ZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygw
KSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQogICAgICAgICAgICAgY29udGludWU7CiAK
KyAgICAgICAgYWRkSXRlbShibG9jay0+bGFzdCgpKTsKKwogICAgICAgICBpZiAoaXNSZXR1cm4o
YmxvY2stPmxhc3QoKS5vcGNvZGUpKSB7CiAgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9u
J3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVl
ZCB0bwogICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRlLgpAQCAtMTk4LDYgKzIxNCw3
IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZVdpdGhFbXB0
eUZyYW1lKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICBhZGRJdGVtKGJs
b2NrLT5sYXN0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMjE4
LDEwICsyMzUsMTMgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgICAgIGFkZEl0ZW0oYmxvY2stPmxhc3QoKSk7CiAgICAgfQog
CisgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7CiAg
ICAgZm9yIChhdXRvJiBsYXRlUGF0aCA6IGNvbnRleHQubGF0ZVBhdGhzKQogICAgICAgICBsYXRl
UGF0aC0+cnVuKGppdCwgY29udGV4dCk7CisgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGpp
dC5sYWJlbCgpLCBPcmlnaW4oKSk7CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkxM
SW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCkBAIC00Mjc1LDQgKzQyNzYsMjkgQEAgdm9p
ZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaQogICAgIH0KIH0KIAordm9pZCBD
b2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9y
aWdpbk1hcD4mJiBtYXApIAoreyAKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZSht
YXApOworfQorCitPcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBw
YykKK3sKKyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkgeworICAgICAgICBpZiAoT3B0aW9u
YWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1fcGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhw
YykpCisgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKKyAgICB9CisjaWYgRU5BQkxFKEpJ
VCkKKyAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0
dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YiA9ICppdGVyOworICAgICAgICBpZiAoc3R1Yi0+Y29udGFpbnNQQyhwYykpCisg
ICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oc3R1Yi0+Y29kZU9yaWdpbik7
CisgICAgfQorCisgICAgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX2pp
dENvZGUtPmZpbmRQQyh0aGlzLCBwYykpCisgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCisKKyAgICByZXR1cm4gTnVsbG9wdDsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBUeXBl
TG9jYXRpb247CiBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OworY2xhc3MgUENUb0NvZGVPcmln
aW5NYXA7CiAKIGVudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsgRG9udENvdW50UmVvcHRpbWl6YXRp
b24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKIApAQCAtMjc0LDcgKzI3NSw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX2ppdENvZGVNYXAuZ2V0KCk7CiAgICAgfQotICAgIAor
CiAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3Mp
CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5BZGRyZXNzID49IGluc3RydWN0
aW9ucygpLmJlZ2luKCkgJiYgcmV0dXJuQWRkcmVzcyA8IGluc3RydWN0aW9ucygpLmVuZCgpKTsK
QEAgLTkyNyw2ICs5MjgsOSBAQCBwdWJsaWM6CiAKICAgICBDYWxsU2l0ZUluZGV4IG5ld0V4Y2Vw
dGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGUp
OwogCisgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0Nv
ZGVPcmlnaW5NYXA+JiYpOworICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBw
Yyk7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsK
ICAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKQEAgLTEwOTcsNiAr
MTEwMSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEpJVCkKICAgICBERkc6OkNhcGFiaWxpdHlM
ZXZlbCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlOwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRy
PFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogCiAgICAgVW5jb25kaXRp
b25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiAgICAgV2Vha1JlZmVyZW5j
ZUhhcnZlc3RlciBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMiw2ICsxMDIsOSBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgYm9vbCBpc0FwcHJv
eGltYXRlbHlFcXVhbFRvKGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdDsKICAgICAKICAg
ICB1bnNpZ25lZCBhcHByb3hpbWF0ZUhhc2goKSBjb25zdDsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIHdhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9u
Jik7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRoaXMgaXMgc2xvdywgYW5k
IGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KICAgICBWZWN0b3I8Q29kZU9yaWdpbj4g
aW5saW5lU3RhY2soKSBjb25zdDsKQEAgLTEyNyw3ICsxMzAsNyBAQCBpbmxpbmUgYm9vbCBDb2Rl
T3JpZ2luOjpvcGVyYXRvcj09KGNvbnN0CiAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXggPT0gb3Ro
ZXIuYnl0ZWNvZGVJbmRleAogICAgICAgICAmJiBpbmxpbmVDYWxsRnJhbWUgPT0gb3RoZXIuaW5s
aW5lQ2FsbEZyYW1lOwogfQotICAgIAorCiBzdHJ1Y3QgQ29kZU9yaWdpbkhhc2ggewogICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENvZGVPcmlnaW4mIGtleSkgeyByZXR1cm4ga2V5Lmhh
c2goKTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENvZGVPcmlnaW4mIGEsIGNvbnN0
IENvZGVPcmlnaW4mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAkocmV2aXNpb24gMTk1NTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDYsNiArMjQ2LDE4IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3IKICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2s7CiB9CiAKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtV
cElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4gPSAqdGhpczsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBmdW5jdGlv
bihjb2RlT3JpZ2luKTsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMzI0LDYgKzMyNCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm91dFRvRGllKCk7
CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgYm9vbCBjb250
YWluc1BDKHZvaWQqIHBjKSBjb25zdAorICAgIHsgCisgICAgICAgIGlmICghbV9zdHViUm91dGlu
ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB1aW50cHRyX3QgcGNBc0lu
dCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBjKTsKKyAgICAgICAgcmV0dXJuIG1fc3R1YlJv
dXRpbmUtPnN0YXJ0QWRkcmVzcygpIDw9IHBjQXNJbnQgJiYgcGNBc0ludCA8PSBtX3N0dWJSb3V0
aW5lLT5lbmRBZGRyZXNzKCk7CisgICAgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBB
Y2Nlc3NDYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODQsNiArMTg0LDEzIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1Jl
ZmVyZW4KICAgICByZXNldChjb2RlQmxvY2spOwogICAgIHJlc2V0QnlHQyA9IHRydWU7CiB9CisK
K2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OmNvbnRhaW5zUEModm9pZCogcGMpIGNvbnN0Cit7Cisg
ICAgaWYgKGNhY2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gdS5zdHViLT5jb250YWluc1BDKHBjKTsKK30KICNlbmRpZgogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMTIyLDYgKzEyMiw4IEBAIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAg
ICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4OwogCisgICAgYm9vbCBjb250YWluc1BDKHZv
aWQqIHBjKSBjb25zdDsKKwogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDcgQEAg
cHVibGljOgogICAgIHZvaWQgYWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQg
aW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90
KTsKIAogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25J
bmZvLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhw
cmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAKICAgICAvLyBTcGVj
aWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0
aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMTk1NTc3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjE1LDYgKzIxNSwxOCBAQCB2b2lkIEpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyhj
b25zdCBUCiAgICAgbWluaWZpZWRERkcudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVu
Y2VzKTsKIH0KIAorT3B0aW9uYWw8Q29kZU9yaWdpbj4gSklUQ29kZTo6ZmluZFBDKENvZGVCbG9j
ayosIHZvaWQqIHBjKQoreworICAgIGZvciAoT1NSRXhpdCYgZXhpdCA6IG9zckV4aXQpIHsKKyAg
ICAgICAgaWYgKEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGhhbmRsZSA9IGV4aXQubV9jb2RlLmV4
ZWN1dGFibGVNZW1vcnkoKSkgeworICAgICAgICAgICAgaWYgKGhhbmRsZS0+c3RhcnQoKSA8PSBw
YyAmJiBwYyA8IGhhbmRsZS0+ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFs
PENvZGVPcmlnaW4+KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDgg
QEAgcHVibGljOgogI2VuZGlmCiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGNvbW1vbkRhdGFPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklUQ29kZSwgY29tbW9uKTsgfQorCisgICAg
T3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBvdmVycmlk
ZTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAvLyBBbGxv
dyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNiArNTIsNyBAQCBKSVRDb21waWxlcjo6SklUQ29tcGlsZXIoR3JhcGgmIGRmZykK
ICAgICAsIG1fZ3JhcGgoZGZnKQogICAgICwgbV9qaXRDb2RlKGFkb3B0UmVmKG5ldyBKSVRDb2Rl
KCkpKQogICAgICwgbV9ibG9ja0hlYWRzKGRmZy5udW1CbG9ja3MoKSkKKyAgICAsIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyKGRmZy5tX3ZtKQogewogICAgIGlmIChzaG91bGREdW1wRGlzYXNz
ZW1ibHkoKSB8fCBtX2dyYXBoLm1fdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQogICAgICAgICBt
X2Rpc2Fzc2VtYmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8RGlzYXNzZW1ibGVyPihkZmcpOwpAQCAt
MzA1LDYgKzMwNiw5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25IYW5kbGVyKG5ld0V4Y2Vw
dGlvbkhhbmRsZXIpOwogICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQorICAgICAgICBtX2NvZGVCbG9jay0+c2V0
UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RG
TW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpKTsKIH0KIAogdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCkBAIC0zMzksNyArMzQzLDggQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZSgpCiAgICAgbV9zcGVjdWxhdGl2ZS0+Y2FsbE9wZXJhdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
LCBtX2NvZGVCbG9jayk7CiAKICAgICAvLyBHZW5lcmF0ZSBzbG93IHBhdGggY29kZS4KLSAgICBt
X3NwZWN1bGF0aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICBtX3NwZWN1bGF0aXZl
LT5ydW5TbG93UGF0aEdlbmVyYXRvcnMobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOworICAg
IG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKICAgICAKICAgICBjb21waWxl
RXhjZXB0aW9uSGFuZGxlcnMoKTsKICAgICBsaW5rT1NSRXhpdHMoKTsKQEAgLTQzMiw3ICs0Mzcs
OCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIGp1bXAoZnJvbUFy
aXR5Q2hlY2spOwogICAgIAogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgotICAgIG1f
c3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIG1fc3BlY3VsYXRpdmUt
PnJ1blNsb3dQYXRoR2VuZXJhdG9ycyhtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik7CisgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogICAgIAogICAgIGNvbXBpbGVF
eGNlcHRpb25IYW5kbGVycygpOwogICAgIGxpbmtPU1JFeGl0cygpOwpAQCAtNTk4LDYgKzYwNCwy
MiBAQCBDYWxsU2l0ZUluZGV4IEpJVENvbXBpbGVyOjpyZWNvcmRDYWxsU2l0CiAgICAgcmV0dXJu
IGNhbGxTaXRlOwogfQogCit2b2lkIEpJVENvbXBpbGVyOjpzZXRFbmRPZk1haW5QYXRoKCkKK3sK
KyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsSWdub3JpbmdX
YXRjaHBvaW50cygpLCBtX3NwZWN1bGF0aXZlLT5tX29yaWdpbi5zZW1hbnRpYyk7CisgICAgaWYg
KExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQorICAgICAgICByZXR1cm47CisgICAgbV9kaXNhc3Nl
bWJsZXItPnNldEVuZE9mTWFpblBhdGgobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOworfQor
Cit2b2lkIEpJVENvbXBpbGVyOjpzZXRFbmRPZkNvZGUoKQoreworICAgIG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCksIFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CisgICAgaWYgKExJS0VM
WSghbV9kaXNhc3NlbWJsZXIpKQorICAgICAgICByZXR1cm47CisgICAgbV9kaXNhc3NlbWJsZXIt
PnNldEVuZE9mQ29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTk1NTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlRlbXBSZWdpc3Rl
clNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTExOCw2ICsxMTksNyBAQCBwdWJsaWM6CiAg
ICAgLy8gTWV0aG9kcyB0byBzZXQgbGFiZWxzIGZvciB0aGUgZGlzYXNzZW1ibGVyLgogICAgIHZv
aWQgc2V0U3RhcnRPZkNvZGUoKQogICAgIHsKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgQ29kZU9yaWdpbigw
LCBudWxscHRyKSk7CiAgICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2RlKGxh
YmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKQEAgLTEzNywxOSArMTM5LDggQEAgcHVibGljOgog
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yTm9kZShub2RlLCBsYWJlbElnbm9yaW5nV2F0
Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0RW5kT2ZNYWluUGF0aCgpCi0g
ICAgewotICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZk1haW5QYXRoKGxhYmVsSWdu
b3JpbmdXYXRjaHBvaW50cygpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRFbmRPZkNvZGUo
KQotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsSWdu
b3JpbmdXYXRjaHBvaW50cygpKTsKLSAgICB9CisgICAgdm9pZCBzZXRFbmRPZk1haW5QYXRoKCk7
CisgICAgdm9pZCBzZXRFbmRPZkNvZGUoKTsKICAgICAKICAgICBDYWxsU2l0ZUluZGV4IGFkZENh
bGxTaXRlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CkBAIC0yNjUsNiArMjU2LDggQEAg
cHVibGljOgogCiAgICAgQ2FsbFNpdGVJbmRleCByZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhj
ZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVk
IGV2ZW50U3RyZWFtSW5kZXgpOwogCisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIoKSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
OwogICAgIApAQCAtMzI4LDYgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbCBtX2NhbGxBcml0
eUZpeHVwOwogICAgIExhYmVsIG1fYXJpdHlDaGVjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3Bl
Y3VsYXRpdmVKSVQ+IG1fc3BlY3VsYXRpdmU7CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
IG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBA
IHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQnkgZGVm
YXVsdCBzbG93IHBhdGggZ2VuZXJhdG9ycyBkb24ndCBoYXZlIGEgY2FsbC4KICAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpDYWxsKCk7CiAgICAgfQorCisgICAgY29uc3QgTm9kZU9yaWdp
biYgb3JpZ2luKCkgY29uc3QgIHsgcmV0dXJuIG1fb3JpZ2luOyB9CisKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCopID0gMDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9sYWJlbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxOTU1NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMwLDEwICszMzAsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkU2xv
d1BhdGhHZW5lcmF0bwogICAgIG1fc2xvd1BhdGhHZW5lcmF0b3JzLmFwcGVuZChXVEZNb3ZlKHNs
b3dQYXRoR2VuZXJhdG9yKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnJ1blNsb3dQYXRo
R2VuZXJhdG9ycygpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpydW5TbG93UGF0aEdlbmVyYXRvcnMo
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpCiB7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2xvd1BhdGhHZW5lcmF0b3JzLnNpemUoKTsg
KytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3dQYXRoR2VuZXJhdG9ycy5z
aXplKCk7ICsraSkgeworICAgICAgICBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShtX2ppdC5sYWJlbCgpLCBtX3Nsb3dQYXRoR2VuZXJhdG9yc1tpXS0+b3JpZ2luKCkuc2VtYW50
aWMpOwogICAgICAgICBtX3Nsb3dQYXRoR2VuZXJhdG9yc1tpXS0+Z2VuZXJhdGUodGhpcyk7Cisg
ICAgfQogfQogCiAvLyBPbiBXaW5kb3dzIHdlIG5lZWQgdG8gd3JhcCBmbW9kOyBvbiBvdGhlciBw
bGF0Zm9ybXMgd2UgY2FuIGNhbGwgaXQgZGlyZWN0bHkuCkBAIC0xNTA0LDYgKzE1MDYsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgIGlmIChPcHRp
b25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgJiYgbWF5RXhpdChtX2ppdC5ncmFw
aCgpLCBtX2N1cnJlbnROb2RlKSAhPSBEb2VzTm90RXhpdCkKICAgICAgICAgICAgIG1faml0Lmpp
dFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwogCisgICAgICAgIG1faml0LnBjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcigpLmFwcGVuZEl0ZW0obV9qaXQubGFiZWwoKSwgbV9vcmlnaW4uc2VtYW50
aWMpOworCiAgICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoYmVsb25nc0luTWluaWZpZWRHcmFwaChtX2N1cnJlbnROb2RlLT5vcCgpKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlz
aW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDcgKzMxNyw3IEBAIHB1YmxpYzoKICAgICBHZW5l
cmF0ZWRPcGVyYW5kVHlwZSBjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKE5vZGUqKTsKIAog
ICAgIHZvaWQgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2Vu
ZXJhdG9yPik7Ci0gICAgdm9pZCBydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICB2b2lkIHJ1
blNsb3dQYXRoR2VuZXJhdG9ycyhQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImKTsKICAgICAKICAg
ICB2b2lkIGNvbXBpbGUoTm9kZSopOwogICAgIHZvaWQgbm90aWNlT1NSQmlydGgoTm9kZSopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxlLmNwcAkocmV2aXNp
b24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRlRMVW53aW5kSW5m
by5oIgogI2luY2x1ZGUgIkpJVFN1YkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBAIC0x
MzQsNiArMTM1LDEwIEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUK
ICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CisgICAgCisgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFwID0gc3RhdGUucHJv
Yy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKKyAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9D
b2RlT3JpZ2luTWFwcGluZygpKQorICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2lu
TWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2Rl
TGlua0J1ZmZlcikpOwogCiAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nh
c3Q8R2VuZXJhdGVkRnVuY3Rpb24+KAogICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxp
bmtCdWZmZXItPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTk1NTc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg2LDYgKzE4NiwyNSBAQCBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9Q
cmVzCiAgICAgcmV0dXJuIFJlZ2lzdGVyU2V0KCk7CiB9CiAKK09wdGlvbmFsPENvZGVPcmlnaW4+
IEpJVENvZGU6OmZpbmRQQyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgdm9pZCogcGMpCit7CisgICAg
Zm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgeworICAgICAgICBpZiAoRXhlY3V0YWJsZU1l
bW9yeUhhbmRsZSogaGFuZGxlID0gZXhpdC5tX2NvZGUuZXhlY3V0YWJsZU1lbW9yeSgpKSB7Cisg
ICAgICAgICAgICBpZiAoaGFuZGxlLT5zdGFydCgpIDw9IHBjICYmIHBjIDwgaGFuZGxlLT5lbmQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oZXhpdC5tX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHN0
ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+JiBsYXp5U2xvd1BhdGggOiBsYXp5U2xvd1BhdGhz
KSB7CisgICAgICAgIGlmIChFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBsYXp5U2xv
d1BhdGgtPnN0dWIoKS5leGVjdXRhYmxlTWVtb3J5KCkpIHsKKyAgICAgICAgICAgIGlmIChoYW5k
bGUtPnN0YXJ0KCkgPD0gcGMgJiYgcGMgPCBoYW5kbGUtPmVuZCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihjb2RlQmxvY2stPmNvZGVPcmlnaW4obGF6eVNs
b3dQYXRoLT5jYWxsU2l0ZUluZGV4KCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBOdWxsb3B0OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5o
CShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBwdWJsaWM6CiAKICAgICBSZWdp
c3RlclNldCBsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0
ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KSBvdmVycmlkZTsKIAorICAgIE9wdGlvbmFsPENv
ZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgb3ZlcnJpZGU7CisKICNpZiBG
VExfVVNFU19CMwogICAgIENvZGVSZWYgYjNDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9iM0NvZGU7
IH0KICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tN
YXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hp
bmVTdGFja01hcmtlci5jcHAJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDgg
KzI0LDExIEBACiAKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkhl
YXAuaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMTEludFBDUmFuZ2VzLmgiCisjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHNldGptcC5oPgog
I2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNTc3LDYgKzU4MCw2NCBAQCB2b2lkKiBNYWNoaW5lVGhy
ZWFkczo6VGhyZWFkOjpSZWdpc3RlcnM6CiAjZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIGlu
c3RydWN0aW9uIHBvaW50ZXIgZm9yIGFub3RoZXIgdGhyZWFkIG9uIHRoaXMgcGxhdGZvcm0KICNl
bmRpZgogfQordm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOjpsbGludFBD
KCkgY29uc3QKK3sKKyAgICAvLyBMTEludCB1c2VzIHJlZ1Q0IGFzIFBDLgorI2lmIE9TKERBUldJ
TikKKworI2lmIF9fREFSV0lOX1VOSVgwMworCisjaWYgQ1BVKFg4NikKKyAgICBzdGF0aWNfYXNz
ZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6ZXNpLCAiV3JvbmcgTExJbnQgUEMu
Iik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX19lc2kpOworI2Vs
aWYgQ1BVKFg4Nl82NCkKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJl
Z2lzdGVyczo6cjgsICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVncy5fX3I4KTsKKyNlbGlmIENQVShBUk0pCisgICAgc3RhdGljX2Fzc2Vy
dChMTEludDo6TExJbnRQQyA9PSBBUk1SZWdpc3RlcnM6OnI4LCAiV3JvbmcgTExJbnQgUEMuIik7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX19yWzhdKTsKKyNlbGlm
IENQVShBUk02NCkKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IEFSTTY0UmVn
aXN0ZXJzOjp4NCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWdzLl9feFs0XSk7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0
dXJlCisjZW5kaWYKKworI2Vsc2UgLy8gIV9fREFSV0lOX1VOSVgwMworI2lmIENQVShYODYpCisg
ICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBYODZSZWdpc3RlcnM6OmVzaSwgIldy
b25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdz
LmVzaSk7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50
UEMgPT0gWDg2UmVnaXN0ZXJzOjpyOCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLnI4KTsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBB
cmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZW5kaWYgLy8gX19EQVJXSU5fVU5JWDAzCisKKy8vIGVu
ZCBPUyhEQVJXSU4pCisjZWxpZiBPUyhXSU5ET1dTKQorCisjaWYgQ1BVKEFSTSkKKyAgICBzdGF0
aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IEFSTVJlZ2lzdGVyczo6cjgsICJXcm9uZyBMTElu
dCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHVpbnRwdHJfdCkg
cmVncy5SOCk7CisjZWxpZiBDUFUoTUlQUykKKyNlcnJvciBEb250IGtub3cgd2hhdCB0byBkbyB3
aXRoIG1pcHMuIERvIHdlIGV2ZW4gbmVlZCB0aGlzPworI2VsaWYgQ1BVKFg4NikKKyAgICBzdGF0
aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6ZXNpLCAiV3JvbmcgTExJ
bnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCh1aW50cHRyX3Qp
IHJlZ3MuRXNpKTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6
TExJbnRQQyA9PSBYODZSZWdpc3RlcnM6OnIxMCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPigodWludHB0cl90KSByZWdzLlIxMCk7CisjZWxz
ZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworI2Vsc2UKKyNlcnJvciBO
ZWVkIGEgd2F5IHRvIGdldCB0aGUgTExJbnRQQyBmb3IgYW5vdGhlciB0aHJlYWQgb24gdGhpcyBw
bGF0Zm9ybQorI2VuZGlmCit9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQog
CiB2b2lkIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmZyZWVSZWdpc3RlcnMoVGhyZWFkOjpSZWdp
c3RlcnMmIHJlZ2lzdGVycykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hp
bmVTdGFja01hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzIs
NiArNzIsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAg
ICAgICAgdm9pZCogZnJhbWVQb2ludGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2b2lkKiBpbnN0
cnVjdGlvblBvaW50ZXIoKSBjb25zdDsKKyAgICAgICAgICAgIHZvaWQqIGxsaW50UEMoKSBjb25z
dDsKICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICAKICNp
ZiBPUyhEQVJXSU4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAJ
KHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAgSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlcjo6SlNHbG9iYQogdm9pZCBK
U0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyOjphdHRhY2hEZWJ1Z2dlcigpCiB7CiAgICAg
YXR0YWNoKCZtX2dsb2JhbE9iamVjdCk7CisgICAgbV9nbG9iYWxPYmplY3Qudm0oKS5zZXRTaG91
bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZygpOwogICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rp
b25zKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdl
bnQuY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6
YWRkRXYKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLXN0YXRpYyBSZWY8UHJv
dG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW1wbGVzPiBidWlsZFNhbXBsZXMoVmVjdG9yPFNhbXBs
aW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+JiBzYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMsIGRv
dWJsZSB0b3RhbFRpbWUpCitzdGF0aWMgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U2Ft
cGxlcz4gYnVpbGRTYW1wbGVzKFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiYm
IHNhbXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcywgZG91YmxlIHRvdGFsVGltZSkKIHsKICAgICBS
ZWY8UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U3RhY2tUcmFjZT4+
IHN0YWNrVHJhY2VzID0gUHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6
U3RhY2tUcmFjZT46OmNyZWF0ZSgpOwogICAgIGZvciAoU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tU
cmFjZSYgc3RhY2tUcmFjZSA6IHNhbXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcykgewpAQCAtMTY2
LDggKzE2Niw4IEBAIHN0YXRpYyBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW0KICAg
ICAgICAgICAgIFJlZjxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlN0YWNrRnJhbWU+IGZyYW1l
ID0gUHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTdGFja0ZyYW1lOjpjcmVhdGUoKQogICAgICAg
ICAgICAgICAgIC5zZXRTb3VyY2VJRChTdHJpbmc6Om51bWJlcihzdGFja0ZyYW1lLnNvdXJjZUlE
KCkpKQogICAgICAgICAgICAgICAgIC5zZXROYW1lKHN0YWNrRnJhbWUuZGlzcGxheU5hbWUoKSkK
LSAgICAgICAgICAgICAgICAuc2V0TGluZShzdGFja0ZyYW1lLnN0YXJ0TGluZSgpKQotICAgICAg
ICAgICAgICAgIC5zZXRDb2x1bW4oc3RhY2tGcmFtZS5zdGFydENvbHVtbigpKQorICAgICAgICAg
ICAgICAgIC5zZXRMaW5lKHN0YWNrRnJhbWUuZnVuY3Rpb25TdGFydExpbmUoKSkKKyAgICAgICAg
ICAgICAgICAuc2V0Q29sdW1uKHN0YWNrRnJhbWUuZnVuY3Rpb25TdGFydENvbHVtbigpKQogICAg
ICAgICAgICAgICAgIC5zZXRVcmwoc3RhY2tGcmFtZS51cmwoKSkKICAgICAgICAgICAgICAgICAu
cmVsZWFzZSgpOwogICAgICAgICAgICAgZnJhbWVzLT5hZGRJdGVtKFdURk1vdmUoZnJhbWUpKTsK
QEAgLTE5NCw4ICsxOTQsOCBAQCB2b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnRy
YWNrCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNhbXBsaW5nUHJvZmlsZXIpOwogICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwogICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT5zdG9wKGxvY2tlcik7Ci0gICAgICAgIFJlZjxQcm90b2NvbDo6U2Ny
aXB0UHJvZmlsZXI6OlNhbXBsZXM+IHNhbXBsZXMgPSBidWlsZFNhbXBsZXMoc2FtcGxpbmdQcm9m
aWxlci0+c3RhY2tUcmFjZXMobG9ja2VyKSwgc2FtcGxpbmdQcm9maWxlci0+dG90YWxUaW1lKGxv
Y2tlcikpOwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5jbGVhckRhdGEobG9ja2VyKTsKKyAg
ICAgICAgVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+IHN0YWNrVHJhY2VzID0g
c2FtcGxpbmdQcm9maWxlci0+cmVsZWFzZVN0YWNrVHJhY2VzKGxvY2tlcik7CisgICAgICAgIFJl
ZjxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlNhbXBsZXM+IHNhbXBsZXMgPSBidWlsZFNhbXBs
ZXMoV1RGTW92ZShzdGFja1RyYWNlcyksIHNhbXBsaW5nUHJvZmlsZXItPnRvdGFsVGltZShsb2Nr
ZXIpKTsKIAogICAgICAgICBsb2NrZXIudW5sb2NrRWFybHkoKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFw
LmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlc3VsdFR5cGUu
aCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKQEAgLTY5LDYgKzcwLDcgQEAgSklUOjpKSVQo
Vk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAsIG1fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4KFVJTlRfTUFYKQogICAgICwgbV9jYWxsTGlua0luZm9JbmRleChVSU5UX01BWCkKICAgICAs
IG1fcmFuZG9tR2VuZXJhdG9yKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpCisgICAg
LCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigqdm0pCiAgICAgLCBtX2NhbkJlT3B0aW1pemVk
KGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogewpAQCAtMTU4LDYg
KzE2MCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2luICsgbV9ieXRl
Y29kZU9mZnNldDsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2ludGVycHJldGVyLT5p
c09wY29kZShjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSwgInByaXZhdGVDb21waWxlTWFp
blBhc3MgZ29uZSBiYWQgQCAlZCIsIG1fYnl0ZWNvZGVPZmZzZXQpOwogCisgICAgICAgIG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlT2Zmc2V0KSk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBp
ZiAobV9ieXRlY29kZU9mZnNldCA+IDApIC8vIEF2b2lkIHRoZSBvdmVyaGVhZCBvZiBzYW1wbGlu
ZyBvcF9lbnRlciB0d2ljZS4KICAgICAgICAgICAgIHNhbXBsZUluc3RydWN0aW9uKGN1cnJlbnRJ
bnN0cnVjdGlvbik7CkBAIC0zNjUsNiArMzY5LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKICAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRl
ciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7CiAg
ICAgICAgIG1fYnl0ZWNvZGVPZmZzZXQgPSBpdGVyLT50bzsKIAorICAgICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29k
ZU9mZnNldCkpOworCiAgICAgICAgIHVuc2lnbmVkIGZpcnN0VG8gPSBtX2J5dGVjb2RlT2Zmc2V0
OwogCiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlv
bnNCZWdpbiArIG1fYnl0ZWNvZGVPZmZzZXQ7CkBAIC01MTksNiArNTI1LDggQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICBtX2NvbXBpbGF0aW9uLT5h
ZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVC
bG9jayk7CiAgICAgfQogICAgIAorICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVu
ZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbigwLCBudWxscHRyKSk7CisKICAgICBpZiAobV9kaXNh
c3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbCgp
KTsKIApAQCAtNTcxLDYgKzU3OSw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNv
bXBpbGUoSkkKICAgICAKICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNz
ZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOworICAgIG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpk
ZWZhdWx0Q29kZU9yaWdpbigpKTsKIAogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAg
ICBtX2J5dGVjb2RlT2Zmc2V0ID0gMDsKQEAgLTYxMiw2ICs2MjEsOCBAQCBDb21waWxhdGlvblJl
c3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgCiAgICAgaWYgKG1fZGlzYXNzZW1ibGVy
KQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOworICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKKwogCiAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpOwogICAgIGlmIChw
YXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQpAQCAtNzA4LDYgKzcxOSw5IEBAIENvbXBp
bGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwog
ICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29t
cGlsYXRpb24pOwogICAgIH0KKworICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5k
aWRCdWlsZE1hcHBpbmcoKSkKKyAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2lu
TWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcikpOwogICAgIAogICAgIENvZGVSZWYgcmVz
dWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCkBAIC03MTYsNyArNzMw
LDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIG1fdm0t
Pm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5hZGQoCiAgICAg
ICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwogICAgICAgICBzdGF0aWNf
Y2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKLSAgICAK
KwogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwog
ICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0
SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBA
QAogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRl
ICJTYW1wbGluZ1Rvb2wuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1
ZGUgIlVudXNlZFBvaW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05MTMsNiArOTE0LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdlYWtSYW5kb20gbV9yYW5kb21HZW5lcmF0b3I7
CiAgICAgICAgIHN0YXRpYyBDb2RlUmVmIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihWTSop
OwogCisgICAgICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciBtX3BjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcjsKKwogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7CiAgICAgICAgIGJvb2wg
bV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9m
aWxpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMTk1
NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaW5jbHVkZSAiQXJpdHlDaGVja01vZGUuaCIKICNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAi
RGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xOTUsNiArMTk3LDcgQEAg
cHVibGljOgogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2aXJ0dWFsIFJlZ2lzdGVyU2V0IGxpdmVS
ZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayos
IENhbGxTaXRlSW5kZXgpOworICAgIHZpcnR1YWwgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBD
KENvZGVCbG9jayosIHZvaWQqIHBjKSB7IFVOVVNFRF9QQVJBTShwYyk7IHJldHVybiBOdWxsb3B0
OyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UENUb0NvZGVPcmlnaW5NYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisK
KyNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsKKwor
Y2xhc3MgRGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIgeworcHVibGljOgorICAgIERlbHRhQ29tcHJl
c3Npb25CdWlsZGVyKHNpemVfdCBtYXhTaXplKQorICAgICAgICA6IG1fb2Zmc2V0KDApCisgICAg
ICAgICwgbV9tYXhTaXplKG1heFNpemUpCisgICAgeworICAgICAgICBtX2J1ZmZlciA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKG1fbWF4U2l6ZSkpOworICAgIH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHZvaWQgd3JpdGUoVCBpdGVtKQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9vZmZzZXQgKyBzaXplb2YoVCkgPD0gbV9tYXhTaXplKTsKKyAg
ICAgICAgKmJpdHdpc2VfY2FzdDxUKj4obV9idWZmZXIgKyBtX29mZnNldCkgPSBpdGVtOworICAg
ICAgICBtX29mZnNldCArPSBzaXplb2YoVCk7CisgICAgfQorCisgICAgdWludDhfdCogbV9idWZm
ZXI7IAorICAgIHNpemVfdCBtX29mZnNldDsKKyAgICBzaXplX3QgbV9tYXhTaXplOworfTsKKwor
Y2xhc3MgRGVsdGFDb21wcmVzc2Vpb25SZWFkZXIgeworcHVibGljOgorICAgIERlbHRhQ29tcHJl
c3NlaW9uUmVhZGVyKHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCisgICAgICAgIDogbV9i
dWZmZXIoYnVmZmVyKQorICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgICAgICAsIG1fb2Zmc2V0
KDApCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBUIHJlYWQoKQor
ICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9vZmZzZXQgKyBzaXplb2YoVCkgPD0gbV9z
aXplKTsKKyAgICAgICAgVCByZXN1bHQgPSAqYml0d2lzZV9jYXN0PFQqPihtX2J1ZmZlciArIG1f
b2Zmc2V0KTsKKyAgICAgICAgbV9vZmZzZXQgKz0gc2l6ZW9mKFQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90KiBtX2J1ZmZlcjsKKyAgICBz
aXplX3QgbV9zaXplOworICAgIHNpemVfdCBtX29mZnNldDsKK307CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCitQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcihWTSYgdm0pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9zaG91bGRCdWlsZE1hcHBp
bmcodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKQoreyB9CisKK1BDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcjo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlciYmIG90aGVyKQorICAgIDogbV92bShvdGhlci5tX3ZtKQorICAgICwgbV9j
b2RlUmFuZ2VzKFdURk1vdmUob3RoZXIubV9jb2RlUmFuZ2VzKSkKKyAgICAsIG1fc2hvdWxkQnVp
bGRNYXBwaW5nKG90aGVyLm1fc2hvdWxkQnVpbGRNYXBwaW5nKQoreyB9CisKKyNpZiBGVExfVVNF
U19CMworUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIo
Vk0mIHZtLCBCMzo6UENUb09yaWdpbk1hcCYmIGIzUENUb09yaWdpbk1hcCkKKyAgICA6IG1fdm0o
dm0pCisgICAgLCBtX3Nob3VsZEJ1aWxkTWFwcGluZyh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVP
cmlnaW5NYXBwaW5nKCkpCit7CisgICAgaWYgKCFtX3Nob3VsZEJ1aWxkTWFwcGluZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZm9yIChjb25zdCBCMzo6UENUb09yaWdpbk1hcDo6T3JpZ2luUmFu
Z2UmIG9yaWdpblJhbmdlIDogYjNQQ1RvT3JpZ2luTWFwLnJhbmdlcygpKSB7CisgICAgICAgIERG
Rzo6Tm9kZSogbm9kZSA9IGJpdHdpc2VfY2FzdDxERkc6Ok5vZGUqPihvcmlnaW5SYW5nZS5vcmln
aW4uZGF0YSgpKTsKKyAgICAgICAgaWYgKG5vZGUpCisgICAgICAgICAgICBhcHBlbmRJdGVtKG9y
aWdpblJhbmdlLmxhYmVsLCBub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBhcHBlbmRJdGVtKG9yaWdpblJhbmdlLmxhYmVsLCBQQ1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lk
IFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6YXBwZW5kSXRlbShNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbGFiZWwsIGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCit7CisgICAgaWYgKCFtX3No
b3VsZEJ1aWxkTWFwcGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29kZVJhbmdl
cy5zaXplKCkpIHsKKyAgICAgICAgaWYgKG1fY29kZVJhbmdlcy5sYXN0KCkuZW5kID09IGxhYmVs
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2NvZGVSYW5nZXMubGFzdCgpLmVuZCA9
IGxhYmVsOworICAgICAgICBpZiAobV9jb2RlUmFuZ2VzLmxhc3QoKS5jb2RlT3JpZ2luID09IGNv
ZGVPcmlnaW4gfHwgIWNvZGVPcmlnaW4pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9jb2RlUmFuZ2VzLmFwcGVuZChDb2RlUmFuZ2V7bGFiZWwsIGxhYmVsLCBjb2RlT3JpZ2lu
fSk7Cit9CisKKworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2VudGluZWxQQ0RlbHRhID0gMDsKK3N0
YXRpYyBjb25zdCBpbnQ4X3Qgc2VudGluZWxCeXRlY29kZURlbHRhID0gMDsKKworUENUb0NvZGVP
cmlnaW5NYXA6OlBDVG9Db2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYmIGJ1
aWxkZXIsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoYnVp
bGRlci5kaWRCdWlsZE1hcHBpbmcoKSk7CisKKyAgICBpZiAoIWJ1aWxkZXIubV9jb2RlUmFuZ2Vz
LnNpemUoKSkgeworICAgICAgICBtX3BjUmFuZ2VTdGFydCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludHB0cl90Pjo6bWF4KCk7CisgICAgICAgIG1fcGNSYW5nZUVuZCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludHB0cl90Pjo6bWF4KCk7CisKKyAgICAgICAgbV9jb21wcmVzc2VkUENCdWZmZXJT
aXplID0gMDsKKyAgICAgICAgbV9jb21wcmVzc2VkUENzID0gbnVsbHB0cjsKKworICAgICAgICBt
X2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemUgPSAwOworICAgICAgICBtX2NvbXByZXNzZWRDb2Rl
T3JpZ2lucyA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdl
IGRvIGEgZmluYWwgdG91Y2gtdXAgb24gdGhlIGxhc3QgcmFuZ2UgaGVyZSBiZWNhdXNlIG9mIGhv
dyB3ZSBnZW5lcmF0ZSB0aGUgdGFibGUuCisgICAgLy8gVGhlIGZpbmFsIHJhbmdlIChpZiBub24g
ZW1wdHkpIHdvdWxkIGJlIGlnbm9yZWQgaWYgd2UgZGlkbid0IGFwcGVuZCBhbnkgKGFyYml0cmFy
eSkKKyAgICAvLyByYW5nZSBhcyB0aGUgbGFzdCBpdGVtIG9mIHRoZSB2ZWN0b3IuCisgICAgUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2UmIGxhc3QgPSBidWlsZGVyLm1fY29kZVJh
bmdlcy5sYXN0KCk7CisgICAgaWYgKCEobGFzdC5zdGFydCA9PSBsYXN0LmVuZCkpCisgICAgICAg
IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmFwcGVuZChQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNv
ZGVSYW5nZXsgbGFzdC5lbmQsIGxhc3QuZW5kLCBsYXN0LmNvZGVPcmlnaW4gfSk7IC8vIFRoaXMg
cmFuZ2Ugd2lsbCBuZXZlciBhY3R1YWxseSBiZSBmb3VuZCwgYnV0IGl0IGVuc3VyZXMgdGhlIHJl
YWwgbGFzdCByYW5nZSBpcyBmb3VuZC4KKworICAgIERlbHRhQ29tcHJlc3Npb25CdWlsZGVyIHBj
Q29tcHJlc3Nvcigoc2l6ZW9mKHVpbnRwdHJfdCkgKyBzaXplb2YodWludDhfdCkpICogYnVpbGRl
ci5tX2NvZGVSYW5nZXMuc2l6ZSgpKTsKKyAgICB2b2lkKiBsYXN0UENWYWx1ZSA9IG51bGxwdHI7
CisgICAgYXV0byBidWlsZFBDVGFibGUgPSBbJl0gKHZvaWQqIHBjVmFsdWUpIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQocGNWYWx1ZSA+IGxhc3RQQ1ZhbHVlKTsKKyAgICAgICAgdWludHB0cl90
IGRlbHRhID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocGNWYWx1ZSkgLSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihsYXN0UENWYWx1ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlbHRhICE9
IHNlbnRpbmVsUENEZWx0YSk7CisgICAgICAgIGxhc3RQQ1ZhbHVlID0gcGNWYWx1ZTsKKyAgICAg
ICAgaWYgKGRlbHRhID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpIHsKKyAg
ICAgICAgICAgIHBjQ29tcHJlc3Nvci53cml0ZTx1aW50OF90PihzZW50aW5lbFBDRGVsdGEpOwor
ICAgICAgICAgICAgcGNDb21wcmVzc29yLndyaXRlPHVpbnRwdHJfdD4oZGVsdGEpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcGNDb21wcmVzc29yLndyaXRlPHVp
bnQ4X3Q+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGRlbHRhKSk7CisgICAgfTsKKworICAgIERlbHRh
Q29tcHJlc3Npb25CdWlsZGVyIGNvZGVPcmlnaW5Db21wcmVzc29yKChzaXplb2YoaW50cHRyX3Qp
ICsgc2l6ZW9mKGludDhfdCkgKyBzaXplb2YoaW50OF90KSArIHNpemVvZihJbmxpbmVDYWxsRnJh
bWUqKSkgKiBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCkpOworICAgIENvZGVPcmlnaW4gbGFz
dENvZGVPcmlnaW4oMCwgbnVsbHB0cik7CisgICAgYXV0byBidWlsZENvZGVPcmlnaW5UYWJsZSA9
IFsmXSAoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikgeworICAgICAgICBpbnRwdHJfdCBk
ZWx0YSA9IHN0YXRpY19jYXN0PGludHB0cl90Pihjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpIC0g
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGxhc3RDb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICBsYXN0Q29kZU9yaWdpbiA9IGNvZGVPcmlnaW47CisgICAgICAgIGlmIChkZWx0YSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWF4KCkgfHwgZGVsdGEgPCBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDhfdD46Om1pbigpIHx8IGRlbHRhID09IHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSkg
eworICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50OF90PihzZW50aW5l
bEJ5dGVjb2RlRGVsdGEpOworICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8
aW50cHRyX3Q+KGRlbHRhKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb2RlT3JpZ2lu
Q29tcHJlc3Nvci53cml0ZTxpbnQ4X3Q+KHN0YXRpY19jYXN0PGludDhfdD4oZGVsdGEpKTsKKwor
ICAgICAgICBpbnQ4X3QgaGFzSW5saW5lQ2FsbEZyYW1lQnl0ZSA9IGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lID8gMSA6IDA7CisgICAgICAgIGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPGlu
dDhfdD4oaGFzSW5saW5lQ2FsbEZyYW1lQnl0ZSk7CisgICAgICAgIGlmIChoYXNJbmxpbmVDYWxs
RnJhbWVCeXRlKQorICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8SW5saW5l
Q2FsbEZyYW1lKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgIH07CisKKyAgICBt
X3BjUmFuZ2VTdGFydCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxpbmtCdWZmZXIubG9jYXRp
b25PZihidWlsZGVyLm1fY29kZVJhbmdlcy5maXJzdCgpLnN0YXJ0KS5kYXRhTG9jYXRpb24oKSk7
CisgICAgbV9wY1JhbmdlRW5kID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obGlua0J1ZmZlci5s
b2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmxhc3QoKS5lbmQpLmRhdGFMb2NhdGlvbigp
KTsKKyAgICBtX3BjUmFuZ2VFbmQgLT0gMTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZSYgY29kZVJhbmdlID0gYnVpbGRlci5tX2NvZGVSYW5n
ZXNbaV07CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVS
YW5nZS5zdGFydCkuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgIHZvaWQqIGVuZCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihjb2RlUmFuZ2UuZW5kKS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAgQVNT
RVJUKG1fcGNSYW5nZVN0YXJ0IDw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSk7Cisg
ICAgICAgIEFTU0VSVChtX3BjUmFuZ2VFbmQgPj0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5k
KSAtIDEpOworICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQorICAgICAgICAgICAgQVNTRVJUKGkg
PT0gYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpIC0gMSk7CisgICAgICAgIGlmIChpID4gMCkK
KyAgICAgICAgICAgIEFTU0VSVChsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYnVpbGRlci5tX2NvZGVS
YW5nZXNbaSAtIDFdLmVuZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3RhcnQpOworCisgICAgICAgIGJ1
aWxkUENUYWJsZShzdGFydCk7CisgICAgICAgIGJ1aWxkQ29kZU9yaWdpblRhYmxlKGNvZGVSYW5n
ZS5jb2RlT3JpZ2luKTsKKyAgICB9CisKKyAgICBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemUgPSBw
Y0NvbXByZXNzb3IubV9vZmZzZXQ7CisgICAgbV9jb21wcmVzc2VkUENzID0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KGZhc3RSZWFsbG9jKHBjQ29tcHJlc3Nvci5tX2J1ZmZlciwgbV9jb21wcmVzc2Vk
UENCdWZmZXJTaXplKSk7CisKKyAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemUgPSBjb2Rl
T3JpZ2luQ29tcHJlc3Nvci5tX29mZnNldDsKKyAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2lucyA9
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhjb2RlT3JpZ2luQ29tcHJlc3Nvci5t
X2J1ZmZlciwgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplKSk7Cit9CisKK1BDVG9Db2RlT3Jp
Z2luTWFwOjp+UENUb0NvZGVPcmlnaW5NYXAoKQoreworICAgIGlmIChtX2NvbXByZXNzZWRQQ3Mp
CisgICAgICAgIGZhc3RGcmVlKG1fY29tcHJlc3NlZFBDcyk7CisgICAgaWYgKG1fY29tcHJlc3Nl
ZENvZGVPcmlnaW5zKQorICAgICAgICBmYXN0RnJlZShtX2NvbXByZXNzZWRDb2RlT3JpZ2lucyk7
Cit9CisKK2RvdWJsZSBQQ1RvQ29kZU9yaWdpbk1hcDo6bWVtb3J5U2l6ZSgpCit7CisgICAgZG91
YmxlIHNpemUgPSAwOworICAgIHNpemUgKz0gbV9jb21wcmVzc2VkUENCdWZmZXJTaXplOworICAg
IHNpemUgKz0gbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplOworICAgIHJldHVybiBzaXplOwor
fQorCitPcHRpb25hbDxDb2RlT3JpZ2luPiBQQ1RvQ29kZU9yaWdpbk1hcDo6ZmluZFBDKHZvaWQq
IHBjKSBjb25zdAoreworICAgIHVpbnRwdHJfdCBwY0FzSW50ID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4ocGMpOworICAgIGlmICghKG1fcGNSYW5nZVN0YXJ0IDw9IHBjQXNJbnQgJiYgcGNBc0lu
dCA8PSBtX3BjUmFuZ2VFbmQpKQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKworICAgIHVpbnRw
dHJfdCBjdXJyZW50UEMgPSAwOworICAgIENvZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oMCwg
bnVsbHB0cik7CisKKyAgICBEZWx0YUNvbXByZXNzZWlvblJlYWRlciBwY1JlYWRlcihtX2NvbXBy
ZXNzZWRQQ3MsIG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZSk7CisgICAgRGVsdGFDb21wcmVzc2Vp
b25SZWFkZXIgY29kZU9yaWdpblJlYWRlcihtX2NvbXByZXNzZWRDb2RlT3JpZ2lucywgbV9jb21w
cmVzc2VkQ29kZU9yaWdpbnNTaXplKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB1aW50
cHRyX3QgcHJldmlvdXNQQyA9IGN1cnJlbnRQQzsKKyAgICAgICAgeworICAgICAgICAgICAgdWlu
dDhfdCB2YWx1ZSA9IHBjUmVhZGVyLnJlYWQ8dWludDhfdD4oKTsKKyAgICAgICAgICAgIHVpbnRw
dHJfdCBkZWx0YTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBzZW50aW5lbFBDRGVsdGEpCisg
ICAgICAgICAgICAgICAgZGVsdGEgPSBwY1JlYWRlci5yZWFkPHVpbnRwdHJfdD4oKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZWx0YSA9IHZhbHVlOworICAgICAgICAgICAg
Y3VycmVudFBDICs9IGRlbHRhOworICAgICAgICB9CisKKyAgICAgICAgQ29kZU9yaWdpbiBwcmV2
aW91c09yaWdpbiA9IGN1cnJlbnRDb2RlT3JpZ2luOworICAgICAgICB7CisgICAgICAgICAgICBp
bnQ4X3QgdmFsdWUgPSBjb2RlT3JpZ2luUmVhZGVyLnJlYWQ8aW50OF90PigpOworICAgICAgICAg
ICAgaW50cHRyX3QgZGVsdGE7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gc2VudGluZWxCeXRl
Y29kZURlbHRhKQorICAgICAgICAgICAgICAgIGRlbHRhID0gY29kZU9yaWdpblJlYWRlci5yZWFk
PGludHB0cl90PigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRlbHRhID0g
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKKworICAgICAgICAgICAgY3VycmVudENvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0aWNfY2FzdDxp
bnRwdHJfdD4oY3VycmVudENvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkgKyBkZWx0YSk7CisKKyAg
ICAgICAgICAgIGludDhfdCBoYXNJbmxpbmVGcmFtZSA9IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxp
bnQ4X3Q+KCk7CisgICAgICAgICAgICBBU1NFUlQoaGFzSW5saW5lRnJhbWUgPT0gMCB8fCBoYXNJ
bmxpbmVGcmFtZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChoYXNJbmxpbmVGcmFtZSkKKyAgICAg
ICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2lu
UmVhZGVyLnJlYWQ8SW5saW5lQ2FsbEZyYW1lKj4oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHByZXZpb3VzUEMpIHsKKyAgICAgICAgICAgIHVpbnRw
dHJfdCBzdGFydE9mUmFuZ2UgPSBwcmV2aW91c1BDOworICAgICAgICAgICAgLy8gV2Ugc3VidHJh
Y3QgMSBiZWNhdXNlIHdlIGdlbmVyYXRlIGVuZCBwb2ludHMgaW5jbHVzaXZlbHkgaW4gdGhpcyB0
YWJsZSwgZXZlbiB0aG91Z2ggd2UgYXJlIGludGVyZXN0ZWQgaW4gcmFuZ2VzIG9mIHRoZSBmb3Jt
OiBbcHJldmlvdXNQQywgY3VycmVudFBDKQorICAgICAgICAgICAgdWludHB0cl90IGVuZE9mUmFu
Z2UgPSBjdXJyZW50UEMgLSAxOworICAgICAgICAgICAgaWYgKHN0YXJ0T2ZSYW5nZSA8PSBwY0Fz
SW50ICYmIHBjQXNJbnQgPD0gZW5kT2ZSYW5nZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0
aW9uYWw8Q29kZU9yaWdpbj4ocHJldmlvdXNPcmlnaW4pOyAvLyBXZSByZXR1cm4gcHJldmlvdXNP
cmlnaW4gaGVyZSBiZWNhdXNlIENvZGVPcmlnaW4ncyBhcmUgbWFwcGVkIHRvIHRoZSBzdGFydFZh
bHVlIG9mIHRoZSByYW5nZS4KKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5N
YXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVP
cmlnaW5NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBDVG9Db2RlT3JpZ2lu
TWFwX2gKKyNkZWZpbmUgUENUb0NvZGVPcmlnaW5NYXBfaAorCisjaW5jbHVkZSAiQ29kZU9yaWdp
bi5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgi
CisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBGVExfVVNFU19CMworbmFtZXNwYWNl
IEIzIHsKKyAgICBjbGFzcyBQQ1RvT3JpZ2luTWFwOworfQorI2VuZGlmCisKK2NsYXNzIExpbmtC
dWZmZXI7CitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CisKK2NsYXNzIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKTsKKyAgICBmcmllbmQgY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CisKK3B1
YmxpYzoKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoVk0mKTsKKyAgICBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiYgb3RoZXIpOworCisjaWYg
RlRMX1VTRVNfQjMKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoVk0mLCBCMzo6UENUb09y
aWdpbk1hcCYmKTsKKyNlbmRpZgorCisgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCwgY29uc3QgQ29kZU9yaWdpbiYpOworICAgIHN0YXRpYyBDb2RlT3JpZ2luIGRlZmF1
bHRDb2RlT3JpZ2luKCkgeyByZXR1cm4gQ29kZU9yaWdpbigwLCBudWxscHRyKTsgfQorCisgICAg
Ym9vbCBkaWRCdWlsZE1hcHBpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEJ1aWxkTWFwcGlu
ZzsgfQorCitwcml2YXRlOgorCisgICAgc3RydWN0IENvZGVSYW5nZSB7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBzdGFydDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGVu
ZDsKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOworICAgIH07CisKKyAgICBWTSYgbV92
bTsKKyAgICBWZWN0b3I8Q29kZVJhbmdlPiBtX2NvZGVSYW5nZXM7CisgICAgYm9vbCBtX3Nob3Vs
ZEJ1aWxkTWFwcGluZzsKK307CisKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQQ1RvQ29kZU9yaWdpbk1hcCk7CitwdWJsaWM6CisgICAgUENUb0Nv
ZGVPcmlnaW5NYXAoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiYsIExpbmtCdWZmZXImKTsKKyAg
ICB+UENUb0NvZGVPcmlnaW5NYXAoKTsKKworICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQ
Qyh2b2lkKiBwYykgY29uc3Q7CisKKyAgICBkb3VibGUgbWVtb3J5U2l6ZSgpOworCitwcml2YXRl
OgorICAgIHNpemVfdCBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemU7CisgICAgc2l6ZV90IG1fY29t
cHJlc3NlZENvZGVPcmlnaW5zU2l6ZTsKKyAgICB1aW50OF90KiBtX2NvbXByZXNzZWRQQ3M7Cisg
ICAgdWludDhfdCogbV9jb21wcmVzc2VkQ29kZU9yaWdpbnM7CisgICAgdWludHB0cl90IG1fcGNS
YW5nZVN0YXJ0OworICAgIHVpbnRwdHJfdCBtX3BjUmFuZ2VFbmQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFBDVG9Db2RlT3JpZ2luTWFwX2ggCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRQQ1Jhbmdlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFBDUmFuZ2VzLmgJKHJldmlzaW9uIDE5NTU3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFBDUmFuZ2VzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDYgKzQ1LDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0xMSW50UEModm9p
ZCogcGMpCiAgICAgcmV0dXJuIGxsaW50U3RhcnQgPD0gcGNBc0ludCAmJiBwY0FzSW50IDw9IGxs
aW50RW5kOwogfQogCisjaWYgRU5BQkxFKEpJVCkKK3N0YXRpYyBjb25zdCBHUFJSZWcgTExJbnRQ
QyA9IEdQUkluZm86OnJlZ1Q0OworI2VuZGlmCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTElu
dAogCiAjZW5kaWYgLy8gTExJbnRQQ1Jhbmdlc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxOTU1
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsNyBAQCBpZiBKU1ZBTFVFNjQKICAgICAj
IC0gVGhlIFBDIGJhc2UgKG9yIFBCIGZvciBzaG9ydCkgbXVzdCBiZSBzdG9yZWQgaW4gYSBjYWxs
ZWUtc2F2ZSByZWdpc3Rlci4KICAgICAjIC0gQyBjYWxscyBhcmUgc3RpbGwgZ2l2ZW4gdGhlIElu
c3RydWN0aW9uKiByYXRoZXIgdGhhbiB0aGUgUEMgaW5kZXguCiAgICAgIyAgIFRoaXMgcmVxdWly
ZXMgYW4gYWRkIGJlZm9yZSB0aGUgY2FsbCwgYW5kIGEgc3ViIGFmdGVyLgotICAgIGNvbnN0IFBD
ID0gdDQKKyAgICBjb25zdCBQQyA9IHQ0ICMgV2hlbiBjaGFuZ2luZyB0aGlzLCBtYWtlIHN1cmUg
TExJbnRQQyBpcyB1cCB0byBkYXRlIGluIExMSW50UENSYW5nZXMuaAogICAgIGlmIEFSTTY0CiAg
ICAgICAgIGNvbnN0IFBCID0gY3NyNwogICAgICAgICBjb25zdCB0YWdUeXBlTnVtYmVyID0gY3Ny
OApAQCAtMjkwLDcgKzI5MCw3IEBAIGlmIEpTVkFMVUU2NAogICAgIGVuZAogCiBlbHNlCi0gICAg
Y29uc3QgUEMgPSB0NAorICAgIGNvbnN0IFBDID0gdDQgIyBXaGVuIGNoYW5naW5nIHRoaXMsIG1h
a2Ugc3VyZSBMTEludFBDIGlzIHVwIHRvIGRhdGUgaW4gTExJbnRQQ1Jhbmdlcy5oCiAgICAgbWFj
cm8gbG9hZGlzRnJvbUluc3RydWN0aW9uKG9mZnNldCwgZGVzdCkKICAgICAgICAgbG9hZGlzIG9m
ZnNldCAqIDRbUENdLCBkZXN0CiAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMTk1NTc3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJMTEludFBDUmFuZ2VzLmgi
CiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgor
I2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIK
ICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgpAQCAtNDks
NyArNTAsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBkb3VibGUgc051bVRvdGFsU3Rh
Y2tUcmFjZXMgPSAwOwotc3RhdGljIGRvdWJsZSBzTnVtVW52ZXJpZmllZFN0YWNrVHJhY2VzID0g
MDsKIHN0YXRpYyBkb3VibGUgc051bVRvdGFsV2Fsa3MgPSAwOwogc3RhdGljIGRvdWJsZSBzTnVt
RmFpbGVkV2Fsa3MgPSAwOwogc3RhdGljIGNvbnN0IHVpbnQzMl90IHNOdW1XYWxrUmVwb3J0aW5n
RnJlcXVlbmN5ID0gNTA7CkBAIC01OCw2ICs1OCw4IEBAIHN0YXRpYyBjb25zdCBib29sIHNSZXBv
cnRTdGF0c09ubHlXaGVuVGgKIHN0YXRpYyBjb25zdCBib29sIHNSZXBvcnRTdGF0cyA9IGZhbHNl
OwogCiB1c2luZyBGcmFtZVR5cGUgPSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU7Cit1c2lu
ZyBVbnByb2Nlc3NlZEZyYW1lVHlwZSA9IFNhbXBsaW5nUHJvZmlsZXI6OlVucHJvY2Vzc2VkRnJh
bWVUeXBlOwordXNpbmcgVW5wcm9jZXNzZWRTdGFja0ZyYW1lID0gU2FtcGxpbmdQcm9maWxlcjo6
VW5wcm9jZXNzZWRTdGFja0ZyYW1lOwogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHJlcG9y
dFN0YXRzKCkKIHsKQEAgLTY1LDggKzY3LDYgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBy
ZXBvcnRTdGF0cygpCiAgICAgICAgIGlmICghc1JlcG9ydFN0YXRzT25seVdoZW5UaGV5cmVBYm92
ZVRocmVzaG9sZCB8fCAoc051bUZhaWxlZFdhbGtzIC8gc051bVRvdGFsV2Fsa3MgPiBzV2Fsa0Vy
cm9yUGVyY2VudGFnZSkpIHsKICAgICAgICAgICAgIGRhdGFMb2dGKCJOdW0gdG90YWwgd2Fsa3M6
ICVsbHUuIEZhaWxlZCB3YWxrcyBwZXJjZW50OiAlbGZcbiIsCiAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHNOdW1Ub3RhbFdhbGtzKSwgc051bUZhaWxlZFdhbGtzIC8gc051
bVRvdGFsV2Fsa3MpOwotICAgICAgICAgICAgZGF0YUxvZ0YoIlRvdGFsIHN0YWNrIHRyYWNlczog
JWxsdS4gTmVlZHMgdmVyaWZpY2F0aW9uIHBlcmNlbnQ6ICVsZlxuIiwKLSAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc051bVRvdGFsU3RhY2tUcmFjZXMpLCBzTnVtVW52ZXJp
ZmllZFN0YWNrVHJhY2VzIC8gc051bVRvdGFsU3RhY2tUcmFjZXMpOwogICAgICAgICB9CiAgICAg
fQogfQpAQCAtODIsMzMgKzgyLDIwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgc2l6
ZV90IHdhbGsoVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU+JiBzdGFja1RyYWNl
LCBib29sJiBkaWRSdW5PdXRPZlNwYWNlLCBib29sJiBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRp
b24pCisgICAgc2l6ZV90IHdhbGsoVmVjdG9yPFVucHJvY2Vzc2VkU3RhY2tGcmFtZT4mIHN0YWNr
VHJhY2UsIGJvb2wmIGRpZFJ1bk91dE9mU3BhY2UpCiAgICAgewotICAgICAgICBzdGFja3RyYWNl
TmVlZHNWZXJpZmljYXRpb24gPSBmYWxzZTsKICAgICAgICAgaWYgKHNSZXBvcnRTdGF0cykKICAg
ICAgICAgICAgIHNOdW1Ub3RhbFdhbGtzKys7CiAgICAgICAgIHJlc2V0QXRNYWNoaW5lRnJhbWUo
KTsKICAgICAgICAgc2l6ZV90IG1heFN0YWNrVHJhY2VTaXplID0gc3RhY2tUcmFjZS5zaXplKCk7
CiAgICAgICAgIHdoaWxlICghaXNBdFRvcCgpICYmICFtX2JhaWxpbmdPdXQgJiYgbV9kZXB0aCA8
IG1heFN0YWNrVHJhY2VTaXplKSB7Ci0gICAgICAgICAgICB3aGlsZSAobV9pbmxpbmVDYWxsRnJh
bWUgJiYgbV9kZXB0aCA8IG1heFN0YWNrVHJhY2VTaXplKSB7Ci0gICAgICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2su
Z2V0KCk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZENvZGVCbG9jayhj
b2RlQmxvY2spKTsKLSAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gU2FtcGxp
bmdQcm9maWxlcjo6U3RhY2tGcmFtZShTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU6OlZlcmlm
aWVkRXhlY3V0YWJsZSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7Ci0gICAgICAgICAg
ICAgICAgbV9kZXB0aCsrOwotICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gbV9p
bmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChtX2RlcHRoID49IG1heFN0YWNrVHJhY2VTaXplKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgICAgIGlmIChpc1ZhbGlkQ29kZUJs
b2NrKGNvZGVCbG9jaykpIHsKLSAgICAgICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0
YWJsZSA9IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7Ci0gICAgICAgICAgICAgICAgc3Rh
Y2tUcmFjZVttX2RlcHRoXSA9IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWUoRnJhbWVUeXBl
OjpWZXJpZmllZEV4ZWN1dGFibGUsZXhlY3V0YWJsZSk7CisgICAgICAgICAgICBpZiAoQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCkpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaXNWYWxpZENvZGVCbG9jayhjb2RlQmxvY2spKTsKKyAgICAgICAgICAgICAg
ICBzdGFja1RyYWNlW21fZGVwdGhdID0gVW5wcm9jZXNzZWRTdGFja0ZyYW1lKGNvZGVCbG9jaywg
bV9jYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbiA9IHRydWU7CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrID09IG51bGxwdHIpOwogICAgICAgICAg
ICAgICAgIEpTVmFsdWUgdW5zYWZlQ2FsbGVlID0gbV9jYWxsRnJhbWUtPnVuc2FmZUNhbGxlZSgp
OwotICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0gPSBTYW1wbGluZ1Byb2ZpbGVy
OjpTdGFja0ZyYW1lKEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSwgSlNWYWx1ZTo6ZW5jb2Rl
KHVuc2FmZUNhbGxlZSkpOworICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0gPSBV
bnByb2Nlc3NlZFN0YWNrRnJhbWUoSlNWYWx1ZTo6ZW5jb2RlKHVuc2FmZUNhbGxlZSkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgbV9kZXB0aCsrOwogICAgICAgICAgICAgYWR2YW5jZVRv
UGFyZW50RnJhbWUoKTsKQEAgLTEzOCw4ICsxMjUsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBy
ZXNldEF0TWFjaGluZUZyYW1lKCkKICAgICB7Ci0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0g
bnVsbHB0cjsKLQogICAgICAgICBpZiAoaXNBdFRvcCgpKQogICAgICAgICAgICAgcmV0dXJuOwog
CkBAIC0xNTEsOSArMTM2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIC8vIElmIHRoZSBmcmFtZSBkb2Vz
bid0IGhhdmUgYSBjb2RlIGJsb2NrLCB0aGVuIGl0J3Mgbm90IGEgCi0gICAgICAgIC8vIERGRy9G
VEwgZnJhbWUgd2hpY2ggbWVhbnMgd2UncmUgbm90IGFuIGlubGluZWQgZnJhbWUuCiAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAg
ICBpZiAoIWNvZGVCbG9jaykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2NCwyNSArMTQ2LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzTnVtRmFpbGVkV2Fsa3MrKzsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBjb2RlIGJsb2NrIGRv
ZXMgbm90IGhhdmUgYW55IGNvZGUgb3JpZ2lucywgdGhlbiB0aGVyZSdzIG5vCi0gICAgICAgIC8v
IGlubGluaW5nLiBIZW5jZSwgd2UncmUgbm90IGF0IGFuIGlubGluZWQgZnJhbWUuCi0gICAgICAg
IGlmICghY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIENhbGxTaXRlSW5kZXggaW5kZXggPSBtX2NhbGxGcmFtZS0+Y2FsbFNpdGVJbmRl
eCgpOwotICAgICAgICBpZiAoIWNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRleCkpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOgotICAgICAgICAgICAgLy8gRm9yIHRoZSBtb3N0IHBhcnQs
IHdlIG9ubHkgZmFpbCBoZXJlIHdoZW4gd2UncmUgbG9va2luZwotICAgICAgICAgICAgLy8gYXQg
dGhlIHRvcCBtb3N0IGNhbGwgZnJhbWUuIEFsbCBvdGhlciBwYXJlbnQgY2FsbCBmcmFtZXMKLSAg
ICAgICAgICAgIC8vIHNob3VsZCBoYXZlIHNldCB0aGUgQ2FsbFNpdGVJbmRleCB3aGVuIG1ha2lu
ZyBhIGNhbGwuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHJlc29y
dCB0byBnZXR0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIFBDPT5Db2RlT3JpZ2luIG1hcHBpbmcK
LSAgICAgICAgICAgIC8vIG9uY2Ugd2UgaW1wbGVtZW50IGl0OiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNjI5Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSBjb2RlQmxvY2stPmNvZGVPcmlnaW4oaW5k
ZXgpLmlubGluZUNhbGxGcmFtZTsKLSNlbmRpZiAvLyAhRU5BQkxFKERGR19KSVQpCiAgICAgfQog
CiAgICAgYm9vbCBpc1ZhbGlkRnJhbWVQb2ludGVyKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTIxMywx
NCArMTc2LDEyIEBAIHByaXZhdGU6CiAgICAgY29uc3QgTG9ja0hvbGRlciYgbV9jb2RlQmxvY2tT
ZXRMb2NrZXI7CiAgICAgY29uc3QgTG9ja0hvbGRlciYgbV9tYWNoaW5lVGhyZWFkc0xvY2tlcjsK
ICAgICBib29sIG1fYmFpbGluZ091dCB7IGZhbHNlIH07Ci0gICAgSW5saW5lQ2FsbEZyYW1lKiBt
X2lubGluZUNhbGxGcmFtZTsKICAgICBzaXplX3QgbV9kZXB0aCB7IDAgfTsKIH07CiAKIFNhbXBs
aW5nUHJvZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIoVk0mIHZtLCBSZWZQdHI8U3RvcHdhdGNoPiYm
IHN0b3B3YXRjaCkKICAgICA6IG1fdm0odm0pCiAgICAgLCBtX3N0b3B3YXRjaChXVEZNb3ZlKHN0
b3B3YXRjaCkpCi0gICAgLCBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5KDApCiAgICAg
LCBtX3RpbWluZ0ludGVydmFsKHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMTAwMCkpCiAgICAg
LCBtX3RvdGFsVGltZSgwKQogICAgICwgbV90aW1lclF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJq
c2Muc2FtcGxpbmctcHJvZmlsZXIucXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCwgV29y
a1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZSkpCkBAIC0yNTYsMjMgKzIxNywyNyBAQCBTYW1w
bGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2CiAgICAgICAgICAgICAgICAgLy8g
V2hpbGUgdGhlIEpTQyB0aHJlYWQgaXMgc3VzcGVuZGVkLCB3ZSBjYW4ndCBkbyB0aGluZ3MgbGlr
ZSBtYWxsb2MgYmVjYXVzZSB0aGUgSlNDIHRocmVhZAogICAgICAgICAgICAgICAgIC8vIG1heSBi
ZSBob2xkaW5nIHRoZSBtYWxsb2MgbG9jay4KICAgICAgICAgICAgICAgICBFeGVjU3RhdGUqIGNh
bGxGcmFtZTsKLSAgICAgICAgICAgICAgICB2b2lkKiBwYzsKKyAgICAgICAgICAgICAgICB2b2lk
KiBtYWNoaW5lUEM7CisgICAgICAgICAgICAgICAgYm9vbCB0b3BGcmFtZUlzTExJbnQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB2b2lkKiBsbGludFBDOwogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lz
dGVyczsKICAgICAgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmdldFJlZ2lz
dGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBzdGF0aWNf
Y2FzdDxFeGVjU3RhdGUqPihyZWdpc3RlcnMuZnJhbWVQb2ludGVyKCkpOwotICAgICAgICAgICAg
ICAgICAgICBwYyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbWFjaGluZVBDID0gcmVnaXN0ZXJzLmluc3RydWN0aW9uUG9pbnRlcigpOworICAg
ICAgICAgICAgICAgICAgICBsbGludFBDID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKICAgICAgICAg
ICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJz
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2
ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hlbiB3ZSdyZSBwYXJzaW5nIGNvZGUuCiAgICAgICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQot
ICAgICAgICAgICAgICAgIGlmIChtX3ZtLmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZEV4ZWN1
dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlciwgcGMpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fdm0uZXhlY3V0YWJsZUFsbG9jYXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9y
eShleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyLCBtYWNoaW5lUEMpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX3ZtLmlzRXhlY3V0aW5nSW5SZWdFeHBKSVQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSdyZSBleGVjdXRpbmcgYSByZWdleHAuIExldHMgZ2F0aGVy
IG1vcmUgaW50ZXJzdGluZyBkYXRhLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjcyOQogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbEZyYW1lID0gbV92bS50b3BDYWxsRnJhbWU7IC8vIFdlIG5lZWQgdG8gZG8g
dGhpcyBvciBlbHNlIHdlJ2QgZmFpbCBvdXIgYmFja3RyYWNlIHZhbGlkYXRpb24gYi9jIHRoaXMg
aXNuJ3QgYSBKUyBmcmFtZS4KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoTExJbnQ6OmlzTExJbnRQQyhwYykpIHsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKExMSW50Ojppc0xMSW50UEMobWFjaGluZVBDKSkgeworICAgICAgICAgICAgICAgICAg
ICB0b3BGcmFtZUlzTExJbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBv
a2F5IHRvIHRha2UgYSBub3JtYWwgc3RhY2sgdHJhY2Ugd2hlbiB0aGUgUEMKICAgICAgICAgICAg
ICAgICAgICAgLy8gaXMgaW4gTExJbnQgY29kZS4KICAgICAgICAgICAgICAgICB9IGVsc2UgewpA
QCAtMjg0LDEwICsyNDksOSBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZN
JiB2CiAgICAgICAgICAgICAgICAgc2l6ZV90IHdhbGtTaXplOwogICAgICAgICAgICAgICAgIGJv
b2wgd2FzVmFsaWRXYWxrOwogICAgICAgICAgICAgICAgIGJvb2wgZGlkUnVuT3V0T2ZWZWN0b3JT
cGFjZTsKLSAgICAgICAgICAgICAgICBib29sIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbjsK
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIEZyYW1lV2Fsa2VyIHdhbGtl
cihjYWxsRnJhbWUsIG1fdm0sIGNvZGVCbG9ja1NldExvY2tlciwgbWFjaGluZVRocmVhZHNMb2Nr
ZXIpOwotICAgICAgICAgICAgICAgICAgICB3YWxrU2l6ZSA9IHdhbGtlci53YWxrKG1fY3VycmVu
dEZyYW1lcywgZGlkUnVuT3V0T2ZWZWN0b3JTcGFjZSwgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgd2Fsa1NpemUgPSB3YWxrZXIud2FsayhtX2N1cnJl
bnRGcmFtZXMsIGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UpOwogICAgICAgICAgICAgICAgICAgICB3
YXNWYWxpZFdhbGsgPSB3YWxrZXIud2FzVmFsaWRXYWxrKCk7CiAgICAgICAgICAgICAgICAgfQog
CkBAIC0yOTgsMjEgKzI2MiwxNiBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVy
KFZNJiB2CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0J2QgYmUgaW50ZXJlc3RpbmcgdG8g
dGFrZSBkYXRhIGFib3V0IHRoZSBwcm9ncmFtJ3Mgc3RhdGUgd2hlbgogICAgICAgICAgICAgICAg
IC8vIHdlIGZhaWwgdG8gdGFrZSBhIHN0YWNrIHRyYWNlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzU4CiAgICAgICAgICAgICAgICAgaWYgKHdhc1ZhbGlkV2Fs
ayAmJiB3YWxrU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc1JlcG9ydFN0YXRzKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzUmVwb3J0U3RhdHMpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBzTnVtVG90YWxTdGFja1RyYWNlcysrOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzTnVtVW52ZXJpZmllZFN0YWNrVHJhY2VzKys7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7CisgICAg
ICAgICAgICAgICAgICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7
CiAgICAgICAgICAgICAgICAgICAgIHN0YWNrVHJhY2UucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh3
YWxrU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Fs
a1NpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZSBmcmFtZSA9
IG1fY3VycmVudEZyYW1lc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrVHJhY2Uu
dW5jaGVja2VkQXBwZW5kKGZyYW1lKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJh
bWUuZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc2VlbkV4ZWN1dGFibGVzLmFkZChmcmFtZS51LnZlcmlmaWVk
RXhlY3V0YWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJh
bWUgZnJhbWUgPSBtX2N1cnJlbnRGcmFtZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBz
dGFja1RyYWNlLnVuY2hlY2tlZEFwcGVuZChmcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICBtX3N0YWNrVHJhY2VzLmFwcGVuZChTdGFja1RyYWNleyBz
dGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24sIG5vd1RpbWUsIFdURk1vdmUoc3RhY2tUcmFjZSkg
fSk7CisgICAgICAgICAgICAgICAgICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5hcHBlbmQo
VW5wcm9jZXNzZWRTdGFja1RyYWNlIHsgbm93VGltZSwgbWFjaGluZVBDLCB0b3BGcmFtZUlzTExJ
bnQsIGxsaW50UEMsIFdURk1vdmUoc3RhY2tUcmFjZSkgfSk7CiAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRGcmFtZXMuZ3JvdyhtX2N1cnJlbnRGcmFtZXMuc2l6ZSgpICogMS4yNSk7CkBAIC0z
MzIsNiArMjkxLDMwIEBAIFNhbXBsaW5nUHJvZmlsZXI6On5TYW1wbGluZ1Byb2ZpbGVyKCkKIHsK
IH0KIAorc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgdHJ5R2V0Qnl0ZWNvZGVJbmRleCh1
bnNpZ25lZCBsbGludFBDLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgYm9vbCYgaXNWYWxpZCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVCghY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKTsKKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IGxsaW50UEM7Cisg
ICAgaWYgKGJ5dGVjb2RlSW5kZXggPCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSkgewor
ICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXg7Cisg
ICAgfQorICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYml0d2lzZV9jYXN0PEluc3RydWN0aW9uKj4obGxpbnRQ
Qyk7CisgICAgaWYgKGluc3RydWN0aW9uID49IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKSAmJiBpbnN0cnVjdGlvbiA8IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAr
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpKSB7CisgICAgICAgIGlzVmFsaWQgPSB0cnVl
OworICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gaW5zdHJ1Y3Rpb24gLSBjb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgICAgIHJldHVybiBieXRlY29kZUluZGV4
OworICAgIH0KKyAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30K
Kwogdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkK
IHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBKU0Mg
ZXhlY3V0aW9uIHRocmVhZC4KQEAgLTM0MCwyMiArMzIzLDMwIEBAIHZvaWQgU2FtcGxpbmdQcm9m
aWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyID0gbV92
bS5oZWFwLm9iamVjdFNwYWNlKCkuYmxvY2tzKCkuZmlsdGVyKCk7CiAgICAgTWFya2VkQmxvY2tT
ZXQmIG1hcmtlZEJsb2NrU2V0ID0gbV92bS5oZWFwLm9iamVjdFNwYWNlKCkuYmxvY2tzKCk7CiAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5OyBp
IDwgbV9zdGFja1RyYWNlcy5zaXplKCk7IGkrKykgewotICAgICAgICBTdGFja1RyYWNlJiBzdGFj
a1RyYWNlID0gbV9zdGFja1RyYWNlc1tpXTsgCi0gICAgICAgIGlmICghc3RhY2tUcmFjZS5uZWVk
c1ZlcmlmaWNhdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGFja1RyYWNl
Lm5lZWRzVmVyaWZpY2F0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChTdGFja0ZyYW1lJiBz
dGFja0ZyYW1lIDogc3RhY2tUcmFjZS5mcmFtZXMpIHsKLSAgICAgICAgICAgIGlmIChzdGFja0Zy
YW1lLmZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpIHsKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFja0ZyYW1lLmZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6
OlZlcmlmaWVkRXhlY3V0YWJsZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgZm9y
IChVbnByb2Nlc3NlZFN0YWNrVHJhY2UmIHVucHJvY2Vzc2VkU3RhY2tUcmFjZSA6IG1fdW5wcm9j
ZXNzZWRTdGFja1RyYWNlcykgeworICAgICAgICBtX3N0YWNrVHJhY2VzLmFwcGVuZChTdGFja1Ry
YWNlKCkpOworICAgICAgICBTdGFja1RyYWNlJiBzdGFja1RyYWNlID0gbV9zdGFja1RyYWNlcy5s
YXN0KCk7CisgICAgICAgIHN0YWNrVHJhY2UudGltZXN0YW1wID0gdW5wcm9jZXNzZWRTdGFja1Ry
YWNlLnRpbWVzdGFtcDsKKworICAgICAgICBhdXRvIGFwcGVuZENvZGVCbG9jayA9IFsmXSAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAg
IHN0YWNrVHJhY2UuZnJhbWVzLmFwcGVuZChTdGFja0ZyYW1lKGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCkpKTsKKworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXggPCBjb2RlQmxvY2st
Pmluc3RydWN0aW9uQ291bnQoKSkgeworICAgICAgICAgICAgICAgIGludCBkaXZvdDsKKyAgICAg
ICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgaW50IGVuZE9mZnNl
dDsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlSW5kZXgsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLmZyYW1lcy5sYXN0KCkubGluZU51bWJlciwgc3Rh
Y2tUcmFjZS5mcmFtZXMubGFzdCgpLmNvbHVtbk51bWJlcik7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX3NlZW5FeGVjdXRhYmxlcy5hZGQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSk7CisgICAgICAgIH07CiAKLSAgICAgICAgICAgIEpTVmFsdWUgY2FsbGVlID0gSlNWYWx1ZTo6
ZGVjb2RlKHN0YWNrRnJhbWUudS51bnZlcmlmaWVkQ2FsbGVlKTsKKyAgICAgICAgYXV0byBhcHBl
bmRVbnZlcmlmaWVkQ2FsbGVlID0gWyZdIChKU1ZhbHVlIGNhbGxlZSkgeworICAgICAgICAgICAg
c3RhY2tUcmFjZS5mcmFtZXMuYXBwZW5kKFN0YWNrRnJhbWUoKSk7CisgICAgICAgICAgICBTdGFj
a0ZyYW1lJiBzdGFja0ZyYW1lID0gc3RhY2tUcmFjZS5mcmFtZXMubGFzdCgpOwogICAgICAgICAg
ICAgaWYgKCFIZWFwOjppc1ZhbHVlR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgY2Fs
bGVlKSkgewogICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gRnJhbWVUeXBl
OjpVbmtub3duOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgSlNDZWxsKiBjYWxsZWVDZWxsID0g
Y2FsbGVlLmFzQ2VsbCgpOwpAQCAtMzcyLDIyICszNjMsODggQEAgdm9pZCBTYW1wbGluZ1Byb2Zp
bGVyOjpwcm9jZXNzVW52ZXJpZmllZAogCiAgICAgICAgICAgICBpZiAoY2FsbGVlQ2VsbC0+dHlw
ZSgpICE9IEpTRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICAgICAgICAgc3RhY2tGcmFtZS5mcmFt
ZVR5cGUgPSBmcmFtZVR5cGVGcm9tQ2FsbERhdGEoKTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihjYWxs
ZWVDZWxsKS0+ZXhlY3V0YWJsZSgpOwogICAgICAgICAgICAgaWYgKCFleGVjdXRhYmxlKSB7CiAg
ICAgICAgICAgICAgICAgc3RhY2tGcmFtZS5mcmFtZVR5cGUgPSBmcmFtZVR5cGVGcm9tQ2FsbERh
dGEoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEhlYXA6OmlzUG9p
bnRlckdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGV4ZWN1dGFibGUpKTsKLSAgICAg
ICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gRnJhbWVUeXBlOjpWZXJpZmllZEV4ZWN1dGFi
bGU7Ci0gICAgICAgICAgICBzdGFja0ZyYW1lLnUudmVyaWZpZWRFeGVjdXRhYmxlID0gZXhlY3V0
YWJsZTsKKyAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gRnJhbWVUeXBlOjpFeGVj
dXRhYmxlOworICAgICAgICAgICAgc3RhY2tGcmFtZS5leGVjdXRhYmxlID0gZXhlY3V0YWJsZTsK
ICAgICAgICAgICAgIG1fc2VlbkV4ZWN1dGFibGVzLmFkZChleGVjdXRhYmxlKTsKKyAgICAgICAg
fTsKKworICAgICAgICAvLyBQcmVwZW5kIHRoZSB0b3AtbW9zdCBpbmxpbmVkIGZyYW1lIGlmIG5l
ZWRlZC4gQWxzbywgZ2F0aGVyCisgICAgICAgIC8vIGxvY2F0aW9uIGluZm9ybWF0aW9uIGFib3V0
IHdoZXJlIHRoZSB0b3AgZnJhbWUgaXMgZXhlY3V0aW5nLgorICAgICAgICBzaXplX3Qgc3RhcnRJ
bmRleCA9IDA7CisgICAgICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzLnNpemUo
KSAmJiB1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzWzBdLmZyYW1lVHlwZSA9PSBVbnByb2Nl
c3NlZEZyYW1lVHlwZTo6VmVyaWZpZWRDb2RlQmxvY2spIHsKKyAgICAgICAgICAgIENvZGVCbG9j
ayogdG9wQ29kZUJsb2NrID0gdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXS51LnZlcmlm
aWVkQ29kZUJsb2NrOworICAgICAgICAgICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tUcmFjZS50b3BG
cmFtZUlzTExJbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSByZXVzZSBMTEludCBDb2RlQmxv
Y2tzIGZvciB0aGUgYmFzZWxpbmUgSklULCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBib3RoIGpp
dCB0eXBlcy4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFsc28gYmUgZmFsc2UgZm9y
IHZhcmlvdXMgcmVhc29ucyAoa25vd24gYW5kIHVua25vd24pLCBldmVuIHRob3VnaAorICAgICAg
ICAgICAgICAgIC8vIGl0J3Mgc3VwZXIgdW5saWtlbHkuIE9uZSByZWFzb24gdGhhdCB0aGlzIGNh
biBiZSBmYWxzZSBpcyB3aGVuIHdlIHRocm93IGZyb20gYSBERkcgZnJhbWUsCisgICAgICAgICAg
ICAgICAgLy8gYW5kIHdlIGVuZCB1cCBoYXZpbmcgdG8gdW53aW5kIHBhc3QgYSBWTUVudHJ5RnJh
bWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGluZworICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0
aGUgTExJbnQncyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFn
YWluc3QgdGhpcworICAgICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgorICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSAwOworICAgICAgICAgICAgICAgIGlmICh0
b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rIHx8IHRv
cENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaXNWYWxpZFBDOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBiaXRzOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgICAgIGJpdHMgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW5wcm9jZXNzZWRT
dGFja1RyYWNlLmxsaW50UEMpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIGJpdHMgPSBi
aXR3aXNlX2Nhc3Q8dW5zaWduZWQ+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKTsKKyNl
bmRpZgorICAgICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJ
bmRleChiaXRzLCB0b3BDb2RlQmxvY2ssIGlzVmFsaWRQQyk7CisKKyAgICAgICAgICAgICAgICAg
ICAgVU5VU0VEX1BBUkFNKGlzVmFsaWRQQyk7IC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgd2l0aCB0
aGlzIGluZm8gZm9yIHRoZSB3ZWIgaW5zcGVjdG9yOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUzNDU1CisKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJs
b2NrKHRvcENvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHN0
YXJ0SW5kZXggPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
T3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IHRvcENvZGVCbG9jay0+ZmluZFBDKHVu
cHJvY2Vzc2VkU3RhY2tUcmFjZS50b3BQQykpIHsKKyAgICAgICAgICAgICAgICBjb2RlT3JpZ2lu
LT53YWxrVXBJbmxpbmVTdGFjayhbJl0gKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pIHsK
KyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lID8gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdl
dCgpIDogdG9wQ29kZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAxOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCB1
bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBV
bnByb2Nlc3NlZFN0YWNrRnJhbWUmIHVucHJvY2Vzc2VkU3RhY2tGcmFtZSA9IHVucHJvY2Vzc2Vk
U3RhY2tUcmFjZS5mcmFtZXNbaV07CisgICAgICAgICAgICBpZiAodW5wcm9jZXNzZWRTdGFja0Zy
YW1lLmZyYW1lVHlwZSA9PSBVbnByb2Nlc3NlZEZyYW1lVHlwZTo6VmVyaWZpZWRDb2RlQmxvY2sp
IHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHVucHJvY2Vzc2VkU3Rh
Y2tGcmFtZS51LnZlcmlmaWVkQ29kZUJsb2NrOworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCA9IHVucHJvY2Vzc2VkU3RhY2tGcmFtZS5jYWxsU2l0ZUluZGV4Owor
CisgICAgICAgICAgICAgICAgYXV0byBhcHBlbmRDb2RlQmxvY2tOb0lubGluaW5nID0gWyZdIHsK
KyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1ZhbGlkUEM7CisgICAgICAgICAgICAgICAgICAg
IGFwcGVuZENvZGVCbG9jayhjb2RlQmxvY2ssIHRyeUdldEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVJ
bmRleC5iaXRzKCksIGNvZGVCbG9jaywgaXNWYWxpZFBDKSk7CisgICAgICAgICAgICAgICAgfTsK
KworI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmhh
c0NvZGVPcmlnaW5zKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+Y2Fu
R2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZUJsb2NrLT5jb2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgpLndhbGtVcElubGluZVN0YWNrKFsm
XSAoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA/IGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSA6IGNvZGVCbG9j
aywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZENvZGVCbG9jayhjb2RlQmxvY2ssIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZENvZGVCbG9ja05vSW5saW5pbmcoKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgYXBwZW5kQ29k
ZUJsb2NrTm9JbmxpbmluZygpOworI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIEFTU0VSVCh1bnByb2Nlc3NlZFN0YWNrRnJhbWUuZnJhbWVUeXBlID09IFVucHJv
Y2Vzc2VkRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKKyAgICAgICAgICAgICAgICBhcHBl
bmRVbnZlcmlmaWVkQ2FsbGVlKEpTVmFsdWU6OmRlY29kZSh1bnByb2Nlc3NlZFN0YWNrRnJhbWUu
dS51bnZlcmlmaWVkQ2FsbGVlKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5ID0gbV9zdGFja1RyYWNlcy5zaXpl
KCk7CisgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2Ft
cGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQpAQCAtNDc4LDE4
ICs1MzUsMTIgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpub3RpY2VWTUVudHJ5KCkKICAgICBk
aXNwYXRjaElmTmVjZXNzYXJ5KGxvY2tlcik7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6
Y2xlYXJEYXRhKCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwotICAgIGNsZWFy
RGF0YShsb2NrZXIpOwotfQotCiB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmNsZWFyRGF0YShjb25z
dCBMb2NrSG9sZGVyJikKIHsKICAgICBBU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwogICAgIG1f
c3RhY2tUcmFjZXMuY2xlYXIoKTsKICAgICBtX3NlZW5FeGVjdXRhYmxlcy5jbGVhcigpOwotICAg
IG1faW5kZXhPZk5leHRTdGFja1RyYWNlVG9WZXJpZnkgPSAwOworICAgIG1fdW5wcm9jZXNzZWRT
dGFja1RyYWNlcy5jbGVhcigpOwogfQogCiBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tG
cmFtZTo6ZGlzcGxheU5hbWUoKQpAQCAtNDk4LDkgKzU0OSw3IEBAIFN0cmluZyBTYW1wbGluZ1By
b2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXMKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiKHVu
a25vd24pIik7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoIihob3N0KSIpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1l
VHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJs
ZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5hdGl2ZUV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+bmFtZSgpOwogCkBAIC01MjEsOSArNTcwLDcgQEAgU3Ry
aW5nIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRpcwogICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCIodW5rbm93bikiKTsKICAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6
SG9zdCkKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiKGhvc3QpIik7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CiAKLSAg
ICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxlOwogICAg
IGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5uYW1lKCk7CiAKQEAgLTU0NCwy
NSArNTkxLDIxIEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXMKICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLWludCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1l
OjpzdGFydExpbmUoKQoraW50IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9u
U3RhcnRMaW5lKCkKIHsKICAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8
fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0KQogICAgICAgICByZXR1cm4gLTE7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7
CiAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxl
OwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4g
LTE7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihleGVjdXRhYmxl
KS0+Zmlyc3RMaW5lKCk7CiB9CiAKLXVuc2lnbmVkIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJh
bWU6OnN0YXJ0Q29sdW1uKCkKK3Vuc2lnbmVkIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6
OmZ1bmN0aW9uU3RhcnRDb2x1bW4oKQogewogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBl
OjpVbmtub3duIHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVy
biAtMTsKLSAgICBSRUxFQVNFX0FTU0VSVChmcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlm
aWVkQ2FsbGVlKTsKIAotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmll
ZEV4ZWN1dGFibGU7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAg
ICAgIHJldHVybiAtMTsKIApAQCAtNTczLDkgKzYxNiw3IEBAIGludHB0cl90IFNhbXBsaW5nUHJv
ZmlsZXI6OlN0YWNrRnJhbWU6OnMKIHsKICAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6
VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0KQogICAgICAgICByZXR1cm4g
LTE7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6VW52ZXJpZmll
ZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRF
eGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAg
ICByZXR1cm4gLTE7CiAKQEAgLTU4Niw5ICs2MjcsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxl
cjo6U3RhY2tGcmFtZTo6dXJsCiB7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVu
a25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6
VW52ZXJpZmllZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHUu
dmVyaWZpZWRFeGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigp
KQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIApAQCAtNTk4LDcgKzYzNyw3IEBAIFN0
cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjp1cmwKICAgICByZXR1cm4gdXJsOwog
fQogCi1WZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZT4mIFNhbXBsaW5nUHJvZmls
ZXI6OnN0YWNrVHJhY2VzKGNvbnN0IExvY2tIb2xkZXImKQorVmVjdG9yPFNhbXBsaW5nUHJvZmls
ZXI6OlN0YWNrVHJhY2U+IFNhbXBsaW5nUHJvZmlsZXI6OnJlbGVhc2VTdGFja1RyYWNlcyhjb25z
dCBMb2NrSG9sZGVyJiBsb2NrZXIpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsK
ICAgICB7CkBAIC02MDYsNyArNjQ1LDkgQEAgVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNr
VHJhY2U+JiBTYQogICAgICAgICBwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CiAgICAg
fQogCi0gICAgcmV0dXJuIG1fc3RhY2tUcmFjZXM7CisgICAgVmVjdG9yPFN0YWNrVHJhY2U+IHJl
c3VsdChXVEZNb3ZlKG1fc3RhY2tUcmFjZXMpKTsKKyAgICBjbGVhckRhdGEobG9ja2VyKTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6c3RhY2tUcmFj
ZXNBc0pTT04oKQpAQCAtNjQzLDYgKzY4NCw4IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpz
dGFja1RyYWNlc0FzSlMKIAogICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiXSIpOwogCisgICAgY2xl
YXJEYXRhKGxvY2tlcik7CisKICAgICByZXR1cm4ganNvbi50b1N0cmluZygpOwogfQogCkBAIC02
NTUsMTEgKzY5OCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlIGZyYW1lVHlwZSkK
IHsKICAgICBzd2l0Y2ggKGZyYW1lVHlwZSkgewotICAgIGNhc2UgU2FtcGxpbmdQcm9maWxlcjo6
RnJhbWVUeXBlOjpWZXJpZmllZEV4ZWN1dGFibGU6Ci0gICAgICAgIG91dC5wcmludCgiVmVyaWZp
ZWRFeGVjdXRhYmxlIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2FtcGxpbmdQcm9maWxl
cjo6RnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlOgotICAgICAgICBvdXQucHJpbnQoIlVudmVy
aWZpZWRDYWxsZWUiKTsKKyAgICBjYXNlIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6RXhl
Y3V0YWJsZToKKyAgICAgICAgb3V0LnByaW50KCJFeGVjdXRhYmxlIik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpIb3N0OgogICAgICAgICBv
dXQucHJpbnQoIkhvc3QiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNDggKzQ0LDg4IEBAIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogY2xhc3MgU2FtcGxpbmdQcm9m
aWxlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1wbGluZ1Byb2ZpbGVyPiB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBGcmFt
ZVR5cGUgeyAKLSAgICAgICAgVmVyaWZpZWRFeGVjdXRhYmxlLCAKKworICAgIGVudW0gY2xhc3Mg
VW5wcm9jZXNzZWRGcmFtZVR5cGUgeyAKICAgICAgICAgVW52ZXJpZmllZENhbGxlZSwKLSAgICAg
ICAgSG9zdCwgCi0gICAgICAgIFVua25vd24gCisgICAgICAgIFZlcmlmaWVkQ29kZUJsb2NrCiAg
ICAgfTsKIAotICAgIHN0cnVjdCBTdGFja0ZyYW1lIHsKLSAgICAgICAgU3RhY2tGcmFtZShGcmFt
ZVR5cGUgZnJhbWVUeXBlLCBFbmNvZGVkSlNWYWx1ZSBjYWxsZWUpCi0gICAgICAgICAgICA6IGZy
YW1lVHlwZShmcmFtZVR5cGUpCisgICAgc3RydWN0IFVucHJvY2Vzc2VkU3RhY2tGcmFtZSB7Cisg
ICAgICAgIFVucHJvY2Vzc2VkU3RhY2tGcmFtZShFbmNvZGVkSlNWYWx1ZSBjYWxsZWUpCisgICAg
ICAgICAgICA6IGZyYW1lVHlwZShVbnByb2Nlc3NlZEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxl
ZSkKICAgICAgICAgewogICAgICAgICAgICAgdS51bnZlcmlmaWVkQ2FsbGVlID0gY2FsbGVlOwog
ICAgICAgICB9Ci0gICAgICAgIFN0YWNrRnJhbWUoRnJhbWVUeXBlIGZyYW1lVHlwZSwgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUpCi0gICAgICAgICAgICA6IGZyYW1lVHlwZShmcmFtZVR5cGUp
CisgICAgICAgIFVucHJvY2Vzc2VkU3RhY2tGcmFtZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorICAgICAgICAgICAgOiBmcmFtZVR5cGUoVW5wcm9j
ZXNzZWRGcmFtZVR5cGU6OlZlcmlmaWVkQ29kZUJsb2NrKQorICAgICAgICAgICAgLCBjYWxsU2l0
ZUluZGV4KGNhbGxTaXRlSW5kZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHUudmVyaWZpZWRF
eGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKKyAgICAgICAgICAgIHUudW52ZXJpZmllZENhbGxlZSA9
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICAgICAgdS52ZXJpZmllZENvZGVC
bG9jayA9IGNvZGVCbG9jazsKICAgICAgICAgfQotICAgICAgICBTdGFja0ZyYW1lKCkKLSAgICAg
ICAgICAgIDogZnJhbWVUeXBlKEZyYW1lVHlwZTo6VW5rbm93bikKKyAgICAgICAgVW5wcm9jZXNz
ZWRTdGFja0ZyYW1lKCkKKyAgICAgICAgICAgIDogZnJhbWVUeXBlKFVucHJvY2Vzc2VkRnJhbWVU
eXBlOjpVbnZlcmlmaWVkQ2FsbGVlKQogICAgICAgICB7Ci0gICAgICAgICAgICB1LnZlcmlmaWVk
RXhlY3V0YWJsZSA9IG51bGxwdHI7CisgICAgICAgICAgICB1LnVudmVyaWZpZWRDYWxsZWUgPSBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIEZyYW1lVHlw
ZSBmcmFtZVR5cGU7CisgICAgICAgIFVucHJvY2Vzc2VkRnJhbWVUeXBlIGZyYW1lVHlwZTsKICAg
ICAgICAgdW5pb24gewogICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUgdW52ZXJpZmllZENhbGxl
ZTsKLSAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiB2ZXJpZmllZEV4ZWN1dGFibGU7CisgICAg
ICAgICAgICBDb2RlQmxvY2sqIHZlcmlmaWVkQ29kZUJsb2NrOwogICAgICAgICB9IHU7CisgICAg
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleDsKKyAgICB9OworCisgICAgZW51bSBjbGFz
cyBGcmFtZVR5cGUgeyAKKyAgICAgICAgRXhlY3V0YWJsZSwKKyAgICAgICAgSG9zdCwKKyAgICAg
ICAgVW5rbm93biAKKyAgICB9OwogCisgICAgc3RydWN0IFN0YWNrRnJhbWUgeworICAgICAgICBT
dGFja0ZyYW1lKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQorICAgICAgICAgICAgOiBmcmFt
ZVR5cGUoRnJhbWVUeXBlOjpFeGVjdXRhYmxlKQorICAgICAgICAgICAgLCBleGVjdXRhYmxlKGV4
ZWN1dGFibGUpCisgICAgICAgIHsgfQorICAgICAgICBTdGFja0ZyYW1lKCkKKyAgICAgICAgICAg
IDogZnJhbWVUeXBlKEZyYW1lVHlwZTo6VW5rbm93bikKKyAgICAgICAgICAgICwgZXhlY3V0YWJs
ZShudWxscHRyKQorICAgICAgICB7IH0KKworICAgICAgICBGcmFtZVR5cGUgZnJhbWVUeXBlOwor
ICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZTsKKworICAgICAgICAvLyBUaGVzZSBh
dHRlbXB0IHRvIGJlIGV4cHJlc3Npb24tbGV2ZWwgbGluZSBhbmQgY29sdW1uIG51bWJlci4KKyAg
ICAgICAgdW5zaWduZWQgbGluZU51bWJlciB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSB9OworICAgICAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXIgeyBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKworICAgICAgICAvLyBUaGVzZSBhcmUgZnVuY3Rp
b24tbGV2ZWwgZGF0YS4KICAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lKCk7CiAgICAgICAgIFN0
cmluZyBkaXNwbGF5TmFtZUZvckpTT05UZXN0cygpOyAvLyBVc2VkIGZvciBKU0Mgc3RyZXNzIHRl
c3RzIGJlY2F1c2UgdGhleSB3YW50IHRoZSAiKGFub255bW91cyBmdW5jdGlvbikiIHN0cmluZyBm
b3IgYW5vbnltb3VzIGZ1bmN0aW9ucyBhbmQgdGhleSB3YW50ICIoZXZhbCkiIGZvciBldmFsJ2Qg
Y29kZS4KLSAgICAgICAgaW50IHN0YXJ0TGluZSgpOwotICAgICAgICB1bnNpZ25lZCBzdGFydENv
bHVtbigpOworICAgICAgICBpbnQgZnVuY3Rpb25TdGFydExpbmUoKTsKKyAgICAgICAgdW5zaWdu
ZWQgZnVuY3Rpb25TdGFydENvbHVtbigpOwogICAgICAgICBpbnRwdHJfdCBzb3VyY2VJRCgpOwog
ICAgICAgICBTdHJpbmcgdXJsKCk7CiAgICAgfTsKIAorICAgIHN0cnVjdCBVbnByb2Nlc3NlZFN0
YWNrVHJhY2UgeworICAgICAgICBkb3VibGUgdGltZXN0YW1wOworICAgICAgICB2b2lkKiB0b3BQ
QzsKKyAgICAgICAgYm9vbCB0b3BGcmFtZUlzTExJbnQ7CisgICAgICAgIHZvaWQqIGxsaW50UEM7
CisgICAgICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IGZyYW1lczsKKyAgICB9Owor
CiAgICAgc3RydWN0IFN0YWNrVHJhY2UgewotICAgICAgICBib29sIG5lZWRzVmVyaWZpY2F0aW9u
OwogICAgICAgICBkb3VibGUgdGltZXN0YW1wOwogICAgICAgICBWZWN0b3I8U3RhY2tGcmFtZT4g
ZnJhbWVzOworICAgICAgICBTdGFja1RyYWNlKCkKKyAgICAgICAgeyB9CisgICAgICAgIFN0YWNr
VHJhY2UoU3RhY2tUcmFjZSYmIG90aGVyKQorICAgICAgICAgICAgOiB0aW1lc3RhbXAob3RoZXIu
dGltZXN0YW1wKQorICAgICAgICAgICAgLCBmcmFtZXMoV1RGTW92ZShvdGhlci5mcmFtZXMpKQor
ICAgICAgICB7IH0KICAgICB9OwogCiAgICAgU2FtcGxpbmdQcm9maWxlcihWTSYsIFJlZlB0cjxT
dG9wd2F0Y2g+JiYpOwpAQCAtMTAwLDEyICsxNDAsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc3Rh
cnQoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIHZvaWQgc3RvcCgpOwogICAgIHZvaWQgc3RvcChj
b25zdCBMb2NrSG9sZGVyJik7Ci0gICAgVmVjdG9yPFN0YWNrVHJhY2U+JiBzdGFja1RyYWNlcyhj
b25zdCBMb2NrSG9sZGVyJik7CisgICAgVmVjdG9yPFN0YWNrVHJhY2U+IHJlbGVhc2VTdGFja1Ry
YWNlcyhjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHN0
YWNrVHJhY2VzQXNKU09OKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpY2VDdXJy
ZW50VGhyZWFkQXNKU0NFeGVjdXRpb25UaHJlYWQoKTsKICAgICB2b2lkIG5vdGljZUN1cnJlbnRU
aHJlYWRBc0pTQ0V4ZWN1dGlvblRocmVhZChjb25zdCBMb2NrSG9sZGVyJik7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBjbGVhckRhdGEoKTsKLSAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBM
b2NrSG9sZGVyJik7CiAgICAgdm9pZCBwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7IC8v
IFlvdSBzaG91bGQgY2FsbCB0aGlzIG9ubHkgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBsb2NrLgogICAg
IGRvdWJsZSB0b3RhbFRpbWUoY29uc3QgTG9ja0hvbGRlciYpIHsgcmV0dXJuIG1fdG90YWxUaW1l
OyB9CiAgICAgdm9pZCBzZXRTdG9wV2F0Y2goY29uc3QgTG9ja0hvbGRlciYsIFJlZjxTdG9wd2F0
Y2g+JiYgc3RvcHdhdGNoKSB7IG1fc3RvcHdhdGNoID0gV1RGTW92ZShzdG9wd2F0Y2gpOyB9CkBA
IC0xMTQsMTEgKzE1MiwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzcGF0Y2hJZk5lY2Vzc2Fy
eShjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uKGNvbnN0IExv
Y2tIb2xkZXImKTsKICAgICB2b2lkIHBhdXNlKCk7CisgICAgdm9pZCBjbGVhckRhdGEoY29uc3Qg
TG9ja0hvbGRlciYpOwogCiAgICAgVk0mIG1fdm07CiAgICAgUmVmUHRyPFN0b3B3YXRjaD4gbV9z
dG9wd2F0Y2g7CiAgICAgVmVjdG9yPFN0YWNrVHJhY2U+IG1fc3RhY2tUcmFjZXM7Ci0gICAgc2l6
ZV90IG1faW5kZXhPZk5leHRTdGFja1RyYWNlVG9WZXJpZnk7CisgICAgVmVjdG9yPFVucHJvY2Vz
c2VkU3RhY2tUcmFjZT4gbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzOwogICAgIHN0ZDo6Y2hyb25v
OjptaWNyb3NlY29uZHMgbV90aW1pbmdJbnRlcnZhbDsKICAgICBkb3VibGUgbV9sYXN0VGltZTsK
ICAgICBkb3VibGUgbV90b3RhbFRpbWU7CkBAIC0xMzAsNyArMTY5LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1faXNQYXVzZWQ7CiAgICAgYm9vbCBtX2hhc0Rpc3BhdGNoZWRGdW5jdGlvbjsKICAg
ICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9zZWVuRXhlY3V0YWJsZXM7Ci0gICAgVmVjdG9y
PFN0YWNrRnJhbWU+IG1fY3VycmVudEZyYW1lczsKKyAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFj
a0ZyYW1lPiBtX2N1cnJlbnRGcmFtZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE5NTU3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEy
LDYgKzMxMiw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICAgICAgZW5hYmxlQ29udHJvbEZsb3dQcm9maWxlcigpOwogI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKICAgICBpZiAoT3B0aW9uczo6dXNlU2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAg
ICAgIHNldFNob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nKCk7CiAgICAgICAgIG1fc2Ft
cGxpbmdQcm9maWxlciA9IGFkb3B0UmVmKG5ldyBTYW1wbGluZ1Byb2ZpbGVyKCp0aGlzLCBTdG9w
d2F0Y2g6OmNyZWF0ZSgpKSk7CiAgICAgICAgIG1fc2FtcGxpbmdQcm9maWxlci0+c3RhcnQoKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE5NTU3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5Nyw2ICs1OTcsOSBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUgYm9vbCBzaG91bGRUcmln
Z2VyVGVybWluYXRpb24oRXhlY1N0YXRlKik7CiAKKyAgICB2b2lkIHNldFNob3VsZEJ1aWxkUENU
b0NvZGVPcmlnaW5NYXBwaW5nKCkgeyBtX3Nob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5n
ID0gdHJ1ZTsgfQorICAgIGJvb2wgc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmc7IH0KKwog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZy
aWVuZCBjbGFzcyBDbGVhckV4Y2VwdGlvblNjb3BlOwpAQCAtNjQ4LDYgKzY1MSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2ZhaWxOZXh0TmV3Q29kZUJsb2NrIHsgZmFsc2UgfTsKICAgICBib29s
IG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsKICAgICBib29sIG1fc2hvdWxkUmV3cml0ZUNvbnN0QXNW
YXIgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGlu
ZyB7IGZhbHNlIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7
CiAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxCdWlsdGluRXhlY3V0YWJsZXM+IG1fYnVpbHRpbkV4ZWN1dGFibGVzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci1iYXNpYy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NhbXBs
aW5nLXByb2ZpbGVyLWJhc2ljLmpzCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLWJhc2ljLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMSArMjYsOCBAQCBpZiAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJv
ZmlsZXIoKSkgCiAgICAgICAgICAgICB4LS07CiAgICAgICAgIH0KICAgICB9Ci0gICAgbm9Jbmxp
bmUodG9wKTsKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBjYWxsIHRvcCgpIHRvIGdldCB0aGUg
Q2FsbFNpdGVJbmRleCB0byB1cGRhdGUKLSAgICAvLyBpbnNpZGUgdGhlIGNhbGwgZnJhbWUuIFdl
IG5lZWQgdG8gZml4IHRoYXQgYnkgaGF2aW5nIGEgUEM9PkNvZGVPcmlnaW4KLSAgICAvLyBtYXBw
aW5nOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNjI5Ci0gICAg
ZnVuY3Rpb24gamF6KHgpIHsgcmV0dXJuIHggKyB0b3AoKTsgfSAvLyAKKworICAgIGZ1bmN0aW9u
IGpheih4KSB7IHJldHVybiB4ICsgdG9wKCk7IH0KICAgICBmdW5jdGlvbiBrYXooeSkgewogICAg
ICAgICByZXR1cm4gamF6KHkpICsgNTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269921</attachid>
            <date>2016-01-26 14:24:30 -0800</date>
            <delta_ts>2016-01-26 14:33:40 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>103344</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NjE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5OSBA
QAorMjAxNi0wMS0yNiAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBKU0MgU2FtcGxpbmcgUHJvZmlsZXI6IENvbWUgdXAgd2l0aCBhIChwcm9ncmFtIGNvdW50ZXIg
PT4gQ29kZU9yaWdpbikgbWFwcGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGEgbWFwcGluZyBmcm9tIFBDIHRv
IENvZGVPcmlnaW4KKyAgICAgICAgdGhhdCBsaXZlcyBvZmYgb2YgSklUZWQgQ29kZUJsb2Nrcy4g
V2UgYnVpbGQgdGhpcyBtYXBwaW5nCisgICAgICAgIHdoaWxlIEpJVGluZyBjb2RlLCBhbmQgdGhl
biB3ZSBjb21wcmVzcyBpdCBhbmQgc3RvcmUKKyAgICAgICAgaXQgb24gdGhlIENvZGVCbG9jay4g
V2Ugb25seSBidWlsZCB0aGUgbWFwcGluZyBpZiBhIGRlYnVnZ2VyCisgICAgICAgIGhhcyBldmVy
IGJlZW4gYXR0YWNoZWQgdG8gYW55IGdsb2JhbCBvYmplY3QuCisKKyAgICAgICAgQ29kZUJsb2Nr
IGNvbnN1bHRzIHRoaXMgbWFwcGluZyB3aGVuIHNlYXJjaGluZyBmb3IgYSBDb2RlT3JpZ2luCisg
ICAgICAgIGZvciBhIGdpdmVuIFBDLCBidXQgaXQgYWxzbyBjb25zdWx0cyBvdGhlciBjb2RlIHJh
bmdlcworICAgICAgICBvZmYgdGhlIG1haW4gcGF0aCB0aGF0IG1heSBvd24gdGhlIFBDLiBTcGVj
aWZpY2FsbHksIGl0IHNlYXJjaGVzCisgICAgICAgIHRocm91Z2ggaW5saW5lIGNhY2hlcywgT1NS
RXhpdHMsIGFuZCBMYXp5U2xvd1BhdGhzLgorCisgICAgICAgIFRvIGZpbmQgUEMgaW5mbyBmb3Ig
dGhlIExMSW50LCB3ZSBhbHNvIHNhdmUgdGhlIExMSW50IHBjIHdoZW4KKyAgICAgICAgdGFraW5n
IGEgc3RhY2sgdHJhY2Ugd2hlcmUgdGhlIHRvcCBmcmFtZSBpcyBpbiBMTEludCBjb2RlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgY29kZSBpbnNpZGUgdGhlIFNhbXBsaW5n
UHJvZmllci4KKyAgICAgICAgSSByZWFsaXplZCBhIGJ1ZyBpbiB0aGUgU2FtcGxpbmdQcm9maWxl
cidzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBXZSB1c2VkIHRvIHdhbGsgdGhlIGlubGluZSBz
dGFjayB3aGlsZSBnYXRoZXJpbmcgYSBzdGFjaworICAgICAgICB0cmFjZS4gVGhpcyBpcyB3cm9u
Zy4gSXQncyBzdXBlciBkYW5nZXJvdXMgdG8gZG8gdGhpcyBiZWNhdXNlCisgICAgICAgIHdlIG1p
Z2h0IHBhdXNlIHRoZSBKU0MgcHJvY2VzcyB3aGlsZSBpdCdzIG1vZGlmeWluZyBpdHMKKyAgICAg
ICAgQ29kZU9yaWdpbiB0YWJsZS4gV2UgdXNlZCB0byB3YWxrIHRoZSBpbmxpbmUgc3RhY2sgd2hp
bGUKKyAgICAgICAgdGFraW5nIGEgc3RhY2sgdHJhY2UgYmVjYXVzZSBkb2luZyBzbyBjb3VsZCBz
YXZlIHVzIGZyb20KKyAgICAgICAgaGF2aW5nIHRvIHZlcmlmeSBhIHBhcnRpY3VsYXIgc3RhY2sg
dHJhY2UuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGF0LgorICAgICAgICBXZSBub3cgaGF2ZSB0byB2
ZXJpZnkgYWxsIHN0YWNrIHRyYWNlcyB0YWtlbi4gVGhpcyB2ZXJpZmljYXRpb24gc3RlcAorICAg
ICAgICBpbmNsdWRlcyB3YWxraW5nIHRoZSBpbmxpbmUgc3RhY2suCisKKyAgICAgICAgQmVjYXVz
ZSB3ZSBoYXZlIGEgUEM9PkNvZGVPcmlnaW4gbWFwLCB3ZSBjYW4gbm93IGdhdGhlciBtb3JlCisg
ICAgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0b3AtZnJhbWUgd2UgcGF1c2Uu
IFRoaXMgYWxsb3dzCisgICAgICAgIHVzIHRvIGNvcnJlY3RseSBvYnNlcnZlIGlubGluaW5nLiBJ
dCBhbHNvIGFsbG93cyB1cyB0byBvYnNlcnZlCisgICAgICAgIGV4cHJlc3Npb24tbGV2ZWwgbGlu
ZS9jb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgZnJhbWUuCisgICAgICAgIFRoZSByZWFz
b24gd2UgZG9uJ3QgY29uc3VsdCB0aGlzIG1hcHBpbmcgZm9yIHBhcmVudCBmcmFtZXMgaXMgCisg
ICAgICAgIHRoYXQgYWxsIHBhcmVudCBmcmFtZXMgc2hvdWxkIHNldCB0aGUgQ2FsbFNpdGVJbmRl
eCBvbiB0aGUgY2FsbAorICAgICAgICBmcmFtZSBoZWFkZXIsIHdoaWNoIG1lYW5zIHdlIGNhbiBj
b25zdWx0IHRoYXQgdmFsdWUgdG8gZ2V0IGlubGluaW5nIAorICAgICAgICBhbmQgZXhwcmVzc2lv
bi1sZXZlbCBsaW5lL2NvbHVtbiBpbmZvcm1hdGlvbi4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxl
cjo6TGFiZWw6OkxhYmVsKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
TGFiZWw6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVy
OjpMYWJlbDo6aXNTZXQpOgorICAgICAgICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaDoK
KyAgICAgICAgKEpTQzo6QXNzZW1ibGVyTGFiZWw6OmxhYmVsQXRPZmZzZXQpOgorICAgICAgICAo
SlNDOjpBc3NlbWJsZXJMYWJlbDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogYjMvQjNHZW5lcmF0
ZS5jcHA6CisgICAgICAgICogYjMvQjNPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdp
bjo6ZGF0YSk6CisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46Om9wZXJhdG9yPT0pOgorICAgICAg
ICAqIGIzL0IzUENUb09yaWdpbk1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBDVG9P
cmlnaW5NYXA6OlBDVG9PcmlnaW5NYXApOgorICAgICAgICAoSlNDOjpCMzo6UENUb09yaWdpbk1h
cDo6YXBwZW5kSXRlbSk6CisgICAgICAgIChKU0M6OkIzOjpQQ1RvT3JpZ2luTWFwOjpyYW5nZXMp
OgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OnBjVG9PcmlnaW5NYXApOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpyZWxlYXNl
UENUb09yaWdpbk1hcCk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJp
ZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRQ
Q1RvQ29kZU9yaWdpbk1hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpq
aXRDb2RlTWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieXRlY29kZU9mZnNldCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbkhhc2g6Omhhc2gpOgorICAg
ICAgICAoSlNDOjpDb2RlT3JpZ2luSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL0lu
bGluZUNhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdp
bkFuZEJhc2VsaW5lQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1Vw
SW5saW5lU3RhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpjb250YWluc1BDKToKKyAgICAgICAgKiBi
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0
dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkluZm86OmNvbnRhaW5zUEMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0V4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OnNldFRoaXNSZWdpc3Rlcik6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6ZmluZFBDKToKKyAgICAgICAgKiBkZmcvREZHSklU
Q29kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmNvbW1vbkRhdGFPZmZzZXQpOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpyZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFu
ZGxpbmdPU1JFeGl0SWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpz
ZXRFbmRPZk1haW5QYXRoKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5k
T2ZDb2RlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6c2V0U3RhcnRPZkNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpzZXRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
YWRkQ2FsbFNpdGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpwY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpzZXRFbmRP
Zk1haW5QYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0
RW5kT2ZDb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3Iu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6Y2FsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6Om9yaWdpbik6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
YWRkU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpydW5TbG93UGF0aEdlbmVyYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKiBmdGwvRlRMQjNDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
Ojpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SklUQ29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5n
Q2FsbFNpdGUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmZpbmRQQyk6CisgICAgICAg
ICogZnRsL0ZUTEpJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpiM0NvZGUp
OgorICAgICAgICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgor
ICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3RlcnM6OmxsaW50UEMp
OgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKToK
KyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rv
cjo6SlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlcjo6YXR0YWNoRGVidWdnZXIpOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OmFkZEV2
ZW50KToKKyAgICAgICAgKEluc3BlY3Rvcjo6YnVpbGRTYW1wbGVzKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6dHJhY2tpbmdDb21wbGV0ZSk6Cisg
ICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAg
ICAgICAoSlNDOjpKSVRDb2RlOjpmaW5kUEMpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6
OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjo6YXBwZW5kSXRlbSk6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFw
OjpQQ1RvQ29kZU9yaWdpbk1hcCk6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjp+
UENUb0NvZGVPcmlnaW5NYXApOgorICAgICAgICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcDo6bWVt
b3J5U2l6ZSk6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpmaW5kUEMpOgorICAg
ICAgICAqIGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6
OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGlkQnVpbGRNYXBwaW5nKToKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMpOgor
ICAgICAgICAqIGxsaW50L0xMSW50UENSYW5nZXMuaDoKKyAgICAgICAgKEpTQzo6TExJbnQ6Omlz
TExJbnRQQyk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAg
ICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwb3J0
U3RhdHMpOgorICAgICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6RnJhbWVXYWxrZXIpOgorICAgICAg
ICAoSlNDOjpGcmFtZVdhbGtlcjo6d2Fsayk6CisgICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjpy
ZXNldEF0TWFjaGluZUZyYW1lKToKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmlzVmFsaWRG
cmFtZVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1By
b2ZpbGVyKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6flNhbXBsaW5nUHJvZmls
ZXIpOgorICAgICAgICAoSlNDOjp0cnlHZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6
U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyk6CisgICAgICAg
IChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQ
cm9maWxlcjo6bm90aWNlVk1FbnRyeSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6
OmNsZWFyRGF0YSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6
OmRpc3BsYXlOYW1lKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFt
ZTo6ZGlzcGxheU5hbWVGb3JKU09OVGVzdHMpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2Zp
bGVyOjpTdGFja0ZyYW1lOjpmdW5jdGlvblN0YXJ0TGluZSk6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9uU3RhcnRDb2x1bW4pOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzb3VyY2VJRCk6CisgICAgICAgIChK
U0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnVybCk6CisgICAgICAgIChKU0M6OlNh
bXBsaW5nUHJvZmlsZXI6OnJlbGVhc2VTdGFja1RyYWNlcyk6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUHJvZmlsZXI6OnN0YWNrVHJhY2VzQXNKU09OKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnN0YXJ0
TGluZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJh
bWU6OnN0YXJ0Q29sdW1uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxl
cjo6c3RhY2tUcmFjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpVbnByb2Nlc3NlZFN0YWNr
RnJhbWU6OlVucHJvY2Vzc2VkU3RhY2tGcmFtZSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlN0YWNrRnJhbWU6OlN0YWNrRnJhbWUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1By
b2ZpbGVyOjpTdGFja1RyYWNlOjpTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQ
cm9maWxlcjo6dG90YWxUaW1lKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6c2V0
U3RvcFdhdGNoKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06
OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpzZXRTaG91
bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyk6CisgICAgICAgIChKU0M6OlZNOjpzaG91bGRC
dWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXItYmFzaWMuanM6CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxp
bmdQcm9maWxlci50b3ApOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmls
ZXIuamF6KToKKyAgICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLmtheik6
CisKIDIwMTYtMDEtMjYgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbW92ZSBhIHVzZWxlc3MgI2luY2x1ZGUKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTEwLDYgKzUxMCw3IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaml0L0pJVFN1YkdlbmVyYXRvci5jcHAKICAg
ICBqaXQvSklUVGh1bmtzLmNwcAogICAgIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAKKyAgICBqaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCiAgICAgaml0L1BvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9SZWcuY3BwCiAgICAgaml0L1JlZ2lz
dGVyQXRPZmZzZXQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTk1NTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
NDMsNyArMTY0Myw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW0K
IHsKICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLnNhbXBsaW5nUHJvZmlsZXIoKSk7CiAg
ICAgU3RyaW5nIGpzb25TdHJpbmcgPSBleGVjLT52bSgpLnNhbXBsaW5nUHJvZmlsZXIoKS0+c3Rh
Y2tUcmFjZXNBc0pTT04oKTsKLSAgICBleGVjLT52bSgpLnNhbXBsaW5nUHJvZmlsZXIoKS0+Y2xl
YXJEYXRhKCk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpT
T05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC02NzAsNiArNjcwLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGppdFxKSVRUaHVua3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0
XEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxTZXR1cFZhcmFyZ3NGcmFtZS5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxqaXRcUENUb0NvZGVPcmlnaW5NYXAuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxSZWcuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caml0XFJlZ2lzdGVyQXRPZmZzZXQuY3BwIiAvPgpAQCAtMTUwMiw3ICsx
NTAzLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRUb0RGR0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XEpJVFdyaXRlQmFycmllci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpT
SW50ZXJmYWNlSklULmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcU2V0dXBW
YXJhcmdzRnJhbWUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxQQ1RvQ29k
ZU9yaWdpbk1hcC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRc
UmVnLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJBdE9mZnNl
dC5oIiAvPgpAQCAtMTUxMSw2ICsxNTEyLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxSZWdpc3RlclNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJl
cGF0Y2guaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxTZXR1cFZh
cmFyZ3NGcmFtZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFNuaXBwZXRP
cGVyYW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcU3BlY2lhbGl6ZWRU
aHVua0pJVC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFRlbXBSZWdpc3Rl
clNldC5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVycwkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTExLDYgKzE5MTEsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caml0XEJpbmFyeVN3aXRjaC5jcHAiPgogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxQQ1RvQ29k
ZU9yaWdpbk1hcC5jcHAiPgorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29t
cGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZS5jcHAiPgogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KQEAgLTQ1OTYsNiArNDU5OSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUENUb0Nv
ZGVPcmlnaW5NYXAuaCI+CisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgorICAgIDwvQ2xJbmNs
dWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmgiPgogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTU1NzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMwMyw5ICsxMzAzLDEyIEBACiAJCTcwRUNBNjA3MUFG
REJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAyMUFGREJFQTIwMDQ0OTczOSAvKiBU
ZW1wbGF0ZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNzBFQ0E2MDgxQUZEQkVBMjAwNDQ5NzM5IC8q
IFRlbXBsYXRlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzBFQ0E2
MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTcz
OSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzkyQ0IzNDkxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2Rl
T3JpZ2luTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi87
IH07CisJCTc5MkNCMzRBMUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyQ0IzNDgxQzRF
RUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk2NDY1NkExQjk1MkZGMDAwMzA1OUVFIC8q
IEdldFB1dEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk3RTA3QTkxQjhGQ0ZCOTAw
ODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAv
KiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTc5N0UwN0FBMUI4RkNG
QjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJB
IC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIz
UENUb09yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QzRCMTVEMUJB
MjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QzRCMTVC
MUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNl
LmNwcCAqLzsgfTsKIAkJNzlDNEIxNUUxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5QzRCMTVDMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
Q0ZDNkVGMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM0OTgsOSArMzUwMSwxMiBAQAog
CQk3MEVDQTYwMjFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBFQ0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRl
bXBsYXRlUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxh
dGVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwNDFBRkRC
RUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTc5MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQQ1RvQ29kZU9yaWdpbk1h
cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5MkNCMzQ4MUM0RUVENUMwMEQx
M0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQQ1RvQ29kZU9yaWdpbk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHZXRQdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5N0UwN0E4
MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyog
QjNQQ1RvT3JpZ2luTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUENU
b09yaWdpbk1hcC5oOyBwYXRoID0gYjMvQjNQQ1RvT3JpZ2luTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5QzRCMTVCMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QzFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2
ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmg7IHBhdGgg
PSBkZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jh
bmdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludFBDUmFuZ2VzLmg7
IHBhdGggPSBsbGludC9MTEludFBDUmFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00ODQwLDYgKzQ4NDYsNyBAQAogCQkJCTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRTcGVjaWFsLmggKi8sCiAJCQkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQg
LyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLywKKwkJCQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQg
LyogQjNQQ1RvT3JpZ2luTWFwLmggKi8sCiAJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGhhc2VTY29wZS5jcHAgKi8sCiAJCQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UGhhc2VTY29wZS5oICovLAogCQkJCTBGMzczMDhBMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNo
aWxkcmVuLmNwcCAqLywKQEAgLTUxNDksNiArNTE1Niw4IEBACiAJCQkJMEZDNzEyRTExN0NEODc4
RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJ
CQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAogCQkJ
CUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAorCQkJCTc5
MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi8sCisJCQkJ
NzkyQ0IzNDgxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggKi8sCiAJCQkJ
MEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNw
cCAqLywKIAkJCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAq
LywKQEAgLTcwMjUsNiArNzAzNCw4IEBACiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzczMDkzMUMwRDY3RUUwMDA1MkJGQSAv
KiBBaXJVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYy
QTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk5RUY3
QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzlENUNENUIxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5n
UHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzMxMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTcxLDYgKzg5ODIsNyBAQAog
CQkJCTBGOEYxNDM1MUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjJDRDVCMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0
aUdldEJ5T2Zmc2V0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM3ODEwRDE3OTlFQTJF
MDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5MkNC
MzQ5MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkIzODc4RjFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09y
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBE
RkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2
aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwNSw2ICs0MDUsOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBtYXNtLT5pbnZhbGlkYXRlQWxsVGVtcFJlZ2lzdGVycygpOwogICAg
ICAgICB9CiAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExhYmVsJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9sYWJlbCA9PSBvdGhlci5tX2xhYmVsOyB9CisKICAgICAgICAgYm9vbCBp
c1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwuaXNTZXQoKTsgfQogICAgIHByaXZhdGU6CiAg
ICAgICAgIEFzc2VtYmxlckxhYmVsIG1fbGFiZWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9uIDE5NTU3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gQXNzZW1ibGVyTGFiZWwobV9vZmZzZXQgKyBvZmZzZXQpOwogICAgICAgICB9CiAK
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFzc2VtYmxlckxhYmVsJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQ7IH0KKwogICAgICAgICB1aW50
MzJfdCBtX29mZnNldDsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNs
dWRlICJCM1JlZHVjZVN0cmVuZ3RoLmgiCiAjaW5jbHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2lu
Y2x1ZGUgIkIzVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3JpZ2luLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw4IEBAIHB1YmxpYzoKIAog
ICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAorICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBPcmlnaW4mIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2RhdGEg
PT0gb3RoZXIubV9kYXRhOyB9CisKICAgICAvLyBZb3Ugc2hvdWxkIGF2b2lkIHVzaW5nIHRoaXMu
IFVzZSBPcmlnaW5EdW1wIGluc3RlYWQuCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQQ1RvT3JpZ2luTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUENUb09yaWdpbk1h
cC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUENUb09yaWdp
bk1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BDVG9PcmlnaW5NYXBfaAor
I2RlZmluZSBCM1BDVG9PcmlnaW5NYXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQ
Q1RvT3JpZ2luTWFwIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQQ1RvT3JpZ2luTWFwKTsK
K3B1YmxpYzoKKyAgICBQQ1RvT3JpZ2luTWFwKCkKKyAgICB7IH0KKworICAgIFBDVG9PcmlnaW5N
YXAoUENUb09yaWdpbk1hcCYmIG90aGVyKQorICAgICAgICA6IG1fcmFuZ2VzKFdURk1vdmUob3Ro
ZXIubV9yYW5nZXMpKQorICAgIHsgfQorCisgICAgc3RydWN0IE9yaWdpblJhbmdlIHsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsOworICAgICAgICBPcmlnaW4gb3JpZ2luOwor
ICAgIH07CisKKyAgICB2b2lkIGFwcGVuZEl0ZW0oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVs
LCBPcmlnaW4gb3JpZ2luKQorICAgIHsKKyAgICAgICAgaWYgKG1fcmFuZ2VzLnNpemUoKSkgewor
ICAgICAgICAgICAgaWYgKG1fcmFuZ2VzLmxhc3QoKS5sYWJlbCA9PSBsYWJlbCkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAobV9yYW5nZXMubGFzdCgpLm9yaWdpbiA9
PSBvcmlnaW4gfHwgIW9yaWdpbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoT3JpZ2luUmFuZ2V7bGFiZWwsIG9yaWdpbn0pOwor
ICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxPcmlnaW5SYW5nZT4mIHJhbmdlcygpIGNvbnN0ICB7
IHJldHVybiBtX3JhbmdlczsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxPcmlnaW5SYW5nZT4g
bV9yYW5nZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BDVG9PcmlnaW5NYXBfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJC
M09yaWdpbi5oIgorI2luY2x1ZGUgIkIzUENUb09yaWdpbk1hcC5oIgogI2luY2x1ZGUgIkIzVHlw
ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKICNpbmNsdWRlICJQdXJlTmFOLmgiCkBAIC0y
NzUsNiArMjc2LDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGZy
YW1lU2l6ZSgpIGNvbnN0OwogICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVT
YXZlUmVnaXN0ZXJzKCkgY29uc3Q7CiAKKyAgICBQQ1RvT3JpZ2luTWFwJiBwY1RvT3JpZ2luTWFw
KCkgeyByZXR1cm4gbV9wY1RvT3JpZ2luTWFwOyB9CisgICAgUENUb09yaWdpbk1hcCByZWxlYXNl
UENUb09yaWdpbk1hcCgpIHsgcmV0dXJuIFdURk1vdmUobV9wY1RvT3JpZ2luTWFwKTsgfQorCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICAKQEAgLTI5
MSw2ICsyOTUsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBaXI6OkNvZGU+IG1f
Y29kZTsKICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFByaW50U3RyZWFtJiwgT3JpZ2luKT4+
IG1fb3JpZ2luUHJpbnRlcjsKICAgICBjb25zdCB2b2lkKiBtX2Zyb250ZW5kRGF0YTsKKyAgICBQ
Q1RvT3JpZ2luTWFwIG1fcGNUb09yaWdpbk1hcDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAi
QWlyVmFsaWRhdGUuaCIKICNpbmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzSW5kZXhN
YXAuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgIkIzVGltaW5nU2NvcGUu
aCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJEaXNhbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UuaCIKQEAgLTE3MSwxMiArMTcyLDIzIEBAIHZvaWQgZ2VuZXJhdGUo
Q29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFw
cGVuZChqdW1wKTsKICAgICB9OwogCisgICAgUENUb09yaWdpbk1hcCYgcGNUb09yaWdpbk1hcCA9
IGNvZGUucHJvYygpLnBjVG9PcmlnaW5NYXAoKTsKKyAgICBhdXRvIGFkZEl0ZW0gPSBbJl0gKElu
c3QmIGluc3QpIHsKKyAgICAgICAgaWYgKCFpbnN0Lm9yaWdpbikgeworICAgICAgICAgICAgcGNU
b09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGpp
dC5sYWJlbCgpLCBpbnN0Lm9yaWdpbi0+b3JpZ2luKCkpOworICAgIH07CisKICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAgICAgICBibG9ja0p1bXBzW2Jsb2NrXS5saW5r
KCZqaXQpOwogICAgICAgICBibG9ja0xhYmVsc1tibG9ja10gPSBqaXQubGFiZWwoKTsKICAgICAg
ICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAg
ICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGFkZEl0ZW0o
aW5zdCk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGluc3QuZ2VuZXJh
dGUoaml0LCBjb250ZXh0KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAu
aXNTZXQoKSk7CiAgICAgICAgIH0KIApAQCAtMTg0LDYgKzE5Niw4IEBAIHZvaWQgZ2VuZXJhdGUo
Q29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNz
b3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQogICAgICAgICAgICAgY29u
dGludWU7CiAKKyAgICAgICAgYWRkSXRlbShibG9jay0+bGFzdCgpKTsKKwogICAgICAgICBpZiAo
aXNSZXR1cm4oYmxvY2stPmxhc3QoKS5vcGNvZGUpKSB7CiAgICAgICAgICAgICAvLyBXZSBjdXJy
ZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwg
c28gd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRlLgpAQCAtMTk4
LDYgKzIxMiw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZVdpdGhFbXB0eUZyYW1lKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICBh
ZGRJdGVtKGJsb2NrLT5sYXN0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
IApAQCAtMjE4LDEwICsyMzMsMTMgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhl
bHBlcnMmIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGFkZEl0ZW0oYmxvY2stPmxhc3QoKSk7
CiAgICAgfQogCisgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmln
aW4oKSk7CiAgICAgZm9yIChhdXRvJiBsYXRlUGF0aCA6IGNvbnRleHQubGF0ZVBhdGhzKQogICAg
ICAgICBsYXRlUGF0aC0+cnVuKGppdCwgY29udGV4dCk7CisgICAgcGNUb09yaWdpbk1hcC5hcHBl
bmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQAogI2lu
Y2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAu
aCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0
YWJhc2UuaCIKICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCkBAIC00Mjc1LDQgKzQyNzYs
MjkgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaQogICAgIH0KIH0K
IAordm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQ
Q1RvQ29kZU9yaWdpbk1hcD4mJiBtYXApIAoreyAKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0g
V1RGTW92ZShtYXApOworfQorCitPcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQ
Qyh2b2lkKiBwYykKK3sKKyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkgeworICAgICAgICBp
ZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1fcGNUb0NvZGVPcmlnaW5NYXAt
PmZpbmRQQyhwYykpCisgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKKyAgICB9CisjaWYg
RU5BQkxFKEpJVCkKKyAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOworICAgICAgICBpZiAoc3R1Yi0+Y29udGFpbnNQ
QyhwYykpCisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oc3R1Yi0+Y29k
ZU9yaWdpbik7CisgICAgfQorCisgICAgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmln
aW4gPSBtX2ppdENvZGUtPmZpbmRQQyh0aGlzLCBwYykpCisgICAgICAgIHJldHVybiBjb2RlT3Jp
Z2luOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyAgICByZXR1cm4gTnVsbG9wdDsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBj
bGFzcyBUeXBlTG9jYXRpb247CiBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OworY2xhc3MgUENU
b0NvZGVPcmlnaW5NYXA7CiAKIGVudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsgRG9udENvdW50UmVv
cHRpbWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKIApAQCAtMjc0LDcgKzI3NSw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ppdENvZGVNYXAuZ2V0KCk7CiAgICAg
fQotICAgIAorCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVy
bkFkZHJlc3MpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5BZGRyZXNzID49
IGluc3RydWN0aW9ucygpLmJlZ2luKCkgJiYgcmV0dXJuQWRkcmVzcyA8IGluc3RydWN0aW9ucygp
LmVuZCgpKTsKQEAgLTkyNyw2ICs5MjgsOSBAQCBwdWJsaWM6CiAKICAgICBDYWxsU2l0ZUluZGV4
IG5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFs
Q2FsbFNpdGUpOwogCisgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOworICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQ
Qyh2b2lkKiBwYyk7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVD
YWNoZXMoKTsKICAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKQEAg
LTEwOTcsNiArMTEwMSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEpJVCkKICAgICBERkc6OkNh
cGFiaWxpdHlMZXZlbCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlOwogI2VuZGlmCisgICAgc3RkOjp1
bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogCiAgICAg
VW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiAgICAgV2Vh
a1JlZmVyZW5jZUhhcnZlc3RlciBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE5NTU3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwMiw2ICsxMDIsOSBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgYm9v
bCBpc0FwcHJveGltYXRlbHlFcXVhbFRvKGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdDsK
ICAgICAKICAgICB1bnNpZ25lZCBhcHByb3hpbWF0ZUhhc2goKSBjb25zdDsKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIHdhbGtVcElubGluZVN0YWNrKGNvbnN0
IEZ1bmN0aW9uJik7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRoaXMgaXMg
c2xvdywgYW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KICAgICBWZWN0b3I8Q29k
ZU9yaWdpbj4gaW5saW5lU3RhY2soKSBjb25zdDsKQEAgLTEyNyw3ICsxMzAsNyBAQCBpbmxpbmUg
Ym9vbCBDb2RlT3JpZ2luOjpvcGVyYXRvcj09KGNvbnN0CiAgICAgcmV0dXJuIGJ5dGVjb2RlSW5k
ZXggPT0gb3RoZXIuYnl0ZWNvZGVJbmRleAogICAgICAgICAmJiBpbmxpbmVDYWxsRnJhbWUgPT0g
b3RoZXIuaW5saW5lQ2FsbEZyYW1lOwogfQotICAgIAorCiBzdHJ1Y3QgQ29kZU9yaWdpbkhhc2gg
ewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENvZGVPcmlnaW4mIGtleSkgeyByZXR1
cm4ga2V5Lmhhc2goKTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENvZGVPcmlnaW4m
IGEsIGNvbnN0IENvZGVPcmlnaW4mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAkocmV2aXNp
b24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNiArMjQ2LDE4IEBAIGlubGluZSBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3IKICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2s7
CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK2lubGluZSB2b2lkIENvZGVPcmln
aW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAqdGhpczsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBmdW5jdGlvbihjb2RlT3JpZ2luKTsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKKyAgICB9Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAxOTU1Nzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMzI0LDYgKzMyNCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm91
dFRvRGllKCk7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAg
Ym9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdAorICAgIHsgCisgICAgICAgIGlmICghbV9z
dHViUm91dGluZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB1aW50cHRy
X3QgcGNBc0ludCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBjKTsKKyAgICAgICAgcmV0dXJu
IG1fc3R1YlJvdXRpbmUtPnN0YXJ0QWRkcmVzcygpIDw9IHBjQXNJbnQgJiYgcGNBc0ludCA8PSBt
X3N0dWJSb3V0aW5lLT5lbmRBZGRyZXNzKCk7CisgICAgfQogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBBY2Nlc3NDYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDEzIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZp
c2l0V2Vha1JlZmVyZW4KICAgICByZXNldChjb2RlQmxvY2spOwogICAgIHJlc2V0QnlHQyA9IHRy
dWU7CiB9CisKK2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OmNvbnRhaW5zUEModm9pZCogcGMpIGNv
bnN0Cit7CisgICAgaWYgKGNhY2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdS5zdHViLT5jb250YWluc1BDKHBjKTsKK30KICNlbmRp
ZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw4IEBAIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW47CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4OwogCisgICAgYm9vbCBjb250
YWluc1BDKHZvaWQqIHBjKSBjb25zdDsKKwogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0
dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiAr
MTMxLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8o
dW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVk
IGVuZERpdm90KTsKIAogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4
cHJlc3Npb25JbmZvLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJ
bmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAKICAg
ICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24g
MTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE1LDYgKzIxNSwxOCBAQCB2b2lkIEpJVENvZGU6OnZhbGlkYXRlUmVm
ZXJlbmNlcyhjb25zdCBUCiAgICAgbWluaWZpZWRERkcudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNr
ZWRSZWZlcmVuY2VzKTsKIH0KIAorT3B0aW9uYWw8Q29kZU9yaWdpbj4gSklUQ29kZTo6ZmluZFBD
KENvZGVCbG9jayosIHZvaWQqIHBjKQoreworICAgIGZvciAoT1NSRXhpdCYgZXhpdCA6IG9zckV4
aXQpIHsKKyAgICAgICAgaWYgKEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGhhbmRsZSA9IGV4aXQu
bV9jb2RlLmV4ZWN1dGFibGVNZW1vcnkoKSkgeworICAgICAgICAgICAgaWYgKGhhbmRsZS0+c3Rh
cnQoKSA8PSBwYyAmJiBwYyA8IGhhbmRsZS0+ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE9wdGlvbmFsPENvZGVPcmlnaW4+KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQs
NiArMTI0LDggQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGNvbW1v
bkRhdGFPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklUQ29kZSwgY29tbW9uKTsg
fQorCisgICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBj
KSBvdmVycmlkZTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVy
OyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxOTU1
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBKSVRDb21waWxlcjo6SklUQ29tcGlsZXIoR3Jh
cGgmIGRmZykKICAgICAsIG1fZ3JhcGgoZGZnKQogICAgICwgbV9qaXRDb2RlKGFkb3B0UmVmKG5l
dyBKSVRDb2RlKCkpKQogICAgICwgbV9ibG9ja0hlYWRzKGRmZy5udW1CbG9ja3MoKSkKKyAgICAs
IG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKGRmZy5tX3ZtKQogewogICAgIGlmIChzaG91bGRE
dW1wRGlzYXNzZW1ibHkoKSB8fCBtX2dyYXBoLm1fdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQog
ICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8RGlzYXNzZW1ibGVyPihk
ZmcpOwpAQCAtMzA1LDYgKzMwNiw5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZl
ciYgbGlua0IKICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25IYW5kbGVy
KG5ld0V4Y2VwdGlvbkhhbmRsZXIpOwogICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQorICAgICAgICBtX2NvZGVC
bG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQQ1RvQ29kZU9yaWdp
bk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpKTsK
IH0KIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCkBAIC0zMzksNyArMzQzLDggQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgbV9zcGVjdWxhdGl2ZS0+Y2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CiAKICAgICAvLyBHZW5lcmF0ZSBzbG93IHBhdGggY29k
ZS4KLSAgICBtX3NwZWN1bGF0aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICBtX3Nw
ZWN1bGF0aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRvcnMobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIpOworICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwg
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKICAgICAKICAg
ICBjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKICAgICBsaW5rT1NSRXhpdHMoKTsKQEAgLTQz
Miw3ICs0MzcsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIGp1
bXAoZnJvbUFyaXR5Q2hlY2spOwogICAgIAogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2Rl
LgotICAgIG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIG1fc3Bl
Y3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycyhtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cik7CisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogICAgIAogICAg
IGNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOwogICAgIGxpbmtPU1JFeGl0cygpOwpAQCAtNTk4
LDYgKzYwNCwyMiBAQCBDYWxsU2l0ZUluZGV4IEpJVENvbXBpbGVyOjpyZWNvcmRDYWxsU2l0CiAg
ICAgcmV0dXJuIGNhbGxTaXRlOwogfQogCit2b2lkIEpJVENvbXBpbGVyOjpzZXRFbmRPZk1haW5Q
YXRoKCkKK3sKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
SWdub3JpbmdXYXRjaHBvaW50cygpLCBtX3NwZWN1bGF0aXZlLT5tX29yaWdpbi5zZW1hbnRpYyk7
CisgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQorICAgICAgICByZXR1cm47CisgICAg
bV9kaXNhc3NlbWJsZXItPnNldEVuZE9mTWFpblBhdGgobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRz
KCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpzZXRFbmRPZkNvZGUoKQoreworICAgIG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNocG9pbnRz
KCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CisgICAg
aWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQorICAgICAgICByZXR1cm47CisgICAgbV9kaXNh
c3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7Cit9CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNp
b24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlRl
bXBSZWdpc3RlclNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTExOCw2ICsxMTksNyBAQCBw
dWJsaWM6CiAgICAgLy8gTWV0aG9kcyB0byBzZXQgbGFiZWxzIGZvciB0aGUgZGlzYXNzZW1ibGVy
LgogICAgIHZvaWQgc2V0U3RhcnRPZkNvZGUoKQogICAgIHsKKyAgICAgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgQ29k
ZU9yaWdpbigwLCBudWxscHRyKSk7CiAgICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVy
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0
T2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKQEAgLTEzNywxOSArMTM5LDggQEAg
cHVibGljOgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yTm9kZShub2RlLCBsYWJlbEln
bm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0RW5kT2ZNYWlu
UGF0aCgpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZk1haW5QYXRo
KGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRF
bmRPZkNvZGUoKQotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2Rl
KGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKLSAgICB9CisgICAgdm9pZCBzZXRFbmRPZk1h
aW5QYXRoKCk7CisgICAgdm9pZCBzZXRFbmRPZkNvZGUoKTsKICAgICAKICAgICBDYWxsU2l0ZUlu
ZGV4IGFkZENhbGxTaXRlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CkBAIC0yNjUsNiAr
MjU2LDggQEAgcHVibGljOgogCiAgICAgQ2FsbFNpdGVJbmRleCByZWNvcmRDYWxsU2l0ZUFuZEdl
bmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29uc3QgQ29kZU9yaWdpbiYs
IHVuc2lnbmVkIGV2ZW50U3RyZWFtSW5kZXgpOwogCisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyOwogICAgIApAQCAtMzI4LDYgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbCBt
X2NhbGxBcml0eUZpeHVwOwogICAgIExhYmVsIG1fYXJpdHlDaGVjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3BlY3VsYXRpdmVKSVQ+IG1fc3BlY3VsYXRpdmU7CisgICAgUENUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0
aEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2
ICs2Miw5IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gQnkgZGVmYXVsdCBzbG93IHBhdGggZ2VuZXJhdG9ycyBkb24ndCBoYXZlIGEgY2FsbC4KICAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpDYWxsKCk7CiAgICAgfQorCisgICAgY29uc3Qg
Tm9kZU9yaWdpbiYgb3JpZ2luKCkgY29uc3QgIHsgcmV0dXJuIG1fb3JpZ2luOyB9CisKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCop
ID0gMDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9sYWJlbDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAx
OTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMwLDEwICszMzAsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6YWRkU2xvd1BhdGhHZW5lcmF0bwogICAgIG1fc2xvd1BhdGhHZW5lcmF0b3JzLmFwcGVuZChX
VEZNb3ZlKHNsb3dQYXRoR2VuZXJhdG9yKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnJ1
blNsb3dQYXRoR2VuZXJhdG9ycygpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpydW5TbG93UGF0aEdl
bmVyYXRvcnMoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2xvd1BhdGhHZW5lcmF0b3Jz
LnNpemUoKTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3dQYXRoR2Vu
ZXJhdG9ycy5zaXplKCk7ICsraSkgeworICAgICAgICBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
YXBwZW5kSXRlbShtX2ppdC5sYWJlbCgpLCBtX3Nsb3dQYXRoR2VuZXJhdG9yc1tpXS0+b3JpZ2lu
KCkuc2VtYW50aWMpOwogICAgICAgICBtX3Nsb3dQYXRoR2VuZXJhdG9yc1tpXS0+Z2VuZXJhdGUo
dGhpcyk7CisgICAgfQogfQogCiAvLyBPbiBXaW5kb3dzIHdlIG5lZWQgdG8gd3JhcCBmbW9kOyBv
biBvdGhlciBwbGF0Zm9ybXMgd2UgY2FuIGNhbGwgaXQgZGlyZWN0bHkuCkBAIC0xNTA0LDYgKzE1
MDYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAg
IGlmIChPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgJiYgbWF5RXhpdCht
X2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKSAhPSBEb2VzTm90RXhpdCkKICAgICAgICAgICAg
IG1faml0LmppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwogCisgICAgICAgIG1faml0LnBj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcigpLmFwcGVuZEl0ZW0obV9qaXQubGFiZWwoKSwgbV9vcmln
aW4uc2VtYW50aWMpOworCiAgICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAg
IAogICAgICAgICBpZiAoYmVsb25nc0luTWluaWZpZWRHcmFwaChtX2N1cnJlbnROb2RlLT5vcCgp
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDcgKzMxNyw3IEBAIHB1YmxpYzoK
ICAgICBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKE5v
ZGUqKTsKIAogICAgIHZvaWQgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjp1bmlxdWVfcHRyPFNs
b3dQYXRoR2VuZXJhdG9yPik7Ci0gICAgdm9pZCBydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAg
ICB2b2lkIHJ1blNsb3dQYXRoR2VuZXJhdG9ycyhQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImKTsK
ICAgICAKICAgICB2b2lkIGNvbXBpbGUoTm9kZSopOwogICAgIHZvaWQgbm90aWNlT1NSQmlydGgo
Tm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxlLmNw
cAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0Nv
bXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRlRM
VW53aW5kSW5mby5oIgogI2luY2x1ZGUgIkpJVFN1YkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CkBAIC0xMzQsNiArMTM1LDEwIEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVw
b2ludDo6UmUKICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAg
IHJldHVybjsKICAgICB9CisgICAgCisgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFwID0g
c3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKKyAgICBpZiAodm0uc2hvdWxkQnVp
bGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKQorICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9D
b2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXpl
ci0+YjNDb2RlTGlua0J1ZmZlcikpOwogCiAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBi
aXR3aXNlX2Nhc3Q8R2VuZXJhdGVkRnVuY3Rpb24+KAogICAgICAgICBzdGF0ZS5maW5hbGl6ZXIt
PmIzQ29kZUxpbmtCdWZmZXItPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTk1
NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg2LDYgKzE4NiwyNSBAQCBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVn
aXN0ZXJzVG9QcmVzCiAgICAgcmV0dXJuIFJlZ2lzdGVyU2V0KCk7CiB9CiAKK09wdGlvbmFsPENv
ZGVPcmlnaW4+IEpJVENvZGU6OmZpbmRQQyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgdm9pZCogcGMp
Cit7CisgICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgeworICAgICAgICBpZiAoRXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gZXhpdC5tX2NvZGUuZXhlY3V0YWJsZU1lbW9y
eSgpKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT5zdGFydCgpIDw9IHBjICYmIHBjIDwgaGFu
ZGxlLT5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4o
ZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+JiBsYXp5U2xvd1BhdGggOiBsYXp5
U2xvd1BhdGhzKSB7CisgICAgICAgIGlmIChFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUg
PSBsYXp5U2xvd1BhdGgtPnN0dWIoKS5leGVjdXRhYmxlTWVtb3J5KCkpIHsKKyAgICAgICAgICAg
IGlmIChoYW5kbGUtPnN0YXJ0KCkgPD0gcGMgJiYgcGMgPCBoYW5kbGUtPmVuZCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihjb2RlQmxvY2stPmNvZGVPcmln
aW4obGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCkpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBOdWxsb3B0OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklUQ29kZS5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBwdWJsaWM6CiAK
ICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxp
bmdDYWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KSBvdmVycmlkZTsKIAorICAgIE9w
dGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgb3ZlcnJpZGU7
CisKICNpZiBGVExfVVNFU19CMwogICAgIENvZGVSZWYgYjNDb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9iM0NvZGU7IH0KICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNo
aW5lU3RhY2tNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDkgKzIzLDEyIEBACiAjaW5jbHVkZSAiTWFjaGluZVN0YWNrTWFya2VyLmgiCiAKICNp
bmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNs
dWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJMTEludFBDUmFuZ2VzLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1ZGUgPHN0ZGxp
Yi5oPgpAQCAtNTc3LDYgKzU4MCw2NCBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpS
ZWdpc3RlcnM6CiAjZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIGluc3RydWN0aW9uIHBvaW50
ZXIgZm9yIGFub3RoZXIgdGhyZWFkIG9uIHRoaXMgcGxhdGZvcm0KICNlbmRpZgogfQordm9pZCog
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOjpsbGludFBDKCkgY29uc3QKK3sKKyAg
ICAvLyBMTEludCB1c2VzIHJlZ1Q0IGFzIFBDLgorI2lmIE9TKERBUldJTikKKworI2lmIF9fREFS
V0lOX1VOSVgwMworCisjaWYgQ1BVKFg4NikKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTElu
dFBDID09IFg4NlJlZ2lzdGVyczo6ZXNpLCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX19lc2kpOworI2VsaWYgQ1BVKFg4Nl82NCkK
KyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6cjgsICJX
cm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVn
cy5fX3I4KTsKKyNlbGlmIENQVShBUk0pCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQ
QyA9PSBBUk1SZWdpc3RlcnM6OnI4LCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX19yWzhdKTsKKyNlbGlmIENQVShBUk02NCkKKyAg
ICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IEFSTTY0UmVnaXN0ZXJzOjp4NCwgIldy
b25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdz
Ll9feFs0XSk7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKwor
I2Vsc2UgLy8gIV9fREFSV0lOX1VOSVgwMworI2lmIENQVShYODYpCisgICAgc3RhdGljX2Fzc2Vy
dChMTEludDo6TExJbnRQQyA9PSBYODZSZWdpc3RlcnM6OmVzaSwgIldyb25nIExMSW50IFBDLiIp
OworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLmVzaSk7CisjZWxpZiBD
UFUoWDg2XzY0KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0
ZXJzOjpyOCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWdzLnI4KTsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNl
bmRpZgorCisjZW5kaWYgLy8gX19EQVJXSU5fVU5JWDAzCisKKy8vIGVuZCBPUyhEQVJXSU4pCisj
ZWxpZiBPUyhXSU5ET1dTKQorCisjaWYgQ1BVKEFSTSkKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50
OjpMTEludFBDID09IEFSTVJlZ2lzdGVyczo6cjgsICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHVpbnRwdHJfdCkgcmVncy5SOCk7CisjZWxp
ZiBDUFUoTUlQUykKKyNlcnJvciBEb250IGtub3cgd2hhdCB0byBkbyB3aXRoIG1pcHMuIERvIHdl
IGV2ZW4gbmVlZCB0aGlzPworI2VsaWYgQ1BVKFg4NikKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50
OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6ZXNpLCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCh1aW50cHRyX3QpIHJlZ3MuRXNpKTsKKyNl
bGlmIENQVShYODZfNjQpCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBYODZS
ZWdpc3RlcnM6OnIxMCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PHZvaWQqPigodWludHB0cl90KSByZWdzLlIxMCk7CisjZWxzZQorI2Vycm9yIFVua25v
d24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworI2Vsc2UKKyNlcnJvciBOZWVkIGEgd2F5IHRvIGdl
dCB0aGUgTExJbnRQQyBmb3IgYW5vdGhlciB0aHJlYWQgb24gdGhpcyBwbGF0Zm9ybQorI2VuZGlm
Cit9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogCiB2b2lkIE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWQ6OmZyZWVSZWdpc3RlcnMoVGhyZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVy
cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01h
cmtlci5oCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YWNoaW5lU3RhY2tNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQCBwdWJs
aWM6CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgdm9pZCogZnJh
bWVQb2ludGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2b2lkKiBpbnN0cnVjdGlvblBvaW50ZXIo
KSBjb25zdDsKKyAgICAgICAgICAgIHZvaWQqIGxsaW50UEMoKSBjb25zdDsKICNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICAKICNpZiBPUyhEQVJXSU4pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0U2NyaXB0
RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDE5NTU3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RTY3Jp
cHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgSlNHbG9i
YWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlcjo6SlNHbG9iYQogdm9pZCBKU0dsb2JhbE9iamVjdFNj
cmlwdERlYnVnU2VydmVyOjphdHRhY2hEZWJ1Z2dlcigpCiB7CiAgICAgYXR0YWNoKCZtX2dsb2Jh
bE9iamVjdCk7CisgICAgbV9nbG9iYWxPYmplY3Qudm0oKS5zZXRTaG91bGRCdWlsZFBDVG9Db2Rl
T3JpZ2luTWFwcGluZygpOwogICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlw
dFByb2ZpbGVyQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwCShyZXZpc2lv
biAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1
Nyw3IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6YWRkRXYKIH0KIAogI2lm
IEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLXN0YXRpYyBSZWY8UHJvdG9jb2w6OlNjcmlwdFBy
b2ZpbGVyOjpTYW1wbGVzPiBidWlsZFNhbXBsZXMoVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0
YWNrVHJhY2U+JiBzYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMsIGRvdWJsZSB0b3RhbFRpbWUp
CitzdGF0aWMgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U2FtcGxlcz4gYnVpbGRTYW1w
bGVzKFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiYmIHNhbXBsaW5nUHJvZmls
ZXJTdGFja1RyYWNlcywgZG91YmxlIHRvdGFsVGltZSkKIHsKICAgICBSZWY8UHJvdG9jb2w6OkFy
cmF5PFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U3RhY2tUcmFjZT4+IHN0YWNrVHJhY2VzID0g
UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U3RhY2tUcmFjZT46OmNy
ZWF0ZSgpOwogICAgIGZvciAoU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZSYgc3RhY2tUcmFj
ZSA6IHNhbXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcykgewpAQCAtMTY2LDggKzE2Niw4IEBAIHN0
YXRpYyBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW0KICAgICAgICAgICAgIFJlZjxQ
cm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlN0YWNrRnJhbWU+IGZyYW1lID0gUHJvdG9jb2w6OlNj
cmlwdFByb2ZpbGVyOjpTdGFja0ZyYW1lOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRT
b3VyY2VJRChTdHJpbmc6Om51bWJlcihzdGFja0ZyYW1lLnNvdXJjZUlEKCkpKQogICAgICAgICAg
ICAgICAgIC5zZXROYW1lKHN0YWNrRnJhbWUuZGlzcGxheU5hbWUoKSkKLSAgICAgICAgICAgICAg
ICAuc2V0TGluZShzdGFja0ZyYW1lLnN0YXJ0TGluZSgpKQotICAgICAgICAgICAgICAgIC5zZXRD
b2x1bW4oc3RhY2tGcmFtZS5zdGFydENvbHVtbigpKQorICAgICAgICAgICAgICAgIC5zZXRMaW5l
KHN0YWNrRnJhbWUuZnVuY3Rpb25TdGFydExpbmUoKSkKKyAgICAgICAgICAgICAgICAuc2V0Q29s
dW1uKHN0YWNrRnJhbWUuZnVuY3Rpb25TdGFydENvbHVtbigpKQogICAgICAgICAgICAgICAgIC5z
ZXRVcmwoc3RhY2tGcmFtZS51cmwoKSkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAg
ICAgICAgICAgZnJhbWVzLT5hZGRJdGVtKFdURk1vdmUoZnJhbWUpKTsKQEAgLTE5NCw4ICsxOTQs
OCBAQCB2b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnRyYWNrCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNhbXBsaW5nUHJvZmlsZXIpOwogICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwogICAgICAgICBzYW1wbGluZ1Byb2ZpbGVy
LT5zdG9wKGxvY2tlcik7Ci0gICAgICAgIFJlZjxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlNh
bXBsZXM+IHNhbXBsZXMgPSBidWlsZFNhbXBsZXMoc2FtcGxpbmdQcm9maWxlci0+c3RhY2tUcmFj
ZXMobG9ja2VyKSwgc2FtcGxpbmdQcm9maWxlci0+dG90YWxUaW1lKGxvY2tlcikpOwotICAgICAg
ICBzYW1wbGluZ1Byb2ZpbGVyLT5jbGVhckRhdGEobG9ja2VyKTsKKyAgICAgICAgVmVjdG9yPFNh
bXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+IHN0YWNrVHJhY2VzID0gc2FtcGxpbmdQcm9maWxl
ci0+cmVsZWFzZVN0YWNrVHJhY2VzKGxvY2tlcik7CisgICAgICAgIFJlZjxQcm90b2NvbDo6U2Ny
aXB0UHJvZmlsZXI6OlNhbXBsZXM+IHNhbXBsZXMgPSBidWlsZFNhbXBsZXMoV1RGTW92ZShzdGFj
a1RyYWNlcyksIHNhbXBsaW5nUHJvZmlsZXItPnRvdGFsVGltZShsb2NrZXIpKTsKIAogICAgICAg
ICBsb2NrZXIudW5sb2NrRWFybHkoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAi
UHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJT
YW1wbGluZ1Rvb2wuaCIKQEAgLTY5LDYgKzcwLDcgQEAgSklUOjpKSVQoVk0qIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKICAgICAsIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4KFVJTlRfTUFYKQog
ICAgICwgbV9jYWxsTGlua0luZm9JbmRleChVSU5UX01BWCkKICAgICAsIG1fcmFuZG9tR2VuZXJh
dG9yKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpCisgICAgLCBtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcigqdm0pCiAgICAgLCBtX2NhbkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwg
bV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogewpAQCAtMTU4LDYgKzE2MCw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2luICsgbV9ieXRlY29kZU9mZnNldDsKICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2ludGVycHJldGVyLT5pc09wY29kZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSwgInByaXZhdGVDb21waWxlTWFpblBhc3MgZ29uZSBiYWQg
QCAlZCIsIG1fYnl0ZWNvZGVPZmZzZXQpOwogCisgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSk7
CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9ieXRlY29kZU9m
ZnNldCA+IDApIC8vIEF2b2lkIHRoZSBvdmVyaGVhZCBvZiBzYW1wbGluZyBvcF9lbnRlciB0d2lj
ZS4KICAgICAgICAgICAgIHNhbXBsZUluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CkBA
IC0zNjUsNiArMzY5LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2Vz
LmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7CiAgICAgICAgIG1fYnl0ZWNv
ZGVPZmZzZXQgPSBpdGVyLT50bzsKIAorICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCkpOworCiAg
ICAgICAgIHVuc2lnbmVkIGZpcnN0VG8gPSBtX2J5dGVjb2RlT2Zmc2V0OwogCiAgICAgICAgIElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNCZWdpbiArIG1fYnl0
ZWNvZGVPZmZzZXQ7CkBAIC01MTksNiArNTI1LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpw
cml2YXRlQ29tcGlsZShKSQogICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVj
b2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CiAgICAgfQog
ICAgIAorICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwg
Q29kZU9yaWdpbigwLCBudWxscHRyKSk7CisKICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbCgpKTsKIApAQCAtNTcxLDYg
KzU3OSw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAK
ICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRP
ZlNsb3dQYXRoKGxhYmVsKCkpOworICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVu
ZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdp
bigpKTsKIAogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlT2Zm
c2V0ID0gMDsKQEAgLTYxMiw2ICs2MjEsOCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZh
dGVDb21waWxlKEpJCiAgICAgCiAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOworICAgIG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpk
ZWZhdWx0Q29kZU9yaWdpbigpKTsKKwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92
bSwgKnRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpOwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKQpAQCAtNzA4LDYgKzcxOSw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJv
ZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwogICAgICAgICBtX3ZtLT5t
X3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29tcGlsYXRpb24pOwogICAg
IH0KKworICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmco
KSkKKyAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91
bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIpLCBwYXRjaEJ1ZmZlcikpOwogICAgIAogICAgIENvZGVSZWYgcmVzdWx0ID0gRklOQUxJWkVf
Q09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCkBAIC03MTYsNyArNzMwLDcgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0
ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0
PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKLSAgICAKKwogICAgIG1fY29kZUJs
b2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogICAgIG1fY29kZUJsb2Nr
LT5zZXRKSVRDb2RlKAogICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQs
IHdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNp
bmNsdWRlICJPcGNvZGUuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1
ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlICJV
bnVzZWRQb2ludGVyLmgiCkBAIC05MTMsNiArOTE0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFdlYWtSYW5kb20gbV9yYW5kb21HZW5lcmF0b3I7CiAgICAgICAgIHN0YXRpYyBDb2RlUmVm
IHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihWTSopOwogCisgICAgICAgIFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlciBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKKwogICAgICAgICBib29s
IG1fY2FuQmVPcHRpbWl6ZWQ7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMiBAQAog
CiAjaW5jbHVkZSAiQXJpdHlDaGVja01vZGUuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNp
bmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC0xOTUsNiArMTk3LDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKEpJ
VCkKICAgICB2aXJ0dWFsIFJlZ2lzdGVyU2V0IGxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworICAgIHZp
cnR1YWwgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSB7
IFVOVVNFRF9QQVJBTShwYyk7IHJldHVybiBOdWxsb3B0OyB9CiAjZW5kaWYKIAogcHJpdmF0ZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9y
aWdpbk1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisKKyNpbmNsdWRlICJCM1BDVG9PcmlnaW5N
YXAuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgRGVsdGFDb21wcmVzc2lvbkJ1
aWxkZXIgeworcHVibGljOgorICAgIERlbHRhQ29tcHJlc3Npb25CdWlsZGVyKHNpemVfdCBtYXhT
aXplKQorICAgICAgICA6IG1fb2Zmc2V0KDApCisgICAgICAgICwgbV9tYXhTaXplKG1heFNpemUp
CisgICAgeworICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0TWFs
bG9jKG1fbWF4U2l6ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAg
IHZvaWQgd3JpdGUoVCBpdGVtKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9vZmZz
ZXQgKyBzaXplb2YoVCkgPD0gbV9tYXhTaXplKTsKKyAgICAgICAgKmJpdHdpc2VfY2FzdDxUKj4o
bV9idWZmZXIgKyBtX29mZnNldCkgPSBpdGVtOworICAgICAgICBtX29mZnNldCArPSBzaXplb2Yo
VCk7CisgICAgfQorCisgICAgdWludDhfdCogbV9idWZmZXI7IAorICAgIHNpemVfdCBtX29mZnNl
dDsKKyAgICBzaXplX3QgbV9tYXhTaXplOworfTsKKworY2xhc3MgRGVsdGFDb21wcmVzc2Vpb25S
ZWFkZXIgeworcHVibGljOgorICAgIERlbHRhQ29tcHJlc3NlaW9uUmVhZGVyKHVpbnQ4X3QqIGJ1
ZmZlciwgc2l6ZV90IHNpemUpCisgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgICAgICAs
IG1fc2l6ZShzaXplKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeyB9CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBUIHJlYWQoKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV9vZmZzZXQgKyBzaXplb2YoVCkgPD0gbV9zaXplKTsKKyAgICAgICAgVCByZXN1bHQg
PSAqYml0d2lzZV9jYXN0PFQqPihtX2J1ZmZlciArIG1fb2Zmc2V0KTsKKyAgICAgICAgbV9vZmZz
ZXQgKz0gc2l6ZW9mKFQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworcHJpdmF0
ZToKKyAgICB1aW50OF90KiBtX2J1ZmZlcjsKKyAgICBzaXplX3QgbV9zaXplOworICAgIHNpemVf
dCBtX29mZnNldDsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihWTSYgdm0pCisgICAgOiBt
X3ZtKHZtKQorICAgICwgbV9zaG91bGRCdWlsZE1hcHBpbmcodm0uc2hvdWxkQnVpbGRlclBDVG9D
b2RlT3JpZ2luTWFwcGluZygpKQoreyB9CisKK1BDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6UENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYmIG90aGVyKQor
ICAgIDogbV92bShvdGhlci5tX3ZtKQorICAgICwgbV9jb2RlUmFuZ2VzKFdURk1vdmUob3RoZXIu
bV9jb2RlUmFuZ2VzKSkKKyAgICAsIG1fc2hvdWxkQnVpbGRNYXBwaW5nKG90aGVyLm1fc2hvdWxk
QnVpbGRNYXBwaW5nKQoreyB9CisKKyNpZiBGVExfVVNFU19CMworUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoVk0mIHZtLCBCMzo6UENUb09yaWdpbk1h
cCYmIGIzUENUb09yaWdpbk1hcCkKKyAgICA6IG1fdm0odm0pCisgICAgLCBtX3Nob3VsZEJ1aWxk
TWFwcGluZyh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpCit7CisgICAg
aWYgKCFtX3Nob3VsZEJ1aWxkTWFwcGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChj
b25zdCBCMzo6UENUb09yaWdpbk1hcDo6T3JpZ2luUmFuZ2UmIG9yaWdpblJhbmdlIDogYjNQQ1Rv
T3JpZ2luTWFwLnJhbmdlcygpKSB7CisgICAgICAgIERGRzo6Tm9kZSogbm9kZSA9IGJpdHdpc2Vf
Y2FzdDxERkc6Ok5vZGUqPihvcmlnaW5SYW5nZS5vcmlnaW4uZGF0YSgpKTsKKyAgICAgICAgaWYg
KG5vZGUpCisgICAgICAgICAgICBhcHBlbmRJdGVtKG9yaWdpblJhbmdlLmxhYmVsLCBub2RlLT5v
cmlnaW4uc2VtYW50aWMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcHBlbmRJdGVtKG9y
aWdpblJhbmdlLmxhYmVsLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3Jp
Z2luKCkpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjo6YXBwZW5kSXRlbShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwsIGNvbnN0IENvZGVPcmln
aW4mIGNvZGVPcmlnaW4pCit7CisgICAgaWYgKCFtX3Nob3VsZEJ1aWxkTWFwcGluZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fY29kZVJhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgaWYg
KG1fY29kZVJhbmdlcy5sYXN0KCkuZW5kID09IGxhYmVsKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBtX2NvZGVSYW5nZXMubGFzdCgpLmVuZCA9IGxhYmVsOworICAgICAgICBpZiAobV9j
b2RlUmFuZ2VzLmxhc3QoKS5jb2RlT3JpZ2luID09IGNvZGVPcmlnaW4gfHwgIWNvZGVPcmlnaW4p
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb2RlUmFuZ2VzLmFwcGVuZChD
b2RlUmFuZ2V7bGFiZWwsIGxhYmVsLCBjb2RlT3JpZ2lufSk7Cit9CisKKworc3RhdGljIGNvbnN0
IHVpbnQ4X3Qgc2VudGluZWxQQ0RlbHRhID0gMDsKK3N0YXRpYyBjb25zdCBpbnQ4X3Qgc2VudGlu
ZWxCeXRlY29kZURlbHRhID0gMDsKKworUENUb0NvZGVPcmlnaW5NYXA6OlBDVG9Db2RlT3JpZ2lu
TWFwKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYmIGJ1aWxkZXIsIExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoYnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSk7
CisKKyAgICBpZiAoIWJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSkgeworICAgICAgICBtX3Bj
UmFuZ2VTdGFydCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCk7CisgICAg
ICAgIG1fcGNSYW5nZUVuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCk7
CisKKyAgICAgICAgbV9jb21wcmVzc2VkUENCdWZmZXJTaXplID0gMDsKKyAgICAgICAgbV9jb21w
cmVzc2VkUENzID0gbnVsbHB0cjsKKworICAgICAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1Np
emUgPSAwOworICAgICAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2lucyA9IG51bGxwdHI7CisKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvIGEgZmluYWwgdG91Y2gtdXAgb24g
dGhlIGxhc3QgcmFuZ2UgaGVyZSBiZWNhdXNlIG9mIGhvdyB3ZSBnZW5lcmF0ZSB0aGUgdGFibGUu
CisgICAgLy8gVGhlIGZpbmFsIHJhbmdlIChpZiBub24gZW1wdHkpIHdvdWxkIGJlIGlnbm9yZWQg
aWYgd2UgZGlkbid0IGFwcGVuZCBhbnkgKGFyYml0cmFyeSkKKyAgICAvLyByYW5nZSBhcyB0aGUg
bGFzdCBpdGVtIG9mIHRoZSB2ZWN0b3IuCisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpD
b2RlUmFuZ2UmIGxhc3QgPSBidWlsZGVyLm1fY29kZVJhbmdlcy5sYXN0KCk7CisgICAgaWYgKCEo
bGFzdC5zdGFydCA9PSBsYXN0LmVuZCkpCisgICAgICAgIGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmFw
cGVuZChQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZXsgbGFzdC5lbmQsIGxhc3Qu
ZW5kLCBsYXN0LmNvZGVPcmlnaW4gfSk7IC8vIFRoaXMgcmFuZ2Ugd2lsbCBuZXZlciBhY3R1YWxs
eSBiZSBmb3VuZCwgYnV0IGl0IGVuc3VyZXMgdGhlIHJlYWwgbGFzdCByYW5nZSBpcyBmb3VuZC4K
KworICAgIERlbHRhQ29tcHJlc3Npb25CdWlsZGVyIHBjQ29tcHJlc3Nvcigoc2l6ZW9mKHVpbnRw
dHJfdCkgKyBzaXplb2YodWludDhfdCkpICogYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpKTsK
KyAgICB2b2lkKiBsYXN0UENWYWx1ZSA9IG51bGxwdHI7CisgICAgYXV0byBidWlsZFBDVGFibGUg
PSBbJl0gKHZvaWQqIHBjVmFsdWUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocGNWYWx1ZSA+
IGxhc3RQQ1ZhbHVlKTsKKyAgICAgICAgdWludHB0cl90IGRlbHRhID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4ocGNWYWx1ZSkgLSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihsYXN0UENWYWx1ZSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlbHRhICE9IHNlbnRpbmVsUENEZWx0YSk7CisgICAg
ICAgIGxhc3RQQ1ZhbHVlID0gcGNWYWx1ZTsKKyAgICAgICAgaWYgKGRlbHRhID4gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpIHsKKyAgICAgICAgICAgIHBjQ29tcHJlc3Nvci53
cml0ZTx1aW50OF90PihzZW50aW5lbFBDRGVsdGEpOworICAgICAgICAgICAgcGNDb21wcmVzc29y
LndyaXRlPHVpbnRwdHJfdD4oZGVsdGEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgcGNDb21wcmVzc29yLndyaXRlPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KGRlbHRhKSk7CisgICAgfTsKKworICAgIERlbHRhQ29tcHJlc3Npb25CdWlsZGVyIGNvZGVP
cmlnaW5Db21wcmVzc29yKChzaXplb2YoaW50cHRyX3QpICsgc2l6ZW9mKGludDhfdCkgKyBzaXpl
b2YoaW50OF90KSArIHNpemVvZihJbmxpbmVDYWxsRnJhbWUqKSkgKiBidWlsZGVyLm1fY29kZVJh
bmdlcy5zaXplKCkpOworICAgIENvZGVPcmlnaW4gbGFzdENvZGVPcmlnaW4oMCwgbnVsbHB0cik7
CisgICAgYXV0byBidWlsZENvZGVPcmlnaW5UYWJsZSA9IFsmXSAoY29uc3QgQ29kZU9yaWdpbiYg
Y29kZU9yaWdpbikgeworICAgICAgICBpbnRwdHJfdCBkZWx0YSA9IHN0YXRpY19jYXN0PGludHB0
cl90Pihjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpIC0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGxh
c3RDb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBsYXN0Q29kZU9yaWdpbiA9IGNv
ZGVPcmlnaW47CisgICAgICAgIGlmIChkZWx0YSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90
Pjo6bWF4KCkgfHwgZGVsdGEgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDhfdD46Om1pbigpIHx8
IGRlbHRhID09IHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSkgeworICAgICAgICAgICAgY29kZU9yaWdp
bkNvbXByZXNzb3Iud3JpdGU8aW50OF90PihzZW50aW5lbEJ5dGVjb2RlRGVsdGEpOworICAgICAg
ICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50cHRyX3Q+KGRlbHRhKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBjb2RlT3JpZ2luQ29tcHJlc3Nvci53cml0ZTxpbnQ4X3Q+
KHN0YXRpY19jYXN0PGludDhfdD4oZGVsdGEpKTsKKworICAgICAgICBpbnQ4X3QgaGFzSW5saW5l
Q2FsbEZyYW1lQnl0ZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID8gMSA6IDA7CisgICAg
ICAgIGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPGludDhfdD4oaGFzSW5saW5lQ2FsbEZyYW1l
Qnl0ZSk7CisgICAgICAgIGlmIChoYXNJbmxpbmVDYWxsRnJhbWVCeXRlKQorICAgICAgICAgICAg
Y29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8SW5saW5lQ2FsbEZyYW1lKj4oY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpOworICAgIH07CisKKyAgICBtX3BjUmFuZ2VTdGFydCA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KGxpbmtCdWZmZXIubG9jYXRpb25PZihidWlsZGVyLm1fY29kZVJhbmdl
cy5maXJzdCgpLnN0YXJ0KS5kYXRhTG9jYXRpb24oKSk7CisgICAgbV9wY1JhbmdlRW5kID0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2Rl
UmFuZ2VzLmxhc3QoKS5lbmQpLmRhdGFMb2NhdGlvbigpKTsKKyAgICBtX3BjUmFuZ2VFbmQgLT0g
MTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWlsZGVyLm1fY29kZVJhbmdlcy5z
aXplKCk7IGkrKykgeworICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5n
ZSYgY29kZVJhbmdlID0gYnVpbGRlci5tX2NvZGVSYW5nZXNbaV07CisgICAgICAgIHZvaWQqIHN0
YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVSYW5nZS5zdGFydCkuZGF0YUxvY2F0aW9u
KCk7CisgICAgICAgIHZvaWQqIGVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2RlUmFuZ2Uu
ZW5kKS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAgQVNTRVJUKG1fcGNSYW5nZVN0YXJ0IDw9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSk7CisgICAgICAgIEFTU0VSVChtX3BjUmFuZ2VF
bmQgPj0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kKSAtIDEpOworICAgICAgICBpZiAoc3Rh
cnQgPT0gZW5kKQorICAgICAgICAgICAgQVNTRVJUKGkgPT0gYnVpbGRlci5tX2NvZGVSYW5nZXMu
c2l6ZSgpIC0gMSk7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIEFTU0VSVChsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoYnVpbGRlci5tX2NvZGVSYW5nZXNbaSAtIDFdLmVuZCkuZGF0YUxv
Y2F0aW9uKCkgPT0gc3RhcnQpOworCisgICAgICAgIGJ1aWxkUENUYWJsZShzdGFydCk7CisgICAg
ICAgIGJ1aWxkQ29kZU9yaWdpblRhYmxlKGNvZGVSYW5nZS5jb2RlT3JpZ2luKTsKKyAgICB9CisK
KyAgICBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemUgPSBwY0NvbXByZXNzb3IubV9vZmZzZXQ7Cisg
ICAgbV9jb21wcmVzc2VkUENzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKHBj
Q29tcHJlc3Nvci5tX2J1ZmZlciwgbV9jb21wcmVzc2VkUENCdWZmZXJTaXplKSk7CisKKyAgICBt
X2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemUgPSBjb2RlT3JpZ2luQ29tcHJlc3Nvci5tX29mZnNl
dDsKKyAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2lucyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihm
YXN0UmVhbGxvYyhjb2RlT3JpZ2luQ29tcHJlc3Nvci5tX2J1ZmZlciwgbV9jb21wcmVzc2VkQ29k
ZU9yaWdpbnNTaXplKSk7Cit9CisKK1BDVG9Db2RlT3JpZ2luTWFwOjp+UENUb0NvZGVPcmlnaW5N
YXAoKQoreworICAgIGlmIChtX2NvbXByZXNzZWRQQ3MpCisgICAgICAgIGZhc3RGcmVlKG1fY29t
cHJlc3NlZFBDcyk7CisgICAgaWYgKG1fY29tcHJlc3NlZENvZGVPcmlnaW5zKQorICAgICAgICBm
YXN0RnJlZShtX2NvbXByZXNzZWRDb2RlT3JpZ2lucyk7Cit9CisKK2RvdWJsZSBQQ1RvQ29kZU9y
aWdpbk1hcDo6bWVtb3J5U2l6ZSgpCit7CisgICAgZG91YmxlIHNpemUgPSAwOworICAgIHNpemUg
Kz0gbV9jb21wcmVzc2VkUENCdWZmZXJTaXplOworICAgIHNpemUgKz0gbV9jb21wcmVzc2VkQ29k
ZU9yaWdpbnNTaXplOworICAgIHJldHVybiBzaXplOworfQorCitPcHRpb25hbDxDb2RlT3JpZ2lu
PiBQQ1RvQ29kZU9yaWdpbk1hcDo6ZmluZFBDKHZvaWQqIHBjKSBjb25zdAoreworICAgIHVpbnRw
dHJfdCBwY0FzSW50ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocGMpOworICAgIGlmICghKG1f
cGNSYW5nZVN0YXJ0IDw9IHBjQXNJbnQgJiYgcGNBc0ludCA8PSBtX3BjUmFuZ2VFbmQpKQorICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKKworICAgIHVpbnRwdHJfdCBjdXJyZW50UEMgPSAwOworICAg
IENvZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oMCwgbnVsbHB0cik7CisKKyAgICBEZWx0YUNv
bXByZXNzZWlvblJlYWRlciBwY1JlYWRlcihtX2NvbXByZXNzZWRQQ3MsIG1fY29tcHJlc3NlZFBD
QnVmZmVyU2l6ZSk7CisgICAgRGVsdGFDb21wcmVzc2Vpb25SZWFkZXIgY29kZU9yaWdpblJlYWRl
cihtX2NvbXByZXNzZWRDb2RlT3JpZ2lucywgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplKTsK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB1aW50cHRyX3QgcHJldmlvdXNQQyA9IGN1cnJl
bnRQQzsKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhfdCB2YWx1ZSA9IHBjUmVhZGVyLnJl
YWQ8dWludDhfdD4oKTsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBkZWx0YTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZSA9PSBzZW50aW5lbFBDRGVsdGEpCisgICAgICAgICAgICAgICAgZGVsdGEgPSBw
Y1JlYWRlci5yZWFkPHVpbnRwdHJfdD4oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBkZWx0YSA9IHZhbHVlOworICAgICAgICAgICAgY3VycmVudFBDICs9IGRlbHRhOworICAg
ICAgICB9CisKKyAgICAgICAgQ29kZU9yaWdpbiBwcmV2aW91c09yaWdpbiA9IGN1cnJlbnRDb2Rl
T3JpZ2luOworICAgICAgICB7CisgICAgICAgICAgICBpbnQ4X3QgdmFsdWUgPSBjb2RlT3JpZ2lu
UmVhZGVyLnJlYWQ8aW50OF90PigpOworICAgICAgICAgICAgaW50cHRyX3QgZGVsdGE7CisgICAg
ICAgICAgICBpZiAodmFsdWUgPT0gc2VudGluZWxCeXRlY29kZURlbHRhKQorICAgICAgICAgICAg
ICAgIGRlbHRhID0gY29kZU9yaWdpblJlYWRlci5yZWFkPGludHB0cl90PigpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHZh
bHVlKTsKKworICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY3VycmVudENvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCkgKyBkZWx0YSk7CisKKyAgICAgICAgICAgIGludDhfdCBoYXNJbmxp
bmVGcmFtZSA9IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxpbnQ4X3Q+KCk7CisgICAgICAgICAgICBB
U1NFUlQoaGFzSW5saW5lRnJhbWUgPT0gMCB8fCBoYXNJbmxpbmVGcmFtZSA9PSAxKTsKKyAgICAg
ICAgICAgIGlmIChoYXNJbmxpbmVGcmFtZSkKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUmVhZGVyLnJlYWQ8SW5saW5lQ2FsbEZy
YW1lKj4oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHByZXZpb3VzUEMpIHsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBzdGFydE9mUmFuZ2UgPSBwcmV2
aW91c1BDOworICAgICAgICAgICAgLy8gV2Ugc3VidHJhY3QgMSBiZWNhdXNlIHdlIGdlbmVyYXRl
IGVuZCBwb2ludHMgaW5jbHVzaXZlbHkgaW4gdGhpcyB0YWJsZSwgZXZlbiB0aG91Z2ggd2UgYXJl
IGludGVyZXN0ZWQgaW4gcmFuZ2VzIG9mIHRoZSBmb3JtOiBbcHJldmlvdXNQQywgY3VycmVudFBD
KQorICAgICAgICAgICAgdWludHB0cl90IGVuZE9mUmFuZ2UgPSBjdXJyZW50UEMgLSAxOworICAg
ICAgICAgICAgaWYgKHN0YXJ0T2ZSYW5nZSA8PSBwY0FzSW50ICYmIHBjQXNJbnQgPD0gZW5kT2ZS
YW5nZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4ocHJldmlv
dXNPcmlnaW4pOyAvLyBXZSByZXR1cm4gcHJldmlvdXNPcmlnaW4gaGVyZSBiZWNhdXNlIENvZGVP
cmlnaW4ncyBhcmUgbWFwcGVkIHRvIHRoZSBzdGFydFZhbHVlIG9mIHRoZSByYW5nZS4KKyAgICAg
ICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIE51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFBDVG9Db2RlT3JpZ2luTWFwX2gKKyNkZWZpbmUgUENUb0NvZGVP
cmlnaW5NYXBfaAorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNs
dWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKKyNpZiBGVExfVVNFU19CMworbmFtZXNwYWNlIEIzIHsKK2NsYXNzIFBDVG9PcmlnaW5N
YXA7Cit9CisjZW5kaWYKKworY2xhc3MgTGlua0J1ZmZlcjsKK2NsYXNzIFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjsKKworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOworICAgIGZyaWVuZCBj
bGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKKworcHVibGljOgorICAgIFBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcihWTSYpOworICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXImJiBvdGhlcik7CisKKyNpZiBGVExfVVNFU19CMworICAgIFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcihWTSYsIEIzOjpQQ1RvT3JpZ2luTWFwJiYpOworI2VuZGlmCisKKyAgICB2
b2lkIGFwcGVuZEl0ZW0oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsLCBjb25zdCBDb2RlT3JpZ2luJik7
CisgICAgc3RhdGljIENvZGVPcmlnaW4gZGVmYXVsdENvZGVPcmlnaW4oKSB7IHJldHVybiBDb2Rl
T3JpZ2luKDAsIG51bGxwdHIpOyB9CisKKyAgICBib29sIGRpZEJ1aWxkTWFwcGluZygpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkQnVpbGRNYXBwaW5nOyB9CisKK3ByaXZhdGU6CisKKyAgICBzdHJ1
Y3QgQ29kZVJhbmdlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHN0YXJ0OworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZW5kOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW47CisgICAgfTsKKworICAgIFZNJiBtX3ZtOworICAgIFZlY3RvcjxDb2RlUmFuZ2U+IG1f
Y29kZVJhbmdlczsKKyAgICBib29sIG1fc2hvdWxkQnVpbGRNYXBwaW5nOworfTsKKworY2xhc3Mg
UENUb0NvZGVPcmlnaW5NYXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBDVG9Db2RlT3Jp
Z2luTWFwKTsKK3B1YmxpYzoKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcChQQ1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXImJiwgTGlua0J1ZmZlciYpOworICAgIH5QQ1RvQ29kZU9yaWdpbk1hcCgpOworCisg
ICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKSBjb25zdDsKKworICAgIGRv
dWJsZSBtZW1vcnlTaXplKCk7CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1fY29tcHJlc3NlZFBD
QnVmZmVyU2l6ZTsKKyAgICBzaXplX3QgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplOworICAg
IHVpbnQ4X3QqIG1fY29tcHJlc3NlZFBDczsKKyAgICB1aW50OF90KiBtX2NvbXByZXNzZWRDb2Rl
T3JpZ2luczsKKyAgICB1aW50cHRyX3QgbV9wY1JhbmdlU3RhcnQ7CisgICAgdWludHB0cl90IG1f
cGNSYW5nZUVuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUENUb0Nv
ZGVPcmlnaW5NYXBfaCAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFBD
UmFuZ2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
UENSYW5nZXMuaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50UENSYW5nZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTAgQEAgQUxX
QVlTX0lOTElORSBib29sIGlzTExJbnRQQyh2b2lkKiBwYykKICAgICByZXR1cm4gbGxpbnRTdGFy
dCA8PSBwY0FzSW50ICYmIHBjQXNJbnQgPD0gbGxpbnRFbmQ7CiB9CiAKKyNpZiBFTkFCTEUoSklU
KQorc3RhdGljIGNvbnN0IEdQUlJlZyBMTEludFBDID0gR1BSSW5mbzo6cmVnVDQ7CisjZW5kaWYK
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CiAKICNlbmRpZiAvLyBMTEludFBDUmFuZ2Vz
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcg
KzI1OCw3IEBAIGlmIEpTVkFMVUU2NAogICAgICMgLSBUaGUgUEMgYmFzZSAob3IgUEIgZm9yIHNo
b3J0KSBtdXN0IGJlIHN0b3JlZCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyLgogICAgICMgLSBD
IGNhbGxzIGFyZSBzdGlsbCBnaXZlbiB0aGUgSW5zdHJ1Y3Rpb24qIHJhdGhlciB0aGFuIHRoZSBQ
QyBpbmRleC4KICAgICAjICAgVGhpcyByZXF1aXJlcyBhbiBhZGQgYmVmb3JlIHRoZSBjYWxsLCBh
bmQgYSBzdWIgYWZ0ZXIuCi0gICAgY29uc3QgUEMgPSB0NAorICAgIGNvbnN0IFBDID0gdDQgIyBX
aGVuIGNoYW5naW5nIHRoaXMsIG1ha2Ugc3VyZSBMTEludFBDIGlzIHVwIHRvIGRhdGUgaW4gTExJ
bnRQQ1Jhbmdlcy5oCiAgICAgaWYgQVJNNjQKICAgICAgICAgY29uc3QgUEIgPSBjc3I3CiAgICAg
ICAgIGNvbnN0IHRhZ1R5cGVOdW1iZXIgPSBjc3I4CkBAIC0yOTAsNyArMjkwLDcgQEAgaWYgSlNW
QUxVRTY0CiAgICAgZW5kCiAKIGVsc2UKLSAgICBjb25zdCBQQyA9IHQ0CisgICAgY29uc3QgUEMg
PSB0NCAjIFdoZW4gY2hhbmdpbmcgdGhpcywgbWFrZSBzdXJlIExMSW50UEMgaXMgdXAgdG8gZGF0
ZSBpbiBMTEludFBDUmFuZ2VzLmgKICAgICBtYWNybyBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24ob2Zm
c2V0LCBkZXN0KQogICAgICAgICBsb2FkaXMgb2Zmc2V0ICogNFtQQ10sIGRlc3QKICAgICBlbmQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJv
ZmlsZXIuY3BwCShyZXZpc2lvbiAxOTU1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBA
QAogI2luY2x1ZGUgIkxMSW50UENSYW5nZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgog
I2luY2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAu
aCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIlZNLmgiCkBAIC00OSw3ICs1MCw2IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogc3RhdGljIGRvdWJsZSBzTnVtVG90YWxTdGFja1RyYWNlcyA9IDA7Ci1zdGF0aWMgZG91Ymxl
IHNOdW1VbnZlcmlmaWVkU3RhY2tUcmFjZXMgPSAwOwogc3RhdGljIGRvdWJsZSBzTnVtVG90YWxX
YWxrcyA9IDA7CiBzdGF0aWMgZG91YmxlIHNOdW1GYWlsZWRXYWxrcyA9IDA7CiBzdGF0aWMgY29u
c3QgdWludDMyX3Qgc051bVdhbGtSZXBvcnRpbmdGcmVxdWVuY3kgPSA1MDsKQEAgLTU4LDYgKzU4
LDggQEAgc3RhdGljIGNvbnN0IGJvb2wgc1JlcG9ydFN0YXRzT25seVdoZW5UaAogc3RhdGljIGNv
bnN0IGJvb2wgc1JlcG9ydFN0YXRzID0gZmFsc2U7CiAKIHVzaW5nIEZyYW1lVHlwZSA9IFNhbXBs
aW5nUHJvZmlsZXI6OkZyYW1lVHlwZTsKK3VzaW5nIFVucHJvY2Vzc2VkRnJhbWVUeXBlID0gU2Ft
cGxpbmdQcm9maWxlcjo6VW5wcm9jZXNzZWRGcmFtZVR5cGU7Cit1c2luZyBVbnByb2Nlc3NlZFN0
YWNrRnJhbWUgPSBTYW1wbGluZ1Byb2ZpbGVyOjpVbnByb2Nlc3NlZFN0YWNrRnJhbWU7CiAKIEFM
V0FZU19JTkxJTkUgc3RhdGljIHZvaWQgcmVwb3J0U3RhdHMoKQogewpAQCAtNjUsOCArNjcsNiBA
QCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHJlcG9ydFN0YXRzKCkKICAgICAgICAgaWYgKCFz
UmVwb3J0U3RhdHNPbmx5V2hlblRoZXlyZUFib3ZlVGhyZXNob2xkIHx8IChzTnVtRmFpbGVkV2Fs
a3MgLyBzTnVtVG90YWxXYWxrcyA+IHNXYWxrRXJyb3JQZXJjZW50YWdlKSkgewogICAgICAgICAg
ICAgZGF0YUxvZ0YoIk51bSB0b3RhbCB3YWxrczogJWxsdS4gRmFpbGVkIHdhbGtzIHBlcmNlbnQ6
ICVsZlxuIiwKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc051bVRvdGFs
V2Fsa3MpLCBzTnVtRmFpbGVkV2Fsa3MgLyBzTnVtVG90YWxXYWxrcyk7Ci0gICAgICAgICAgICBk
YXRhTG9nRigiVG90YWwgc3RhY2sgdHJhY2VzOiAlbGx1LiBOZWVkcyB2ZXJpZmljYXRpb24gcGVy
Y2VudDogJWxmXG4iLAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzTnVt
VG90YWxTdGFja1RyYWNlcyksIHNOdW1VbnZlcmlmaWVkU3RhY2tUcmFjZXMgLyBzTnVtVG90YWxT
dGFja1RyYWNlcyk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04MiwzMyArODIsMjAgQEAgcHVi
bGljOgogICAgIHsKICAgICB9CiAKLSAgICBzaXplX3Qgd2FsayhWZWN0b3I8U2FtcGxpbmdQcm9m
aWxlcjo6U3RhY2tGcmFtZT4mIHN0YWNrVHJhY2UsIGJvb2wmIGRpZFJ1bk91dE9mU3BhY2UsIGJv
b2wmIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbikKKyAgICBzaXplX3Qgd2FsayhWZWN0b3I8
VW5wcm9jZXNzZWRTdGFja0ZyYW1lPiYgc3RhY2tUcmFjZSwgYm9vbCYgZGlkUnVuT3V0T2ZTcGFj
ZSkKICAgICB7Ci0gICAgICAgIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbiA9IGZhbHNlOwog
ICAgICAgICBpZiAoc1JlcG9ydFN0YXRzKQogICAgICAgICAgICAgc051bVRvdGFsV2Fsa3MrKzsK
ICAgICAgICAgcmVzZXRBdE1hY2hpbmVGcmFtZSgpOwogICAgICAgICBzaXplX3QgbWF4U3RhY2tU
cmFjZVNpemUgPSBzdGFja1RyYWNlLnNpemUoKTsKICAgICAgICAgd2hpbGUgKCFpc0F0VG9wKCkg
JiYgIW1fYmFpbGluZ091dCAmJiBtX2RlcHRoIDwgbWF4U3RhY2tUcmFjZVNpemUpIHsKLSAgICAg
ICAgICAgIHdoaWxlIChtX2lubGluZUNhbGxGcmFtZSAmJiBtX2RlcHRoIDwgbWF4U3RhY2tUcmFj
ZVNpemUpIHsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5saW5l
Q2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChpc1ZhbGlkQ29kZUJsb2NrKGNvZGVCbG9jaykpOwotICAgICAgICAgICAgICAg
IHN0YWNrVHJhY2VbbV9kZXB0aF0gPSBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lKFNhbXBs
aW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpKTsKLSAgICAgICAgICAgICAgICBtX2RlcHRoKys7Ci0gICAgICAgICAg
ICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSBtX2lubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVy
LmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fZGVw
dGggPj0gbWF4U3RhY2tUcmFjZVNpemUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpOwot
ICAgICAgICAgICAgaWYgKGlzVmFsaWRDb2RlQmxvY2soY29kZUJsb2NrKSkgewotICAgICAgICAg
ICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKTsKLSAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gU2FtcGxpbmdQ
cm9maWxlcjo6U3RhY2tGcmFtZShGcmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0YWJsZSxleGVjdXRh
YmxlKTsKKyAgICAgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY2FsbEZyYW1l
LT5jb2RlQmxvY2soKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkQ29kZUJsb2Nr
KGNvZGVCbG9jaykpOworICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0gPSBVbnBy
b2Nlc3NlZFN0YWNrRnJhbWUoY29kZUJsb2NrLCBtX2NhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RhY2t0cmFjZU5lZWRz
VmVyaWZpY2F0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2Rl
QmxvY2sgPT0gbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB1bnNhZmVDYWxsZWUg
PSBtX2NhbGxGcmFtZS0+dW5zYWZlQ2FsbGVlKCk7Ci0gICAgICAgICAgICAgICAgc3RhY2tUcmFj
ZVttX2RlcHRoXSA9IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWUoRnJhbWVUeXBlOjpVbnZl
cmlmaWVkQ2FsbGVlLCBKU1ZhbHVlOjplbmNvZGUodW5zYWZlQ2FsbGVlKSk7CisgICAgICAgICAg
ICAgICAgc3RhY2tUcmFjZVttX2RlcHRoXSA9IFVucHJvY2Vzc2VkU3RhY2tGcmFtZShKU1ZhbHVl
OjplbmNvZGUodW5zYWZlQ2FsbGVlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2Rl
cHRoKys7CiAgICAgICAgICAgICBhZHZhbmNlVG9QYXJlbnRGcmFtZSgpOwpAQCAtMTM4LDggKzEy
NSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlc2V0QXRNYWNoaW5lRnJhbWUoKQogICAgIHsK
LSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyOwotCiAgICAgICAgIGlmIChpc0F0
VG9wKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTE1MSw5ICsxMzYsNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGRvZXNuJ3QgaGF2ZSBhIGNvZGUgYmxvY2ssIHRoZW4g
aXQncyBub3QgYSAKLSAgICAgICAgLy8gREZHL0ZUTCBmcmFtZSB3aGljaCBtZWFucyB3ZSdyZSBu
b3QgYW4gaW5saW5lZCBmcmFtZS4KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2Nh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGlmICghY29kZUJsb2NrKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTY0LDI1ICsxNDYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IHNOdW1GYWlsZWRXYWxrcysrOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gSWYgdGhlIGNvZGUgYmxvY2sgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBvcmlnaW5z
LCB0aGVuIHRoZXJlJ3Mgbm8KLSAgICAgICAgLy8gaW5saW5pbmcuIEhlbmNlLCB3ZSdyZSBub3Qg
YXQgYW4gaW5saW5lZCBmcmFtZS4KLSAgICAgICAgaWYgKCFjb2RlQmxvY2stPmhhc0NvZGVPcmln
aW5zKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ2FsbFNpdGVJbmRleCBpbmRl
eCA9IG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7Ci0gICAgICAgIGlmICghY29kZUJsb2Nr
LT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSkgewotICAgICAgICAgICAgLy8gRklYTUU6Ci0gICAg
ICAgICAgICAvLyBGb3IgdGhlIG1vc3QgcGFydCwgd2Ugb25seSBmYWlsIGhlcmUgd2hlbiB3ZSdy
ZSBsb29raW5nCi0gICAgICAgICAgICAvLyBhdCB0aGUgdG9wIG1vc3QgY2FsbCBmcmFtZS4gQWxs
IG90aGVyIHBhcmVudCBjYWxsIGZyYW1lcwotICAgICAgICAgICAgLy8gc2hvdWxkIGhhdmUgc2V0
IHRoZSBDYWxsU2l0ZUluZGV4IHdoZW4gbWFraW5nIGEgY2FsbC4KLSAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAvLyBXZSBzaG91bGQgcmVzb3J0IHRvIGdldHRpbmcgaW5mb3JtYXRpb24gZnJv
bSB0aGUgUEM9PkNvZGVPcmlnaW4gbWFwcGluZwotICAgICAgICAgICAgLy8gb25jZSB3ZSBpbXBs
ZW1lbnQgaXQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI2MjkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2lubGluZUNhbGxGcmFt
ZSA9IGNvZGVCbG9jay0+Y29kZU9yaWdpbihpbmRleCkuaW5saW5lQ2FsbEZyYW1lOwotI2VuZGlm
IC8vICFFTkFCTEUoREZHX0pJVCkKICAgICB9CiAKICAgICBib29sIGlzVmFsaWRGcmFtZVBvaW50
ZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMjEzLDE0ICsxNzYsMTIgQEAgcHJpdmF0ZToKICAgICBj
b25zdCBMb2NrSG9sZGVyJiBtX2NvZGVCbG9ja1NldExvY2tlcjsKICAgICBjb25zdCBMb2NrSG9s
ZGVyJiBtX21hY2hpbmVUaHJlYWRzTG9ja2VyOwogICAgIGJvb2wgbV9iYWlsaW5nT3V0IHsgZmFs
c2UgfTsKLSAgICBJbmxpbmVDYWxsRnJhbWUqIG1faW5saW5lQ2FsbEZyYW1lOwogICAgIHNpemVf
dCBtX2RlcHRoIHsgMCB9OwogfTsKIAogU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxl
cihWTSYgdm0sIFJlZlB0cjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNoKQogICAgIDogbV92bSh2bSkK
ICAgICAsIG1fc3RvcHdhdGNoKFdURk1vdmUoc3RvcHdhdGNoKSkKLSAgICAsIG1faW5kZXhPZk5l
eHRTdGFja1RyYWNlVG9WZXJpZnkoMCkKICAgICAsIG1fdGltaW5nSW50ZXJ2YWwoc3RkOjpjaHJv
bm86Om1pY3Jvc2Vjb25kcygxMDAwKSkKICAgICAsIG1fdG90YWxUaW1lKDApCiAgICAgLCBtX3Rp
bWVyUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImpzYy5zYW1wbGluZy1wcm9maWxlci5xdWV1ZSIs
IFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsLCBXb3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZl
KSkKQEAgLTI1NiwyMyArMjE3LDI3IEBAIFNhbXBsaW5nUHJvZmlsZXI6OlNhbXBsaW5nUHJvZmls
ZXIoVk0mIHYKICAgICAgICAgICAgICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNw
ZW5kZWQsIHdlIGNhbid0IGRvIHRoaW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhy
ZWFkCiAgICAgICAgICAgICAgICAgLy8gbWF5IGJlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2NrLgog
ICAgICAgICAgICAgICAgIEV4ZWNTdGF0ZSogY2FsbEZyYW1lOwotICAgICAgICAgICAgICAgIHZv
aWQqIHBjOworICAgICAgICAgICAgICAgIHZvaWQqIG1hY2hpbmVQQzsKKyAgICAgICAgICAgICAg
ICBib29sIHRvcEZyYW1lSXNMTEludCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHZvaWQqIGxs
aW50UEM7CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBNYWNoaW5lVGhy
ZWFkczo6VGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgICAgICAgICAgICAgICAgICBt
X2pzY0V4ZWN1dGlvblRocmVhZC0+Z2V0UmVnaXN0ZXJzKHJlZ2lzdGVycyk7CiAgICAgICAgICAg
ICAgICAgICAgIGNhbGxGcmFtZSA9IHN0YXRpY19jYXN0PEV4ZWNTdGF0ZSo+KHJlZ2lzdGVycy5m
cmFtZVBvaW50ZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBjID0gcmVnaXN0ZXJzLmluc3Ry
dWN0aW9uUG9pbnRlcigpOworICAgICAgICAgICAgICAgICAgICBtYWNoaW5lUEMgPSByZWdpc3Rl
cnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGxsaW50UEMgPSBy
ZWdpc3RlcnMubGxpbnRQQygpOwogICAgICAgICAgICAgICAgICAgICBtX2pzY0V4ZWN1dGlvblRo
cmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogTGV0cyBoYXZlIGEgd2F5IG9mIGRldGVjdGluZyB3aGVuIHdl
J3JlIHBhcnNpbmcgY29kZS4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzYxCi0gICAgICAgICAgICAgICAgaWYgKG1fdm0uZXhl
Y3V0YWJsZUFsbG9jYXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlQWxsb2Nh
dG9yTG9ja2VyLCBwYykpIHsKKyAgICAgICAgICAgICAgICBpZiAobV92bS5leGVjdXRhYmxlQWxs
b2NhdG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIs
IG1hY2hpbmVQQykpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdm0uaXNFeGVjdXRpbmdJ
blJlZ0V4cEpJVCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIGV4
ZWN1dGluZyBhIHJlZ2V4cC4gTGV0cyBnYXRoZXIgbW9yZSBpbnRlcnN0aW5nIGRhdGEuCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUyNzI5CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBtX3ZtLnRv
cENhbGxGcmFtZTsgLy8gV2UgbmVlZCB0byBkbyB0aGlzIG9yIGVsc2Ugd2UnZCBmYWlsIG91ciBi
YWNrdHJhY2UgdmFsaWRhdGlvbiBiL2MgdGhpcyBpc24ndCBhIEpTIGZyYW1lLgogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChMTEludDo6aXNMTEludFBD
KHBjKSkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTExJbnQ6OmlzTExJbnRQQyhtYWNo
aW5lUEMpKSB7CisgICAgICAgICAgICAgICAgICAgIHRvcEZyYW1lSXNMTEludCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG9rYXkgdG8gdGFrZSBhIG5vcm1hbCBzdGFjayB0
cmFjZSB3aGVuIHRoZSBQQwogICAgICAgICAgICAgICAgICAgICAvLyBpcyBpbiBMTEludCBjb2Rl
LgogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yODQsMTAgKzI0OSw5IEBAIFNhbXBsaW5n
UHJvZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIoVk0mIHYKICAgICAgICAgICAgICAgICBzaXplX3Qg
d2Fsa1NpemU7CiAgICAgICAgICAgICAgICAgYm9vbCB3YXNWYWxpZFdhbGs7CiAgICAgICAgICAg
ICAgICAgYm9vbCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlOwotICAgICAgICAgICAgICAgIGJvb2wg
c3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uOwogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgRnJhbWVXYWxrZXIgd2Fsa2VyKGNhbGxGcmFtZSwgbV92bSwgY29kZUJsb2Nr
U2V0TG9ja2VyLCBtYWNoaW5lVGhyZWFkc0xvY2tlcik7Ci0gICAgICAgICAgICAgICAgICAgIHdh
bGtTaXplID0gd2Fsa2VyLndhbGsobV9jdXJyZW50RnJhbWVzLCBkaWRSdW5PdXRPZlZlY3RvclNw
YWNlLCBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24pOworICAgICAgICAgICAgICAgICAgICB3
YWxrU2l6ZSA9IHdhbGtlci53YWxrKG1fY3VycmVudEZyYW1lcywgZGlkUnVuT3V0T2ZWZWN0b3JT
cGFjZSk7CiAgICAgICAgICAgICAgICAgICAgIHdhc1ZhbGlkV2FsayA9IHdhbGtlci53YXNWYWxp
ZFdhbGsoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5OCwyMSArMjYyLDE2IEBAIFNhbXBs
aW5nUHJvZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIoVk0mIHYKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSXQnZCBiZSBpbnRlcmVzdGluZyB0byB0YWtlIGRhdGEgYWJvdXQgdGhlIHByb2dyYW0n
cyBzdGF0ZSB3aGVuCiAgICAgICAgICAgICAgICAgLy8gd2UgZmFpbCB0byB0YWtlIGEgc3RhY2sg
dHJhY2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NTgKICAg
ICAgICAgICAgICAgICBpZiAod2FzVmFsaWRXYWxrICYmIHdhbGtTaXplKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChzUmVwb3J0U3RhdHMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNS
ZXBvcnRTdGF0cykKICAgICAgICAgICAgICAgICAgICAgICAgIHNOdW1Ub3RhbFN0YWNrVHJhY2Vz
Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0
aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNOdW1VbnZlcmlmaWVkU3RhY2tUcmFj
ZXMrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFVucHJv
Y2Vzc2VkU3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKICAgICAgICAgICAgICAgICAgICAgc3RhY2tU
cmFjZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHdhbGtTaXplKTsKICAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3YWxrU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBTdGFja0ZyYW1lIGZyYW1lID0gbV9jdXJyZW50RnJhbWVzW2ldOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZS51bmNoZWNrZWRBcHBlbmQoZnJhbWUpOyAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZS5mcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpW
ZXJpZmllZEV4ZWN1dGFibGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWVuRXhl
Y3V0YWJsZXMuYWRkKGZyYW1lLnUudmVyaWZpZWRFeGVjdXRhYmxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFVucHJvY2Vzc2VkU3RhY2tGcmFtZSBmcmFtZSA9IG1fY3VycmVudEZyYW1lc1tp
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrVHJhY2UudW5jaGVja2VkQXBwZW5kKGZy
YW1lKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIG1fc3Rh
Y2tUcmFjZXMuYXBwZW5kKFN0YWNrVHJhY2V7IHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbiwg
bm93VGltZSwgV1RGTW92ZShzdGFja1RyYWNlKSB9KTsKKyAgICAgICAgICAgICAgICAgICAgbV91
bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmFwcGVuZChVbnByb2Nlc3NlZFN0YWNrVHJhY2UgeyBub3dU
aW1lLCBtYWNoaW5lUEMsIHRvcEZyYW1lSXNMTEludCwgbGxpbnRQQywgV1RGTW92ZShzdGFja1Ry
YWNlKSB9KTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoZGlkUnVuT3V0T2ZWZWN0b3JTcGFj
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lcy5ncm93KG1fY3VycmVu
dEZyYW1lcy5zaXplKCkgKiAxLjI1KTsKQEAgLTMzMiw2ICsyOTEsMzAgQEAgU2FtcGxpbmdQcm9m
aWxlcjo6flNhbXBsaW5nUHJvZmlsZXIoKQogewogfQogCitzdGF0aWMgQUxXQVlTX0lOTElORSB1
bnNpZ25lZCB0cnlHZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIGxsaW50UEMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBib29sJiBpc1ZhbGlkKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFjb2RlQmxv
Y2stPmhhc0NvZGVPcmlnaW5zKCkpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICB1bnNpZ25l
ZCBieXRlY29kZUluZGV4ID0gbGxpbnRQQzsKKyAgICBpZiAoYnl0ZWNvZGVJbmRleCA8IGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpKSB7CisgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAg
ICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKKyAgICB9CisgICAgaXNWYWxpZCA9IGZhbHNlOwor
ICAgIHJldHVybiAwOworI2Vsc2UKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiaXR3
aXNlX2Nhc3Q8SW5zdHJ1Y3Rpb24qPihsbGludFBDKTsKKyAgICBpZiAoaW5zdHJ1Y3Rpb24gPj0g
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICYmIGluc3RydWN0aW9uIDwgY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50
KCkpIHsKKyAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXggPSBpbnN0cnVjdGlvbiAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsK
KyAgICAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXg7CisgICAgfQorICAgIGlzVmFsaWQgPSBmYWxz
ZTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCiB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnBy
b2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVl
ZHMgdG8gYmUgY2FsbGVkIGZyb20gdGhlIEpTQyBleGVjdXRpb24gdGhyZWFkLgpAQCAtMzQwLDIy
ICszMjMsMzAgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAg
IFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIgPSBtX3ZtLmhlYXAub2JqZWN0U3BhY2UoKS5ibG9ja3Mo
KS5maWx0ZXIoKTsKICAgICBNYXJrZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQgPSBtX3ZtLmhl
YXAub2JqZWN0U3BhY2UoKS5ibG9ja3MoKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5k
ZXhPZk5leHRTdGFja1RyYWNlVG9WZXJpZnk7IGkgPCBtX3N0YWNrVHJhY2VzLnNpemUoKTsgaSsr
KSB7Ci0gICAgICAgIFN0YWNrVHJhY2UmIHN0YWNrVHJhY2UgPSBtX3N0YWNrVHJhY2VzW2ldOyAK
LSAgICAgICAgaWYgKCFzdGFja1RyYWNlLm5lZWRzVmVyaWZpY2F0aW9uKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHN0YWNrVHJhY2UubmVlZHNWZXJpZmljYXRpb24gPSBmYWxzZTsK
LQotICAgICAgICBmb3IgKFN0YWNrRnJhbWUmIHN0YWNrRnJhbWUgOiBzdGFja1RyYWNlLmZyYW1l
cykgewotICAgICAgICAgICAgaWYgKHN0YWNrRnJhbWUuZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6
VW52ZXJpZmllZENhbGxlZSkgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNr
RnJhbWUuZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICBmb3IgKFVucHJvY2Vzc2VkU3RhY2tUcmFjZSYgdW5w
cm9jZXNzZWRTdGFja1RyYWNlIDogbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzKSB7CisgICAgICAg
IG1fc3RhY2tUcmFjZXMuYXBwZW5kKFN0YWNrVHJhY2UoKSk7CisgICAgICAgIFN0YWNrVHJhY2Um
IHN0YWNrVHJhY2UgPSBtX3N0YWNrVHJhY2VzLmxhc3QoKTsKKyAgICAgICAgc3RhY2tUcmFjZS50
aW1lc3RhbXAgPSB1bnByb2Nlc3NlZFN0YWNrVHJhY2UudGltZXN0YW1wOworCisgICAgICAgIGF1
dG8gYXBwZW5kQ29kZUJsb2NrID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkgeworICAgICAgICAgICAgc3RhY2tUcmFjZS5mcmFtZXMuYXBwZW5kKFN0
YWNrRnJhbWUoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpOworCisgICAgICAgICAgICBp
ZiAoYnl0ZWNvZGVJbmRleCA8IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpKSB7CisgICAg
ICAgICAgICAgICAgaW50IGRpdm90OworICAgICAgICAgICAgICAgIGludCBzdGFydE9mZnNldDsK
KyAgICAgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0OworICAgICAgICAgICAgICAgIGNvZGVCbG9j
ay0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCwgZGl2b3Qs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHN0YWNrVHJhY2Uu
ZnJhbWVzLmxhc3QoKS5saW5lTnVtYmVyLCBzdGFja1RyYWNlLmZyYW1lcy5sYXN0KCkuY29sdW1u
TnVtYmVyKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc2VlbkV4ZWN1dGFibGVzLmFk
ZChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICAgICAgfTsKIAotICAgICAgICAg
ICAgSlNWYWx1ZSBjYWxsZWUgPSBKU1ZhbHVlOjpkZWNvZGUoc3RhY2tGcmFtZS51LnVudmVyaWZp
ZWRDYWxsZWUpOworICAgICAgICBhdXRvIGFwcGVuZFVudmVyaWZpZWRDYWxsZWUgPSBbJl0gKEpT
VmFsdWUgY2FsbGVlKSB7CisgICAgICAgICAgICBzdGFja1RyYWNlLmZyYW1lcy5hcHBlbmQoU3Rh
Y2tGcmFtZSgpKTsKKyAgICAgICAgICAgIFN0YWNrRnJhbWUmIHN0YWNrRnJhbWUgPSBzdGFja1Ry
YWNlLmZyYW1lcy5sYXN0KCk7CiAgICAgICAgICAgICBpZiAoIUhlYXA6OmlzVmFsdWVHQ09iamVj
dChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBjYWxsZWUpKSB7CiAgICAgICAgICAgICAgICAgc3Rh
Y2tGcmFtZS5mcmFtZVR5cGUgPSBGcmFtZVR5cGU6OlVua25vd247Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBKU0NlbGwqIGNhbGxlZUNlbGwgPSBjYWxsZWUuYXNDZWxsKCk7CkBAIC0zNzIsMjIg
KzM2Myw4OCBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAKICAg
ICAgICAgICAgIGlmIChjYWxsZWVDZWxsLT50eXBlKCkgIT0gSlNGdW5jdGlvblR5cGUpIHsKICAg
ICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IGZyYW1lVHlwZUZyb21DYWxsRGF0
YSgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
c3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUNlbGwpLT5leGVjdXRhYmxlKCk7CiAgICAg
ICAgICAgICBpZiAoIWV4ZWN1dGFibGUpIHsKICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZy
YW1lVHlwZSA9IGZyYW1lVHlwZUZyb21DYWxsRGF0YSgpOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoSGVhcDo6aXNQb2ludGVyR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRC
bG9ja1NldCwgZXhlY3V0YWJsZSkpOwotICAgICAgICAgICAgc3RhY2tGcmFtZS5mcmFtZVR5cGUg
PSBGcmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0YWJsZTsKLSAgICAgICAgICAgIHN0YWNrRnJhbWUu
dS52ZXJpZmllZEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOworICAgICAgICAgICAgc3RhY2tGcmFt
ZS5mcmFtZVR5cGUgPSBGcmFtZVR5cGU6OkV4ZWN1dGFibGU7CisgICAgICAgICAgICBzdGFja0Zy
YW1lLmV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwogICAgICAgICAgICAgbV9zZWVuRXhlY3V0YWJs
ZXMuYWRkKGV4ZWN1dGFibGUpOworICAgICAgICB9OworCisgICAgICAgIC8vIFByZXBlbmQgdGhl
IHRvcC1tb3N0IGlubGluZWQgZnJhbWUgaWYgbmVlZGVkLiBBbHNvLCBnYXRoZXIKKyAgICAgICAg
Ly8gbG9jYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhlIHRvcCBmcmFtZSBpcyBleGVj
dXRpbmcuCisgICAgICAgIHNpemVfdCBzdGFydEluZGV4ID0gMDsKKyAgICAgICAgaWYgKHVucHJv
Y2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXMuc2l6ZSgpICYmIHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5m
cmFtZXNbMF0uZnJhbWVUeXBlID09IFVucHJvY2Vzc2VkRnJhbWVUeXBlOjpWZXJpZmllZENvZGVC
bG9jaykgeworICAgICAgICAgICAgQ29kZUJsb2NrKiB0b3BDb2RlQmxvY2sgPSB1bnByb2Nlc3Nl
ZFN0YWNrVHJhY2UuZnJhbWVzWzBdLnUudmVyaWZpZWRDb2RlQmxvY2s7CisgICAgICAgICAgICBp
ZiAodW5wcm9jZXNzZWRTdGFja1RyYWNlLnRvcEZyYW1lSXNMTEludCkgeworICAgICAgICAgICAg
ICAgIC8vIFdlIHJldXNlIExMSW50IENvZGVCbG9ja3MgZm9yIHRoZSBiYXNlbGluZSBKSVQsIHNv
IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGJvdGggaml0IHR5cGVzLgorICAgICAgICAgICAgICAgIC8v
IFRoaXMgbWlnaHQgYWxzbyBiZSBmYWxzZSBmb3IgdmFyaW91cyByZWFzb25zIChrbm93biBhbmQg
dW5rbm93biksIGV2ZW4gdGhvdWdoCisgICAgICAgICAgICAgICAgLy8gaXQncyBzdXBlciB1bmxp
a2VseS4gT25lIHJlYXNvbiB0aGF0IHRoaXMgY2FuIGJlIGZhbHNlIGlzIHdoZW4gd2UgdGhyb3cg
ZnJvbSBhIERGRyBmcmFtZSwKKyAgICAgICAgICAgICAgICAvLyBhbmQgd2UgZW5kIHVwIGhhdmlu
ZyB0byB1bndpbmQgcGFzdCBhIFZNRW50cnlGcmFtZSwgd2Ugd2lsbCBlbmQgdXAgZXhlY3V0aW5n
CisgICAgICAgICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGhhbmRsZVVuY2F1Z2h0RXhj
ZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCisgICAgICAgICAgICAgICAg
Ly8gYnkgaWdub3JpbmcgaXQuCisgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1ZhbGlkUEM7
CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJpdHM7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgICAgICAgICAgICAgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOworI2Vsc2UK
KyAgICAgICAgICAgICAgICAgICAgYml0cyA9IGJpdHdpc2VfY2FzdDx1bnNpZ25lZD4odW5wcm9j
ZXNzZWRTdGFja1RyYWNlLmxsaW50UEMpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGJ5
dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9jaywgaXNW
YWxpZFBDKTsKKworICAgICAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0oaXNWYWxpZFBDKTsg
Ly8gRklYTUU6IGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgaW5mbyBmb3IgdGhlIHdlYiBpbnNwZWN0
b3I6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM0NTUKKworICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2sodG9wQ29kZUJsb2NrLCBieXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IDE7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChPcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3Jp
Z2luID0gdG9wQ29kZUJsb2NrLT5maW5kUEModW5wcm9jZXNzZWRTdGFja1RyYWNlLnRvcFBDKSkg
eworICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4tPndhbGtVcElubGluZVN0YWNrKFsmXSAoY29u
c3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRD
b2RlQmxvY2soY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPyBjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkgOiB0b3BDb2RlQmxvY2ssIGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
c3RhcnRJbmRleCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIFVucHJvY2Vzc2VkU3RhY2tGcmFtZSYgdW5wcm9j
ZXNzZWRTdGFja0ZyYW1lID0gdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1tpXTsKKyAgICAg
ICAgICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrRnJhbWUuZnJhbWVUeXBlID09IFVucHJvY2Vzc2Vk
RnJhbWVUeXBlOjpWZXJpZmllZENvZGVCbG9jaykgeworICAgICAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gdW5wcm9jZXNzZWRTdGFja0ZyYW1lLnUudmVyaWZpZWRDb2RlQmxvY2s7
CisgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gdW5wcm9jZXNz
ZWRTdGFja0ZyYW1lLmNhbGxTaXRlSW5kZXg7CisKKyAgICAgICAgICAgICAgICBhdXRvIGFwcGVu
ZENvZGVCbG9ja05vSW5saW5pbmcgPSBbJl0geworICAgICAgICAgICAgICAgICAgICBib29sIGlz
VmFsaWRQQzsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVCbG9jaywg
dHJ5R2V0Qnl0ZWNvZGVJbmRleChjYWxsU2l0ZUluZGV4LmJpdHMoKSwgY29kZUJsb2NrLCBpc1Zh
bGlkUEMpKTsKKyAgICAgICAgICAgICAgICB9OworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAg
ICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmNvZGVPcmlnaW4oY2FsbFNp
dGVJbmRleCkud2Fsa1VwSW5saW5lU3RhY2soWyZdIChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3Jp
Z2luKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lID8gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpIDogY29kZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgp
OworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVCbG9jaywgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrTm9JbmxpbmluZygpOworI2Vs
c2UKKyAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2tOb0lubGluaW5nKCk7CisjZW5kaWYK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHVucHJvY2Vzc2Vk
U3RhY2tGcmFtZS5mcmFtZVR5cGUgPT0gVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlVudmVyaWZpZWRD
YWxsZWUpOworICAgICAgICAgICAgICAgIGFwcGVuZFVudmVyaWZpZWRDYWxsZWUoSlNWYWx1ZTo6
ZGVjb2RlKHVucHJvY2Vzc2VkU3RhY2tGcmFtZS51LnVudmVyaWZpZWRDYWxsZWUpKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIG1faW5kZXhPZk5leHRTdGFja1RyYWNl
VG9WZXJpZnkgPSBtX3N0YWNrVHJhY2VzLnNpemUoKTsKKyAgICBtX3VucHJvY2Vzc2VkU3RhY2tU
cmFjZXMuY2xlYXIoKTsKIH0KIAogdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IpCkBAIC00NzgsMTggKzUzNSwxMiBAQCB2b2lkIFNhbXBsaW5nUHJv
ZmlsZXI6Om5vdGljZVZNRW50cnkoKQogICAgIGRpc3BhdGNoSWZOZWNlc3NhcnkobG9ja2VyKTsK
IH0KIAotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjbGVhckRhdGEoKQotewotICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgY2xlYXJEYXRhKGxvY2tlcik7Ci19Ci0KIHZvaWQgU2Ft
cGxpbmdQcm9maWxlcjo6Y2xlYXJEYXRhKGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIEFTU0VS
VChtX2xvY2suaXNMb2NrZWQoKSk7CiAgICAgbV9zdGFja1RyYWNlcy5jbGVhcigpOwogICAgIG1f
c2VlbkV4ZWN1dGFibGVzLmNsZWFyKCk7Ci0gICAgbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1Zl
cmlmeSA9IDA7CisgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmNsZWFyKCk7CiB9CiAKIFN0
cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXNwbGF5TmFtZSgpCkBAIC00OTgs
OSArNTQ5LDcgQEAgU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRpcwogICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIodW5rbm93bikiKTsKICAgICBpZiAoZnJhbWVUeXBl
ID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiKGhvc3Qp
Iik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6VW52ZXJpZmll
ZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRF
eGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5uYW1l
KCk7CiAKQEAgLTUyMSw5ICs1NzAsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tG
cmFtZTo6ZGlzCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIih1bmtub3duKSIpOwogICAg
IGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0KQogICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCIoaG9zdCkiKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmcmFtZVR5cGUgIT0gRnJhbWVU
eXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKIAotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxl
ID0gdS52ZXJpZmllZEV4ZWN1dGFibGU7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0
aW9uKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSktPm5hbWUoKTsKIApAQCAtNTQ0LDI1ICs1OTEsMjEgQEAgU3RyaW5nIFNhbXBsaW5n
UHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRpcwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotaW50
IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnN0YXJ0TGluZSgpCitpbnQgU2FtcGxpbmdQ
cm9maWxlcjo6U3RhY2tGcmFtZTo6ZnVuY3Rpb25TdGFydExpbmUoKQogewogICAgIGlmIChmcmFt
ZVR5cGUgPT0gRnJhbWVUeXBlOjpVbmtub3duIHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhv
c3QpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBSRUxFQVNFX0FTU0VSVChmcmFtZVR5cGUgIT0g
RnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKIAotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1dGFibGU7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9z
dEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5maXJzdExpbmUoKTsKIH0KIAotdW5zaWdu
ZWQgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6c3RhcnRDb2x1bW4oKQordW5zaWduZWQg
U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZnVuY3Rpb25TdGFydENvbHVtbigpCiB7CiAg
ICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZy
YW1lVHlwZTo6SG9zdCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIFJFTEVBU0VfQVNTRVJUKGZy
YW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJs
ZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0
YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC01NzMsOSAr
NjE2LDcgQEAgaW50cHRyX3QgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6cwogewogICAg
IGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpVbmtub3duIHx8IGZyYW1lVHlwZSA9PSBGcmFt
ZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBSRUxFQVNFX0FTU0VSVChmcmFt
ZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKIAotICAgIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1dGFibGU7CiAgICAgaWYgKGV4ZWN1dGFi
bGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNTg2LDkgKzYy
Nyw3IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjp1cmwKIHsKICAgICBp
ZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVU
eXBlOjpIb3N0KQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChmcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKIAotICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1dGFibGU7CiAgICAgaWYg
KGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogCkBAIC01OTgsNyArNjM3LDcgQEAgU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNr
RnJhbWU6OnVybAogICAgIHJldHVybiB1cmw7CiB9CiAKLVZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVy
OjpTdGFja1RyYWNlPiYgU2FtcGxpbmdQcm9maWxlcjo6c3RhY2tUcmFjZXMoY29uc3QgTG9ja0hv
bGRlciYpCitWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZT4gU2FtcGxpbmdQcm9m
aWxlcjo6cmVsZWFzZVN0YWNrVHJhY2VzKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikKIHsKICAg
ICBBU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwogICAgIHsKQEAgLTYwNiw3ICs2NDUsOSBAQCBW
ZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZT4mIFNhCiAgICAgICAgIHByb2Nlc3NV
bnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsKICAgICB9CiAKLSAgICByZXR1cm4gbV9zdGFja1RyYWNl
czsKKyAgICBWZWN0b3I8U3RhY2tUcmFjZT4gcmVzdWx0KFdURk1vdmUobV9zdGFja1RyYWNlcykp
OworICAgIGNsZWFyRGF0YShsb2NrZXIpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFN0cmlu
ZyBTYW1wbGluZ1Byb2ZpbGVyOjpzdGFja1RyYWNlc0FzSlNPTigpCkBAIC02NDMsNiArNjg0LDgg
QEAgU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OnN0YWNrVHJhY2VzQXNKUwogCiAgICAganNvbi5h
cHBlbmRMaXRlcmFsKCJdIik7CiAKKyAgICBjbGVhckRhdGEobG9ja2VyKTsKKwogICAgIHJldHVy
biBqc29uLnRvU3RyaW5nKCk7CiB9CiAKQEAgLTY1NSwxMSArNjk4LDggQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTYW1wbGluZ1By
b2ZpbGVyOjpGcmFtZVR5cGUgZnJhbWVUeXBlKQogewogICAgIHN3aXRjaCAoZnJhbWVUeXBlKSB7
Ci0gICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0YWJs
ZToKLSAgICAgICAgb3V0LnByaW50KCJWZXJpZmllZEV4ZWN1dGFibGUiKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxs
ZWU6Ci0gICAgICAgIG91dC5wcmludCgiVW52ZXJpZmllZENhbGxlZSIpOworICAgIGNhc2UgU2Ft
cGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpFeGVjdXRhYmxlOgorICAgICAgICBvdXQucHJpbnQo
IkV4ZWN1dGFibGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVy
OjpGcmFtZVR5cGU6Okhvc3Q6CiAgICAgICAgIG91dC5wcmludCgiSG9zdCIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2
aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw0OCArNDQsODggQEAgY2xhc3MgRXhlY3V0
YWJsZUJhc2U7CiBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFNhbXBsaW5nUHJvZmlsZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIEZyYW1lVHlwZSB7IAotICAgICAgICBWZXJpZmllZEV4
ZWN1dGFibGUsIAorCisgICAgZW51bSBjbGFzcyBVbnByb2Nlc3NlZEZyYW1lVHlwZSB7IAogICAg
ICAgICBVbnZlcmlmaWVkQ2FsbGVlLAotICAgICAgICBIb3N0LCAKLSAgICAgICAgVW5rbm93biAK
KyAgICAgICAgVmVyaWZpZWRDb2RlQmxvY2sKICAgICB9OwogCi0gICAgc3RydWN0IFN0YWNrRnJh
bWUgewotICAgICAgICBTdGFja0ZyYW1lKEZyYW1lVHlwZSBmcmFtZVR5cGUsIEVuY29kZWRKU1Zh
bHVlIGNhbGxlZSkKLSAgICAgICAgICAgIDogZnJhbWVUeXBlKGZyYW1lVHlwZSkKKyAgICBzdHJ1
Y3QgVW5wcm9jZXNzZWRTdGFja0ZyYW1lIHsKKyAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1l
KEVuY29kZWRKU1ZhbHVlIGNhbGxlZSkKKyAgICAgICAgICAgIDogZnJhbWVUeXBlKFVucHJvY2Vz
c2VkRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKQogICAgICAgICB7CiAgICAgICAgICAgICB1
LnVudmVyaWZpZWRDYWxsZWUgPSBjYWxsZWU7CiAgICAgICAgIH0KLSAgICAgICAgU3RhY2tGcmFt
ZShGcmFtZVR5cGUgZnJhbWVUeXBlLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKLSAgICAg
ICAgICAgIDogZnJhbWVUeXBlKGZyYW1lVHlwZSkKKyAgICAgICAgVW5wcm9jZXNzZWRTdGFja0Zy
YW1lKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCisg
ICAgICAgICAgICA6IGZyYW1lVHlwZShVbnByb2Nlc3NlZEZyYW1lVHlwZTo6VmVyaWZpZWRDb2Rl
QmxvY2spCisgICAgICAgICAgICAsIGNhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCkKICAgICAg
ICAgewotICAgICAgICAgICAgdS52ZXJpZmllZEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOworICAg
ICAgICAgICAgdS51bnZlcmlmaWVkQ2FsbGVlID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CisgICAgICAgICAgICB1LnZlcmlmaWVkQ29kZUJsb2NrID0gY29kZUJsb2NrOwogICAgICAgICB9
Ci0gICAgICAgIFN0YWNrRnJhbWUoKQotICAgICAgICAgICAgOiBmcmFtZVR5cGUoRnJhbWVUeXBl
OjpVbmtub3duKQorICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoKQorICAgICAgICAgICAg
OiBmcmFtZVR5cGUoVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHUudmVyaWZpZWRFeGVjdXRhYmxlID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIHUudW52ZXJpZmllZENhbGxlZSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgRnJhbWVUeXBlIGZyYW1lVHlwZTsKKyAgICAgICAgVW5wcm9j
ZXNzZWRGcmFtZVR5cGUgZnJhbWVUeXBlOwogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBF
bmNvZGVkSlNWYWx1ZSB1bnZlcmlmaWVkQ2FsbGVlOwotICAgICAgICAgICAgRXhlY3V0YWJsZUJh
c2UqIHZlcmlmaWVkRXhlY3V0YWJsZTsKKyAgICAgICAgICAgIENvZGVCbG9jayogdmVyaWZpZWRD
b2RlQmxvY2s7CiAgICAgICAgIH0gdTsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4OworICAgIH07CisKKyAgICBlbnVtIGNsYXNzIEZyYW1lVHlwZSB7IAorICAgICAgICBFeGVj
dXRhYmxlLAorICAgICAgICBIb3N0LAorICAgICAgICBVbmtub3duIAorICAgIH07CiAKKyAgICBz
dHJ1Y3QgU3RhY2tGcmFtZSB7CisgICAgICAgIFN0YWNrRnJhbWUoRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUpCisgICAgICAgICAgICA6IGZyYW1lVHlwZShGcmFtZVR5cGU6OkV4ZWN1dGFibGUp
CisgICAgICAgICAgICAsIGV4ZWN1dGFibGUoZXhlY3V0YWJsZSkKKyAgICAgICAgeyB9CisgICAg
ICAgIFN0YWNrRnJhbWUoKQorICAgICAgICAgICAgOiBmcmFtZVR5cGUoRnJhbWVUeXBlOjpVbmtu
b3duKQorICAgICAgICAgICAgLCBleGVjdXRhYmxlKG51bGxwdHIpCisgICAgICAgIHsgfQorCisg
ICAgICAgIEZyYW1lVHlwZSBmcmFtZVR5cGU7CisgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlOworCisgICAgICAgIC8vIFRoZXNlIGF0dGVtcHQgdG8gYmUgZXhwcmVzc2lvbi1sZXZl
bCBsaW5lIGFuZCBjb2x1bW4gbnVtYmVyLgorICAgICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyIHsg
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIHVuc2lnbmVk
IGNvbHVtbk51bWJlciB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9Owor
CisgICAgICAgIC8vIFRoZXNlIGFyZSBmdW5jdGlvbi1sZXZlbCBkYXRhLgogICAgICAgICBTdHJp
bmcgZGlzcGxheU5hbWUoKTsKICAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lRm9ySlNPTlRlc3Rz
KCk7IC8vIFVzZWQgZm9yIEpTQyBzdHJlc3MgdGVzdHMgYmVjYXVzZSB0aGV5IHdhbnQgdGhlICIo
YW5vbnltb3VzIGZ1bmN0aW9uKSIgc3RyaW5nIGZvciBhbm9ueW1vdXMgZnVuY3Rpb25zIGFuZCB0
aGV5IHdhbnQgIihldmFsKSIgZm9yIGV2YWwnZCBjb2RlLgotICAgICAgICBpbnQgc3RhcnRMaW5l
KCk7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCk7CisgICAgICAgIGludCBmdW5jdGlv
blN0YXJ0TGluZSgpOworICAgICAgICB1bnNpZ25lZCBmdW5jdGlvblN0YXJ0Q29sdW1uKCk7CiAg
ICAgICAgIGludHB0cl90IHNvdXJjZUlEKCk7CiAgICAgICAgIFN0cmluZyB1cmwoKTsKICAgICB9
OwogCisgICAgc3RydWN0IFVucHJvY2Vzc2VkU3RhY2tUcmFjZSB7CisgICAgICAgIGRvdWJsZSB0
aW1lc3RhbXA7CisgICAgICAgIHZvaWQqIHRvcFBDOworICAgICAgICBib29sIHRvcEZyYW1lSXNM
TEludDsKKyAgICAgICAgdm9pZCogbGxpbnRQQzsKKyAgICAgICAgVmVjdG9yPFVucHJvY2Vzc2Vk
U3RhY2tGcmFtZT4gZnJhbWVzOworICAgIH07CisKICAgICBzdHJ1Y3QgU3RhY2tUcmFjZSB7Ci0g
ICAgICAgIGJvb2wgbmVlZHNWZXJpZmljYXRpb247CiAgICAgICAgIGRvdWJsZSB0aW1lc3RhbXA7
CiAgICAgICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBmcmFtZXM7CisgICAgICAgIFN0YWNrVHJhY2Uo
KQorICAgICAgICB7IH0KKyAgICAgICAgU3RhY2tUcmFjZShTdGFja1RyYWNlJiYgb3RoZXIpCisg
ICAgICAgICAgICA6IHRpbWVzdGFtcChvdGhlci50aW1lc3RhbXApCisgICAgICAgICAgICAsIGZy
YW1lcyhXVEZNb3ZlKG90aGVyLmZyYW1lcykpCisgICAgICAgIHsgfQogICAgIH07CiAKICAgICBT
YW1wbGluZ1Byb2ZpbGVyKFZNJiwgUmVmUHRyPFN0b3B3YXRjaD4mJik7CkBAIC0xMDAsMTIgKzE0
MCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydChjb25zdCBMb2NrSG9sZGVyJik7CiAgICAg
dm9pZCBzdG9wKCk7CiAgICAgdm9pZCBzdG9wKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICBWZWN0
b3I8U3RhY2tUcmFjZT4mIHN0YWNrVHJhY2VzKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICBWZWN0
b3I8U3RhY2tUcmFjZT4gcmVsZWFzZVN0YWNrVHJhY2VzKGNvbnN0IExvY2tIb2xkZXImKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc3RhY2tUcmFjZXNBc0pTT04oKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIG5vdGljZUN1cnJlbnRUaHJlYWRBc0pTQ0V4ZWN1dGlvblRocmVh
ZCgpOwogICAgIHZvaWQgbm90aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9uVGhyZWFkKGNv
bnN0IExvY2tIb2xkZXImKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyRGF0YSgp
OwotICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IExvY2tIb2xkZXImKTsKICAgICB2b2lkIHByb2Nl
c3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsgLy8gWW91IHNob3VsZCBjYWxsIHRoaXMgb25seSBh
ZnRlciBhY3F1aXJpbmcgdGhlIGxvY2suCiAgICAgZG91YmxlIHRvdGFsVGltZShjb25zdCBMb2Nr
SG9sZGVyJikgeyByZXR1cm4gbV90b3RhbFRpbWU7IH0KICAgICB2b2lkIHNldFN0b3BXYXRjaChj
b25zdCBMb2NrSG9sZGVyJiwgUmVmPFN0b3B3YXRjaD4mJiBzdG9wd2F0Y2gpIHsgbV9zdG9wd2F0
Y2ggPSBXVEZNb3ZlKHN0b3B3YXRjaCk7IH0KQEAgLTExNCwxMSArMTUyLDEyIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkaXNwYXRjaElmTmVjZXNzYXJ5KGNvbnN0IExvY2tIb2xkZXImKTsKICAgICB2
b2lkIGRpc3BhdGNoRnVuY3Rpb24oY29uc3QgTG9ja0hvbGRlciYpOwogICAgIHZvaWQgcGF1c2Uo
KTsKKyAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBMb2NrSG9sZGVyJik7CiAKICAgICBWTSYgbV92
bTsKICAgICBSZWZQdHI8U3RvcHdhdGNoPiBtX3N0b3B3YXRjaDsKICAgICBWZWN0b3I8U3RhY2tU
cmFjZT4gbV9zdGFja1RyYWNlczsKLSAgICBzaXplX3QgbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VU
b1ZlcmlmeTsKKyAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFja1RyYWNlPiBtX3VucHJvY2Vzc2Vk
U3RhY2tUcmFjZXM7CiAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBtX3RpbWluZ0ludGVy
dmFsOwogICAgIGRvdWJsZSBtX2xhc3RUaW1lOwogICAgIGRvdWJsZSBtX3RvdGFsVGltZTsKQEAg
LTEzMCw3ICsxNjksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1BhdXNlZDsKICAgICBib29s
IG1faGFzRGlzcGF0Y2hlZEZ1bmN0aW9uOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBt
X3NlZW5FeGVjdXRhYmxlczsKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gbV9jdXJyZW50RnJhbWVz
OworICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IG1fY3VycmVudEZyYW1lczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNiArMzEyLDcgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICAgICBlbmFibGVDb250cm9sRmxvd1Byb2Zp
bGVyKCk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgIGlmIChPcHRpb25zOjp1
c2VTYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgc2V0U2hvdWxkQnVpbGRQQ1RvQ29kZU9y
aWdpbk1hcHBpbmcoKTsKICAgICAgICAgbV9zYW1wbGluZ1Byb2ZpbGVyID0gYWRvcHRSZWYobmV3
IFNhbXBsaW5nUHJvZmlsZXIoKnRoaXMsIFN0b3B3YXRjaDo6Y3JlYXRlKCkpKTsKICAgICAgICAg
bV9zYW1wbGluZ1Byb2ZpbGVyLT5zdGFydCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTk1NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTk3LDYgKzU5Nyw5IEBAIHB1YmxpYzoK
IAogICAgIGlubGluZSBib29sIHNob3VsZFRyaWdnZXJUZXJtaW5hdGlvbihFeGVjU3RhdGUqKTsK
IAorICAgIHZvaWQgc2V0U2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSB7IG1fc2hv
dWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcgPSB0cnVlOyB9CisgICAgYm9vbCBzaG91bGRC
dWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRCdWls
ZFBDVG9Db2RlT3JpZ2luTWFwcGluZzsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIENsZWFyRXhjZXB0aW9uU2Nv
cGU7CkBAIC02NDgsNiArNjUxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZmFpbE5leHROZXdD
b2RlQmxvY2sgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5OwogICAg
IGJvb2wgbV9zaG91bGRSZXdyaXRlQ29uc3RBc1ZhciB7IGZhbHNlIH07CisgICAgYm9vbCBtX3No
b3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nIHsgZmFsc2UgfTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFi
bGVkUHJvZmlsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ1aWx0aW5FeGVjdXRhYmxlcz4gbV9i
dWlsdGluRXhlY3V0YWJsZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3NhbXBsaW5nLXByb2ZpbGVyLWJhc2ljLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItYmFzaWMuanMJKHJldmlz
aW9uIDE5NTU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2FtcGxp
bmctcHJvZmlsZXItYmFzaWMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiw4IEBAIGlm
IChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlcigpKSAKICAgICAgICAgICAgIHgtLTsK
ICAgICAgICAgfQogICAgIH0KLSAgICBub0lubGluZSh0b3ApOwotICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIGNhbGwgdG9wKCkgdG8gZ2V0IHRoZSBDYWxsU2l0ZUluZGV4IHRvIHVwZGF0ZQotICAg
IC8vIGluc2lkZSB0aGUgY2FsbCBmcmFtZS4gV2UgbmVlZCB0byBmaXggdGhhdCBieSBoYXZpbmcg
YSBQQz0+Q29kZU9yaWdpbgotICAgIC8vIG1hcHBpbmc6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI2MjkKLSAgICBmdW5jdGlvbiBqYXooeCkgeyByZXR1cm4geCAr
IHRvcCgpOyB9IC8vIAorCisgICAgZnVuY3Rpb24gamF6KHgpIHsgcmV0dXJuIHggKyB0b3AoKTsg
fQogICAgIGZ1bmN0aW9uIGtheih5KSB7CiAgICAgICAgIHJldHVybiBqYXooeSkgKyA1OwogICAg
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269924</attachid>
            <date>2016-01-26 14:33:40 -0800</date>
            <delta_ts>2016-01-26 16:28:41 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>103550</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NjI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMiBA
QAorMjAxNi0wMS0yNiAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBKU0MgU2FtcGxpbmcgUHJvZmlsZXI6IENvbWUgdXAgd2l0aCBhIChwcm9ncmFtIGNvdW50ZXIg
PT4gQ29kZU9yaWdpbikgbWFwcGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGEgbWFwcGluZyBmcm9tIFBDIHRv
IENvZGVPcmlnaW4KKyAgICAgICAgdGhhdCBsaXZlcyBvZmYgb2YgSklUZWQgQ29kZUJsb2Nrcy4g
V2UgYnVpbGQgdGhpcyBtYXBwaW5nCisgICAgICAgIHdoaWxlIEpJVGluZyBjb2RlLCBhbmQgdGhl
biB3ZSBjb21wcmVzcyBpdCBhbmQgc3RvcmUKKyAgICAgICAgaXQgb24gdGhlIENvZGVCbG9jay4g
V2Ugb25seSBidWlsZCB0aGUgbWFwcGluZyBpZiBhIGRlYnVnZ2VyCisgICAgICAgIGhhcyBldmVy
IGJlZW4gYXR0YWNoZWQgdG8gYW55IGdsb2JhbCBvYmplY3QuCisKKyAgICAgICAgQ29kZUJsb2Nr
IGNvbnN1bHRzIHRoaXMgbWFwcGluZyB3aGVuIHNlYXJjaGluZyBmb3IgYSBDb2RlT3JpZ2luCisg
ICAgICAgIGZvciBhIGdpdmVuIFBDLCBidXQgaXQgYWxzbyBjb25zdWx0cyBvdGhlciBjb2RlIHJh
bmdlcworICAgICAgICBvZmYgdGhlIG1haW4gcGF0aCB0aGF0IG1heSBvd24gdGhlIFBDLiBTcGVj
aWZpY2FsbHksIGl0IHNlYXJjaGVzCisgICAgICAgIHRocm91Z2ggaW5saW5lIGNhY2hlcywgT1NS
RXhpdHMsIGFuZCBMYXp5U2xvd1BhdGhzLgorCisgICAgICAgIFRvIGZpbmQgUEMgaW5mbyBmb3Ig
dGhlIExMSW50LCB3ZSBhbHNvIHNhdmUgdGhlIExMSW50IHBjIHdoZW4KKyAgICAgICAgdGFraW5n
IGEgc3RhY2sgdHJhY2Ugd2hlcmUgdGhlIHRvcCBmcmFtZSBpcyBpbiBMTEludCBjb2RlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgY29kZSBpbnNpZGUgdGhlIFNhbXBsaW5n
UHJvZmllci4KKyAgICAgICAgSSByZWFsaXplZCBhIGJ1ZyBpbiB0aGUgU2FtcGxpbmdQcm9maWxl
cidzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBXZSB1c2VkIHRvIHdhbGsgdGhlIGlubGluZSBz
dGFjayB3aGlsZSBnYXRoZXJpbmcgYSBzdGFjaworICAgICAgICB0cmFjZS4gVGhpcyBpcyB3cm9u
Zy4gSXQncyBzdXBlciBkYW5nZXJvdXMgdG8gZG8gdGhpcyBiZWNhdXNlCisgICAgICAgIHdlIG1p
Z2h0IHBhdXNlIHRoZSBKU0MgcHJvY2VzcyB3aGlsZSBpdCdzIG1vZGlmeWluZyBpdHMKKyAgICAg
ICAgQ29kZU9yaWdpbiB0YWJsZS4gV2UgdXNlZCB0byB3YWxrIHRoZSBpbmxpbmUgc3RhY2sgd2hp
bGUKKyAgICAgICAgdGFraW5nIGEgc3RhY2sgdHJhY2UgYmVjYXVzZSBkb2luZyBzbyBjb3VsZCBz
YXZlIHVzIGZyb20KKyAgICAgICAgaGF2aW5nIHRvIHZlcmlmeSBhIHBhcnRpY3VsYXIgc3RhY2sg
dHJhY2UuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGF0LgorICAgICAgICBXZSBub3cgaGF2ZSB0byB2
ZXJpZnkgYWxsIHN0YWNrIHRyYWNlcyB0YWtlbi4gVGhpcyB2ZXJpZmljYXRpb24gc3RlcAorICAg
ICAgICBpbmNsdWRlcyB3YWxraW5nIHRoZSBpbmxpbmUgc3RhY2suCisKKyAgICAgICAgQmVjYXVz
ZSB3ZSBoYXZlIGEgUEM9PkNvZGVPcmlnaW4gbWFwLCB3ZSBjYW4gbm93IGdhdGhlciBtb3JlCisg
ICAgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0b3AtZnJhbWUgd2UgcGF1c2Uu
IFRoaXMgYWxsb3dzCisgICAgICAgIHVzIHRvIGNvcnJlY3RseSBvYnNlcnZlIGlubGluaW5nLiBJ
dCBhbHNvIGFsbG93cyB1cyB0byBvYnNlcnZlCisgICAgICAgIGV4cHJlc3Npb24tbGV2ZWwgbGlu
ZS9jb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgZnJhbWUuCisgICAgICAgIFRoZSByZWFz
b24gd2UgZG9uJ3QgY29uc3VsdCB0aGlzIG1hcHBpbmcgZm9yIHBhcmVudCBmcmFtZXMgaXMgCisg
ICAgICAgIHRoYXQgYWxsIHBhcmVudCBmcmFtZXMgc2hvdWxkIHNldCB0aGUgQ2FsbFNpdGVJbmRl
eCBvbiB0aGUgY2FsbAorICAgICAgICBmcmFtZSBoZWFkZXIsIHdoaWNoIG1lYW5zIHdlIGNhbiBj
b25zdWx0IHRoYXQgdmFsdWUgdG8gZ2V0IGlubGluaW5nIAorICAgICAgICBhbmQgZXhwcmVzc2lv
bi1sZXZlbCBsaW5lL2NvbHVtbiBpbmZvcm1hdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6
CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkxhYmVsOjpMYWJlbCk6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkxhYmVsOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6TGFiZWw6OmlzU2V0KToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
YmxlckxhYmVsOjpsYWJlbEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyTGFiZWw6
Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAqIGIz
L0IzT3JpZ2luLmg6CisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgorICAgICAgICAo
SlNDOjpCMzo6T3JpZ2luOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBiMy9CM1BDVG9PcmlnaW5N
YXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQQ1RvT3JpZ2luTWFwOjpQQ1RvT3JpZ2lu
TWFwKToKKyAgICAgICAgKEpTQzo6QjM6OlBDVG9PcmlnaW5NYXA6OmFwcGVuZEl0ZW0pOgorICAg
ICAgICAoSlNDOjpCMzo6UENUb09yaWdpbk1hcDo6cmFuZ2VzKToKKyAgICAgICAgKiBiMy9CM1By
b2NlZHVyZS5oOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpwY1RvT3JpZ2luTWFwKToK
KyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVsZWFzZVBDVG9PcmlnaW5NYXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omdl
bmVyYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9m
aWxlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRQQyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW5IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdp
bkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAg
ICAgICAgKEpTQzo6YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKToKKyAgICAg
ICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpQb2x5bW9y
cGhpY0FjY2Vzczo6Y29udGFpbnNQQyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVm
ZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpjb250YWluc1BDKToK
KyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpoYXNFeHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpl
eHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRUaGlz
UmVnaXN0ZXIpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb2RlOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvZGU6OmZpbmRQQyk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlOjpjb21tb25EYXRhT2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHSklU
Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpKSVRDb21waWxl
cik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
cmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVk
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5kT2ZNYWluUGF0aCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnNldEVuZE9mQ29kZSk6CisgICAgICAgICog
ZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnNl
dFN0YXJ0T2ZDb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0Rm9yTm9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZENhbGxTaXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5kT2ZNYWluUGF0aCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnNldEVuZE9mQ29kZSk6IERlbGV0ZWQu
CisgICAgICAgICogZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U2xvd1BhdGhHZW5lcmF0b3I6OmNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNsb3dQYXRo
R2VuZXJhdG9yOjpvcmlnaW4pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFkZFNsb3dQYXRoR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cnVuU2xvd1BhdGhHZW5lcmF0
b3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRC
bG9jayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZnRs
L0ZUTEIzQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTEpJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmxpdmVS
ZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpKSVRDb2RlOjpmaW5kUEMpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmg6
CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6YjNDb2RlKToKKyAgICAgICAgKiBoZWFwL01h
Y2hpbmVTdGFja01hcmtlci5jcHA6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OlJlZ2lzdGVyczo6aW5zdHJ1Y3Rpb25Qb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOjpsbGludFBDKToKKyAgICAgICAgKEpTQzo6TWFj
aGluZVRocmVhZHM6OlRocmVhZDo6ZnJlZVJlZ2lzdGVycyk6CisgICAgICAgICogaGVhcC9NYWNo
aW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RTY3Jp
cHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0U2Ny
aXB0RGVidWdTZXJ2ZXI6OmF0dGFjaERlYnVnZ2VyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjphZGRFdmVudCk6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJ1aWxkU2FtcGxlcyk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclNjcmlw
dFByb2ZpbGVyQWdlbnQ6OnRyYWNraW5nQ29tcGxldGUpOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQv
SklULmg6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6
ZmluZFBDKToKKyAgICAgICAgKiBqaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIpOgorICAgICAgICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmFwcGVuZEl0
ZW0pOgorICAgICAgICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcDo6UENUb0NvZGVPcmlnaW5NYXAp
OgorICAgICAgICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcDo6flBDVG9Db2RlT3JpZ2luTWFwKToK
KyAgICAgICAgKEpTQzo6UENUb0NvZGVPcmlnaW5NYXA6Om1lbW9yeVNpemUpOgorICAgICAgICAo
SlNDOjpQQ1RvQ29kZU9yaWdpbk1hcDo6ZmluZFBDKToKKyAgICAgICAgKiBqaXQvUENUb0NvZGVP
cmlnaW5NYXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjo6ZGVmYXVsdENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXI6OmRpZEJ1aWxkTWFwcGluZyk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1
bmN0aW9uU2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzKToKKyAgICAgICAgKiBsbGludC9MTElu
dFBDUmFuZ2VzLmg6CisgICAgICAgIChKU0M6OkxMSW50Ojppc0xMSW50UEMpOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OnJlcG9ydFN0YXRzKToKKyAgICAgICAgKEpT
Qzo6RnJhbWVXYWxrZXI6OkZyYW1lV2Fsa2VyKToKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6
OndhbGspOgorICAgICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6cmVzZXRBdE1hY2hpbmVGcmFtZSk6
CisgICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjppc1ZhbGlkRnJhbWVQb2ludGVyKToKKyAgICAg
ICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcik6CisgICAgICAgIChK
U0M6OlNhbXBsaW5nUHJvZmlsZXI6On5TYW1wbGluZ1Byb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6
dHJ5R2V0Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnBy
b2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2Zp
bGVyOjp2aXNpdCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6Om5vdGljZVZNRW50
cnkpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpjbGVhckRhdGEpOgorICAgICAg
ICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXNwbGF5TmFtZSk6CisgICAg
ICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRpc3BsYXlOYW1lRm9ySlNP
TlRlc3RzKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZnVu
Y3Rpb25TdGFydExpbmUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0Zy
YW1lOjpmdW5jdGlvblN0YXJ0Q29sdW1uKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxl
cjo6U3RhY2tGcmFtZTo6c291cmNlSUQpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVy
OjpTdGFja0ZyYW1lOjp1cmwpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpyZWxl
YXNlU3RhY2tUcmFjZXMpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpzdGFja1Ry
YWNlc0FzSlNPTik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzdGFydExpbmUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzdGFydENvbHVtbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnN0YWNrVHJhY2VzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdQcm9maWxlcjo6VW5wcm9jZXNzZWRTdGFja0ZyYW1lOjpVbnByb2Nlc3NlZFN0
YWNrRnJhbWUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpT
dGFja0ZyYW1lKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZTo6
U3RhY2tUcmFjZSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnRvdGFsVGltZSk6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnNldFN0b3BXYXRjaCk6CisgICAgICAg
ICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVu
dGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6c2V0U2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdp
bk1hcHBpbmcpOgorICAgICAgICAoSlNDOjpWTTo6c2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2lu
TWFwcGluZyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLWJhc2lj
LmpzOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIudG9wKToKKyAg
ICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLmpheik6CisgICAgICAgIChw
bGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlci5rYXopOgorCiAyMDE2LTAxLTI2ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIHBvc3Np
YmxlIHRvIGRpc2FibGUgRlRMIGZvciBhIHJhbmdlIGxpa2Ugd2UgZGlzYWJsZSBERkcgZm9yIGEg
cmFuZ2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5
NTYyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNTExLDYgKzUxMSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
aml0L0pJVFN1YkdlbmVyYXRvci5jcHAKICAgICBqaXQvSklUVGh1bmtzLmNwcAogICAgIGppdC9K
SVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKKyAgICBqaXQvUENUb0NvZGVP
cmlnaW5NYXAuY3BwCiAgICAgaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAogICAg
IGppdC9SZWcuY3BwCiAgICAgaml0L1JlZ2lzdGVyQXRPZmZzZXQuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAkocmV2aXNpb24gMTk1NjI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NDMsNyArMTY0Myw2IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW0KIHsKICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52
bSgpLnNhbXBsaW5nUHJvZmlsZXIoKSk7CiAgICAgU3RyaW5nIGpzb25TdHJpbmcgPSBleGVjLT52
bSgpLnNhbXBsaW5nUHJvZmlsZXIoKS0+c3RhY2tUcmFjZXNBc0pTT04oKTsKLSAgICBleGVjLT52
bSgpLnNhbXBsaW5nUHJvZmlsZXIoKS0+Y2xlYXJEYXRhKCk7CiAgICAgRW5jb2RlZEpTVmFsdWUg
cmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gcmVz
dWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lv
biAxOTU2MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NzAsNiArNjcwLDcg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRUaHVua3MuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxTZXR1cFZhcmFy
Z3NGcmFtZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUENUb0NvZGVP
cmlnaW5NYXAuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxSZWcuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlZ2lzdGVyQXRP
ZmZzZXQuY3BwIiAvPgpAQCAtMTUwMiw3ICsxNTAzLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFdyaXRlQmFycmllci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpTSW50ZXJmYWNlSklULmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcU2V0dXBWYXJhcmdzRnJhbWUuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGppdFxQQ1RvQ29kZU9yaWdpbk1hcC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVnLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcUmVnaXN0ZXJBdE9mZnNldC5oIiAvPgpAQCAtMTUxMSw2ICsxNTEyLDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclNldC5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlcGF0Y2guaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGppdFxTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGppdFxTZXR1cFZhcmFyZ3NGcmFtZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XFNuaXBwZXRPcGVyYW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcU3BlY2lhbGl6ZWRUaHVua0pJVC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caml0XFRlbXBSZWdpc3RlclNldC5oIiAvPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5m
aWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTk1NjI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xOTExLDYgKzE5MTEs
OSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEJpbmFyeVN3aXRjaC5jcHAiPgog
ICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxQQ1RvQ29kZU9yaWdpbk1hcC5jcHAiPgorICAgICAgPEZpbHRl
cj5qaXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGppdFxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAiPgogICAgICAgPEZpbHRlcj5q
aXQ8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTQ1OTYsNiArNDU5OSw5IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIj4K
ICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcUENUb0NvZGVPcmlnaW5NYXAuaCI+CisgICAgICA8RmlsdGVy
PmppdDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caml0XFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiPgogICAgICAgPEZpbHRlcj5qaXQ8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxOTU2MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMwNSw5
ICsxMzA1LDEyIEBACiAJCTcwRUNBNjA3MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lz
dHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcw
RUNBNjAyMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJ
NzBFQ0E2MDgxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAzMUFGREJFQTIwMDQ0
OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzBFQ0E2MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzkyQ0IzNDkx
QzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAv
KiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi87IH07CisJCTc5MkNCMzRBMUM0RUVENUMwMEQxM0FG
MyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzkyQ0IzNDgxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2lu
TWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
Nzk2NDY1NkExQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAv
KiBHZXRQdXRJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmly
b25tZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5j
cHAgKi87IH07CiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzk5
RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0
IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5QzRCMTVEMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5QzRCMTVCMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJNzlDNEIxNUUxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QzRCMTVDMUJBMjE1
OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlDRkM2RjAx
QzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5Q0ZDNkVGMUMzM0IxMDAwMEM3NjhFQSAvKiBMTElu
dFBDUmFuZ2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTM1MDIsOSArMzUwNSwxMiBAQAogCQk3MEVDQTYwMjFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBF
Q0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MEVDQTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3Ry
eUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5MkNCMzQ3MUM0RUVENUMwMEQx
M0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQQ1RvQ29kZU9yaWdpbk1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQQ1RvQ29kZU9yaWdpbk1hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0
UHV0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRQdXRJbmZvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAv
KiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExl
eGljYWxFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ds
b2JhbExleGljYWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUENUb09yaWdpbk1hcC5oOyBwYXRoID0gYjMvQjNQQ1Rv
T3JpZ2luTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QzRCMTVCMUJBMjE1
OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJl
c2VydmF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1
QzFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJs
ZVByZXNlcnZhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVz
ZXJ2YXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUNGQzZFRjFD
MzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBMTEludFBDUmFuZ2VzLmg7IHBhdGggPSBsbGludC9MTEludFBDUmFuZ2VzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODQ0LDYgKzQ4NTAsNyBAQAogCQkJCTBG
RUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi8sCiAJCQkJ
MEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLywKIAkJ
CQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLywKKwkJ
CQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi8sCiAJCQkJ
MEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi8sCiAJCQkJMEZF
Qzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICovLAogCQkJCTBGMzczMDhB
MUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmNwcCAqLywKQEAgLTUxNTUsNiArNTE2
Miw4IEBACiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8q
IEpJVFdyaXRlQmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBK
U0ludGVyZmFjZUpJVC5oICovLAorCQkJCTc5MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1Rv
Q29kZU9yaWdpbk1hcC5jcHAgKi8sCisJCQkJNzkyQ0IzNDgxQzRFRUQ1QzAwRDEzQUYzIC8qIFBD
VG9Db2RlT3JpZ2luTWFwLmggKi8sCiAJCQkJMEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkwRkU4MzQxNjFBNkVGOTdCMDBE
MDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4
QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLywKQEAgLTcwMzEsNiArNzA0MCw4IEBACiAJCQkJ
MEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMzczMDkzMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09y
aWdpbk1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8q
IFBDVG9Db2RlT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUNGQzZGMDFDMzNCMTAw
MDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlENUNENUIx
QzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNjE4MzMxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04OTc4LDYgKzg5ODksNyBAQAogCQkJCTBGOEYxNDM1MUFERjA5MDEwMEVENzkyQyAv
KiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjJDRDVC
MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTc5MkNCMzQ5MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29k
ZU9yaWdpbk1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5
NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIzODc4RjFCRkJDNDREMDBF
M0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTk1NjI0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5Niw2ICszOTYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtYXNtLT5pbnZhbGlk
YXRlQWxsVGVtcFJlZ2lzdGVycygpOwogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IExhYmVsJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9sYWJlbCA9PSBvdGhlci5t
X2xhYmVsOyB9CisKICAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwu
aXNTZXQoKTsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEFzc2VtYmxlckxhYmVsIG1fbGFiZWw7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVy
QnVmZmVyLmgJKHJldmlzaW9uIDE5NTYyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gQXNzZW1ibGVyTGFiZWwobV9vZmZz
ZXQgKyBvZmZzZXQpOwogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEFzc2VtYmxlckxhYmVsJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIu
bV9vZmZzZXQ7IH0KKwogICAgICAgICB1aW50MzJfdCBtX29mZnNldDsKICAgICB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTU2MjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJCM1JlZHVjZVN0cmVuZ3RoLmgiCiAjaW5j
bHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKyNpbmNsdWRl
ICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHJldmlzaW9uIDE5NTYyNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw2ICs0Nyw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX2RhdGE7IH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcmlnaW4mIG90
aGVyKSBjb25zdCB7IHJldHVybiBtX2RhdGEgPT0gb3RoZXIubV9kYXRhOyB9CisKICAgICAvLyBZ
b3Ugc2hvdWxkIGF2b2lkIHVzaW5nIHRoaXMuIFVzZSBPcmlnaW5EdW1wIGluc3RlYWQuCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQQ1RvT3JpZ2luTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUENUb09yaWdpbk1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUENUb09yaWdpbk1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1BDVG9PcmlnaW5NYXBfaAorI2RlZmluZSBCM1BDVG9PcmlnaW5NYXBfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQQ1RvT3JpZ2luTWFwIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQQ1RvT3JpZ2luTWFwKTsKK3B1YmxpYzoKKyAgICBQQ1RvT3JpZ2luTWFwKCkK
KyAgICB7IH0KKworICAgIFBDVG9PcmlnaW5NYXAoUENUb09yaWdpbk1hcCYmIG90aGVyKQorICAg
ICAgICA6IG1fcmFuZ2VzKFdURk1vdmUob3RoZXIubV9yYW5nZXMpKQorICAgIHsgfQorCisgICAg
c3RydWN0IE9yaWdpblJhbmdlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVs
OworICAgICAgICBPcmlnaW4gb3JpZ2luOworICAgIH07CisKKyAgICB2b2lkIGFwcGVuZEl0ZW0o
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsLCBPcmlnaW4gb3JpZ2luKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fcmFuZ2VzLnNpemUoKSkgeworICAgICAgICAgICAgaWYgKG1fcmFuZ2VzLmxhc3Qo
KS5sYWJlbCA9PSBsYWJlbCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBp
ZiAobV9yYW5nZXMubGFzdCgpLm9yaWdpbiA9PSBvcmlnaW4gfHwgIW9yaWdpbikKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoT3Jp
Z2luUmFuZ2V7bGFiZWwsIG9yaWdpbn0pOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxPcmln
aW5SYW5nZT4mIHJhbmdlcygpIGNvbnN0ICB7IHJldHVybiBtX3JhbmdlczsgfQorCitwcml2YXRl
OgorICAgIFZlY3RvcjxPcmlnaW5SYW5nZT4gbV9yYW5nZXM7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BD
VG9PcmlnaW5NYXBfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJ
KHJldmlzaW9uIDE5NTYyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJCM09wYXF1
ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzUENUb09y
aWdpbk1hcC5oIgogI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgogI2luY2x1ZGUgIkIzVHlw
ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKQEAgLTM2MSw2ICszNjIsOSBAQCBwdWJsaWM6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZnJhbWVTaXplKCkgY29uc3Q7CiAgICAg
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSBjb25zdDsK
IAorICAgIFBDVG9PcmlnaW5NYXAmIHBjVG9PcmlnaW5NYXAoKSB7IHJldHVybiBtX3BjVG9Pcmln
aW5NYXA7IH0KKyAgICBQQ1RvT3JpZ2luTWFwIHJlbGVhc2VQQ1RvT3JpZ2luTWFwKCkgeyByZXR1
cm4gV1RGTW92ZShtX3BjVG9PcmlnaW5NYXApOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIApAQCAtMzgyLDYgKzM4Niw3IEBAIHByaXZhdGU6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFpcjo6Q29kZT4gbV9jb2RlOwogICAgIFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoUHJpbnRTdHJlYW0mLCBPcmlnaW4pPj4gbV9vcmlnaW5QcmludGVyOwogICAg
IGNvbnN0IHZvaWQqIG1fZnJvbnRlbmREYXRhOworICAgIFBDVG9PcmlnaW5NYXAgbV9wY1RvT3Jp
Z2luTWFwOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1NjI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgogI2luY2x1
ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlLmgiCiAjaW5jbHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgogI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgpA
QCAtMTcxLDEyICsxNzIsMjMgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBl
cnMmIAogICAgICAgICBibG9ja0p1bXBzW3RhcmdldF0uYXBwZW5kKGp1bXApOwogICAgIH07CiAK
KyAgICBQQ1RvT3JpZ2luTWFwJiBwY1RvT3JpZ2luTWFwID0gY29kZS5wcm9jKCkucGNUb09yaWdp
bk1hcCgpOworICAgIGF1dG8gYWRkSXRlbSA9IFsmXSAoSW5zdCYgaW5zdCkgeworICAgICAgICBp
ZiAoIWluc3Qub3JpZ2luKSB7CisgICAgICAgICAgICBwY1RvT3JpZ2luTWFwLmFwcGVuZEl0ZW0o
aml0LmxhYmVsKCksIE9yaWdpbigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBwY1RvT3JpZ2luTWFwLmFwcGVuZEl0ZW0oaml0LmxhYmVsKCksIGluc3Qub3JpZ2lu
LT5vcmlnaW4oKSk7CisgICAgfTsKKwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CiAgICAgICAgIGJsb2NrSnVtcHNbYmxvY2tdLmxpbmsoJmppdCk7CiAgICAgICAgIGJsb2Nr
TGFiZWxzW2Jsb2NrXSA9IGppdC5sYWJlbCgpOwogICAgICAgICBBU1NFUlQoYmxvY2stPnNpemUo
KSA+PSAxKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCkg
LSAxOyArK2kpIHsKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2st
PmF0KGkpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0g
YmxvY2stPmF0KGkpOworICAgICAgICAgICAgYWRkSXRlbShpbnN0KTsKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBqdW1wID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwogICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5pc1NldCgpKTsKICAgICAgICAgfQog
CkBAIC0xODQsNiArMTk2LDggQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBl
cnMmIAogICAgICAgICAgICAgJiYgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApID09IGNvZGUuZmlu
ZE5leHRCbG9jayhibG9jaykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBhZGRJ
dGVtKGJsb2NrLT5sYXN0KCkpOworCiAgICAgICAgIGlmIChpc1JldHVybihibG9jay0+bGFzdCgp
Lm9wY29kZSkpIHsKICAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCByZXByZXNlbnQg
dGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWlyLCBzbyB3ZSBuZWVkIHRvCiAgICAgICAg
ICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCkBAIC0xOTgsNiArMjEyLDcgQEAgdm9pZCBnZW5l
cmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlV2l0aEVtcHR5RnJhbWUoKTsKICAg
ICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgIGFkZEl0ZW0oYmxvY2stPmxhc3QoKSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0yMTgsMTAgKzIzMywxMyBA
QCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KKyAgICAgICAgYWRkSXRlbShibG9jay0+bGFzdCgpKTsKICAgICB9CiAKKyAgICBwY1RvT3Jp
Z2luTWFwLmFwcGVuZEl0ZW0oaml0LmxhYmVsKCksIE9yaWdpbigpKTsKICAgICBmb3IgKGF1dG8m
IGxhdGVQYXRoIDogY29udGV4dC5sYXRlUGF0aHMpCiAgICAgICAgIGxhdGVQYXRoLT5ydW4oaml0
LCBjb250ZXh0KTsKKyAgICBwY1RvT3JpZ2luTWFwLmFwcGVuZEl0ZW0oaml0LmxhYmVsKCksIE9y
aWdpbigpKTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE5
NTYyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50
LmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlBvbHltb3Jw
aGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJl
ZHVjZVdoaXRlc3BhY2UuaCIKQEAgLTQyNzUsNCArNDI3NiwyOSBAQCB2b2lkIENvZGVCbG9jazo6
aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiAgICAgfQogfQogCit2b2lkIENvZGVCbG9jazo6c2V0
UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmIG1h
cCkgCit7IAorICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1hcCk7Cit9CisKK09w
dGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluZFBDKHZvaWQqIHBjKQoreworICAgIGlm
IChtX3BjVG9Db2RlT3JpZ2luTWFwKSB7CisgICAgICAgIGlmIChPcHRpb25hbDxDb2RlT3JpZ2lu
PiBjb2RlT3JpZ2luID0gbV9wY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKKyAgICAgICAg
ICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKyNpZiBFTkFCTEUoSklUKQorICAgIGZvciAo
QmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2lu
KCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViID0g
Kml0ZXI7CisgICAgICAgIGlmIChzdHViLT5jb250YWluc1BDKHBjKSkKKyAgICAgICAgICAgIHJl
dHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihzdHViLT5jb2RlT3JpZ2luKTsKKyAgICB9CisKKyAg
ICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1faml0Q29kZS0+ZmluZFBD
KHRoaXMsIHBjKSkKKyAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKKworICAgIHJldHVybiBOdWxsb3B0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDE5NTYyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNsYXNzIFR5cGVMb2NhdGlvbjsKIGNs
YXNzIEpTTW9kdWxlRW52aXJvbm1lbnQ7CitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKIAogZW51
bSBSZW9wdGltaXphdGlvbk1vZGUgeyBEb250Q291bnRSZW9wdGltaXphdGlvbiwgQ291bnRSZW9w
dGltaXphdGlvbiB9OwogCkBAIC0yNzQsNyArMjc1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKICAgICB9Ci0gICAgCisKICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldChJbnN0cnVjdGlvbiogcmV0dXJuQWRkcmVzcykKICAgICB7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJldHVybkFkZHJlc3MgPj0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KSAmJiByZXR1cm5BZGRyZXNzIDwgaW5zdHJ1Y3Rpb25zKCkuZW5kKCkpOwpAQCAtOTI3LDYgKzky
OCw5IEBAIHB1YmxpYzoKIAogICAgIENhbGxTaXRlSW5kZXggbmV3RXhjZXB0aW9uSGFuZGxpbmdD
YWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggb3JpZ2luYWxDYWxsU2l0ZSk7CiAKKyAgICB2b2lk
IHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4m
Jik7CisgICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKTsKKwogcHJvdGVj
dGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogICAgIHZvaWQgZmlu
YWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwpAQCAtMTA5Nyw2ICsxMTAxLDcgQEAgcHJp
dmF0ZToKICNpZiBFTkFCTEUoSklUKQogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIG1fY2FwYWJp
bGl0eUxldmVsU3RhdGU7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmln
aW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAKICAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVy
IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIG1f
d2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTk1NjI0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEw
Miw5IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAgICBib29sIGlzQXBwcm94aW1hdGVseUVxdWFs
VG8oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0OwogICAgIAogICAgIHVuc2lnbmVkIGFw
cHJveGltYXRlSGFzaCgpIGNvbnN0OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9u
PgorICAgIHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKTsKICAgICAKICAg
ICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQg
Zm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygp
IGNvbnN0OwpAQCAtMTI3LDcgKzEzMCw3IEBAIGlubGluZSBib29sIENvZGVPcmlnaW46Om9wZXJh
dG9yPT0oY29uc3QKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5ieXRlY29kZUlu
ZGV4CiAgICAgICAgICYmIGlubGluZUNhbGxGcmFtZSA9PSBvdGhlci5pbmxpbmVDYWxsRnJhbWU7
CiB9Ci0gICAgCisKIHN0cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgQ29kZU9yaWdpbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CiAgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29uc3QgQ29kZU9yaWdpbiYg
YikgeyByZXR1cm4gYSA9PSBiOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5saW5lQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCShyZXZpc2lvbiAxOTU2MjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0Niw2ICsyNDYsMTggQEAgaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tG
b3JPcgogICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsKIH0KIAordGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0aW9uPgoraW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2so
Y29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
ICp0aGlzOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGZ1bmN0aW9uKGNvZGVPcmlnaW4p
OworICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
ZGlyZWN0Q2FsbGVyOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFj
ZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDE5NTYyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQs
NiArMzI0LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zUEModm9pZCog
cGMpIGNvbnN0CisgICAgeyAKKyAgICAgICAgaWYgKCFtX3N0dWJSb3V0aW5lKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHVpbnRwdHJfdCBwY0FzSW50ID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4ocGMpOworICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS0+c3RhcnRB
ZGRyZXNzKCkgPD0gcGNBc0ludCAmJiBwY0FzSW50IDw9IG1fc3R1YlJvdXRpbmUtPmVuZEFkZHJl
c3MoKTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHAJKHJldmlzaW9uIDE5NTYyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsx
ODQsMTMgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIHJl
c2V0KGNvZGVCbG9jayk7CiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KKworYm9vbCBTdHJ1Y3R1
cmVTdHViSW5mbzo6Y29udGFpbnNQQyh2b2lkKiBwYykgY29uc3QKK3sKKyAgICBpZiAoY2FjaGVU
eXBlICE9IENhY2hlVHlwZTo6U3R1YikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB1LnN0dWItPmNvbnRhaW5zUEMocGMpOworfQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE5NTYyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIy
LDggQEAgcHVibGljOgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXg7CiAKKyAgICBib29sIGNvbnRhaW5zUEModm9pZCogcGMpIGNvbnN0
OworCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJy
aWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNp
b24gMTk1NjI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlvbk9m
ZnNldCwgdW5zaWduZWQgc3RhcnREaXZvdCwgdW5zaWduZWQgZW5kRGl2b3QpOwogCiAgICAgYm9v
bCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyB9
CisgICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbygp
IHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KIAogICAgIC8vIFNwZWNpYWwgcmVnaXN0ZXJz
CiAgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3Rlcikg
eyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAxOTU2MjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNiAr
MjE1LDE4IEBAIHZvaWQgSklUQ29kZTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFQKICAgICBt
aW5pZmllZERGRy52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOwogfQogCitP
cHRpb25hbDxDb2RlT3JpZ2luPiBKSVRDb2RlOjpmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMp
Cit7CisgICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgeworICAgICAgICBpZiAoRXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gZXhpdC5tX2NvZGUuZXhlY3V0YWJsZU1lbW9y
eSgpKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT5zdGFydCgpIDw9IHBjICYmIHBjIDwgaGFu
ZGxlLT5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4o
ZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gTnVsbG9wdDsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGUuaAkocmV2aXNpb24gMTk1NjI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsOCBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY29tbW9uRGF0YU9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21tb24pOyB9CisKKyAgICBPcHRpb25hbDxDb2Rl
T3JpZ2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIG92ZXJyaWRlOwogICAgIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVy
IHRvIGNhbGwgc2V0Q29kZVJlZigpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE5NTYyNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1
Miw3IEBAIEpJVENvbXBpbGVyOjpKSVRDb21waWxlcihHcmFwaCYgZGZnKQogICAgICwgbV9ncmFw
aChkZmcpCiAgICAgLCBtX2ppdENvZGUoYWRvcHRSZWYobmV3IEpJVENvZGUoKSkpCiAgICAgLCBt
X2Jsb2NrSGVhZHMoZGZnLm51bUJsb2NrcygpKQorICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIoZGZnLm1fdm0pCiB7CiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IG1f
Z3JhcGgubV92bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxEaXNhc3NlbWJsZXI+KGRmZyk7CkBAIC0zMDUsNiArMzA2LDkg
QEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIobmV3RXhjZXB0aW9uSGFuZGxlcik7
CiAgICAgICAgIH0KICAgICB9CisKKyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
ZGlkQnVpbGRNYXBwaW5nKCkpCisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdp
bk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOwogfQogCiB2b2lkIEpJVENvbXBpbGVy
Ojpjb21waWxlKCkKQEAgLTMzOSw3ICszNDMsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxl
KCkKICAgICBtX3NwZWN1bGF0aXZlLT5jYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2Nr
KTsKIAogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgotICAgIG1fc3BlY3VsYXRpdmUt
PnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRo
R2VuZXJhdG9ycyhtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik7CisgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogICAgIAogICAgIGNvbXBpbGVFeGNlcHRpb25IYW5k
bGVycygpOwogICAgIGxpbmtPU1JFeGl0cygpOwpAQCAtNDMyLDcgKzQzNyw4IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAganVtcChmcm9tQXJpdHlDaGVjayk7CiAg
ICAgCiAgICAgLy8gR2VuZXJhdGUgc2xvdyBwYXRoIGNvZGUuCi0gICAgbV9zcGVjdWxhdGl2ZS0+
cnVuU2xvd1BhdGhHZW5lcmF0b3JzKCk7CisgICAgbV9zcGVjdWxhdGl2ZS0+cnVuU2xvd1BhdGhH
ZW5lcmF0b3JzKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKTsKKyAgICBtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAgICAgCiAgICAgY29tcGlsZUV4Y2VwdGlvbkhhbmRs
ZXJzKCk7CiAgICAgbGlua09TUkV4aXRzKCk7CkBAIC01OTgsNiArNjA0LDIyIEBAIENhbGxTaXRl
SW5kZXggSklUQ29tcGlsZXI6OnJlY29yZENhbGxTaXQKICAgICByZXR1cm4gY2FsbFNpdGU7CiB9
CiAKK3ZvaWQgSklUQ29tcGlsZXI6OnNldEVuZE9mTWFpblBhdGgoKQoreworICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCks
IG1fc3BlY3VsYXRpdmUtPm1fb3JpZ2luLnNlbWFudGljKTsKKyAgICBpZiAoTElLRUxZKCFtX2Rp
c2Fzc2VtYmxlcikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5k
T2ZNYWluUGF0aChsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7Cit9CisKK3ZvaWQgSklUQ29t
cGlsZXI6OnNldEVuZE9mQ29kZSgpCit7CisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
YXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKKyAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2Vt
YmxlcikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2Rl
KGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxOTU2MjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDYgKzQzLDcgQEAKICNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUg
IlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVGVtcFJlZ2lzdGVyU2V0LmgiCiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtMTE4LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICAvLyBNZXRob2Rz
IHRvIHNldCBsYWJlbHMgZm9yIHRoZSBkaXNhc3NlbWJsZXIuCiAgICAgdm9pZCBzZXRTdGFydE9m
Q29kZSgpCiAgICAgeworICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJ
dGVtKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBDb2RlT3JpZ2luKDAsIG51bGxwdHIpKTsK
ICAgICAgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0U3RhcnRPZkNvZGUobGFiZWxJZ25vcmluZ1dh
dGNocG9pbnRzKCkpOwpAQCAtMTM3LDE5ICsxMzksOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGlz
YXNzZW1ibGVyLT5zZXRGb3JOb2RlKG5vZGUsIGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRFbmRPZk1haW5QYXRoKCkKLSAgICB7Ci0gICAgICAg
IGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mTWFpblBhdGgobGFiZWxJZ25vcmluZ1dhdGNocG9p
bnRzKCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldEVuZE9mQ29kZSgpCi0gICAgewotICAg
ICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWxJZ25vcmluZ1dhdGNocG9p
bnRzKCkpOwotICAgIH0KKyAgICB2b2lkIHNldEVuZE9mTWFpblBhdGgoKTsKKyAgICB2b2lkIHNl
dEVuZE9mQ29kZSgpOwogICAgIAogICAgIENhbGxTaXRlSW5kZXggYWRkQ2FsbFNpdGUoQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQogICAgIHsKQEAgLTI2NSw2ICsyNTYsOCBAQCBwdWJsaWM6CiAKICAg
ICBDYWxsU2l0ZUluZGV4IHJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGlu
Z09TUkV4aXRJZk5lZWRlZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgZXZlbnRTdHJlYW1J
bmRleCk7CiAKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImIHBjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcigpIHsgcmV0dXJuIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOyB9CisKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXI7CiAgICAgCkBAIC0z
MjgsNiArMzIxLDcgQEAgcHJpdmF0ZToKICAgICBDYWxsIG1fY2FsbEFyaXR5Rml4dXA7CiAgICAg
TGFiZWwgbV9hcml0eUNoZWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTcGVjdWxhdGl2ZUpJVD4g
bV9zcGVjdWxhdGl2ZTsKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCShy
ZXZpc2lvbiAxOTU2MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRo
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDkgQEAgcHVibGljOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBCeSBkZWZhdWx0IHNsb3cgcGF0
aCBnZW5lcmF0b3JzIGRvbid0IGhhdmUgYSBjYWxsLgogICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwoKTsKICAgICB9CisKKyAgICBjb25zdCBOb2RlT3JpZ2luJiBvcmlnaW4oKSBj
b25zdCAgeyByZXR1cm4gbV9vcmlnaW47IH0KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKikgPSAwOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX2xhYmVsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE5NTYyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzAsMTAgKzMzMCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphZGRTbG93UGF0aEdlbmVyYXRv
CiAgICAgbV9zbG93UGF0aEdlbmVyYXRvcnMuYXBwZW5kKFdURk1vdmUoc2xvd1BhdGhHZW5lcmF0
b3IpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6cnVuU2xvd1BhdGhHZW5lcmF0b3JzKCkK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnJ1blNsb3dQYXRoR2VuZXJhdG9ycyhQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXImIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcikKIHsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9zbG93UGF0aEdlbmVyYXRvcnMuc2l6ZSgpOyArK2kpCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2xvd1BhdGhHZW5lcmF0b3JzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKG1faml0LmxhYmVs
KCksIG1fc2xvd1BhdGhHZW5lcmF0b3JzW2ldLT5vcmlnaW4oKS5zZW1hbnRpYyk7CiAgICAgICAg
IG1fc2xvd1BhdGhHZW5lcmF0b3JzW2ldLT5nZW5lcmF0ZSh0aGlzKTsKKyAgICB9CiB9CiAKIC8v
IE9uIFdpbmRvd3Mgd2UgbmVlZCB0byB3cmFwIGZtb2Q7IG9uIG90aGVyIHBsYXRmb3JtcyB3ZSBj
YW4gY2FsbCBpdCBkaXJlY3RseS4KQEAgLTE1MDQsNiArMTUwNiw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRl
REZHRXhjZXB0aW9uSGFuZGxpbmcoKSAmJiBtYXlFeGl0KG1faml0LmdyYXBoKCksIG1fY3VycmVu
dE5vZGUpICE9IERvZXNOb3RFeGl0KQogICAgICAgICAgICAgbV9qaXQuaml0UmVsZWFzZUFzc2Vy
dE5vRXhjZXB0aW9uKCk7CiAKKyAgICAgICAgbV9qaXQucGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
KCkuYXBwZW5kSXRlbShtX2ppdC5sYWJlbCgpLCBtX29yaWdpbi5zZW1hbnRpYyk7CisKICAgICAg
ICAgY29tcGlsZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChiZWxvbmdz
SW5NaW5pZmllZEdyYXBoKG1fY3VycmVudE5vZGUtPm9wKCkpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTk1NjI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTcsNyArMzE3LDcgQEAgcHVibGljOgogICAgIEdlbmVyYXRlZE9wZXJhbmRU
eXBlIGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIoTm9kZSopOwogCiAgICAgdm9pZCBhZGRT
bG93UGF0aEdlbmVyYXRvcihzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+KTsKLSAg
ICB2b2lkIHJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIHZvaWQgcnVuU2xvd1BhdGhHZW5l
cmF0b3JzKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYpOwogICAgIAogICAgIHZvaWQgY29tcGls
ZShOb2RlKik7CiAgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChOb2RlKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCShyZXZpc2lvbiAxOTU2MjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgiCiAjaW5jbHVk
ZSAiSklUU3ViR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUg
IlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTE0MCw2ICsxNDEsMTAg
QEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICBzdGF0
ZS5hbGxvY2F0aW9uRmFpbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICAK
KyAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENU
b09yaWdpbk1hcCgpOworICAgIGlmICh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBw
aW5nKCkpCisgICAgICAgIGNvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtl
X3VuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBX
VEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKSk7
CiAKICAgICBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxHZW5lcmF0ZWRG
dW5jdGlvbj4oCiAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+ZW50
cnlwb2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAxOTU2MjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNiArMTg2
LDI1IEBAIFJlZ2lzdGVyU2V0IEpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXMKICAgICByZXR1
cm4gUmVnaXN0ZXJTZXQoKTsKIH0KIAorT3B0aW9uYWw8Q29kZU9yaWdpbj4gSklUQ29kZTo6Zmlu
ZFBDKENvZGVCbG9jayogY29kZUJsb2NrLCB2b2lkKiBwYykKK3sKKyAgICBmb3IgKE9TUkV4aXQm
IGV4aXQgOiBvc3JFeGl0KSB7CisgICAgICAgIGlmIChFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBo
YW5kbGUgPSBleGl0Lm1fY29kZS5leGVjdXRhYmxlTWVtb3J5KCkpIHsKKyAgICAgICAgICAgIGlm
IChoYW5kbGUtPnN0YXJ0KCkgPD0gcGMgJiYgcGMgPCBoYW5kbGUtPmVuZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihleGl0Lm1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoc3RkOjp1bmlxdWVfcHRy
PExhenlTbG93UGF0aD4mIGxhenlTbG93UGF0aCA6IGxhenlTbG93UGF0aHMpIHsKKyAgICAgICAg
aWYgKEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGhhbmRsZSA9IGxhenlTbG93UGF0aC0+c3R1Yigp
LmV4ZWN1dGFibGVNZW1vcnkoKSkgeworICAgICAgICAgICAgaWYgKGhhbmRsZS0+c3RhcnQoKSA8
PSBwYyAmJiBwYyA8IGhhbmRsZS0+ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlv
bmFsPENvZGVPcmlnaW4+KGNvZGVCbG9jay0+Y29kZU9yaWdpbihsYXp5U2xvd1BhdGgtPmNhbGxT
aXRlSW5kZXgoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE51bGxvcHQ7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDE5
NTYyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIHB1YmxpYzoKIAogICAgIFJlZ2lzdGVyU2V0IGxpdmVS
ZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayos
IENhbGxTaXRlSW5kZXgpIG92ZXJyaWRlOwogCisgICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmlu
ZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBvdmVycmlkZTsKKwogI2lmIEZUTF9VU0VTX0IzCiAg
ICAgQ29kZVJlZiBiM0NvZGUoKSBjb25zdCB7IHJldHVybiBtX2IzQ29kZTsgfQogI2Vsc2UKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2Vy
LmNwcAkocmV2aXNpb24gMTk1NjI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsMTIgQEAKICNp
bmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKIAogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJv
b3RzLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRl
ICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxMSW50UENS
YW5nZXMuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIlZNLmgiCiAj
aW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC01NzcsNiArNTgwLDY0
IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVyczoKICNlcnJvciBOZWVk
IGEgd2F5IHRvIGdldCB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciBmb3IgYW5vdGhlciB0aHJlYWQg
b24gdGhpcyBwbGF0Zm9ybQogI2VuZGlmCiB9Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFk
OjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAoreworICAgIC8vIExMSW50IHVzZXMgcmVnVDQg
YXMgUEMuCisjaWYgT1MoREFSV0lOKQorCisjaWYgX19EQVJXSU5fVU5JWDAzCisKKyNpZiBDUFUo
WDg2KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0ZXJzOjpl
c2ksICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVncy5fX2VzaSk7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIHN0YXRpY19hc3NlcnQoTExJ
bnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0ZXJzOjpyOCwgIldyb25nIExMSW50IFBDLiIpOworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLl9fcjgpOworI2VsaWYgQ1BVKEFS
TSkKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IEFSTVJlZ2lzdGVyczo6cjgs
ICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVncy5fX3JbOF0pOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6
OkxMSW50UEMgPT0gQVJNNjRSZWdpc3RlcnM6Ong0LCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX194WzRdKTsKKyNlbHNlCisjZXJy
b3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxzZSAvLyAhX19EQVJXSU5fVU5J
WDAzCisjaWYgQ1BVKFg4NikKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4
NlJlZ2lzdGVyczo6ZXNpLCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuZXNpKTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgc3RhdGlj
X2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBYODZSZWdpc3RlcnM6OnI4LCAiV3JvbmcgTExJbnQg
UEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MucjgpOworI2Vs
c2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0RB
UldJTl9VTklYMDMKKworLy8gZW5kIE9TKERBUldJTikKKyNlbGlmIE9TKFdJTkRPV1MpCisKKyNp
ZiBDUFUoQVJNKQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gQVJNUmVnaXN0
ZXJzOjpyOCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPigodWludHB0cl90KSByZWdzLlI4KTsKKyNlbGlmIENQVShNSVBTKQorI2Vycm9yIERv
bnQga25vdyB3aGF0IHRvIGRvIHdpdGggbWlwcy4gRG8gd2UgZXZlbiBuZWVkIHRoaXM/CisjZWxp
ZiBDUFUoWDg2KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0
ZXJzOjplc2ksICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oKHVpbnRwdHJfdCkgcmVncy5Fc2kpOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICBz
dGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6cjEwLCAiV3Jvbmcg
TExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCh1aW50cHRy
X3QpIHJlZ3MuUjEwKTsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRp
ZgorCisjZWxzZQorI2Vycm9yIE5lZWQgYSB3YXkgdG8gZ2V0IHRoZSBMTEludFBDIGZvciBhbm90
aGVyIHRocmVhZCBvbiB0aGlzIHBsYXRmb3JtCisjZW5kaWYKK30KICNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCiAKIHZvaWQgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6ZnJlZVJl
Z2lzdGVycyhUaHJlYWQ6OlJlZ2lzdGVycyYgcmVnaXN0ZXJzKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgJKHJldmlzaW9uIDE5NTYy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoU0FNUExJ
TkdfUFJPRklMRVIpCiAgICAgICAgICAgICB2b2lkKiBmcmFtZVBvaW50ZXIoKSBjb25zdDsKICAg
ICAgICAgICAgIHZvaWQqIGluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0OworICAgICAgICAgICAg
dm9pZCogbGxpbnRQQygpIGNvbnN0OwogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxF
UikKICAgICAgICAgICAgIAogI2lmIE9TKERBUldJTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdFNj
cmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTk1NjI0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBKU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2Vy
dmVyOjpKU0dsb2JhCiB2b2lkIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXI6OmF0dGFj
aERlYnVnZ2VyKCkKIHsKICAgICBhdHRhY2goJm1fZ2xvYmFsT2JqZWN0KTsKKyAgICBtX2dsb2Jh
bE9iamVjdC52bSgpLnNldFNob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nKCk7CiAgICAg
cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAJKHJldmlzaW9uIDE5NTYyNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBJbnNwZWN0b3JT
Y3JpcHRQcm9maWxlckFnZW50OjphZGRFdgogfQogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJ
TEVSKQotc3RhdGljIFJlZjxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlNhbXBsZXM+IGJ1aWxk
U2FtcGxlcyhWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZT4mIHNhbXBsaW5nUHJv
ZmlsZXJTdGFja1RyYWNlcywgZG91YmxlIHRvdGFsVGltZSkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6
OlNjcmlwdFByb2ZpbGVyOjpTYW1wbGVzPiBidWlsZFNhbXBsZXMoVmVjdG9yPFNhbXBsaW5nUHJv
ZmlsZXI6OlN0YWNrVHJhY2U+JiYgc2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzLCBkb3VibGUg
dG90YWxUaW1lKQogewogICAgIFJlZjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlNjcmlwdFBy
b2ZpbGVyOjpTdGFja1RyYWNlPj4gc3RhY2tUcmFjZXMgPSBQcm90b2NvbDo6QXJyYXk8UHJvdG9j
b2w6OlNjcmlwdFByb2ZpbGVyOjpTdGFja1RyYWNlPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChTYW1w
bGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlJiBzdGFja1RyYWNlIDogc2FtcGxpbmdQcm9maWxlclN0
YWNrVHJhY2VzKSB7CkBAIC0xNjYsOCArMTY2LDggQEAgc3RhdGljIFJlZjxQcm90b2NvbDo6U2Ny
aXB0UHJvZmlsZXI6OlNhbQogICAgICAgICAgICAgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxl
cjo6U3RhY2tGcmFtZT4gZnJhbWUgPSBQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlN0YWNrRnJh
bWU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgLnNldFNvdXJjZUlEKFN0cmluZzo6bnVtYmVy
KHN0YWNrRnJhbWUuc291cmNlSUQoKSkpCiAgICAgICAgICAgICAgICAgLnNldE5hbWUoc3RhY2tG
cmFtZS5kaXNwbGF5TmFtZSgpKQotICAgICAgICAgICAgICAgIC5zZXRMaW5lKHN0YWNrRnJhbWUu
c3RhcnRMaW5lKCkpCi0gICAgICAgICAgICAgICAgLnNldENvbHVtbihzdGFja0ZyYW1lLnN0YXJ0
Q29sdW1uKCkpCisgICAgICAgICAgICAgICAgLnNldExpbmUoc3RhY2tGcmFtZS5mdW5jdGlvblN0
YXJ0TGluZSgpKQorICAgICAgICAgICAgICAgIC5zZXRDb2x1bW4oc3RhY2tGcmFtZS5mdW5jdGlv
blN0YXJ0Q29sdW1uKCkpCiAgICAgICAgICAgICAgICAgLnNldFVybChzdGFja0ZyYW1lLnVybCgp
KQogICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICBmcmFtZXMtPmFkZEl0
ZW0oV1RGTW92ZShmcmFtZSkpOwpAQCAtMTk0LDggKzE5NCw4IEBAIHZvaWQgSW5zcGVjdG9yU2Ny
aXB0UHJvZmlsZXJBZ2VudDo6dHJhY2sKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2FtcGxpbmdQ
cm9maWxlcik7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdl
dExvY2soKSk7CiAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnN0b3AobG9ja2VyKTsKLSAgICAg
ICAgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U2FtcGxlcz4gc2FtcGxlcyA9IGJ1aWxk
U2FtcGxlcyhzYW1wbGluZ1Byb2ZpbGVyLT5zdGFja1RyYWNlcyhsb2NrZXIpLCBzYW1wbGluZ1By
b2ZpbGVyLT50b3RhbFRpbWUobG9ja2VyKSk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPmNs
ZWFyRGF0YShsb2NrZXIpOworICAgICAgICBWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tU
cmFjZT4gc3RhY2tUcmFjZXMgPSBzYW1wbGluZ1Byb2ZpbGVyLT5yZWxlYXNlU3RhY2tUcmFjZXMo
bG9ja2VyKTsKKyAgICAgICAgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U2FtcGxlcz4g
c2FtcGxlcyA9IGJ1aWxkU2FtcGxlcyhXVEZNb3ZlKHN0YWNrVHJhY2VzKSwgc2FtcGxpbmdQcm9m
aWxlci0+dG90YWxUaW1lKGxvY2tlcikpOwogCiAgICAgICAgIGxvY2tlci51bmxvY2tFYXJseSgp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxOTU2MjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDcgQEAKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAj
aW5jbHVkZSAiUmVzdWx0VHlwZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgpAQCAtNjks
NiArNzAsNyBAQCBKSVQ6OkpJVChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICwg
bV9ieVZhbEluc3RydWN0aW9uSW5kZXgoVUlOVF9NQVgpCiAgICAgLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KFVJTlRfTUFYKQogICAgICwgbV9yYW5kb21HZW5lcmF0b3IoY3J5cHRvZ3JhcGhpY2FsbHlS
YW5kb21OdW1iZXIoKSkKKyAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCp2bSkKICAg
ICAsIG1fY2FuQmVPcHRpbWl6ZWQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmco
ZmFsc2UpCiB7CkBAIC0xNTgsNiArMTYwLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFp
blBhc3MoKQogICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1
Y3Rpb25zQmVnaW4gKyBtX2J5dGVjb2RlT2Zmc2V0OwogICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKG1faW50ZXJwcmV0ZXItPmlzT3Bjb2RlKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUp
LCAicHJpdmF0ZUNvbXBpbGVNYWluUGFzcyBnb25lIGJhZCBAICVkIiwgbV9ieXRlY29kZU9mZnNl
dCk7CiAKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJl
bCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKwogI2lmIEVOQUJMRShPUENPREVf
U0FNUExJTkcpCiAgICAgICAgIGlmIChtX2J5dGVjb2RlT2Zmc2V0ID4gMCkgLy8gQXZvaWQgdGhl
IG92ZXJoZWFkIG9mIHNhbXBsaW5nIG9wX2VudGVyIHR3aWNlLgogICAgICAgICAgICAgc2FtcGxl
SW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTM2NSw2ICszNjksOCBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIGZvciAoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Ns
b3dDYXNlcy5lbmQoKTspIHsKICAgICAgICAgbV9ieXRlY29kZU9mZnNldCA9IGl0ZXItPnRvOwog
CisgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSk7CisKICAgICAgICAgdW5zaWduZWQgZmlyc3RU
byA9IG1fYnl0ZWNvZGVPZmZzZXQ7CiAKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2luICsgbV9ieXRlY29kZU9mZnNldDsKQEAgLTUxOSw2
ICs1MjUsOCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAg
ICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKICAgICB9CiAgICAgCisgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKDAsIG51bGxwdHIp
KTsKKwogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNl
dFN0YXJ0T2ZDb2RlKGxhYmVsKCkpOwogCkBAIC01NzEsNiArNTc5LDcgQEAgQ29tcGlsYXRpb25S
ZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxl
cikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7Cisg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCiAgICAgc3RhY2tPdmVy
Zmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVPZmZzZXQgPSAwOwpAQCAtNjEyLDYgKzYy
MSw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAKICAg
ICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNv
ZGUobGFiZWwoKSk7CisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwor
CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2ss
IGVmZm9ydCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCkBAIC03
MDgsNiArNzE5LDkgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQog
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdl
dCgpLCBwYXRjaEJ1ZmZlcik7CiAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
YWRkQ29tcGlsYXRpb24obV9jb21waWxhdGlvbik7CiAgICAgfQorCisgICAgaWYgKG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQorICAgICAgICBtX2NvZGVCbG9j
ay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1h
cD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKSk7CiAg
ICAgCiAgICAgQ29kZVJlZiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1
ZmZlciwKQEAgLTcxNiw3ICs3MzAsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVD
b21waWxlKEpJCiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJh
c2VsaW5lSklULmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6ZSgp
KSAvCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLnNpemUoKSkpOwotICAgIAorCiAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KENvZGVC
bG9jazo6TGF0ZVNocmluayk7CiAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUoCiAgICAgICAg
IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVENv
ZGU6OkJhc2VsaW5lSklUKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lv
biAxOTU2MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
aCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2lu
Y2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgogI2lu
Y2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKQEAgLTkx
Myw2ICs5MTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV2Vha1JhbmRvbSBtX3JhbmRv
bUdlbmVyYXRvcjsKICAgICAgICAgc3RhdGljIENvZGVSZWYgc3RyaW5nR2V0QnlWYWxTdHViR2Vu
ZXJhdG9yKFZNKik7CiAKKyAgICAgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyOworCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKICAg
ICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShy
ZXZpc2lvbiAxOTU2MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpbmNsdWRlICJBcml0eUNoZWNr
TW9kZS5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIK
ICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIK
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE5NSw2
ICsxOTcsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoSklUKQogICAgIHZpcnR1YWwgUmVnaXN0
ZXJTZXQgbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUo
Q29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisgICAgdmlydHVhbCBPcHRpb25hbDxDb2RlT3Jp
Z2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIHsgVU5VU0VEX1BBUkFNKHBjKTsgcmV0
dXJuIE51bGxvcHQ7IH0KICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmln
aW5NYXAuaCIKKworI2luY2x1ZGUgIkIzUENUb09yaWdpbk1hcC5oIgorI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1l
c3BhY2UgeworCitjbGFzcyBEZWx0YUNvbXByZXNzaW9uQnVpbGRlciB7CitwdWJsaWM6CisgICAg
RGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIoc2l6ZV90IG1heFNpemUpCisgICAgICAgIDogbV9vZmZz
ZXQoMCkKKyAgICAgICAgLCBtX21heFNpemUobWF4U2l6ZSkKKyAgICB7CisgICAgICAgIG1fYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxsb2MobV9tYXhTaXplKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdm9pZCB3cml0ZShUIGl0ZW0pCisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX29mZnNldCArIHNpemVvZihUKSA8PSBtX21h
eFNpemUpOworICAgICAgICAqYml0d2lzZV9jYXN0PFQqPihtX2J1ZmZlciArIG1fb2Zmc2V0KSA9
IGl0ZW07CisgICAgICAgIG1fb2Zmc2V0ICs9IHNpemVvZihUKTsKKyAgICB9CisKKyAgICB1aW50
OF90KiBtX2J1ZmZlcjsgCisgICAgc2l6ZV90IG1fb2Zmc2V0OworICAgIHNpemVfdCBtX21heFNp
emU7Cit9OworCitjbGFzcyBEZWx0YUNvbXByZXNzZWlvblJlYWRlciB7CitwdWJsaWM6CisgICAg
RGVsdGFDb21wcmVzc2Vpb25SZWFkZXIodWludDhfdCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKyAg
ICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAg
ICwgbV9vZmZzZXQoMCkKKyAgICB7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAg
IFQgcmVhZCgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX29mZnNldCArIHNpemVv
ZihUKSA8PSBtX3NpemUpOworICAgICAgICBUIHJlc3VsdCA9ICpiaXR3aXNlX2Nhc3Q8VCo+KG1f
YnVmZmVyICsgbV9vZmZzZXQpOworICAgICAgICBtX29mZnNldCArPSBzaXplb2YoVCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QqIG1fYnVm
ZmVyOworICAgIHNpemVfdCBtX3NpemU7CisgICAgc2l6ZV90IG1fb2Zmc2V0OworfTsKKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1BDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6UENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyKFZNJiB2bSkKKyAgICA6IG1fdm0odm0pCisgICAgLCBtX3Nob3Vs
ZEJ1aWxkTWFwcGluZyh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpCit7
IH0KKworUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIo
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiYgb3RoZXIpCisgICAgOiBtX3ZtKG90aGVyLm1fdm0p
CisgICAgLCBtX2NvZGVSYW5nZXMoV1RGTW92ZShvdGhlci5tX2NvZGVSYW5nZXMpKQorICAgICwg
bV9zaG91bGRCdWlsZE1hcHBpbmcob3RoZXIubV9zaG91bGRCdWlsZE1hcHBpbmcpCit7IH0KKwor
I2lmIEZUTF9VU0VTX0IzCitQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcihWTSYgdm0sIEIzOjpQQ1RvT3JpZ2luTWFwJiYgYjNQQ1RvT3JpZ2luTWFwKQor
ICAgIDogbV92bSh2bSkKKyAgICAsIG1fc2hvdWxkQnVpbGRNYXBwaW5nKHZtLnNob3VsZEJ1aWxk
ZXJQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSkKK3sKKyAgICBpZiAoIW1fc2hvdWxkQnVpbGRNYXBw
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGNvbnN0IEIzOjpQQ1RvT3JpZ2luTWFw
OjpPcmlnaW5SYW5nZSYgb3JpZ2luUmFuZ2UgOiBiM1BDVG9PcmlnaW5NYXAucmFuZ2VzKCkpIHsK
KyAgICAgICAgREZHOjpOb2RlKiBub2RlID0gYml0d2lzZV9jYXN0PERGRzo6Tm9kZSo+KG9yaWdp
blJhbmdlLm9yaWdpbi5kYXRhKCkpOworICAgICAgICBpZiAobm9kZSkKKyAgICAgICAgICAgIGFw
cGVuZEl0ZW0ob3JpZ2luUmFuZ2UubGFiZWwsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0ob3JpZ2luUmFuZ2UubGFiZWwsIFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CisgICAgfQorfQorI2Vu
ZGlmCisKK3ZvaWQgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjphcHBlbmRJdGVtKE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsYWJlbCwgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKK3sKKyAg
ICBpZiAoIW1fc2hvdWxkQnVpbGRNYXBwaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9jb2RlUmFuZ2VzLnNpemUoKSkgeworICAgICAgICBpZiAobV9jb2RlUmFuZ2VzLmxhc3QoKS5l
bmQgPT0gbGFiZWwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fY29kZVJhbmdlcy5s
YXN0KCkuZW5kID0gbGFiZWw7CisgICAgICAgIGlmIChtX2NvZGVSYW5nZXMubGFzdCgpLmNvZGVP
cmlnaW4gPT0gY29kZU9yaWdpbiB8fCAhY29kZU9yaWdpbikKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX2NvZGVSYW5nZXMuYXBwZW5kKENvZGVSYW5nZXtsYWJlbCwgbGFiZWws
IGNvZGVPcmlnaW59KTsKK30KKworCitzdGF0aWMgY29uc3QgdWludDhfdCBzZW50aW5lbFBDRGVs
dGEgPSAwOworc3RhdGljIGNvbnN0IGludDhfdCBzZW50aW5lbEJ5dGVjb2RlRGVsdGEgPSAwOwor
CitQQ1RvQ29kZU9yaWdpbk1hcDo6UENUb0NvZGVPcmlnaW5NYXAoUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyJiYgYnVpbGRlciwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChidWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKTsKKworICAgIGlmICghYnVpbGRlci5t
X2NvZGVSYW5nZXMuc2l6ZSgpKSB7CisgICAgICAgIG1fcGNSYW5nZVN0YXJ0ID0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKTsKKyAgICAgICAgbV9wY1JhbmdlRW5kID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKTsKKworICAgICAgICBtX2NvbXByZXNz
ZWRQQ0J1ZmZlclNpemUgPSAwOworICAgICAgICBtX2NvbXByZXNzZWRQQ3MgPSBudWxscHRyOwor
CisgICAgICAgIG1fY29tcHJlc3NlZENvZGVPcmlnaW5zU2l6ZSA9IDA7CisgICAgICAgIG1fY29t
cHJlc3NlZENvZGVPcmlnaW5zID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gV2UgZG8gYSBmaW5hbCB0b3VjaC11cCBvbiB0aGUgbGFzdCByYW5nZSBoZXJlIGJl
Y2F1c2Ugb2YgaG93IHdlIGdlbmVyYXRlIHRoZSB0YWJsZS4KKyAgICAvLyBUaGUgZmluYWwgcmFu
Z2UgKGlmIG5vbiBlbXB0eSkgd291bGQgYmUgaWdub3JlZCBpZiB3ZSBkaWRuJ3QgYXBwZW5kIGFu
eSAoYXJiaXRyYXJ5KQorICAgIC8vIHJhbmdlIGFzIHRoZSBsYXN0IGl0ZW0gb2YgdGhlIHZlY3Rv
ci4KKyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZSYgbGFzdCA9IGJ1aWxk
ZXIubV9jb2RlUmFuZ2VzLmxhc3QoKTsKKyAgICBpZiAoIShsYXN0LnN0YXJ0ID09IGxhc3QuZW5k
KSkKKyAgICAgICAgYnVpbGRlci5tX2NvZGVSYW5nZXMuYXBwZW5kKFBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcjo6Q29kZVJhbmdleyBsYXN0LmVuZCwgbGFzdC5lbmQsIGxhc3QuY29kZU9yaWdpbiB9
KTsgLy8gVGhpcyByYW5nZSB3aWxsIG5ldmVyIGFjdHVhbGx5IGJlIGZvdW5kLCBidXQgaXQgZW5z
dXJlcyB0aGUgcmVhbCBsYXN0IHJhbmdlIGlzIGZvdW5kLgorCisgICAgRGVsdGFDb21wcmVzc2lv
bkJ1aWxkZXIgcGNDb21wcmVzc29yKChzaXplb2YodWludHB0cl90KSArIHNpemVvZih1aW50OF90
KSkgKiBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCkpOworICAgIHZvaWQqIGxhc3RQQ1ZhbHVl
ID0gbnVsbHB0cjsKKyAgICBhdXRvIGJ1aWxkUENUYWJsZSA9IFsmXSAodm9pZCogcGNWYWx1ZSkg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChwY1ZhbHVlID4gbGFzdFBDVmFsdWUpOworICAgICAg
ICB1aW50cHRyX3QgZGVsdGEgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihwY1ZhbHVlKSAtIGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxhc3RQQ1ZhbHVlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZGVsdGEgIT0gc2VudGluZWxQQ0RlbHRhKTsKKyAgICAgICAgbGFzdFBDVmFsdWUgPSBwY1Zh
bHVlOworICAgICAgICBpZiAoZGVsdGEgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+Ojpt
YXgoKSkgeworICAgICAgICAgICAgcGNDb21wcmVzc29yLndyaXRlPHVpbnQ4X3Q+KHNlbnRpbmVs
UENEZWx0YSk7CisgICAgICAgICAgICBwY0NvbXByZXNzb3Iud3JpdGU8dWludHB0cl90PihkZWx0
YSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBwY0NvbXByZXNz
b3Iud3JpdGU8dWludDhfdD4oc3RhdGljX2Nhc3Q8dWludDhfdD4oZGVsdGEpKTsKKyAgICB9Owor
CisgICAgRGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIgY29kZU9yaWdpbkNvbXByZXNzb3IoKHNpemVv
ZihpbnRwdHJfdCkgKyBzaXplb2YoaW50OF90KSArIHNpemVvZihpbnQ4X3QpICsgc2l6ZW9mKElu
bGluZUNhbGxGcmFtZSopKSAqIGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSk7CisgICAgQ29k
ZU9yaWdpbiBsYXN0Q29kZU9yaWdpbigwLCBudWxscHRyKTsKKyAgICBhdXRvIGJ1aWxkQ29kZU9y
aWdpblRhYmxlID0gWyZdIChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKSB7CisgICAgICAg
IGludHB0cl90IGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCkgLSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4obGFzdENvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIGxhc3RDb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKKyAgICAgICAgaWYg
KGRlbHRhID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ4X3Q+OjptYXgoKSB8fCBkZWx0YSA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWluKCkgfHwgZGVsdGEgPT0gc2VudGluZWxCeXRl
Y29kZURlbHRhKSB7CisgICAgICAgICAgICBjb2RlT3JpZ2luQ29tcHJlc3Nvci53cml0ZTxpbnQ4
X3Q+KHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSk7CisgICAgICAgICAgICBjb2RlT3JpZ2luQ29tcHJl
c3Nvci53cml0ZTxpbnRwdHJfdD4oZGVsdGEpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPGludDhfdD4oc3RhdGljX2Nhc3Q8aW50OF90Pihk
ZWx0YSkpOworCisgICAgICAgIGludDhfdCBoYXNJbmxpbmVDYWxsRnJhbWVCeXRlID0gY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUgPyAxIDogMDsKKyAgICAgICAgY29kZU9yaWdpbkNvbXByZXNz
b3Iud3JpdGU8aW50OF90PihoYXNJbmxpbmVDYWxsRnJhbWVCeXRlKTsKKyAgICAgICAgaWYgKGhh
c0lubGluZUNhbGxGcmFtZUJ5dGUpCisgICAgICAgICAgICBjb2RlT3JpZ2luQ29tcHJlc3Nvci53
cml0ZTxJbmxpbmVDYWxsRnJhbWUqPihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAg
fTsKKworICAgIG1fcGNSYW5nZVN0YXJ0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obGlua0J1
ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmZpcnN0KCkuc3RhcnQpLmRhdGFM
b2NhdGlvbigpKTsKKyAgICBtX3BjUmFuZ2VFbmQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoYnVpbGRlci5tX2NvZGVSYW5nZXMubGFzdCgpLmVuZCkuZGF0
YUxvY2F0aW9uKCkpOworICAgIG1fcGNSYW5nZUVuZCAtPSAxOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6Q29kZVJhbmdlJiBjb2RlUmFuZ2UgPSBidWlsZGVy
Lm1fY29kZVJhbmdlc1tpXTsKKyAgICAgICAgdm9pZCogc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoY29kZVJhbmdlLnN0YXJ0KS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAgdm9pZCogZW5k
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVSYW5nZS5lbmQpLmRhdGFMb2NhdGlvbigpOwor
ICAgICAgICBBU1NFUlQobV9wY1JhbmdlU3RhcnQgPD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
c3RhcnQpKTsKKyAgICAgICAgQVNTRVJUKG1fcGNSYW5nZUVuZCA+PSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihlbmQpIC0gMSk7CisgICAgICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgICAg
ICBBU1NFUlQoaSA9PSBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCkgLSAxKTsKKyAgICAgICAg
aWYgKGkgPiAwKQorICAgICAgICAgICAgQVNTRVJUKGxpbmtCdWZmZXIubG9jYXRpb25PZihidWls
ZGVyLm1fY29kZVJhbmdlc1tpIC0gMV0uZW5kKS5kYXRhTG9jYXRpb24oKSA9PSBzdGFydCk7CisK
KyAgICAgICAgYnVpbGRQQ1RhYmxlKHN0YXJ0KTsKKyAgICAgICAgYnVpbGRDb2RlT3JpZ2luVGFi
bGUoY29kZVJhbmdlLmNvZGVPcmlnaW4pOworICAgIH0KKworICAgIG1fY29tcHJlc3NlZFBDQnVm
ZmVyU2l6ZSA9IHBjQ29tcHJlc3Nvci5tX29mZnNldDsKKyAgICBtX2NvbXByZXNzZWRQQ3MgPSBz
dGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJlYWxsb2MocGNDb21wcmVzc29yLm1fYnVmZmVyLCBt
X2NvbXByZXNzZWRQQ0J1ZmZlclNpemUpKTsKKworICAgIG1fY29tcHJlc3NlZENvZGVPcmlnaW5z
U2l6ZSA9IGNvZGVPcmlnaW5Db21wcmVzc29yLm1fb2Zmc2V0OworICAgIG1fY29tcHJlc3NlZENv
ZGVPcmlnaW5zID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKGNvZGVPcmlnaW5D
b21wcmVzc29yLm1fYnVmZmVyLCBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemUpKTsKK30KKwor
UENUb0NvZGVPcmlnaW5NYXA6On5QQ1RvQ29kZU9yaWdpbk1hcCgpCit7CisgICAgaWYgKG1fY29t
cHJlc3NlZFBDcykKKyAgICAgICAgZmFzdEZyZWUobV9jb21wcmVzc2VkUENzKTsKKyAgICBpZiAo
bV9jb21wcmVzc2VkQ29kZU9yaWdpbnMpCisgICAgICAgIGZhc3RGcmVlKG1fY29tcHJlc3NlZENv
ZGVPcmlnaW5zKTsKK30KKworZG91YmxlIFBDVG9Db2RlT3JpZ2luTWFwOjptZW1vcnlTaXplKCkK
K3sKKyAgICBkb3VibGUgc2l6ZSA9IDA7CisgICAgc2l6ZSArPSBtX2NvbXByZXNzZWRQQ0J1ZmZl
clNpemU7CisgICAgc2l6ZSArPSBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemU7CisgICAgcmV0
dXJuIHNpemU7Cit9CisKK09wdGlvbmFsPENvZGVPcmlnaW4+IFBDVG9Db2RlT3JpZ2luTWFwOjpm
aW5kUEModm9pZCogcGMpIGNvbnN0Cit7CisgICAgdWludHB0cl90IHBjQXNJbnQgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihwYyk7CisgICAgaWYgKCEobV9wY1JhbmdlU3RhcnQgPD0gcGNBc0lu
dCAmJiBwY0FzSW50IDw9IG1fcGNSYW5nZUVuZCkpCisgICAgICAgIHJldHVybiBOdWxsb3B0Owor
CisgICAgdWludHB0cl90IGN1cnJlbnRQQyA9IDA7CisgICAgQ29kZU9yaWdpbiBjdXJyZW50Q29k
ZU9yaWdpbigwLCBudWxscHRyKTsKKworICAgIERlbHRhQ29tcHJlc3NlaW9uUmVhZGVyIHBjUmVh
ZGVyKG1fY29tcHJlc3NlZFBDcywgbV9jb21wcmVzc2VkUENCdWZmZXJTaXplKTsKKyAgICBEZWx0
YUNvbXByZXNzZWlvblJlYWRlciBjb2RlT3JpZ2luUmVhZGVyKG1fY29tcHJlc3NlZENvZGVPcmln
aW5zLCBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemUpOworICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgIHVpbnRwdHJfdCBwcmV2aW91c1BDID0gY3VycmVudFBDOworICAgICAgICB7CisgICAg
ICAgICAgICB1aW50OF90IHZhbHVlID0gcGNSZWFkZXIucmVhZDx1aW50OF90PigpOworICAgICAg
ICAgICAgdWludHB0cl90IGRlbHRhOworICAgICAgICAgICAgaWYgKHZhbHVlID09IHNlbnRpbmVs
UENEZWx0YSkKKyAgICAgICAgICAgICAgICBkZWx0YSA9IHBjUmVhZGVyLnJlYWQ8dWludHB0cl90
PigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRlbHRhID0gdmFsdWU7Cisg
ICAgICAgICAgICBjdXJyZW50UEMgKz0gZGVsdGE7CisgICAgICAgIH0KKworICAgICAgICBDb2Rl
T3JpZ2luIHByZXZpb3VzT3JpZ2luID0gY3VycmVudENvZGVPcmlnaW47CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGludDhfdCB2YWx1ZSA9IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxpbnQ4X3Q+KCk7
CisgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBz
ZW50aW5lbEJ5dGVjb2RlRGVsdGEpCisgICAgICAgICAgICAgICAgZGVsdGEgPSBjb2RlT3JpZ2lu
UmVhZGVyLnJlYWQ8aW50cHRyX3Q+KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgZGVsdGEgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4odmFsdWUpOworCisgICAgICAgICAgICBj
dXJyZW50Q29kZU9yaWdpbi5ieXRlY29kZUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRpY19jYXN0PGludHB0cl90PihjdXJyZW50Q29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSArIGRl
bHRhKTsKKworICAgICAgICAgICAgaW50OF90IGhhc0lubGluZUZyYW1lID0gY29kZU9yaWdpblJl
YWRlci5yZWFkPGludDhfdD4oKTsKKyAgICAgICAgICAgIEFTU0VSVChoYXNJbmxpbmVGcmFtZSA9
PSAwIHx8IGhhc0lubGluZUZyYW1lID09IDEpOworICAgICAgICAgICAgaWYgKGhhc0lubGluZUZy
YW1lKQorICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9
IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxJbmxpbmVDYWxsRnJhbWUqPigpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9
IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJldmlvdXNQQykgeworICAgICAg
ICAgICAgdWludHB0cl90IHN0YXJ0T2ZSYW5nZSA9IHByZXZpb3VzUEM7CisgICAgICAgICAgICAv
LyBXZSBzdWJ0cmFjdCAxIGJlY2F1c2Ugd2UgZ2VuZXJhdGUgZW5kIHBvaW50cyBpbmNsdXNpdmVs
eSBpbiB0aGlzIHRhYmxlLCBldmVuIHRob3VnaCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiByYW5nZXMg
b2YgdGhlIGZvcm06IFtwcmV2aW91c1BDLCBjdXJyZW50UEMpCisgICAgICAgICAgICB1aW50cHRy
X3QgZW5kT2ZSYW5nZSA9IGN1cnJlbnRQQyAtIDE7CisgICAgICAgICAgICBpZiAoc3RhcnRPZlJh
bmdlIDw9IHBjQXNJbnQgJiYgcGNBc0ludCA8PSBlbmRPZlJhbmdlKQorICAgICAgICAgICAgICAg
IHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihwcmV2aW91c09yaWdpbik7IC8vIFdlIHJldHVy
biBwcmV2aW91c09yaWdpbiBoZXJlIGJlY2F1c2UgQ29kZU9yaWdpbidzIGFyZSBtYXBwZWQgdG8g
dGhlIHN0YXJ0VmFsdWUgb2YgdGhlIHJhbmdlLgorICAgICAgICB9CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTnVsbG9wdDsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2Rl
T3JpZ2luTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1Rv
Q29kZU9yaWdpbk1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9QQ1RvQ29kZU9yaWdpbk1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUENU
b0NvZGVPcmlnaW5NYXBfaAorI2RlZmluZSBQQ1RvQ29kZU9yaWdpbk1hcF9oCisKKyNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVkQmxhY2tUcmVlLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIEZUTF9VU0VTX0Iz
CituYW1lc3BhY2UgQjMgeworY2xhc3MgUENUb09yaWdpbk1hcDsKK30KKyNlbmRpZgorCitjbGFz
cyBMaW5rQnVmZmVyOworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOworCitjbGFzcyBQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcik7CisgICAgZnJpZW5kIGNsYXNzIFBDVG9Db2RlT3JpZ2luTWFw
OworCitwdWJsaWM6CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFZNJik7CisgICAgUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYmIG90aGVyKTsK
KworI2lmIEZUTF9VU0VTX0IzCisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFZNJiwgQjM6
OlBDVG9PcmlnaW5NYXAmJik7CisjZW5kaWYKKworICAgIHZvaWQgYXBwZW5kSXRlbShNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwsIGNvbnN0IENvZGVPcmlnaW4mKTsKKyAgICBzdGF0aWMgQ29kZU9yaWdp
biBkZWZhdWx0Q29kZU9yaWdpbigpIHsgcmV0dXJuIENvZGVPcmlnaW4oMCwgbnVsbHB0cik7IH0K
KworICAgIGJvb2wgZGlkQnVpbGRNYXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRCdWls
ZE1hcHBpbmc7IH0KKworcHJpdmF0ZToKKworICAgIHN0cnVjdCBDb2RlUmFuZ2UgeworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc3RhcnQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBlbmQ7CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICB9OworCisgICAg
Vk0mIG1fdm07CisgICAgVmVjdG9yPENvZGVSYW5nZT4gbV9jb2RlUmFuZ2VzOworICAgIGJvb2wg
bV9zaG91bGRCdWlsZE1hcHBpbmc7Cit9OworCitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcCB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUENUb0NvZGVPcmlnaW5NYXApOworcHVibGljOgorICAg
IFBDVG9Db2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYmLCBMaW5rQnVmZmVy
Jik7CisgICAgflBDVG9Db2RlT3JpZ2luTWFwKCk7CisKKyAgICBPcHRpb25hbDxDb2RlT3JpZ2lu
PiBmaW5kUEModm9pZCogcGMpIGNvbnN0OworCisgICAgZG91YmxlIG1lbW9yeVNpemUoKTsKKwor
cHJpdmF0ZToKKyAgICBzaXplX3QgbV9jb21wcmVzc2VkUENCdWZmZXJTaXplOworICAgIHNpemVf
dCBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemU7CisgICAgdWludDhfdCogbV9jb21wcmVzc2Vk
UENzOworICAgIHVpbnQ4X3QqIG1fY29tcHJlc3NlZENvZGVPcmlnaW5zOworICAgIHVpbnRwdHJf
dCBtX3BjUmFuZ2VTdGFydDsKKyAgICB1aW50cHRyX3QgbV9wY1JhbmdlRW5kOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQQ1RvQ29kZU9yaWdpbk1hcF9oIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50UENSYW5nZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRQQ1Jhbmdlcy5oCShyZXZpc2lvbiAx
OTU2MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRQQ1Jhbmdlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNMTElu
dFBDKHZvaWQqIHBjKQogICAgIHJldHVybiBsbGludFN0YXJ0IDw9IHBjQXNJbnQgJiYgcGNBc0lu
dCA8PSBsbGludEVuZDsKIH0KIAorI2lmIEVOQUJMRShKSVQpCitzdGF0aWMgY29uc3QgR1BSUmVn
IExMSW50UEMgPSBHUFJJbmZvOjpyZWdUNDsKKyNlbmRpZgorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6TExJbnQKIAogI2VuZGlmIC8vIExMSW50UENSYW5nZXNfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNp
b24gMTk1NjI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNyArMjU4LDcgQEAgaWYgSlNWQUxVRTY0
CiAgICAgIyAtIFRoZSBQQyBiYXNlIChvciBQQiBmb3Igc2hvcnQpIG11c3QgYmUgc3RvcmVkIGlu
IGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIuCiAgICAgIyAtIEMgY2FsbHMgYXJlIHN0aWxsIGdpdmVu
IHRoZSBJbnN0cnVjdGlvbiogcmF0aGVyIHRoYW4gdGhlIFBDIGluZGV4LgogICAgICMgICBUaGlz
IHJlcXVpcmVzIGFuIGFkZCBiZWZvcmUgdGhlIGNhbGwsIGFuZCBhIHN1YiBhZnRlci4KLSAgICBj
b25zdCBQQyA9IHQ0CisgICAgY29uc3QgUEMgPSB0NCAjIFdoZW4gY2hhbmdpbmcgdGhpcywgbWFr
ZSBzdXJlIExMSW50UEMgaXMgdXAgdG8gZGF0ZSBpbiBMTEludFBDUmFuZ2VzLmgKICAgICBpZiBB
Uk02NAogICAgICAgICBjb25zdCBQQiA9IGNzcjcKICAgICAgICAgY29uc3QgdGFnVHlwZU51bWJl
ciA9IGNzcjgKQEAgLTI5MCw3ICsyOTAsNyBAQCBpZiBKU1ZBTFVFNjQKICAgICBlbmQKIAogZWxz
ZQotICAgIGNvbnN0IFBDID0gdDQKKyAgICBjb25zdCBQQyA9IHQ0ICMgV2hlbiBjaGFuZ2luZyB0
aGlzLCBtYWtlIHN1cmUgTExJbnRQQyBpcyB1cCB0byBkYXRlIGluIExMSW50UENSYW5nZXMuaAog
ICAgIG1hY3JvIGxvYWRpc0Zyb21JbnN0cnVjdGlvbihvZmZzZXQsIGRlc3QpCiAgICAgICAgIGxv
YWRpcyBvZmZzZXQgKiA0W1BDXSwgZGVzdAogICAgIGVuZApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDE5
NTYyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiTExJbnRQQ1Jh
bmdlcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tT
ZXQuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlNsb3RWaXNp
dG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIK
QEAgLTQ5LDcgKzUwLDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgZG91YmxlIHNOdW1U
b3RhbFN0YWNrVHJhY2VzID0gMDsKLXN0YXRpYyBkb3VibGUgc051bVVudmVyaWZpZWRTdGFja1Ry
YWNlcyA9IDA7CiBzdGF0aWMgZG91YmxlIHNOdW1Ub3RhbFdhbGtzID0gMDsKIHN0YXRpYyBkb3Vi
bGUgc051bUZhaWxlZFdhbGtzID0gMDsKIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzTnVtV2Fsa1Jl
cG9ydGluZ0ZyZXF1ZW5jeSA9IDUwOwpAQCAtNTgsNiArNTgsOCBAQCBzdGF0aWMgY29uc3QgYm9v
bCBzUmVwb3J0U3RhdHNPbmx5V2hlblRoCiBzdGF0aWMgY29uc3QgYm9vbCBzUmVwb3J0U3RhdHMg
PSBmYWxzZTsKIAogdXNpbmcgRnJhbWVUeXBlID0gU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBl
OwordXNpbmcgVW5wcm9jZXNzZWRGcmFtZVR5cGUgPSBTYW1wbGluZ1Byb2ZpbGVyOjpVbnByb2Nl
c3NlZEZyYW1lVHlwZTsKK3VzaW5nIFVucHJvY2Vzc2VkU3RhY2tGcmFtZSA9IFNhbXBsaW5nUHJv
ZmlsZXI6OlVucHJvY2Vzc2VkU3RhY2tGcmFtZTsKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9p
ZCByZXBvcnRTdGF0cygpCiB7CkBAIC02NSw4ICs2Nyw2IEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IHZvaWQgcmVwb3J0U3RhdHMoKQogICAgICAgICBpZiAoIXNSZXBvcnRTdGF0c09ubHlXaGVuVGhl
eXJlQWJvdmVUaHJlc2hvbGQgfHwgKHNOdW1GYWlsZWRXYWxrcyAvIHNOdW1Ub3RhbFdhbGtzID4g
c1dhbGtFcnJvclBlcmNlbnRhZ2UpKSB7CiAgICAgICAgICAgICBkYXRhTG9nRigiTnVtIHRvdGFs
IHdhbGtzOiAlbGx1LiBGYWlsZWQgd2Fsa3MgcGVyY2VudDogJWxmXG4iLAogICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzTnVtVG90YWxXYWxrcyksIHNOdW1GYWlsZWRXYWxr
cyAvIHNOdW1Ub3RhbFdhbGtzKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJUb3RhbCBzdGFjayB0
cmFjZXM6ICVsbHUuIE5lZWRzIHZlcmlmaWNhdGlvbiBwZXJjZW50OiAlbGZcbiIsCi0gICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNOdW1Ub3RhbFN0YWNrVHJhY2VzKSwgc051
bVVudmVyaWZpZWRTdGFja1RyYWNlcyAvIHNOdW1Ub3RhbFN0YWNrVHJhY2VzKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTgyLDMzICs4MiwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAot
ICAgIHNpemVfdCB3YWxrKFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lPiYgc3Rh
Y2tUcmFjZSwgYm9vbCYgZGlkUnVuT3V0T2ZTcGFjZSwgYm9vbCYgc3RhY2t0cmFjZU5lZWRzVmVy
aWZpY2F0aW9uKQorICAgIHNpemVfdCB3YWxrKFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+
JiBzdGFja1RyYWNlLCBib29sJiBkaWRSdW5PdXRPZlNwYWNlKQogICAgIHsKLSAgICAgICAgc3Rh
Y2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChzUmVwb3J0U3Rh
dHMpCiAgICAgICAgICAgICBzTnVtVG90YWxXYWxrcysrOwogICAgICAgICByZXNldEF0TWFjaGlu
ZUZyYW1lKCk7CiAgICAgICAgIHNpemVfdCBtYXhTdGFja1RyYWNlU2l6ZSA9IHN0YWNrVHJhY2Uu
c2l6ZSgpOwogICAgICAgICB3aGlsZSAoIWlzQXRUb3AoKSAmJiAhbV9iYWlsaW5nT3V0ICYmIG1f
ZGVwdGggPCBtYXhTdGFja1RyYWNlU2l6ZSkgewotICAgICAgICAgICAgd2hpbGUgKG1faW5saW5l
Q2FsbEZyYW1lICYmIG1fZGVwdGggPCBtYXhTdGFja1RyYWNlU2l6ZSkgewotICAgICAgICAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrLmdldCgpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRDb2Rl
QmxvY2soY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICAgICAgc3RhY2tUcmFjZVttX2RlcHRoXSA9
IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWUoU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBl
OjpWZXJpZmllZEV4ZWN1dGFibGUsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwotICAg
ICAgICAgICAgICAgIG1fZGVwdGgrKzsKLSAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFt
ZSA9IG1faW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV9kZXB0aCA+PSBtYXhTdGFja1RyYWNlU2l6
ZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxp
ZENvZGVCbG9jayhjb2RlQmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwotICAgICAgICAgICAg
ICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0gPSBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lKEZy
YW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlLGV4ZWN1dGFibGUpOworICAgICAgICAgICAgaWYg
KENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRDb2RlQmxvY2soY29kZUJsb2NrKSk7CisgICAgICAg
ICAgICAgICAgc3RhY2tUcmFjZVttX2RlcHRoXSA9IFVucHJvY2Vzc2VkU3RhY2tGcmFtZShjb2Rl
QmxvY2ssIG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkpOwogICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24gPSB0cnVlOwor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jayA9PSBudWxscHRyKTsKICAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHVuc2FmZUNhbGxlZSA9IG1fY2FsbEZyYW1lLT51bnNhZmVD
YWxsZWUoKTsKLSAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gU2FtcGxpbmdQ
cm9maWxlcjo6U3RhY2tGcmFtZShGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUsIEpTVmFsdWU6
OmVuY29kZSh1bnNhZmVDYWxsZWUpKTsKKyAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVw
dGhdID0gVW5wcm9jZXNzZWRTdGFja0ZyYW1lKEpTVmFsdWU6OmVuY29kZSh1bnNhZmVDYWxsZWUp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fZGVwdGgrKzsKICAgICAgICAgICAgIGFk
dmFuY2VUb1BhcmVudEZyYW1lKCk7CkBAIC0xMzgsOCArMTI1LDYgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgcmVzZXRBdE1hY2hpbmVGcmFtZSgpCiAgICAgewotICAgICAgICBtX2lubGluZUNhbGxG
cmFtZSA9IG51bGxwdHI7Ci0KICAgICAgICAgaWYgKGlzQXRUb3AoKSkKICAgICAgICAgICAgIHJl
dHVybjsKIApAQCAtMTUxLDkgKzEzNiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICAvLyBJZiB0aGUgZnJh
bWUgZG9lc24ndCBoYXZlIGEgY29kZSBibG9jaywgdGhlbiBpdCdzIG5vdCBhIAotICAgICAgICAv
LyBERkcvRlRMIGZyYW1lIHdoaWNoIG1lYW5zIHdlJ3JlIG5vdCBhbiBpbmxpbmVkIGZyYW1lLgog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
ICAgICAgICAgaWYgKCFjb2RlQmxvY2spCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjQsMjUg
KzE0Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc051bUZhaWxlZFdhbGtzKys7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgY29kZSBi
bG9jayBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIG9yaWdpbnMsIHRoZW4gdGhlcmUncyBubwotICAg
ICAgICAvLyBpbmxpbmluZy4gSGVuY2UsIHdlJ3JlIG5vdCBhdCBhbiBpbmxpbmVkIGZyYW1lLgot
ICAgICAgICBpZiAoIWNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBDYWxsU2l0ZUluZGV4IGluZGV4ID0gbV9jYWxsRnJhbWUtPmNhbGxT
aXRlSW5kZXgoKTsKLSAgICAgICAgaWYgKCFjb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5k
ZXgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRToKLSAgICAgICAgICAgIC8vIEZvciB0aGUgbW9z
dCBwYXJ0LCB3ZSBvbmx5IGZhaWwgaGVyZSB3aGVuIHdlJ3JlIGxvb2tpbmcKLSAgICAgICAgICAg
IC8vIGF0IHRoZSB0b3AgbW9zdCBjYWxsIGZyYW1lLiBBbGwgb3RoZXIgcGFyZW50IGNhbGwgZnJh
bWVzCi0gICAgICAgICAgICAvLyBzaG91bGQgaGF2ZSBzZXQgdGhlIENhbGxTaXRlSW5kZXggd2hl
biBtYWtpbmcgYSBjYWxsLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNob3Vs
ZCByZXNvcnQgdG8gZ2V0dGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBQQz0+Q29kZU9yaWdpbiBt
YXBwaW5nCi0gICAgICAgICAgICAvLyBvbmNlIHdlIGltcGxlbWVudCBpdDogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjYyOQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gY29kZUJsb2NrLT5jb2RlT3Jp
Z2luKGluZGV4KS5pbmxpbmVDYWxsRnJhbWU7Ci0jZW5kaWYgLy8gIUVOQUJMRShERkdfSklUKQog
ICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZEZyYW1lUG9pbnRlcihFeGVjU3RhdGUqIGV4ZWMpCkBA
IC0yMTMsMTQgKzE3NiwxMiBAQCBwcml2YXRlOgogICAgIGNvbnN0IExvY2tIb2xkZXImIG1fY29k
ZUJsb2NrU2V0TG9ja2VyOwogICAgIGNvbnN0IExvY2tIb2xkZXImIG1fbWFjaGluZVRocmVhZHNM
b2NrZXI7CiAgICAgYm9vbCBtX2JhaWxpbmdPdXQgeyBmYWxzZSB9OwotICAgIElubGluZUNhbGxG
cmFtZSogbV9pbmxpbmVDYWxsRnJhbWU7CiAgICAgc2l6ZV90IG1fZGVwdGggeyAwIH07CiB9Owog
CiBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2bSwgUmVmUHRyPFN0b3B3
YXRjaD4mJiBzdG9wd2F0Y2gpCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9zdG9wd2F0Y2goV1RG
TW92ZShzdG9wd2F0Y2gpKQotICAgICwgbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeSgw
KQogICAgICwgbV90aW1pbmdJbnRlcnZhbChzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDEwMDAp
KQogICAgICwgbV90b3RhbFRpbWUoMCkKICAgICAsIG1fdGltZXJRdWV1ZShXb3JrUXVldWU6OmNy
ZWF0ZSgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJp
YWwsIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQpAQCAtMjU2LDIzICsyMTcsMjcg
QEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihWTSYgdgogICAgICAgICAgICAg
ICAgIC8vIFdoaWxlIHRoZSBKU0MgdGhyZWFkIGlzIHN1c3BlbmRlZCwgd2UgY2FuJ3QgZG8gdGhp
bmdzIGxpa2UgbWFsbG9jIGJlY2F1c2UgdGhlIEpTQyB0aHJlYWQKICAgICAgICAgICAgICAgICAv
LyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCiAgICAgICAgICAgICAgICAgRXhlY1N0
YXRlKiBjYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgdm9pZCogcGM7CisgICAgICAgICAgICAg
ICAgdm9pZCogbWFjaGluZVBDOworICAgICAgICAgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdm9pZCogbGxpbnRQQzsKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVy
cyByZWdpc3RlcnM7CiAgICAgICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5n
ZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0g
c3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4ocmVnaXN0ZXJzLmZyYW1lUG9pbnRlcigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgcGMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7CisgICAg
ICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIo
KTsKKyAgICAgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7CiAg
ICAgICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5mcmVlUmVnaXN0ZXJzKHJl
Z2lzdGVycyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBM
ZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgogICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTI3NjEKLSAgICAgICAgICAgICAgICBpZiAobV92bS5leGVjdXRhYmxlQWxsb2NhdG9yLmlzVmFs
aWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIsIHBjKSkgeworICAg
ICAgICAgICAgICAgIGlmIChtX3ZtLmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZEV4ZWN1dGFi
bGVNZW1vcnkoZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlciwgbWFjaGluZVBDKSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAobV92bS5pc0V4ZWN1dGluZ0luUmVnRXhwSklUKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UncmUgZXhlY3V0aW5nIGEgcmVnZXhwLiBMZXRz
IGdhdGhlciBtb3JlIGludGVyc3RpbmcgZGF0YS4KICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3MjkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IG1fdm0udG9wQ2FsbEZyYW1lOyAvLyBXZSBuZWVk
IHRvIGRvIHRoaXMgb3IgZWxzZSB3ZSdkIGZhaWwgb3VyIGJhY2t0cmFjZSB2YWxpZGF0aW9uIGIv
YyB0aGlzIGlzbid0IGEgSlMgZnJhbWUuCiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKExMSW50Ojppc0xMSW50UEMocGMpKSB7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChMTEludDo6aXNMTEludFBDKG1hY2hpbmVQQykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdG9wRnJhbWVJc0xMSW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLy8g
V2UncmUgb2theSB0byB0YWtlIGEgbm9ybWFsIHN0YWNrIHRyYWNlIHdoZW4gdGhlIFBDCiAgICAg
ICAgICAgICAgICAgICAgIC8vIGlzIGluIExMSW50IGNvZGUuCiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKQEAgLTI4NCwxMCArMjQ5LDkgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9m
aWxlcihWTSYgdgogICAgICAgICAgICAgICAgIHNpemVfdCB3YWxrU2l6ZTsKICAgICAgICAgICAg
ICAgICBib29sIHdhc1ZhbGlkV2FsazsKICAgICAgICAgICAgICAgICBib29sIGRpZFJ1bk91dE9m
VmVjdG9yU3BhY2U7Ci0gICAgICAgICAgICAgICAgYm9vbCBzdGFja3RyYWNlTmVlZHNWZXJpZmlj
YXRpb247CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBGcmFtZVdhbGtl
ciB3YWxrZXIoY2FsbEZyYW1lLCBtX3ZtLCBjb2RlQmxvY2tTZXRMb2NrZXIsIG1hY2hpbmVUaHJl
YWRzTG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgd2Fsa1NpemUgPSB3YWxrZXIud2Fsayht
X2N1cnJlbnRGcmFtZXMsIGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UsIHN0YWNrdHJhY2VOZWVkc1Zl
cmlmaWNhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHdhbGtTaXplID0gd2Fsa2VyLndhbGso
bV9jdXJyZW50RnJhbWVzLCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlKTsKICAgICAgICAgICAgICAg
ICAgICAgd2FzVmFsaWRXYWxrID0gd2Fsa2VyLndhc1ZhbGlkV2FsaygpOwogICAgICAgICAgICAg
ICAgIH0KIApAQCAtMjk4LDIxICsyNjIsMTYgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQ
cm9maWxlcihWTSYgdgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIGludGVyZXN0
aW5nIHRvIHRha2UgZGF0YSBhYm91dCB0aGUgcHJvZ3JhbSdzIHN0YXRlIHdoZW4KICAgICAgICAg
ICAgICAgICAvLyB3ZSBmYWlsIHRvIHRha2UgYSBzdGFjayB0cmFjZTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc1OAogICAgICAgICAgICAgICAgIGlmICh3YXNW
YWxpZFdhbGsgJiYgd2Fsa1NpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNSZXBvcnRT
dGF0cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc1JlcG9ydFN0YXRzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgc051bVRvdGFsU3RhY2tUcmFjZXMrKzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24pCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc051bVVudmVyaWZpZWRTdGFja1RyYWNlcysrOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNl
OworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFja0ZyYW1lPiBzdGFj
a1RyYWNlOwogICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkod2Fsa1NpemUpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHdhbGtTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrRnJhbWUg
ZnJhbWUgPSBtX2N1cnJlbnRGcmFtZXNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFj
a1RyYWNlLnVuY2hlY2tlZEFwcGVuZChmcmFtZSk7IAotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGZyYW1lLmZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0YWJsZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NlZW5FeGVjdXRhYmxlcy5hZGQoZnJhbWUudS52
ZXJpZmllZEV4ZWN1dGFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgVW5wcm9jZXNzZWRT
dGFja0ZyYW1lIGZyYW1lID0gbV9jdXJyZW50RnJhbWVzW2ldOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhY2tUcmFjZS51bmNoZWNrZWRBcHBlbmQoZnJhbWUpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgbV9zdGFja1RyYWNlcy5hcHBlbmQoU3RhY2tU
cmFjZXsgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uLCBub3dUaW1lLCBXVEZNb3ZlKHN0YWNr
VHJhY2UpIH0pOworICAgICAgICAgICAgICAgICAgICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMu
YXBwZW5kKFVucHJvY2Vzc2VkU3RhY2tUcmFjZSB7IG5vd1RpbWUsIG1hY2hpbmVQQywgdG9wRnJh
bWVJc0xMSW50LCBsbGludFBDLCBXVEZNb3ZlKHN0YWNrVHJhY2UpIH0pOwogCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChkaWRSdW5PdXRPZlZlY3RvclNwYWNlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50RnJhbWVzLmdyb3cobV9jdXJyZW50RnJhbWVzLnNpemUoKSAqIDEuMjUp
OwpAQCAtMzMyLDYgKzI5MSwzMCBAQCBTYW1wbGluZ1Byb2ZpbGVyOjp+U2FtcGxpbmdQcm9maWxl
cigpCiB7CiB9CiAKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHRyeUdldEJ5dGVjb2Rl
SW5kZXgodW5zaWduZWQgbGxpbnRQQywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGJvb2wmIGlzVmFs
aWQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSk7
CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBsbGlu
dFBDOworICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50
KCkpIHsKKyAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAgICAgIHJldHVybiBieXRlY29kZUlu
ZGV4OworICAgIH0KKyAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgcmV0dXJuIDA7CisjZWxzZQor
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvbio+
KGxsaW50UEMpOworICAgIGlmIChpbnN0cnVjdGlvbiA+PSBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmJlZ2luKCkgJiYgaW5zdHJ1Y3Rpb24gPCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJl
Z2luKCkgKyBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSkgeworICAgICAgICBpc1ZhbGlk
ID0gdHJ1ZTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IGluc3RydWN0aW9uIC0g
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgICAgICByZXR1cm4gYnl0ZWNv
ZGVJbmRleDsKKyAgICB9CisgICAgaXNWYWxpZCA9IGZhbHNlOworICAgIHJldHVybiAwOworI2Vu
ZGlmCit9CisKIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1Ry
YWNlcygpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBjYWxsZWQgZnJvbSB0
aGUgSlNDIGV4ZWN1dGlvbiB0aHJlYWQuCkBAIC0zNDAsMjIgKzMyMywzMCBAQCB2b2lkIFNhbXBs
aW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgVGlueUJsb29tRmlsdGVyIGZpbHRl
ciA9IG1fdm0uaGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLmZpbHRlcigpOwogICAgIE1hcmtl
ZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1NldCA9IG1fdm0uaGVhcC5vYmplY3RTcGFjZSgpLmJsb2Nr
cygpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1Zl
cmlmeTsgaSA8IG1fc3RhY2tUcmFjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgU3RhY2tUcmFj
ZSYgc3RhY2tUcmFjZSA9IG1fc3RhY2tUcmFjZXNbaV07IAotICAgICAgICBpZiAoIXN0YWNrVHJh
Y2UubmVlZHNWZXJpZmljYXRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3Rh
Y2tUcmFjZS5uZWVkc1ZlcmlmaWNhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoU3RhY2tG
cmFtZSYgc3RhY2tGcmFtZSA6IHN0YWNrVHJhY2UuZnJhbWVzKSB7Ci0gICAgICAgICAgICBpZiAo
c3RhY2tGcmFtZS5mcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKSB7Ci0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tGcmFtZS5mcmFtZVR5cGUgPT0gRnJh
bWVUeXBlOjpWZXJpZmllZEV4ZWN1dGFibGUpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgIGZvciAoVW5wcm9jZXNzZWRTdGFja1RyYWNlJiB1bnByb2Nlc3NlZFN0YWNrVHJhY2UgOiBt
X3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMpIHsKKyAgICAgICAgbV9zdGFja1RyYWNlcy5hcHBlbmQo
U3RhY2tUcmFjZSgpKTsKKyAgICAgICAgU3RhY2tUcmFjZSYgc3RhY2tUcmFjZSA9IG1fc3RhY2tU
cmFjZXMubGFzdCgpOworICAgICAgICBzdGFja1RyYWNlLnRpbWVzdGFtcCA9IHVucHJvY2Vzc2Vk
U3RhY2tUcmFjZS50aW1lc3RhbXA7CisKKyAgICAgICAgYXV0byBhcHBlbmRDb2RlQmxvY2sgPSBb
Jl0gKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSB7CisgICAg
ICAgICAgICBzdGFja1RyYWNlLmZyYW1lcy5hcHBlbmQoU3RhY2tGcmFtZShjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpKSk7CisKKyAgICAgICAgICAgIGlmIChieXRlY29kZUluZGV4IDwgY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgZGl2b3Q7
CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBl
bmRPZmZzZXQ7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZUluZGV4LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCwKKyAgICAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZS5mcmFtZXMubGFzdCgpLmxpbmVOdW1i
ZXIsIHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKS5jb2x1bW5OdW1iZXIpOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9zZWVuRXhlY3V0YWJsZXMuYWRkKGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCkpOworICAgICAgICB9OwogCi0gICAgICAgICAgICBKU1ZhbHVlIGNhbGxlZSA9IEpT
VmFsdWU6OmRlY29kZShzdGFja0ZyYW1lLnUudW52ZXJpZmllZENhbGxlZSk7CisgICAgICAgIGF1
dG8gYXBwZW5kVW52ZXJpZmllZENhbGxlZSA9IFsmXSAoSlNWYWx1ZSBjYWxsZWUpIHsKKyAgICAg
ICAgICAgIHN0YWNrVHJhY2UuZnJhbWVzLmFwcGVuZChTdGFja0ZyYW1lKCkpOworICAgICAgICAg
ICAgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA9IHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKTsKICAg
ICAgICAgICAgIGlmICghSGVhcDo6aXNWYWx1ZUdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tT
ZXQsIGNhbGxlZSkpIHsKICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZy
YW1lVHlwZTo6VW5rbm93bjsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEpTQ2VsbCogY2FsbGVl
Q2VsbCA9IGNhbGxlZS5hc0NlbGwoKTsKQEAgLTM3MiwyMiArMzYzLDg4IEBAIHZvaWQgU2FtcGxp
bmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKIAogICAgICAgICAgICAgaWYgKGNhbGxlZUNl
bGwtPnR5cGUoKSAhPSBKU0Z1bmN0aW9uVHlwZSkgewogICAgICAgICAgICAgICAgIHN0YWNrRnJh
bWUuZnJhbWVUeXBlID0gZnJhbWVUeXBlRnJvbUNhbGxEYXRhKCk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9u
Kj4oY2FsbGVlQ2VsbCktPmV4ZWN1dGFibGUoKTsKICAgICAgICAgICAgIGlmICghZXhlY3V0YWJs
ZSkgewogICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gZnJhbWVUeXBlRnJv
bUNhbGxEYXRhKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChIZWFw
Ojppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVjdXRhYmxlKSk7
Ci0gICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6VmVyaWZpZWRF
eGVjdXRhYmxlOwotICAgICAgICAgICAgc3RhY2tGcmFtZS51LnZlcmlmaWVkRXhlY3V0YWJsZSA9
IGV4ZWN1dGFibGU7CisgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlw
ZTo6RXhlY3V0YWJsZTsKKyAgICAgICAgICAgIHN0YWNrRnJhbWUuZXhlY3V0YWJsZSA9IGV4ZWN1
dGFibGU7CiAgICAgICAgICAgICBtX3NlZW5FeGVjdXRhYmxlcy5hZGQoZXhlY3V0YWJsZSk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgLy8gUHJlcGVuZCB0aGUgdG9wLW1vc3QgaW5saW5lZCBmcmFt
ZSBpZiBuZWVkZWQuIEFsc28sIGdhdGhlcgorICAgICAgICAvLyBsb2NhdGlvbiBpbmZvcm1hdGlv
biBhYm91dCB3aGVyZSB0aGUgdG9wIGZyYW1lIGlzIGV4ZWN1dGluZy4KKyAgICAgICAgc2l6ZV90
IHN0YXJ0SW5kZXggPSAwOworICAgICAgICBpZiAodW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1l
cy5zaXplKCkgJiYgdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXS5mcmFtZVR5cGUgPT0g
VW5wcm9jZXNzZWRGcmFtZVR5cGU6OlZlcmlmaWVkQ29kZUJsb2NrKSB7CisgICAgICAgICAgICBD
b2RlQmxvY2sqIHRvcENvZGVCbG9jayA9IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXNbMF0u
dS52ZXJpZmllZENvZGVCbG9jazsKKyAgICAgICAgICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrVHJh
Y2UudG9wRnJhbWVJc0xMSW50KSB7CisgICAgICAgICAgICAgICAgLy8gV2UgcmV1c2UgTExJbnQg
Q29kZUJsb2NrcyBmb3IgdGhlIGJhc2VsaW5lIEpJVCwgc28gd2UgbmVlZCB0byBjaGVjayBmb3Ig
Ym90aCBqaXQgdHlwZXMuCisgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBhbHNvIGJlIGZh
bHNlIGZvciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtub3duKSwgZXZlbiB0aG91Z2gK
KyAgICAgICAgICAgICAgICAvLyBpdCdzIHN1cGVyIHVubGlrZWx5LiBPbmUgcmVhc29uIHRoYXQg
dGhpcyBjYW4gYmUgZmFsc2UgaXMgd2hlbiB3ZSB0aHJvdyBmcm9tIGEgREZHIGZyYW1lLAorICAg
ICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0IGEgVk1F
bnRyeUZyYW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKKyAgICAgICAgICAgICAgICAvLyBp
bnNpZGUgdGhlIExMSW50J3MgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24uIFNvIHdlIGp1c3QgcHJv
dGVjdCBhZ2FpbnN0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsKKyAgICAgICAgICAgICAg
ICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
ayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCkgewor
ICAgICAgICAgICAgICAgICAgICBib29sIGlzVmFsaWRQQzsKKyAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYml0czsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgICAgICBi
aXRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJv
Y2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKSk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBi
aXRzID0gYml0d2lzZV9jYXN0PHVuc2lnbmVkPih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQ
Qyk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHRyeUdldEJ5
dGVjb2RlSW5kZXgoYml0cywgdG9wQ29kZUJsb2NrLCBpc1ZhbGlkUEMpOworCisgICAgICAgICAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShpc1ZhbGlkUEMpOyAvLyBGSVhNRTogZG8gc29tZXRoaW5n
IHdpdGggdGhpcyBpbmZvIGZvciB0aGUgd2ViIGluc3BlY3RvcjogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzQ1NQorCisgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZENvZGVCbG9jayh0b3BDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAg
ICAgICBzdGFydEluZGV4ID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSB0b3BDb2RlQmxvY2stPmZp
bmRQQyh1bnByb2Nlc3NlZFN0YWNrVHJhY2UudG9wUEMpKSB7CisgICAgICAgICAgICAgICAgY29k
ZU9yaWdpbi0+d2Fsa1VwSW5saW5lU3RhY2soWyZdIChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3Jp
Z2luKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSA/IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVC
bG9jay5nZXQoKSA6IHRvcENvZGVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4
OyBpIDwgdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lcy5zaXplKCk7IGkrKykgeworICAgICAg
ICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lJiB1bnByb2Nlc3NlZFN0YWNrRnJhbWUgPSB1bnBy
b2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzW2ldOworICAgICAgICAgICAgaWYgKHVucHJvY2Vzc2Vk
U3RhY2tGcmFtZS5mcmFtZVR5cGUgPT0gVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlZlcmlmaWVkQ29k
ZUJsb2NrKSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB1bnByb2Nl
c3NlZFN0YWNrRnJhbWUudS52ZXJpZmllZENvZGVCbG9jazsKKyAgICAgICAgICAgICAgICBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUuY2FsbFNpdGVJ
bmRleDsKKworICAgICAgICAgICAgICAgIGF1dG8gYXBwZW5kQ29kZUJsb2NrTm9JbmxpbmluZyA9
IFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNWYWxpZFBDOworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCB0cnlHZXRCeXRlY29kZUluZGV4KGNh
bGxTaXRlSW5kZXguYml0cygpLCBjb2RlQmxvY2ssIGlzVmFsaWRQQykpOworICAgICAgICAgICAg
ICAgIH07CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgICAgICAgICBpZiAoY29kZUJs
b2NrLT5oYXNDb2RlT3JpZ2lucygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlQmxv
Y2stPmNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGVCbG9jay0+Y29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KS53YWxrVXBJbmxpbmVT
dGFjayhbJl0gKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUg
PyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkgOiBj
b2RlQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRDb2RlQmxvY2tOb0lubGluaW5nKCk7CisjZWxzZQorICAgICAgICAgICAgICAgIGFw
cGVuZENvZGVCbG9ja05vSW5saW5pbmcoKTsKKyNlbmRpZgorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlQodW5wcm9jZXNzZWRTdGFja0ZyYW1lLmZyYW1lVHlwZSA9
PSBVbnByb2Nlc3NlZEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CisgICAgICAgICAgICAg
ICAgYXBwZW5kVW52ZXJpZmllZENhbGxlZShKU1ZhbHVlOjpkZWNvZGUodW5wcm9jZXNzZWRTdGFj
a0ZyYW1lLnUudW52ZXJpZmllZENhbGxlZSkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeSA9IG1fc3RhY2tUcmFj
ZXMuc2l6ZSgpOworICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVhcigpOwogfQogCiB2
b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKQEAg
LTQ3OCwxOCArNTM1LDEyIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6bm90aWNlVk1FbnRyeSgp
CiAgICAgZGlzcGF0Y2hJZk5lY2Vzc2FyeShsb2NrZXIpOwogfQogCi12b2lkIFNhbXBsaW5nUHJv
ZmlsZXI6OmNsZWFyRGF0YSgpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAg
ICBjbGVhckRhdGEobG9ja2VyKTsKLX0KLQogdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjbGVhckRh
dGEoY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsK
ICAgICBtX3N0YWNrVHJhY2VzLmNsZWFyKCk7CiAgICAgbV9zZWVuRXhlY3V0YWJsZXMuY2xlYXIo
KTsKLSAgICBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5ID0gMDsKKyAgICBtX3VucHJv
Y2Vzc2VkU3RhY2tUcmFjZXMuY2xlYXIoKTsKIH0KIAogU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6
OlN0YWNrRnJhbWU6OmRpc3BsYXlOYW1lKCkKQEAgLTQ5OCw5ICs1NDksNyBAQCBTdHJpbmcgU2Ft
cGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoIih1bmtub3duKSIpOwogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0KQog
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIoaG9zdCkiKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChmcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKIAotICAgIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1dGFibGU7CiAgICAgaWYgKGV4
ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxO
YXRpdmVFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPm5hbWUoKTsKIApAQCAtNTIxLDkgKzU3MCw3
IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXMKICAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiKHVua25vd24pIik7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFt
ZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIihob3N0KSIpOwotICAg
IFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUp
OwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVkRXhlY3V0YWJs
ZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+bmFtZSgpOwogCkBA
IC01NDQsMjUgKzU5MSwyMSBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6
ZGlzCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1pbnQgU2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZTo6c3RhcnRMaW5lKCkKK2ludCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpm
dW5jdGlvblN0YXJ0TGluZSgpCiB7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVu
a25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAgcmV0dXJuIC0x
OwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZpZWRD
YWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVkRXhl
Y3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAg
cmV0dXJuIC0xOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSktPmZpcnN0TGluZSgpOwogfQogCi11bnNpZ25lZCBTYW1wbGluZ1Byb2ZpbGVyOjpT
dGFja0ZyYW1lOjpzdGFydENvbHVtbigpCit1bnNpZ25lZCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFj
a0ZyYW1lOjpmdW5jdGlvblN0YXJ0Q29sdW1uKCkKIHsKICAgICBpZiAoZnJhbWVUeXBlID09IEZy
YW1lVHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0KQogICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6
VW52ZXJpZmllZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHUu
dmVyaWZpZWRFeGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigp
KQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTU3Myw5ICs2MTYsNyBAQCBpbnRwdHJfdCBTYW1w
bGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzCiB7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFt
ZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAg
cmV0dXJuIC0xOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVu
dmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZl
cmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkK
ICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC01ODYsOSArNjI3LDcgQEAgU3RyaW5nIFNhbXBsaW5n
UHJvZmlsZXI6OlN0YWNrRnJhbWU6OnVybAogewogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVU
eXBlOjpVbmtub3duIHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFt
ZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUgPSB1LnZlcmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVu
Y3Rpb24oKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKQEAgLTU5OCw3ICs2Mzcs
NyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6dXJsCiAgICAgcmV0dXJu
IHVybDsKIH0KIAotVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+JiBTYW1wbGlu
Z1Byb2ZpbGVyOjpzdGFja1RyYWNlcyhjb25zdCBMb2NrSG9sZGVyJikKK1ZlY3RvcjxTYW1wbGlu
Z1Byb2ZpbGVyOjpTdGFja1RyYWNlPiBTYW1wbGluZ1Byb2ZpbGVyOjpyZWxlYXNlU3RhY2tUcmFj
ZXMoY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyKQogewogICAgIEFTU0VSVChtX2xvY2suaXNMb2Nr
ZWQoKSk7CiAgICAgewpAQCAtNjA2LDcgKzY0NSw5IEBAIFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVy
OjpTdGFja1RyYWNlPiYgU2EKICAgICAgICAgcHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygp
OwogICAgIH0KIAotICAgIHJldHVybiBtX3N0YWNrVHJhY2VzOworICAgIFZlY3RvcjxTdGFja1Ry
YWNlPiByZXN1bHQoV1RGTW92ZShtX3N0YWNrVHJhY2VzKSk7CisgICAgY2xlYXJEYXRhKGxvY2tl
cik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OnN0
YWNrVHJhY2VzQXNKU09OKCkKQEAgLTY0Myw2ICs2ODQsOCBAQCBTdHJpbmcgU2FtcGxpbmdQcm9m
aWxlcjo6c3RhY2tUcmFjZXNBc0pTCiAKICAgICBqc29uLmFwcGVuZExpdGVyYWwoIl0iKTsKIAor
ICAgIGNsZWFyRGF0YShsb2NrZXIpOworCiAgICAgcmV0dXJuIGpzb24udG9TdHJpbmcoKTsKIH0K
IApAQCAtNjU1LDExICs2OTgsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZSBmcmFt
ZVR5cGUpCiB7CiAgICAgc3dpdGNoIChmcmFtZVR5cGUpIHsKLSAgICBjYXNlIFNhbXBsaW5nUHJv
ZmlsZXI6OkZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlOgotICAgICAgICBvdXQucHJpbnQo
IlZlcmlmaWVkRXhlY3V0YWJsZSIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNhbXBsaW5n
UHJvZmlsZXI6OkZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZToKLSAgICAgICAgb3V0LnByaW50
KCJVbnZlcmlmaWVkQ2FsbGVlIik7CisgICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5
cGU6OkV4ZWN1dGFibGU6CisgICAgICAgIG91dC5wcmludCgiRXhlY3V0YWJsZSIpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6SG9zdDoKICAg
ICAgICAgb3V0LnByaW50KCJIb3N0Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCShyZXZpc2lvbiAxOTU2MjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDQ4ICs0NCw4OCBAQCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKIGNsYXNzIFNhbXBs
aW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxl
cj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGVudW0gY2xh
c3MgRnJhbWVUeXBlIHsgCi0gICAgICAgIFZlcmlmaWVkRXhlY3V0YWJsZSwgCisKKyAgICBlbnVt
IGNsYXNzIFVucHJvY2Vzc2VkRnJhbWVUeXBlIHsgCiAgICAgICAgIFVudmVyaWZpZWRDYWxsZWUs
Ci0gICAgICAgIEhvc3QsIAotICAgICAgICBVbmtub3duIAorICAgICAgICBWZXJpZmllZENvZGVC
bG9jawogICAgIH07CiAKLSAgICBzdHJ1Y3QgU3RhY2tGcmFtZSB7Ci0gICAgICAgIFN0YWNrRnJh
bWUoRnJhbWVUeXBlIGZyYW1lVHlwZSwgRW5jb2RlZEpTVmFsdWUgY2FsbGVlKQotICAgICAgICAg
ICAgOiBmcmFtZVR5cGUoZnJhbWVUeXBlKQorICAgIHN0cnVjdCBVbnByb2Nlc3NlZFN0YWNrRnJh
bWUgeworICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoRW5jb2RlZEpTVmFsdWUgY2FsbGVl
KQorICAgICAgICAgICAgOiBmcmFtZVR5cGUoVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlVudmVyaWZp
ZWRDYWxsZWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHUudW52ZXJpZmllZENhbGxlZSA9IGNh
bGxlZTsKICAgICAgICAgfQotICAgICAgICBTdGFja0ZyYW1lKEZyYW1lVHlwZSBmcmFtZVR5cGUs
IEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQotICAgICAgICAgICAgOiBmcmFtZVR5cGUoZnJh
bWVUeXBlKQorICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICAgICAgICAgIDogZnJhbWVUeXBl
KFVucHJvY2Vzc2VkRnJhbWVUeXBlOjpWZXJpZmllZENvZGVCbG9jaykKKyAgICAgICAgICAgICwg
Y2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICB1LnZl
cmlmaWVkRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgICAgICAgICB1LnVudmVyaWZpZWRD
YWxsZWUgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIHUudmVyaWZp
ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgICAgIH0KLSAgICAgICAgU3RhY2tGcmFtZSgp
Ci0gICAgICAgICAgICA6IGZyYW1lVHlwZShGcmFtZVR5cGU6OlVua25vd24pCisgICAgICAgIFVu
cHJvY2Vzc2VkU3RhY2tGcmFtZSgpCisgICAgICAgICAgICA6IGZyYW1lVHlwZShVbnByb2Nlc3Nl
ZEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSkKICAgICAgICAgewotICAgICAgICAgICAgdS52
ZXJpZmllZEV4ZWN1dGFibGUgPSBudWxscHRyOworICAgICAgICAgICAgdS51bnZlcmlmaWVkQ2Fs
bGVlID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBG
cmFtZVR5cGUgZnJhbWVUeXBlOworICAgICAgICBVbnByb2Nlc3NlZEZyYW1lVHlwZSBmcmFtZVR5
cGU7CiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIEVuY29kZWRKU1ZhbHVlIHVudmVyaWZp
ZWRDYWxsZWU7Ci0gICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogdmVyaWZpZWRFeGVjdXRhYmxl
OworICAgICAgICAgICAgQ29kZUJsb2NrKiB2ZXJpZmllZENvZGVCbG9jazsKICAgICAgICAgfSB1
OworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXg7CisgICAgfTsKKworICAgIGVu
dW0gY2xhc3MgRnJhbWVUeXBlIHsgCisgICAgICAgIEV4ZWN1dGFibGUsCisgICAgICAgIEhvc3Qs
CisgICAgICAgIFVua25vd24gCisgICAgfTsKIAorICAgIHN0cnVjdCBTdGFja0ZyYW1lIHsKKyAg
ICAgICAgU3RhY2tGcmFtZShFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKKyAgICAgICAgICAg
IDogZnJhbWVUeXBlKEZyYW1lVHlwZTo6RXhlY3V0YWJsZSkKKyAgICAgICAgICAgICwgZXhlY3V0
YWJsZShleGVjdXRhYmxlKQorICAgICAgICB7IH0KKyAgICAgICAgU3RhY2tGcmFtZSgpCisgICAg
ICAgICAgICA6IGZyYW1lVHlwZShGcmFtZVR5cGU6OlVua25vd24pCisgICAgICAgICAgICAsIGV4
ZWN1dGFibGUobnVsbHB0cikKKyAgICAgICAgeyB9CisKKyAgICAgICAgRnJhbWVUeXBlIGZyYW1l
VHlwZTsKKyAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGU7CisKKyAgICAgICAgLy8g
VGhlc2UgYXR0ZW1wdCB0byBiZSBleHByZXNzaW9uLWxldmVsIGxpbmUgYW5kIGNvbHVtbiBudW1i
ZXIuCisgICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgdW5zaWduZWQgY29sdW1uTnVtYmVyIHsgc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKKyAgICAgICAgLy8gVGhlc2UgYXJl
IGZ1bmN0aW9uLWxldmVsIGRhdGEuCiAgICAgICAgIFN0cmluZyBkaXNwbGF5TmFtZSgpOwogICAg
ICAgICBTdHJpbmcgZGlzcGxheU5hbWVGb3JKU09OVGVzdHMoKTsgLy8gVXNlZCBmb3IgSlNDIHN0
cmVzcyB0ZXN0cyBiZWNhdXNlIHRoZXkgd2FudCB0aGUgIihhbm9ueW1vdXMgZnVuY3Rpb24pIiBz
dHJpbmcgZm9yIGFub255bW91cyBmdW5jdGlvbnMgYW5kIHRoZXkgd2FudCAiKGV2YWwpIiBmb3Ig
ZXZhbCdkIGNvZGUuCi0gICAgICAgIGludCBzdGFydExpbmUoKTsKLSAgICAgICAgdW5zaWduZWQg
c3RhcnRDb2x1bW4oKTsKKyAgICAgICAgaW50IGZ1bmN0aW9uU3RhcnRMaW5lKCk7CisgICAgICAg
IHVuc2lnbmVkIGZ1bmN0aW9uU3RhcnRDb2x1bW4oKTsKICAgICAgICAgaW50cHRyX3Qgc291cmNl
SUQoKTsKICAgICAgICAgU3RyaW5nIHVybCgpOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgVW5wcm9j
ZXNzZWRTdGFja1RyYWNlIHsKKyAgICAgICAgZG91YmxlIHRpbWVzdGFtcDsKKyAgICAgICAgdm9p
ZCogdG9wUEM7CisgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50OworICAgICAgICB2b2lkKiBs
bGludFBDOworICAgICAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFja0ZyYW1lPiBmcmFtZXM7Cisg
ICAgfTsKKwogICAgIHN0cnVjdCBTdGFja1RyYWNlIHsKLSAgICAgICAgYm9vbCBuZWVkc1Zlcmlm
aWNhdGlvbjsKICAgICAgICAgZG91YmxlIHRpbWVzdGFtcDsKICAgICAgICAgVmVjdG9yPFN0YWNr
RnJhbWU+IGZyYW1lczsKKyAgICAgICAgU3RhY2tUcmFjZSgpCisgICAgICAgIHsgfQorICAgICAg
ICBTdGFja1RyYWNlKFN0YWNrVHJhY2UmJiBvdGhlcikKKyAgICAgICAgICAgIDogdGltZXN0YW1w
KG90aGVyLnRpbWVzdGFtcCkKKyAgICAgICAgICAgICwgZnJhbWVzKFdURk1vdmUob3RoZXIuZnJh
bWVzKSkKKyAgICAgICAgeyB9CiAgICAgfTsKIAogICAgIFNhbXBsaW5nUHJvZmlsZXIoVk0mLCBS
ZWZQdHI8U3RvcHdhdGNoPiYmKTsKQEAgLTEwMCwxMiArMTQwLDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIHN0YXJ0KGNvbnN0IExvY2tIb2xkZXImKTsKICAgICB2b2lkIHN0b3AoKTsKICAgICB2b2lk
IHN0b3AoY29uc3QgTG9ja0hvbGRlciYpOwotICAgIFZlY3RvcjxTdGFja1RyYWNlPiYgc3RhY2tU
cmFjZXMoY29uc3QgTG9ja0hvbGRlciYpOworICAgIFZlY3RvcjxTdGFja1RyYWNlPiByZWxlYXNl
U3RhY2tUcmFjZXMoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0
cmluZyBzdGFja1RyYWNlc0FzSlNPTigpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbm90
aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9uVGhyZWFkKCk7CiAgICAgdm9pZCBub3RpY2VD
dXJyZW50VGhyZWFkQXNKU0NFeGVjdXRpb25UaHJlYWQoY29uc3QgTG9ja0hvbGRlciYpOwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXJEYXRhKCk7Ci0gICAgdm9pZCBjbGVhckRhdGEo
Y29uc3QgTG9ja0hvbGRlciYpOwogICAgIHZvaWQgcHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNl
cygpOyAvLyBZb3Ugc2hvdWxkIGNhbGwgdGhpcyBvbmx5IGFmdGVyIGFjcXVpcmluZyB0aGUgbG9j
ay4KICAgICBkb3VibGUgdG90YWxUaW1lKGNvbnN0IExvY2tIb2xkZXImKSB7IHJldHVybiBtX3Rv
dGFsVGltZTsgfQogICAgIHZvaWQgc2V0U3RvcFdhdGNoKGNvbnN0IExvY2tIb2xkZXImLCBSZWY8
U3RvcHdhdGNoPiYmIHN0b3B3YXRjaCkgeyBtX3N0b3B3YXRjaCA9IFdURk1vdmUoc3RvcHdhdGNo
KTsgfQpAQCAtMTE0LDExICsxNTIsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoSWZO
ZWNlc3NhcnkoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvbihj
b25zdCBMb2NrSG9sZGVyJik7CiAgICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQgY2xlYXJEYXRh
KGNvbnN0IExvY2tIb2xkZXImKTsKIAogICAgIFZNJiBtX3ZtOwogICAgIFJlZlB0cjxTdG9wd2F0
Y2g+IG1fc3RvcHdhdGNoOwogICAgIFZlY3RvcjxTdGFja1RyYWNlPiBtX3N0YWNrVHJhY2VzOwot
ICAgIHNpemVfdCBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5OworICAgIFZlY3RvcjxV
bnByb2Nlc3NlZFN0YWNrVHJhY2U+IG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlczsKICAgICBzdGQ6
OmNocm9ubzo6bWljcm9zZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91YmxlIG1fbGFz
dFRpbWU7CiAgICAgZG91YmxlIG1fdG90YWxUaW1lOwpAQCAtMTMwLDcgKzE2OSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2lzUGF1c2VkOwogICAgIGJvb2wgbV9oYXNEaXNwYXRjaGVkRnVuY3Rp
b247CiAgICAgSGFzaFNldDxFeGVjdXRhYmxlQmFzZSo+IG1fc2VlbkV4ZWN1dGFibGVzOwotICAg
IFZlY3RvcjxTdGFja0ZyYW1lPiBtX2N1cnJlbnRGcmFtZXM7CisgICAgVmVjdG9yPFVucHJvY2Vz
c2VkU3RhY2tGcmFtZT4gbV9jdXJyZW50RnJhbWVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxOTU2MjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxMiw2ICszMTIsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5
cGUpCiAgICAgICAgIGVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoKTsKICNpZiBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCiAgICAgaWYgKE9wdGlvbnM6OnVzZVNhbXBsaW5nUHJvZmlsZXIoKSkg
eworICAgICAgICBzZXRTaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZygpOwogICAgICAg
ICBtX3NhbXBsaW5nUHJvZmlsZXIgPSBhZG9wdFJlZihuZXcgU2FtcGxpbmdQcm9maWxlcigqdGhp
cywgU3RvcHdhdGNoOjpjcmVhdGUoKSkpOwogICAgICAgICBtX3NhbXBsaW5nUHJvZmlsZXItPnN0
YXJ0KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lv
biAxOTU2MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OTcsNiArNTk3LDkgQEAgcHVibGljOgogCiAgICAgaW5saW5lIGJvb2wgc2hv
dWxkVHJpZ2dlclRlcm1pbmF0aW9uKEV4ZWNTdGF0ZSopOwogCisgICAgdm9pZCBzZXRTaG91bGRC
dWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZygpIHsgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2lu
TWFwcGluZyA9IHRydWU7IH0KKyAgICBib29sIHNob3VsZEJ1aWxkZXJQQ1RvQ29kZU9yaWdpbk1h
cHBpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5n
OyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
ICAgICBmcmllbmQgY2xhc3MgQ2xlYXJFeGNlcHRpb25TY29wZTsKQEAgLTY0OCw2ICs2NTEsNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNlIH07CiAg
ICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CiAgICAgYm9vbCBtX3Nob3VsZFJld3JpdGVD
b25zdEFzVmFyIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdp
bk1hcHBpbmcgeyBmYWxzZSB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2RlQ2FjaGU+IG1fY29k
ZUNhY2hlOwogICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIt
YmFzaWMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9zYW1wbGluZy1wcm9maWxlci1iYXNpYy5qcwkocmV2aXNpb24gMTk1NjI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci1iYXNpYy5qcwko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDggQEAgaWYgKHBsYXRmb3JtU3VwcG9ydHNTYW1w
bGluZ1Byb2ZpbGVyKCkpIAogICAgICAgICAgICAgeC0tOwogICAgICAgICB9CiAgICAgfQotICAg
IG5vSW5saW5lKHRvcCk7Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gY2FsbCB0b3AoKSB0byBn
ZXQgdGhlIENhbGxTaXRlSW5kZXggdG8gdXBkYXRlCi0gICAgLy8gaW5zaWRlIHRoZSBjYWxsIGZy
YW1lLiBXZSBuZWVkIHRvIGZpeCB0aGF0IGJ5IGhhdmluZyBhIFBDPT5Db2RlT3JpZ2luCi0gICAg
Ly8gbWFwcGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjYy
OQotICAgIGZ1bmN0aW9uIGpheih4KSB7IHJldHVybiB4ICsgdG9wKCk7IH0gLy8gCisKKyAgICBm
dW5jdGlvbiBqYXooeCkgeyByZXR1cm4geCArIHRvcCgpOyB9CiAgICAgZnVuY3Rpb24ga2F6KHkp
IHsKICAgICAgICAgcmV0dXJuIGpheih5KSArIDU7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269947</attachid>
            <date>2016-01-26 16:28:41 -0800</date>
            <delta_ts>2016-01-29 13:09:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>103528</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NjM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMiBA
QAorMjAxNi0wMS0yNiAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBKU0MgU2FtcGxpbmcgUHJvZmlsZXI6IENvbWUgdXAgd2l0aCBhIChwcm9ncmFtIGNvdW50ZXIg
PT4gQ29kZU9yaWdpbikgbWFwcGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGEgbWFwcGluZyBmcm9tIFBDIHRv
IENvZGVPcmlnaW4KKyAgICAgICAgdGhhdCBsaXZlcyBvZmYgb2YgSklUZWQgQ29kZUJsb2Nrcy4g
V2UgYnVpbGQgdGhpcyBtYXBwaW5nCisgICAgICAgIHdoaWxlIEpJVGluZyBjb2RlLCBhbmQgdGhl
biB3ZSBjb21wcmVzcyBpdCBhbmQgc3RvcmUKKyAgICAgICAgaXQgb24gdGhlIENvZGVCbG9jay4g
V2Ugb25seSBidWlsZCB0aGUgbWFwcGluZyBpZiBhIGRlYnVnZ2VyCisgICAgICAgIGhhcyBldmVy
IGJlZW4gYXR0YWNoZWQgdG8gYW55IGdsb2JhbCBvYmplY3QuCisKKyAgICAgICAgQ29kZUJsb2Nr
IGNvbnN1bHRzIHRoaXMgbWFwcGluZyB3aGVuIHNlYXJjaGluZyBmb3IgYSBDb2RlT3JpZ2luCisg
ICAgICAgIGZvciBhIGdpdmVuIFBDLCBidXQgaXQgYWxzbyBjb25zdWx0cyBvdGhlciBjb2RlIHJh
bmdlcworICAgICAgICBvZmYgdGhlIG1haW4gcGF0aCB0aGF0IG1heSBvd24gdGhlIFBDLiBTcGVj
aWZpY2FsbHksIGl0IHNlYXJjaGVzCisgICAgICAgIHRocm91Z2ggaW5saW5lIGNhY2hlcywgT1NS
RXhpdHMsIGFuZCBMYXp5U2xvd1BhdGhzLgorCisgICAgICAgIFRvIGZpbmQgUEMgaW5mbyBmb3Ig
dGhlIExMSW50LCB3ZSBhbHNvIHNhdmUgdGhlIExMSW50IHBjIHdoZW4KKyAgICAgICAgdGFraW5n
IGEgc3RhY2sgdHJhY2Ugd2hlcmUgdGhlIHRvcCBmcmFtZSBpcyBpbiBMTEludCBjb2RlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgY29kZSBpbnNpZGUgdGhlIFNhbXBsaW5n
UHJvZmllci4KKyAgICAgICAgSSByZWFsaXplZCBhIGJ1ZyBpbiB0aGUgU2FtcGxpbmdQcm9maWxl
cidzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBXZSB1c2VkIHRvIHdhbGsgdGhlIGlubGluZSBz
dGFjayB3aGlsZSBnYXRoZXJpbmcgYSBzdGFjaworICAgICAgICB0cmFjZS4gVGhpcyBpcyB3cm9u
Zy4gSXQncyBzdXBlciBkYW5nZXJvdXMgdG8gZG8gdGhpcyBiZWNhdXNlCisgICAgICAgIHdlIG1p
Z2h0IHBhdXNlIHRoZSBKU0MgcHJvY2VzcyB3aGlsZSBpdCdzIG1vZGlmeWluZyBpdHMKKyAgICAg
ICAgQ29kZU9yaWdpbiB0YWJsZS4gV2UgdXNlZCB0byB3YWxrIHRoZSBpbmxpbmUgc3RhY2sgd2hp
bGUKKyAgICAgICAgdGFraW5nIGEgc3RhY2sgdHJhY2UgYmVjYXVzZSBkb2luZyBzbyBjb3VsZCBz
YXZlIHVzIGZyb20KKyAgICAgICAgaGF2aW5nIHRvIHZlcmlmeSBhIHBhcnRpY3VsYXIgc3RhY2sg
dHJhY2UuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGF0LgorICAgICAgICBXZSBub3cgaGF2ZSB0byB2
ZXJpZnkgYWxsIHN0YWNrIHRyYWNlcyB0YWtlbi4gVGhpcyB2ZXJpZmljYXRpb24gc3RlcAorICAg
ICAgICBpbmNsdWRlcyB3YWxraW5nIHRoZSBpbmxpbmUgc3RhY2suCisKKyAgICAgICAgQmVjYXVz
ZSB3ZSBoYXZlIGEgUEM9PkNvZGVPcmlnaW4gbWFwLCB3ZSBjYW4gbm93IGdhdGhlciBtb3JlCisg
ICAgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0b3AtZnJhbWUgd2UgcGF1c2Uu
IFRoaXMgYWxsb3dzCisgICAgICAgIHVzIHRvIGNvcnJlY3RseSBvYnNlcnZlIGlubGluaW5nLiBJ
dCBhbHNvIGFsbG93cyB1cyB0byBvYnNlcnZlCisgICAgICAgIGV4cHJlc3Npb24tbGV2ZWwgbGlu
ZS9jb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgZnJhbWUuCisgICAgICAgIFRoZSByZWFz
b24gd2UgZG9uJ3QgY29uc3VsdCB0aGlzIG1hcHBpbmcgZm9yIHBhcmVudCBmcmFtZXMgaXMgCisg
ICAgICAgIHRoYXQgYWxsIHBhcmVudCBmcmFtZXMgc2hvdWxkIHNldCB0aGUgQ2FsbFNpdGVJbmRl
eCBvbiB0aGUgY2FsbAorICAgICAgICBmcmFtZSBoZWFkZXIsIHdoaWNoIG1lYW5zIHdlIGNhbiBj
b25zdWx0IHRoYXQgdmFsdWUgdG8gZ2V0IGlubGluaW5nIAorICAgICAgICBhbmQgZXhwcmVzc2lv
bi1sZXZlbCBsaW5lL2NvbHVtbiBpbmZvcm1hdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6
CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkxhYmVsOjpMYWJlbCk6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkxhYmVsOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6TGFiZWw6OmlzU2V0KToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
YmxlckxhYmVsOjpsYWJlbEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyTGFiZWw6
Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAqIGIz
L0IzT3JpZ2luLmg6CisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgorICAgICAgICAo
SlNDOjpCMzo6T3JpZ2luOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBiMy9CM1BDVG9PcmlnaW5N
YXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQQ1RvT3JpZ2luTWFwOjpQQ1RvT3JpZ2lu
TWFwKToKKyAgICAgICAgKEpTQzo6QjM6OlBDVG9PcmlnaW5NYXA6OmFwcGVuZEl0ZW0pOgorICAg
ICAgICAoSlNDOjpCMzo6UENUb09yaWdpbk1hcDo6cmFuZ2VzKToKKyAgICAgICAgKiBiMy9CM1By
b2NlZHVyZS5oOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpwY1RvT3JpZ2luTWFwKToK
KyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVsZWFzZVBDVG9PcmlnaW5NYXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omdl
bmVyYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9m
aWxlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRQQyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW5IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdp
bkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAg
ICAgICAgKEpTQzo6YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKToKKyAgICAg
ICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpQb2x5bW9y
cGhpY0FjY2Vzczo6Y29udGFpbnNQQyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVm
ZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpjb250YWluc1BDKToK
KyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpoYXNFeHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpl
eHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRUaGlz
UmVnaXN0ZXIpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OmF0dGFjaCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29kZTo6ZmluZFBDKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmNvbW1vbkRhdGFPZmZzZXQpOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpyZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JF
eGl0SWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpzZXRFbmRPZk1h
aW5QYXRoKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5kT2ZDb2RlKToK
KyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6c2V0U3RhcnRPZkNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
OjpzZXRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkQ2FsbFNp
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpwY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpzZXRFbmRPZk1haW5QYXRo
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5kT2ZDb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6Y2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U2xvd1BhdGhHZW5lcmF0b3I6Om9yaWdpbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YWRkU2xvd1Bh
dGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpydW5TbG93
UGF0aEdlbmVyYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKiBmdGwvRlRMQjNDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxl
KToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklU
Q29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUp
OgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmZpbmRQQyk6CisgICAgICAgICogZnRsL0ZU
TEpJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpiM0NvZGUpOgorICAgICAg
ICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TWFjaGluZVRo
cmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3RlcnM6OmxsaW50UEMpOgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKToKKyAgICAgICAg
KiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OmFkZEV2ZW50KToKKyAgICAgICAgKEluc3BlY3Rv
cjo6YnVpbGRTYW1wbGVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yU2NyaXB0UHJv
ZmlsZXJBZ2VudDo6dHJhY2tpbmdDb21wbGV0ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQu
aDoKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpmaW5k
UEMpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cik6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6YXBwZW5kSXRlbSk6
CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpQQ1RvQ29kZU9yaWdpbk1hcCk6Cisg
ICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjp+UENUb0NvZGVPcmlnaW5NYXApOgorICAg
ICAgICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcDo6bWVtb3J5U2l6ZSk6CisgICAgICAgIChKU0M6
OlBDVG9Db2RlT3JpZ2luTWFwOjpmaW5kUEMpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpk
ZWZhdWx0Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjo6ZGlkQnVpbGRNYXBwaW5nKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rp
b25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMpOgorICAgICAgICAqIGxsaW50L0xMSW50UENS
YW5nZXMuaDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmlzTExJbnRQQyk6CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwb3J0U3RhdHMpOgorICAgICAgICAoSlNDOjpG
cmFtZVdhbGtlcjo6RnJhbWVXYWxrZXIpOgorICAgICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6d2Fs
ayk6CisgICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjpyZXNldEF0TWFjaGluZUZyYW1lKToKKyAg
ICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmlzVmFsaWRGcmFtZVBvaW50ZXIpOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6
U2FtcGxpbmdQcm9maWxlcjo6flNhbXBsaW5nUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjp0cnlH
ZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vz
c1VudmVyaWZpZWRTdGFja1RyYWNlcyk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6
OnZpc2l0KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6bm90aWNlVk1FbnRyeSk6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OmNsZWFyRGF0YSk6CisgICAgICAgIChK
U0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRpc3BsYXlOYW1lKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzcGxheU5hbWVGb3JKU09OVGVz
dHMpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpmdW5jdGlv
blN0YXJ0TGluZSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6
OmZ1bmN0aW9uU3RhcnRDb2x1bW4pOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpT
dGFja0ZyYW1lOjpzb3VyY2VJRCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0
YWNrRnJhbWU6OnVybCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnJlbGVhc2VT
dGFja1RyYWNlcyk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnN0YWNrVHJhY2Vz
QXNKU09OKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlNh
bXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnN0YXJ0TGluZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnN0YXJ0Q29sdW1uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6c3RhY2tUcmFjZXMpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgorICAgICAgICAoSlNDOjpT
YW1wbGluZ1Byb2ZpbGVyOjpVbnByb2Nlc3NlZFN0YWNrRnJhbWU6OlVucHJvY2Vzc2VkU3RhY2tG
cmFtZSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OlN0YWNr
RnJhbWUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlOjpTdGFj
a1RyYWNlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6dG90YWxUaW1lKToKKyAg
ICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6c2V0U3RvcFdhdGNoKToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpzZXRTaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFw
cGluZyk6CisgICAgICAgIChKU0M6OlZNOjpzaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBw
aW5nKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItYmFzaWMuanM6
CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlci50b3ApOgorICAgICAg
ICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIuamF6KToKKyAgICAgICAgKHBsYXRm
b3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLmtheik6CisKIDIwMTYtMDEtMjYgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBJdCBzaG91bGQgYmUgcG9zc2libGUg
dG8gZGlzYWJsZSBGVEwgZm9yIGEgcmFuZ2UgbGlrZSB3ZSBkaXNhYmxlIERGRyBmb3IgYSByYW5n
ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTk1NjM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC01MTEsNiArNTExLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQv
SklUU3ViR2VuZXJhdG9yLmNwcAogICAgIGppdC9KSVRUaHVua3MuY3BwCiAgICAgaml0L0pJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAorICAgIGppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5jcHAKICAgICBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCiAgICAgaml0
L1JlZy5jcHAKICAgICBqaXQvUmVnaXN0ZXJBdE9mZnNldC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY0Myw3ICsxNjQzLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblNhbQogewogICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCku
c2FtcGxpbmdQcm9maWxlcigpKTsKICAgICBTdHJpbmcganNvblN0cmluZyA9IGV4ZWMtPnZtKCku
c2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNPTigpOwotICAgIGV4ZWMtPnZtKCku
c2FtcGxpbmdQcm9maWxlcigpLT5jbGVhckRhdGEoKTsKICAgICBFbmNvZGVkSlNWYWx1ZSByZXN1
bHQgPSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsKICAgICBS
RUxFQVNFX0FTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE5
NTYzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY3MCw2ICs2NzAsNyBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFRodW5rcy5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFNldHVwVmFyYXJnc0Zy
YW1lLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxQQ1RvQ29kZU9yaWdp
bk1hcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJl
Zy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJBdE9mZnNl
dC5jcHAiIC8+CkBAIC0xNTAyLDcgKzE1MDMsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caml0XEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUV3JpdGVCYXJyaWVyLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcSlNJbnRlcmZhY2VKSVQuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxTZXR1cFZhcmFyZ3NGcmFtZS5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caml0XFBDVG9Db2RlT3JpZ2luTWFwLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxSZWdpc3RlckF0T2Zmc2V0LmgiIC8+CkBAIC0xNTExLDYgKzE1MTIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlZ2lzdGVyU2V0LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVwYXRjaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caml0XFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caml0XFNldHVwVmFyYXJnc0ZyYW1lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcU25pcHBldE9wZXJhbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxTcGVjaWFsaXplZFRodW5rSklULmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcVGVtcFJlZ2lzdGVyU2V0LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxOTU2MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTE5MTEsNiArMTkxMSw5IEBA
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQmluYXJ5U3dpdGNoLmNwcCI+CiAgICAg
ICA8RmlsdGVyPmppdDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caml0XFBDVG9Db2RlT3JpZ2luTWFwLmNwcCI+CisgICAgICA8RmlsdGVyPmpp
dDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCI+CiAgICAgICA8RmlsdGVyPmppdDwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNDU5Niw2ICs0NTk5LDkgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgiPgogICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxQQ1RvQ29kZU9yaWdpbk1hcC5oIj4KKyAgICAgIDxGaWx0ZXI+aml0
PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxq
aXRcUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCI+CiAgICAgICA8RmlsdGVyPmppdDwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE5NTYzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA1LDkgKzEz
MDUsMTIgQEAKIAkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2
MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwICovOyB9OwogCQk3MEVD
QTYwODFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDMxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdp
c3RyeUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTJDQjM0OTFDNEVF
RDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBD
VG9Db2RlT3JpZ2luTWFwLmNwcCAqLzsgfTsKKwkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8q
IFBDVG9Db2RlT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTY0
NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdl
dFB1dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3OTdFMDdBOTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3
RTA3QTcxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAq
LzsgfTsKIAkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmly
b25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTlFRjdD
NDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyog
QjNQQ1RvT3JpZ2luTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzlDNEIxNUQxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlh
YmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzlDNEIxNUIxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwICovOyB9OwogCQk3OUM0QjE1RTFCQTIxNThGMDBG
RDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUMxQkEyMTU4RjAw
RkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUNGQzZGMDFDMzNC
MTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDRkM2RUYxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMzUwMiw5ICszNTA1LDEyIEBACiAJCTcwRUNBNjAyMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1w
bGF0ZVJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRl
bXBsYXRlUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYw
MzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYz
IC8qIFBDVG9Db2RlT3JpZ2luTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBDVG9Db2RlT3JpZ2luTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzkyQ0IzNDgxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBDVG9Db2RlT3JpZ2luTWFwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJ
bmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldFB1dEluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTcxQjhGQ0ZCOTAwODQwMEJBIC8qIEpT
R2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNQQ1RvT3JpZ2luTWFwLmg7IHBhdGggPSBiMy9CM1BDVG9Pcmln
aW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUIxQkEyMTU4RjAw
RkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVz
ZXJ2YXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QzRCMTVDMUJB
MjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xpdmVDYXRjaFZhcmlhYmxlUHJl
c2VydmF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5Q0ZDNkVGMUMzM0Ix
MDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IExMSW50UENSYW5nZXMuaDsgcGF0aCA9IGxsaW50L0xMSW50UENSYW5nZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4NDQsNiArNDg1MCw3IEBACiAJCQkJMEZFQzg0
REMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCAqLywKIAkJCQkwRkVD
ODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovLAogCQkJCTBG
RUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oICovLAorCQkJCTc5
OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLywKIAkJCQkwRkVD
ODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLywKIAkJCQkwRkVDODRF
MDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi8sCiAJCQkJMEYzNzMwOEExQzBC
RDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uY3BwICovLApAQCAtNTE1NSw2ICs1MTYyLDgg
QEAKIAkJCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklU
V3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50
ZXJmYWNlSklULmggKi8sCisJCQkJNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2Rl
T3JpZ2luTWFwLmNwcCAqLywKKwkJCQk3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0Nv
ZGVPcmlnaW5NYXAuaCAqLywKIAkJCQkwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovLAogCQkJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0
NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oICovLAogCQkJCTBGQTdBOEU5MThCNDEz
QzgwMDUyMzcxRCAvKiBSZWcuY3BwICovLApAQCAtNzAzMSw2ICs3MDQwLDggQEAKIAkJCQkwRkVD
ODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
NzMwOTMxQzBENjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2lu
TWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTJDQjM0QTFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5Q0ZDNkYwMUMzM0IxMDAwMEM3
NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUQ1Q0Q1QjFDMTEw
NkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
MTgzMzExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLywK
QEAgLTg5NzgsNiArODk4OSw3IEBACiAJCQkJMEY4RjE0MzUxQURGMDkwMTAwRUQ3OTJDIC8qIERG
R01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMkNENUIxQjYx
QTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3Mzc4MTBEMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNzkyQ0IzNDkxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3Jp
Z2luTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1QiAv
KiBERkdOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjM4NzhGMUJGQkM0NEQwMEUzQUIx
RSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgx
QkExNTBFOTUyQzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzk2LDYgKzM5Niw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hc20tPmludmFsaWRhdGVB
bGxUZW1wUmVnaXN0ZXJzKCk7CiAgICAgICAgIH0KIAorICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgTGFiZWwmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2xhYmVsID09IG90aGVyLm1fbGFi
ZWw7IH0KKwogICAgICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9sYWJlbC5pc1Nl
dCgpOyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgQXNzZW1ibGVyTGFiZWwgbV9sYWJlbDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZm
ZXIuaAkocmV2aXNpb24gMTk1NjM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBBc3NlbWJsZXJMYWJlbChtX29mZnNldCAr
IG9mZnNldCk7CiAgICAgICAgIH0KIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXNz
ZW1ibGVyTGFiZWwmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29m
ZnNldDsgfQorCiAgICAgICAgIHVpbnQzMl90IG1fb2Zmc2V0OwogICAgIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5NTYzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkIzUmVkdWNlU3RyZW5ndGguaCIKICNpbmNsdWRl
ICJCM1RpbWluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIlBD
VG9Db2RlT3JpZ2luTWFwLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2aXNpb24gMTk1NjM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDggQEAgcHVibGljOgogCiAgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YTsgfQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9yaWdpbiYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YSA9PSBvdGhlci5tX2RhdGE7IH0KKwogICAgIC8vIFlvdSBz
aG91bGQgYXZvaWQgdXNpbmcgdGhpcy4gVXNlIE9yaWdpbkR1bXAgaW5zdGVhZC4KICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQQ1RvT3JpZ2luTWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQQ1RvT3JpZ2luTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzUENUb09yaWdpbk1hcF9oCisjZGVmaW5lIEIzUENUb09yaWdpbk1hcF9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIFBDVG9PcmlnaW5NYXAgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFBDVG9PcmlnaW5NYXApOworcHVibGljOgorICAgIFBDVG9PcmlnaW5NYXAoKQorICAg
IHsgfQorCisgICAgUENUb09yaWdpbk1hcChQQ1RvT3JpZ2luTWFwJiYgb3RoZXIpCisgICAgICAg
IDogbV9yYW5nZXMoV1RGTW92ZShvdGhlci5tX3JhbmdlcykpCisgICAgeyB9CisKKyAgICBzdHJ1
Y3QgT3JpZ2luUmFuZ2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWw7Cisg
ICAgICAgIE9yaWdpbiBvcmlnaW47CisgICAgfTsKKworICAgIHZvaWQgYXBwZW5kSXRlbShNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwsIE9yaWdpbiBvcmlnaW4pCisgICAgeworICAgICAgICBp
ZiAobV9yYW5nZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAobV9yYW5nZXMubGFzdCgpLmxh
YmVsID09IGxhYmVsKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fcmFuZ2VzLmFwcGVuZChPcmlnaW5SYW5nZXtsYWJlbCwgb3JpZ2lufSk7CisgICAgfQor
CisgICAgY29uc3QgVmVjdG9yPE9yaWdpblJhbmdlPiYgcmFuZ2VzKCkgY29uc3QgIHsgcmV0dXJu
IG1fcmFuZ2VzOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPE9yaWdpblJhbmdlPiBtX3Jhbmdl
czsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzUENUb09yaWdpbk1hcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTk1NjM0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkIzT3JpZ2lu
LmgiCisjaW5jbHVkZSAiQjNQQ1RvT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiQjNTdGFja1Nsb3RL
aW5kLmgiCiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleS5oIgpAQCAt
MzYxLDYgKzM2Miw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBm
cmFtZVNpemUoKSBjb25zdDsKICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVl
U2F2ZVJlZ2lzdGVycygpIGNvbnN0OwogCisgICAgUENUb09yaWdpbk1hcCYgcGNUb09yaWdpbk1h
cCgpIHsgcmV0dXJuIG1fcGNUb09yaWdpbk1hcDsgfQorICAgIFBDVG9PcmlnaW5NYXAgcmVsZWFz
ZVBDVG9PcmlnaW5NYXAoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGNUb09yaWdpbk1hcCk7IH0KKwog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiAgICAgCkBAIC0z
ODIsNiArMzg2LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWlyOjpDb2RlPiBt
X2NvZGU7CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmludFN0cmVhbSYsIE9yaWdpbik+
PiBtX29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9mcm9udGVuZERhdGE7CisgICAg
UENUb09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUu
Y3BwCShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUg
IkFpclZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiQjNDb21tb24uaCIKICNpbmNsdWRlICJCM0luZGV4
TWFwLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlICJCM1RpbWluZ1Njb3Bl
LmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmgiCkBAIC0xNzEsMTIgKzE3MiwyMyBAQCB2b2lkIGdlbmVyYXRl
KENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIGJsb2NrSnVtcHNbdGFyZ2V0XS5h
cHBlbmQoanVtcCk7CiAgICAgfTsKIAorICAgIFBDVG9PcmlnaW5NYXAmIHBjVG9PcmlnaW5NYXAg
PSBjb2RlLnByb2MoKS5wY1RvT3JpZ2luTWFwKCk7CisgICAgYXV0byBhZGRJdGVtID0gWyZdIChJ
bnN0JiBpbnN0KSB7CisgICAgICAgIGlmICghaW5zdC5vcmlnaW4pIHsKKyAgICAgICAgICAgIHBj
VG9PcmlnaW5NYXAuYXBwZW5kSXRlbShqaXQubGFiZWwoKSwgT3JpZ2luKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHBjVG9PcmlnaW5NYXAuYXBwZW5kSXRlbShq
aXQubGFiZWwoKSwgaW5zdC5vcmlnaW4tPm9yaWdpbigpKTsKKyAgICB9OworCiAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgYmxvY2tKdW1wc1tibG9ja10ubGlu
aygmaml0KTsKICAgICAgICAgYmxvY2tMYWJlbHNbYmxvY2tdID0gaml0LmxhYmVsKCk7CiAgICAg
ICAgIEFTU0VSVChibG9jay0+c2l6ZSgpID49IDEpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+YXQoaSkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAg
ICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICBhZGRJdGVt
KGluc3QpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBpbnN0LmdlbmVy
YXRlKGppdCwgY29udGV4dCk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGp1bXAsICFqdW1w
LmlzU2V0KCkpOwogICAgICAgICB9CiAKQEAgLTE4NCw2ICsxOTYsOCBAQCB2b2lkIGdlbmVyYXRl
KENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgICAgICAmJiBibG9jay0+c3VjY2Vz
c29yQmxvY2soMCkgPT0gY29kZS5maW5kTmV4dEJsb2NrKGJsb2NrKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCisgICAgICAgIGFkZEl0ZW0oYmxvY2stPmxhc3QoKSk7CisKICAgICAgICAgaWYg
KGlzUmV0dXJuKGJsb2NrLT5sYXN0KCkub3Bjb2RlKSkgewogICAgICAgICAgICAgLy8gV2UgY3Vy
cmVudGx5IGRvbid0IHJlcHJlc2VudCB0aGUgZnVsbCBwcm9sb2d1ZS9lcGlsb2d1ZSBpbiBBaXIs
IHNvIHdlIG5lZWQgdG8KICAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVycmlkZS4KQEAgLTE5
OCw2ICsyMTIsNyBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9n
dWVXaXRoRW1wdHlGcmFtZSgpOwogICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAg
YWRkSXRlbShibG9jay0+bGFzdCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAKQEAgLTIxOCwxMCArMjMzLDEzIEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxI
ZWxwZXJzJiAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBhZGRJdGVtKGJsb2NrLT5sYXN0KCkp
OwogICAgIH0KIAorICAgIHBjVG9PcmlnaW5NYXAuYXBwZW5kSXRlbShqaXQubGFiZWwoKSwgT3Jp
Z2luKCkpOwogICAgIGZvciAoYXV0byYgbGF0ZVBhdGggOiBjb250ZXh0LmxhdGVQYXRocykKICAg
ICAgICAgbGF0ZVBhdGgtPnJ1bihqaXQsIGNvbnRleHQpOworICAgIHBjVG9PcmlnaW5NYXAuYXBw
ZW5kSXRlbShqaXQubGFiZWwoKSwgT3JpZ2luKCkpOwogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMTk1NjM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAKICNp
bmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVy
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFw
LmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJQcm9maWxlckRh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiUmVkdWNlV2hpdGVzcGFjZS5oIgpAQCAtNDI3NSw0ICs0Mjc2
LDMwIEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKICAgICB9CiB9
CiAKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFw
KHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBtYXApIAoreyAKKyAgICBtX3Bj
VG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtYXApOworfQorCitPcHRpb25hbDxDb2RlT3JpZ2lu
PiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKK3sKKyAgICBpZiAobV9wY1RvQ29kZU9yaWdp
bk1hcCkgeworICAgICAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1f
cGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCisgICAgICAgICAgICByZXR1cm4gY29kZU9y
aWdpbjsKKyAgICB9CisKKyAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOworICAgICAgICBpZiAoc3R1Yi0+Y29udGFp
bnNQQyhwYykpCisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oc3R1Yi0+
Y29kZU9yaWdpbik7CisgICAgfQorCisgICAgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVP
cmlnaW4gPSBtX2ppdENvZGUtPmZpbmRQQyh0aGlzLCBwYykpCisgICAgICAgIHJldHVybiBjb2Rl
T3JpZ2luOworCisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7
CiBjbGFzcyBUeXBlTG9jYXRpb247CiBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OworY2xhc3Mg
UENUb0NvZGVPcmlnaW5NYXA7CiAKIGVudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsgRG9udENvdW50
UmVvcHRpbWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKIApAQCAtMjc0LDcgKzI3NSw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ppdENvZGVNYXAuZ2V0KCk7CiAg
ICAgfQotICAgIAorCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb24qIHJl
dHVybkFkZHJlc3MpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5BZGRyZXNz
ID49IGluc3RydWN0aW9ucygpLmJlZ2luKCkgJiYgcmV0dXJuQWRkcmVzcyA8IGluc3RydWN0aW9u
cygpLmVuZCgpKTsKQEAgLTkyNyw2ICs5MjgsMTEgQEAgcHVibGljOgogCiAgICAgQ2FsbFNpdGVJ
bmRleCBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmln
aW5hbENhbGxTaXRlKTsKIAorI2lmIEVOQUJMRShKSVQpCisgICAgdm9pZCBzZXRQQ1RvQ29kZU9y
aWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOworICAgIE9wdGlv
bmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7CisjZW5kaWYKKwogcHJvdGVjdGVkOgog
ICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogICAgIHZvaWQgZmluYWxpemVC
YXNlbGluZUpJVElubGluZUNhY2hlcygpOwpAQCAtMTA5Niw2ICsxMTAyLDcgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAjaWYgRU5BQkxFKEpJ
VCkKICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsK
ICNlbmRpZgogCiAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5h
bGl6ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmgJKHJldmlzaW9uIDE5NTYzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsOSBAQCBzdHJ1Y3QgQ29k
ZU9yaWdpbiB7CiAgICAgYm9vbCBpc0FwcHJveGltYXRlbHlFcXVhbFRvKGNvbnN0IENvZGVPcmln
aW4mIG90aGVyKSBjb25zdDsKICAgICAKICAgICB1bnNpZ25lZCBhcHByb3hpbWF0ZUhhc2goKSBj
b25zdDsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIHdhbGtV
cElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJik7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBpbmxp
bmUgc3RhY2suIFRoaXMgaXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25s
eS4KICAgICBWZWN0b3I8Q29kZU9yaWdpbj4gaW5saW5lU3RhY2soKSBjb25zdDsKQEAgLTEyNyw3
ICsxMzAsNyBAQCBpbmxpbmUgYm9vbCBDb2RlT3JpZ2luOjpvcGVyYXRvcj09KGNvbnN0CiAgICAg
cmV0dXJuIGJ5dGVjb2RlSW5kZXggPT0gb3RoZXIuYnl0ZWNvZGVJbmRleAogICAgICAgICAmJiBp
bmxpbmVDYWxsRnJhbWUgPT0gb3RoZXIuaW5saW5lQ2FsbEZyYW1lOwogfQotICAgIAorCiBzdHJ1
Y3QgQ29kZU9yaWdpbkhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENvZGVP
cmlnaW4mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IENvZGVPcmlnaW4mIGEsIGNvbnN0IENvZGVPcmlnaW4mIGIpIHsgcmV0dXJuIGEgPT0g
YjsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFt
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuaAkocmV2aXNpb24gMTk1NjM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNiArMjQ2LDE4
IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3IKICAgICByZXR1cm4g
YmFzZWxpbmVDb2RlQmxvY2s7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK2lu
bGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBm
dW5jdGlvbikKK3sKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAqdGhpczsKKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICBmdW5jdGlvbihjb2RlT3JpZ2luKTsKKyAgICAgICAgaWYgKCFj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
b2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKKyAg
ICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
CShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYgKzMyNCwxNCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CisgICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdAorICAgIHsg
CisgICAgICAgIGlmICghbV9zdHViUm91dGluZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICB1aW50cHRyX3QgcGNBc0ludCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBj
KTsKKyAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUtPnN0YXJ0QWRkcmVzcygpIDw9IHBjQXNJ
bnQgJiYgcGNBc0ludCA8PSBtX3N0dWJSb3V0aW5lLT5lbmRBZGRyZXNzKCk7CisgICAgfQogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NDYXNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZp
c2lvbiAxOTU2MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDEzIEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICByZXNldChjb2RlQmxvY2spOwog
ICAgIHJlc2V0QnlHQyA9IHRydWU7CiB9CisKK2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OmNvbnRh
aW5zUEModm9pZCogcGMpIGNvbnN0Cit7CisgICAgaWYgKGNhY2hlVHlwZSAhPSBDYWNoZVR5cGU6
OlN0dWIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdS5zdHViLT5jb250YWlu
c1BDKHBjKTsKK30KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZp
c2lvbiAxOTU2MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw4IEBAIHB1YmxpYzoKICAg
ICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
OwogCisgICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdDsKKwogICAgIHVuaW9uIHsK
ICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJl
PiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE5NTYzNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzEsNiArMTMxLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVHlwZVByb2Zp
bGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0
YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KTsKIAogICAgIGJvb2wgaGFzRXhwcmVzc2lvbklu
Zm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3Rv
cjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJl
c3Npb25JbmZvOyB9CiAKICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhp
c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIg
PSB0aGlzUmVnaXN0ZXI7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMTk1NjM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw4IEBA
IHZvaWQgRGVidWdnZXI6OmF0dGFjaChKU0dsb2JhbE9iamVjdCogZ2wKICAgICBnbG9iYWxPYmpl
Y3QtPnNldERlYnVnZ2VyKHRoaXMpOwogICAgIG1fZ2xvYmFsT2JqZWN0cy5hZGQoZ2xvYmFsT2Jq
ZWN0KTsKIAorICAgIG1fdm0uc2V0U2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKTsK
KwogICAgIC8vIENhbGwgc291cmNlUGFyc2VkIGJlY2F1c2UgaXQgd2lsbCBleGVjdXRlIEphdmFT
Y3JpcHQgaW4gdGhlIGluc3BlY3Rvci4KICAgICBHYXRoZXJTb3VyY2VQcm92aWRlcnMgZ2F0aGVy
U291cmNlUHJvdmlkZXJzKGdsb2JhbE9iamVjdCk7CiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUs
NiArMjE1LDE4IEBAIHZvaWQgSklUQ29kZTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFQKICAg
ICBtaW5pZmllZERGRy52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOwogfQog
CitPcHRpb25hbDxDb2RlT3JpZ2luPiBKSVRDb2RlOjpmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCog
cGMpCit7CisgICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgeworICAgICAgICBpZiAo
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gZXhpdC5tX2NvZGUuZXhlY3V0YWJsZU1l
bW9yeSgpKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT5zdGFydCgpIDw9IHBjICYmIHBjIDwg
aGFuZGxlLT5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdp
bj4oZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gTnVsbG9wdDsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGUuaAkocmV2aXNpb24gMTk1NjM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsOCBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY29tbW9uRGF0YU9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21tb24pOyB9CisKKyAgICBPcHRpb25hbDxD
b2RlT3JpZ2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIG92ZXJyaWRlOwogICAgIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBp
bGVyIHRvIGNhbGwgc2V0Q29kZVJlZigpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE5NTYzNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2
ICs1Miw3IEBAIEpJVENvbXBpbGVyOjpKSVRDb21waWxlcihHcmFwaCYgZGZnKQogICAgICwgbV9n
cmFwaChkZmcpCiAgICAgLCBtX2ppdENvZGUoYWRvcHRSZWYobmV3IEpJVENvZGUoKSkpCiAgICAg
LCBtX2Jsb2NrSGVhZHMoZGZnLm51bUJsb2NrcygpKQorICAgICwgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIoZGZnLm1fdm0pCiB7CiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8
IG1fZ3JhcGgubV92bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1i
bGVyID0gc3RkOjptYWtlX3VuaXF1ZTxEaXNhc3NlbWJsZXI+KGRmZyk7CkBAIC0zMDUsNiArMzA2
LDkgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIobmV3RXhjZXB0aW9uSGFuZGxl
cik7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIuZGlkQnVpbGRNYXBwaW5nKCkpCisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9y
aWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOwogfQogCiB2b2lkIEpJVENvbXBp
bGVyOjpjb21waWxlKCkKQEAgLTMzOSw3ICszNDMsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21w
aWxlKCkKICAgICBtX3NwZWN1bGF0aXZlLT5jYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJs
b2NrKTsKIAogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgotICAgIG1fc3BlY3VsYXRp
dmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQ
YXRoR2VuZXJhdG9ycyhtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik7CisgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogICAgIAogICAgIGNvbXBpbGVFeGNlcHRpb25I
YW5kbGVycygpOwogICAgIGxpbmtPU1JFeGl0cygpOwpAQCAtNDMyLDcgKzQzNyw4IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAganVtcChmcm9tQXJpdHlDaGVjayk7
CiAgICAgCiAgICAgLy8gR2VuZXJhdGUgc2xvdyBwYXRoIGNvZGUuCi0gICAgbV9zcGVjdWxhdGl2
ZS0+cnVuU2xvd1BhdGhHZW5lcmF0b3JzKCk7CisgICAgbV9zcGVjdWxhdGl2ZS0+cnVuU2xvd1Bh
dGhHZW5lcmF0b3JzKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKTsKKyAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVp
bGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAgICAgCiAgICAgY29tcGlsZUV4Y2VwdGlvbkhh
bmRsZXJzKCk7CiAgICAgbGlua09TUkV4aXRzKCk7CkBAIC01OTgsNiArNjA0LDIyIEBAIENhbGxT
aXRlSW5kZXggSklUQ29tcGlsZXI6OnJlY29yZENhbGxTaXQKICAgICByZXR1cm4gY2FsbFNpdGU7
CiB9CiAKK3ZvaWQgSklUQ29tcGlsZXI6OnNldEVuZE9mTWFpblBhdGgoKQoreworICAgIG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNocG9pbnRz
KCksIG1fc3BlY3VsYXRpdmUtPm1fb3JpZ2luLnNlbWFudGljKTsKKyAgICBpZiAoTElLRUxZKCFt
X2Rpc2Fzc2VtYmxlcikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0
RW5kT2ZNYWluUGF0aChsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7Cit9CisKK3ZvaWQgSklU
Q29tcGlsZXI6OnNldEVuZE9mQ29kZSgpCit7CisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIuYXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgUENUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKKyAgICBpZiAoTElLRUxZKCFtX2Rpc2Fz
c2VtYmxlcikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZD
b2RlKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1
ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVGVtcFJlZ2lzdGVyU2V0LmgiCiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMTE4LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICAvLyBNZXRo
b2RzIHRvIHNldCBsYWJlbHMgZm9yIHRoZSBkaXNhc3NlbWJsZXIuCiAgICAgdm9pZCBzZXRTdGFy
dE9mQ29kZSgpCiAgICAgeworICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBl
bmRJdGVtKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBDb2RlT3JpZ2luKDAsIG51bGxwdHIp
KTsKICAgICAgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0U3RhcnRPZkNvZGUobGFiZWxJZ25vcmlu
Z1dhdGNocG9pbnRzKCkpOwpAQCAtMTM3LDE5ICsxMzksOCBAQCBwdWJsaWM6CiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRGb3JOb2RlKG5vZGUsIGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygp
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRFbmRPZk1haW5QYXRoKCkKLSAgICB7Ci0gICAg
ICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mTWFpblBhdGgobGFiZWxJZ25vcmluZ1dhdGNo
cG9pbnRzKCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldEVuZE9mQ29kZSgpCi0gICAgewot
ICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWxJZ25vcmluZ1dhdGNo
cG9pbnRzKCkpOwotICAgIH0KKyAgICB2b2lkIHNldEVuZE9mTWFpblBhdGgoKTsKKyAgICB2b2lk
IHNldEVuZE9mQ29kZSgpOwogICAgIAogICAgIENhbGxTaXRlSW5kZXggYWRkQ2FsbFNpdGUoQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKQEAgLTI2NSw2ICsyNTYsOCBAQCBwdWJsaWM6CiAK
ICAgICBDYWxsU2l0ZUluZGV4IHJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5k
bGluZ09TUkV4aXRJZk5lZWRlZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgZXZlbnRTdHJl
YW1JbmRleCk7CiAKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImIHBjVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcigpIHsgcmV0dXJuIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOyB9CisKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXI7CiAgICAgCkBA
IC0zMjgsNiArMzIxLDcgQEAgcHJpdmF0ZToKICAgICBDYWxsIG1fY2FsbEFyaXR5Rml4dXA7CiAg
ICAgTGFiZWwgbV9hcml0eUNoZWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTcGVjdWxhdGl2ZUpJ
VD4gbV9zcGVjdWxhdGl2ZTsKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgbV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5o
CShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQ
YXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDkgQEAgcHVibGljOgog
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBCeSBkZWZhdWx0IHNsb3cg
cGF0aCBnZW5lcmF0b3JzIGRvbid0IGhhdmUgYSBjYWxsLgogICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXI6OkNhbGwoKTsKICAgICB9CisKKyAgICBjb25zdCBOb2RlT3JpZ2luJiBvcmlnaW4o
KSBjb25zdCAgeyByZXR1cm4gbV9vcmlnaW47IH0KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKikgPSAwOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX2xhYmVsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE5NTYzNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzAsMTAgKzMzMCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphZGRTbG93UGF0aEdlbmVy
YXRvCiAgICAgbV9zbG93UGF0aEdlbmVyYXRvcnMuYXBwZW5kKFdURk1vdmUoc2xvd1BhdGhHZW5l
cmF0b3IpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6cnVuU2xvd1BhdGhHZW5lcmF0b3Jz
KCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnJ1blNsb3dQYXRoR2VuZXJhdG9ycyhQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXImIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcikKIHsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9zbG93UGF0aEdlbmVyYXRvcnMuc2l6ZSgpOyArK2kpCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2xvd1BhdGhHZW5lcmF0b3JzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKG1faml0Lmxh
YmVsKCksIG1fc2xvd1BhdGhHZW5lcmF0b3JzW2ldLT5vcmlnaW4oKS5zZW1hbnRpYyk7CiAgICAg
ICAgIG1fc2xvd1BhdGhHZW5lcmF0b3JzW2ldLT5nZW5lcmF0ZSh0aGlzKTsKKyAgICB9CiB9CiAK
IC8vIE9uIFdpbmRvd3Mgd2UgbmVlZCB0byB3cmFwIGZtb2Q7IG9uIG90aGVyIHBsYXRmb3JtcyB3
ZSBjYW4gY2FsbCBpdCBkaXJlY3RseS4KQEAgLTE1MDQsNiArMTUwNiw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlk
YXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSAmJiBtYXlFeGl0KG1faml0LmdyYXBoKCksIG1fY3Vy
cmVudE5vZGUpICE9IERvZXNOb3RFeGl0KQogICAgICAgICAgICAgbV9qaXQuaml0UmVsZWFzZUFz
c2VydE5vRXhjZXB0aW9uKCk7CiAKKyAgICAgICAgbV9qaXQucGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKCkuYXBwZW5kSXRlbShtX2ppdC5sYWJlbCgpLCBtX29yaWdpbi5zZW1hbnRpYyk7CisKICAg
ICAgICAgY29tcGlsZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChiZWxv
bmdzSW5NaW5pZmllZEdyYXBoKG1fY3VycmVudE5vZGUtPm9wKCkpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTk1NjM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTcsNyArMzE3LDcgQEAgcHVibGljOgogICAgIEdlbmVyYXRlZE9wZXJh
bmRUeXBlIGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIoTm9kZSopOwogCiAgICAgdm9pZCBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+KTsK
LSAgICB2b2lkIHJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIHZvaWQgcnVuU2xvd1BhdGhH
ZW5lcmF0b3JzKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYpOwogICAgIAogICAgIHZvaWQgY29t
cGlsZShOb2RlKik7CiAgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChOb2RlKik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCShyZXZpc2lvbiAxOTU2MzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgiCiAjaW5j
bHVkZSAiSklUU3ViR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1
ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTE0MCw2ICsxNDEs
MTAgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICBz
dGF0ZS5hbGxvY2F0aW9uRmFpbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAg
ICAKKyAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNl
UENUb09yaWdpbk1hcCgpOworICAgIGlmICh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5N
YXBwaW5nKCkpCisgICAgICAgIGNvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjpt
YWtlX3VuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZt
LCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVy
KSk7CiAKICAgICBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxHZW5lcmF0
ZWRGdW5jdGlvbj4oCiAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+
ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNiAr
MTg2LDI1IEBAIFJlZ2lzdGVyU2V0IEpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXMKICAgICBy
ZXR1cm4gUmVnaXN0ZXJTZXQoKTsKIH0KIAorT3B0aW9uYWw8Q29kZU9yaWdpbj4gSklUQ29kZTo6
ZmluZFBDKENvZGVCbG9jayogY29kZUJsb2NrLCB2b2lkKiBwYykKK3sKKyAgICBmb3IgKE9TUkV4
aXQmIGV4aXQgOiBvc3JFeGl0KSB7CisgICAgICAgIGlmIChFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
KiBoYW5kbGUgPSBleGl0Lm1fY29kZS5leGVjdXRhYmxlTWVtb3J5KCkpIHsKKyAgICAgICAgICAg
IGlmIChoYW5kbGUtPnN0YXJ0KCkgPD0gcGMgJiYgcGMgPCBoYW5kbGUtPmVuZCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihleGl0Lm1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoc3RkOjp1bmlxdWVf
cHRyPExhenlTbG93UGF0aD4mIGxhenlTbG93UGF0aCA6IGxhenlTbG93UGF0aHMpIHsKKyAgICAg
ICAgaWYgKEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGhhbmRsZSA9IGxhenlTbG93UGF0aC0+c3R1
YigpLmV4ZWN1dGFibGVNZW1vcnkoKSkgeworICAgICAgICAgICAgaWYgKGhhbmRsZS0+c3RhcnQo
KSA8PSBwYyAmJiBwYyA8IGhhbmRsZS0+ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9w
dGlvbmFsPENvZGVPcmlnaW4+KGNvZGVCbG9jay0+Y29kZU9yaWdpbihsYXp5U2xvd1BhdGgtPmNh
bGxTaXRlSW5kZXgoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE51bGxvcHQ7
Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9u
IDE5NTYzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIHB1YmxpYzoKIAogICAgIFJlZ2lzdGVyU2V0IGxp
dmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9j
ayosIENhbGxTaXRlSW5kZXgpIG92ZXJyaWRlOwogCisgICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4g
ZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBvdmVycmlkZTsKKwogI2lmIEZUTF9VU0VTX0Iz
CiAgICAgQ29kZVJlZiBiM0NvZGUoKSBjb25zdCB7IHJldHVybiBtX2IzQ29kZTsgfQogI2Vsc2UK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmNwcAkocmV2aXNpb24gMTk1NjM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsMTIgQEAK
ICNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKIAogI2luY2x1ZGUgIkNvbnNlcnZhdGl2
ZVJvb3RzLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNs
dWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxMSW50
UENSYW5nZXMuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIlZNLmgi
CiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC01NzcsNiArNTgw
LDY0IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVyczoKICNlcnJvciBO
ZWVkIGEgd2F5IHRvIGdldCB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciBmb3IgYW5vdGhlciB0aHJl
YWQgb24gdGhpcyBwbGF0Zm9ybQogI2VuZGlmCiB9Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAoreworICAgIC8vIExMSW50IHVzZXMgcmVn
VDQgYXMgUEMuCisjaWYgT1MoREFSV0lOKQorCisjaWYgX19EQVJXSU5fVU5JWDAzCisKKyNpZiBD
UFUoWDg2KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0ZXJz
Ojplc2ksICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVncy5fX2VzaSk7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIHN0YXRpY19hc3NlcnQo
TExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0ZXJzOjpyOCwgIldyb25nIExMSW50IFBDLiIpOwor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLl9fcjgpOworI2VsaWYgQ1BV
KEFSTSkKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IEFSTVJlZ2lzdGVyczo6
cjgsICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVncy5fX3JbOF0pOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHN0YXRpY19hc3NlcnQoTExJ
bnQ6OkxMSW50UEMgPT0gQVJNNjRSZWdpc3RlcnM6Ong0LCAiV3JvbmcgTExJbnQgUEMuIik7Cisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX194WzRdKTsKKyNlbHNlCisj
ZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxzZSAvLyAhX19EQVJXSU5f
VU5JWDAzCisjaWYgQ1BVKFg4NikKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09
IFg4NlJlZ2lzdGVyczo6ZXNpLCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuZXNpKTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgc3Rh
dGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBYODZSZWdpc3RlcnM6OnI4LCAiV3JvbmcgTExJ
bnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MucjgpOwor
I2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyNlbmRpZiAvLyBf
X0RBUldJTl9VTklYMDMKKworLy8gZW5kIE9TKERBUldJTikKKyNlbGlmIE9TKFdJTkRPV1MpCisK
KyNpZiBDUFUoQVJNKQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gQVJNUmVn
aXN0ZXJzOjpyOCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPigodWludHB0cl90KSByZWdzLlI4KTsKKyNlbGlmIENQVShNSVBTKQorI2Vycm9y
IERvbnQga25vdyB3aGF0IHRvIGRvIHdpdGggbWlwcy4gRG8gd2UgZXZlbiBuZWVkIHRoaXM/Cisj
ZWxpZiBDUFUoWDg2KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVn
aXN0ZXJzOjplc2ksICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oKHVpbnRwdHJfdCkgcmVncy5Fc2kpOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAg
ICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6cjEwLCAiV3Jv
bmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCh1aW50
cHRyX3QpIHJlZ3MuUjEwKTsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNl
bmRpZgorCisjZWxzZQorI2Vycm9yIE5lZWQgYSB3YXkgdG8gZ2V0IHRoZSBMTEludFBDIGZvciBh
bm90aGVyIHRocmVhZCBvbiB0aGlzIHBsYXRmb3JtCisjZW5kaWYKK30KICNlbmRpZiAvLyBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCiAKIHZvaWQgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6ZnJl
ZVJlZ2lzdGVycyhUaHJlYWQ6OlJlZ2lzdGVycyYgcmVnaXN0ZXJzKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgJKHJldmlzaW9uIDE5
NTYzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICB2b2lkKiBmcmFtZVBvaW50ZXIoKSBjb25zdDsK
ICAgICAgICAgICAgIHZvaWQqIGluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0OworICAgICAgICAg
ICAgdm9pZCogbGxpbnRQQygpIGNvbnN0OwogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9G
SUxFUikKICAgICAgICAgICAgIAogI2lmIE9TKERBUldJTikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwCShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxl
ckFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgSW5zcGVj
dG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6YWRkRXYKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKLXN0YXRpYyBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW1wbGVzPiBi
dWlsZFNhbXBsZXMoVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+JiBzYW1wbGlu
Z1Byb2ZpbGVyU3RhY2tUcmFjZXMsIGRvdWJsZSB0b3RhbFRpbWUpCitzdGF0aWMgUmVmPFByb3Rv
Y29sOjpTY3JpcHRQcm9maWxlcjo6U2FtcGxlcz4gYnVpbGRTYW1wbGVzKFZlY3RvcjxTYW1wbGlu
Z1Byb2ZpbGVyOjpTdGFja1RyYWNlPiYmIHNhbXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcywgZG91
YmxlIHRvdGFsVGltZSkKIHsKICAgICBSZWY8UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpTY3Jp
cHRQcm9maWxlcjo6U3RhY2tUcmFjZT4+IHN0YWNrVHJhY2VzID0gUHJvdG9jb2w6OkFycmF5PFBy
b3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U3RhY2tUcmFjZT46OmNyZWF0ZSgpOwogICAgIGZvciAo
U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZSYgc3RhY2tUcmFjZSA6IHNhbXBsaW5nUHJvZmls
ZXJTdGFja1RyYWNlcykgewpAQCAtMTY2LDggKzE2Niw4IEBAIHN0YXRpYyBSZWY8UHJvdG9jb2w6
OlNjcmlwdFByb2ZpbGVyOjpTYW0KICAgICAgICAgICAgIFJlZjxQcm90b2NvbDo6U2NyaXB0UHJv
ZmlsZXI6OlN0YWNrRnJhbWU+IGZyYW1lID0gUHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTdGFj
a0ZyYW1lOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRTb3VyY2VJRChTdHJpbmc6Om51
bWJlcihzdGFja0ZyYW1lLnNvdXJjZUlEKCkpKQogICAgICAgICAgICAgICAgIC5zZXROYW1lKHN0
YWNrRnJhbWUuZGlzcGxheU5hbWUoKSkKLSAgICAgICAgICAgICAgICAuc2V0TGluZShzdGFja0Zy
YW1lLnN0YXJ0TGluZSgpKQotICAgICAgICAgICAgICAgIC5zZXRDb2x1bW4oc3RhY2tGcmFtZS5z
dGFydENvbHVtbigpKQorICAgICAgICAgICAgICAgIC5zZXRMaW5lKHN0YWNrRnJhbWUuZnVuY3Rp
b25TdGFydExpbmUoKSkKKyAgICAgICAgICAgICAgICAuc2V0Q29sdW1uKHN0YWNrRnJhbWUuZnVu
Y3Rpb25TdGFydENvbHVtbigpKQogICAgICAgICAgICAgICAgIC5zZXRVcmwoc3RhY2tGcmFtZS51
cmwoKSkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgZnJhbWVzLT5h
ZGRJdGVtKFdURk1vdmUoZnJhbWUpKTsKQEAgLTE5NCw4ICsxOTQsOCBAQCB2b2lkIEluc3BlY3Rv
clNjcmlwdFByb2ZpbGVyQWdlbnQ6OnRyYWNrCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNhbXBs
aW5nUHJvZmlsZXIpOwogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVy
LT5nZXRMb2NrKCkpOwogICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5zdG9wKGxvY2tlcik7Ci0g
ICAgICAgIFJlZjxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlNhbXBsZXM+IHNhbXBsZXMgPSBi
dWlsZFNhbXBsZXMoc2FtcGxpbmdQcm9maWxlci0+c3RhY2tUcmFjZXMobG9ja2VyKSwgc2FtcGxp
bmdQcm9maWxlci0+dG90YWxUaW1lKGxvY2tlcikpOwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVy
LT5jbGVhckRhdGEobG9ja2VyKTsKKyAgICAgICAgVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0
YWNrVHJhY2U+IHN0YWNrVHJhY2VzID0gc2FtcGxpbmdQcm9maWxlci0+cmVsZWFzZVN0YWNrVHJh
Y2VzKGxvY2tlcik7CisgICAgICAgIFJlZjxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlNhbXBs
ZXM+IHNhbXBsZXMgPSBidWlsZFNhbXBsZXMoV1RGTW92ZShzdGFja1RyYWNlcyksIHNhbXBsaW5n
UHJvZmlsZXItPnRvdGFsVGltZShsb2NrZXIpKTsKIAogICAgICAgICBsb2NrZXIudW5sb2NrRWFy
bHkoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTk1NjM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5o
IgogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKQEAg
LTY5LDYgKzcwLDcgQEAgSklUOjpKSVQoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAg
ICAsIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4KFVJTlRfTUFYKQogICAgICwgbV9jYWxsTGlua0lu
Zm9JbmRleChVSU5UX01BWCkKICAgICAsIG1fcmFuZG9tR2VuZXJhdG9yKGNyeXB0b2dyYXBoaWNh
bGx5UmFuZG9tTnVtYmVyKCkpCisgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigqdm0p
CiAgICAgLCBtX2NhbkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmls
aW5nKGZhbHNlKQogewpAQCAtMTU4LDYgKzE2MCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGlu
c3RydWN0aW9uc0JlZ2luICsgbV9ieXRlY29kZU9mZnNldDsKICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX2ludGVycHJldGVyLT5pc09wY29kZShjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bj
b2RlKSwgInByaXZhdGVDb21waWxlTWFpblBhc3MgZ29uZSBiYWQgQCAlZCIsIG1fYnl0ZWNvZGVP
ZmZzZXQpOwogCisgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0o
bGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSk7CisKICNpZiBFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9ieXRlY29kZU9mZnNldCA+IDApIC8vIEF2b2lk
IHRoZSBvdmVyaGVhZCBvZiBzYW1wbGluZyBvcF9lbnRlciB0d2ljZS4KICAgICAgICAgICAgIHNh
bXBsZUluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0zNjUsNiArMzY5LDggQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBmb3IgKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0g
bV9zbG93Q2FzZXMuZW5kKCk7KSB7CiAgICAgICAgIG1fYnl0ZWNvZGVPZmZzZXQgPSBpdGVyLT50
bzsKIAorICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCkpOworCiAgICAgICAgIHVuc2lnbmVkIGZp
cnN0VG8gPSBtX2J5dGVjb2RlT2Zmc2V0OwogCiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNCZWdpbiArIG1fYnl0ZWNvZGVPZmZzZXQ7CkBAIC01
MTksNiArNTI1LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQog
ICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CiAgICAgfQogICAgIAorICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbigwLCBudWxs
cHRyKSk7CisKICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVy
LT5zZXRTdGFydE9mQ29kZShsYWJlbCgpKTsKIApAQCAtNTcxLDYgKzU3OSw3IEBAIENvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAKICAgICBpZiAobV9kaXNhc3Nl
bWJsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkp
OworICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAogICAgIHN0YWNr
T3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gMDsKQEAgLTYxMiw2
ICs2MjEsOCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAg
CiAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5k
T2ZDb2RlKGxhYmVsKCkpOworICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0
ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigp
KTsKKwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJs
b2NrLCBlZmZvcnQpOwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQpA
QCAtNzA4LDYgKzcxOSw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUo
SkkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlv
bi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwogICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXItPmFkZENvbXBpbGF0aW9uKG1fY29tcGlsYXRpb24pOwogICAgIH0KKworICAgIGlmIChtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKKyAgICAgICAgbV9jb2Rl
QmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmln
aW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcikp
OwogICAgIAogICAgIENvZGVSZWYgcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0
Y2hCdWZmZXIsCkBAIC03MTYsNyArNzMwLDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2
YXRlQ29tcGlsZShKSQogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRG
b3JCYXNlbGluZUpJVC5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNp
emUoKSkgLwogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5zaXplKCkpKTsKLSAgICAKKwogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChD
b2RlQmxvY2s6OkxhdGVTaHJpbmspOwogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAg
ICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBK
SVRDb2RlOjpCYXNlbGluZUpJVCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gMTk1NjM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIK
KyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIK
ICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCkBA
IC05MTMsNiArOTE0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdlYWtSYW5kb20gbV9y
YW5kb21HZW5lcmF0b3I7CiAgICAgICAgIHN0YXRpYyBDb2RlUmVmIHN0cmluZ0dldEJ5VmFsU3R1
YkdlbmVyYXRvcihWTSopOwogCisgICAgICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKKwogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7
CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBt
X3Nob3VsZEVtaXRQcm9maWxpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkocmV2aXNpb24gMTk1NjM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaW5jbHVkZSAiQXJpdHlD
aGVja01vZGUuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJDb2RlT3JpZ2lu
LmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0
LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0x
OTUsNiArMTk3LDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2aXJ0dWFsIFJl
Z2lzdGVyU2V0IGxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxT
aXRlKENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworICAgIHZpcnR1YWwgT3B0aW9uYWw8Q29k
ZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSB7IFVOVVNFRF9QQVJBTShwYyk7
IHJldHVybiBOdWxsb3B0OyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBDVG9Db2Rl
T3JpZ2luTWFwLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQjNQQ1RvT3JpZ2lu
TWFwLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIERlbHRhQ29tcHJlc3Npb25C
dWlsZGVyIHsKK3B1YmxpYzoKKyAgICBEZWx0YUNvbXByZXNzaW9uQnVpbGRlcihzaXplX3QgbWF4
U2l6ZSkKKyAgICAgICAgOiBtX29mZnNldCgwKQorICAgICAgICAsIG1fbWF4U2l6ZShtYXhTaXpl
KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1h
bGxvYyhtX21heFNpemUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAg
ICB2b2lkIHdyaXRlKFQgaXRlbSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb2Zm
c2V0ICsgc2l6ZW9mKFQpIDw9IG1fbWF4U2l6ZSk7CisgICAgICAgICpiaXR3aXNlX2Nhc3Q8VCo+
KG1fYnVmZmVyICsgbV9vZmZzZXQpID0gaXRlbTsKKyAgICAgICAgbV9vZmZzZXQgKz0gc2l6ZW9m
KFQpOworICAgIH0KKworICAgIHVpbnQ4X3QqIG1fYnVmZmVyOyAKKyAgICBzaXplX3QgbV9vZmZz
ZXQ7CisgICAgc2l6ZV90IG1fbWF4U2l6ZTsKK307CisKK2NsYXNzIERlbHRhQ29tcHJlc3NlaW9u
UmVhZGVyIHsKK3B1YmxpYzoKKyAgICBEZWx0YUNvbXByZXNzZWlvblJlYWRlcih1aW50OF90KiBi
dWZmZXIsIHNpemVfdCBzaXplKQorICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAgICAg
LCBtX3NpemUoc2l6ZSkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgVCByZWFkKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1fb2Zmc2V0ICsgc2l6ZW9mKFQpIDw9IG1fc2l6ZSk7CisgICAgICAgIFQgcmVzdWx0
ID0gKmJpdHdpc2VfY2FzdDxUKj4obV9idWZmZXIgKyBtX29mZnNldCk7CisgICAgICAgIG1fb2Zm
c2V0ICs9IHNpemVvZihUKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdWludDhfdCogbV9idWZmZXI7CisgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICBzaXpl
X3QgbV9vZmZzZXQ7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworUENUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoVk0mIHZtKQorICAgIDog
bV92bSh2bSkKKyAgICAsIG1fc2hvdWxkQnVpbGRNYXBwaW5nKHZtLnNob3VsZEJ1aWxkZXJQQ1Rv
Q29kZU9yaWdpbk1hcHBpbmcoKSkKK3sgfQorCitQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImJiBvdGhlcikK
KyAgICA6IG1fdm0ob3RoZXIubV92bSkKKyAgICAsIG1fY29kZVJhbmdlcyhXVEZNb3ZlKG90aGVy
Lm1fY29kZVJhbmdlcykpCisgICAgLCBtX3Nob3VsZEJ1aWxkTWFwcGluZyhvdGhlci5tX3Nob3Vs
ZEJ1aWxkTWFwcGluZykKK3sgfQorCisjaWYgRlRMX1VTRVNfQjMKK1BDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcjo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFZNJiB2bSwgQjM6OlBDVG9PcmlnaW5N
YXAmJiBiM1BDVG9PcmlnaW5NYXApCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9zaG91bGRCdWls
ZE1hcHBpbmcodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKQoreworICAg
IGlmICghbV9zaG91bGRCdWlsZE1hcHBpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAo
Y29uc3QgQjM6OlBDVG9PcmlnaW5NYXA6Ok9yaWdpblJhbmdlJiBvcmlnaW5SYW5nZSA6IGIzUENU
b09yaWdpbk1hcC5yYW5nZXMoKSkgeworICAgICAgICBERkc6Ok5vZGUqIG5vZGUgPSBiaXR3aXNl
X2Nhc3Q8REZHOjpOb2RlKj4ob3JpZ2luUmFuZ2Uub3JpZ2luLmRhdGEoKSk7CisgICAgICAgIGlm
IChub2RlKQorICAgICAgICAgICAgYXBwZW5kSXRlbShvcmlnaW5SYW5nZS5sYWJlbCwgbm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXBwZW5kSXRlbShv
cmlnaW5SYW5nZS5sYWJlbCwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9y
aWdpbigpKTsKKyAgICB9Cit9CisjZW5kaWYKKwordm9pZCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXI6OmFwcGVuZEl0ZW0oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsLCBjb25zdCBDb2RlT3Jp
Z2luJiBjb2RlT3JpZ2luKQoreworICAgIGlmICghbV9zaG91bGRCdWlsZE1hcHBpbmcpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX2NvZGVSYW5nZXMuc2l6ZSgpKSB7CisgICAgICAgIGlm
IChtX2NvZGVSYW5nZXMubGFzdCgpLmVuZCA9PSBsYWJlbCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgbV9jb2RlUmFuZ2VzLmxhc3QoKS5lbmQgPSBsYWJlbDsKKyAgICAgICAgaWYgKG1f
Y29kZVJhbmdlcy5sYXN0KCkuY29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luIHx8ICFjb2RlT3JpZ2lu
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29kZVJhbmdlcy5hcHBlbmQo
Q29kZVJhbmdle2xhYmVsLCBsYWJlbCwgY29kZU9yaWdpbn0pOworfQorCisKK3N0YXRpYyBjb25z
dCB1aW50OF90IHNlbnRpbmVsUENEZWx0YSA9IDA7CitzdGF0aWMgY29uc3QgaW50OF90IHNlbnRp
bmVsQnl0ZWNvZGVEZWx0YSA9IDA7CisKK1BDVG9Db2RlT3JpZ2luTWFwOjpQQ1RvQ29kZU9yaWdp
bk1hcChQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImJiBidWlsZGVyLCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkp
OworCisgICAgaWYgKCFidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgbV9w
Y1JhbmdlU3RhcnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpOworICAg
ICAgICBtX3BjUmFuZ2VFbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgp
OworCisgICAgICAgIG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZSA9IDA7CisgICAgICAgIG1fY29t
cHJlc3NlZFBDcyA9IG51bGxwdHI7CisKKyAgICAgICAgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNT
aXplID0gMDsKKyAgICAgICAgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnMgPSBudWxscHRyOworCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBkbyBhIGZpbmFsIHRvdWNoLXVwIG9u
IHRoZSBsYXN0IHJhbmdlIGhlcmUgYmVjYXVzZSBvZiBob3cgd2UgZ2VuZXJhdGUgdGhlIHRhYmxl
LgorICAgIC8vIFRoZSBmaW5hbCByYW5nZSAoaWYgbm9uIGVtcHR5KSB3b3VsZCBiZSBpZ25vcmVk
IGlmIHdlIGRpZG4ndCBhcHBlbmQgYW55IChhcmJpdHJhcnkpCisgICAgLy8gcmFuZ2UgYXMgdGhl
IGxhc3QgaXRlbSBvZiB0aGUgdmVjdG9yLgorICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6
Q29kZVJhbmdlJiBsYXN0ID0gYnVpbGRlci5tX2NvZGVSYW5nZXMubGFzdCgpOworICAgIGlmICgh
KGxhc3Quc3RhcnQgPT0gbGFzdC5lbmQpKQorICAgICAgICBidWlsZGVyLm1fY29kZVJhbmdlcy5h
cHBlbmQoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2V7IGxhc3QuZW5kLCBsYXN0
LmVuZCwgbGFzdC5jb2RlT3JpZ2luIH0pOyAvLyBUaGlzIHJhbmdlIHdpbGwgbmV2ZXIgYWN0dWFs
bHkgYmUgZm91bmQsIGJ1dCBpdCBlbnN1cmVzIHRoZSByZWFsIGxhc3QgcmFuZ2UgaXMgZm91bmQu
CisKKyAgICBEZWx0YUNvbXByZXNzaW9uQnVpbGRlciBwY0NvbXByZXNzb3IoKHNpemVvZih1aW50
cHRyX3QpICsgc2l6ZW9mKHVpbnQ4X3QpKSAqIGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSk7
CisgICAgdm9pZCogbGFzdFBDVmFsdWUgPSBudWxscHRyOworICAgIGF1dG8gYnVpbGRQQ1RhYmxl
ID0gWyZdICh2b2lkKiBwY1ZhbHVlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBjVmFsdWUg
PiBsYXN0UENWYWx1ZSk7CisgICAgICAgIHVpbnRwdHJfdCBkZWx0YSA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHBjVmFsdWUpIC0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obGFzdFBDVmFsdWUp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChkZWx0YSAhPSBzZW50aW5lbFBDRGVsdGEpOworICAg
ICAgICBsYXN0UENWYWx1ZSA9IHBjVmFsdWU7CisgICAgICAgIGlmIChkZWx0YSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpKSB7CisgICAgICAgICAgICBwY0NvbXByZXNzb3Iu
d3JpdGU8dWludDhfdD4oc2VudGluZWxQQ0RlbHRhKTsKKyAgICAgICAgICAgIHBjQ29tcHJlc3Nv
ci53cml0ZTx1aW50cHRyX3Q+KGRlbHRhKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIHBjQ29tcHJlc3Nvci53cml0ZTx1aW50OF90PihzdGF0aWNfY2FzdDx1aW50
OF90PihkZWx0YSkpOworICAgIH07CisKKyAgICBEZWx0YUNvbXByZXNzaW9uQnVpbGRlciBjb2Rl
T3JpZ2luQ29tcHJlc3Nvcigoc2l6ZW9mKGludHB0cl90KSArIHNpemVvZihpbnQ4X3QpICsgc2l6
ZW9mKGludDhfdCkgKyBzaXplb2YoSW5saW5lQ2FsbEZyYW1lKikpICogYnVpbGRlci5tX2NvZGVS
YW5nZXMuc2l6ZSgpKTsKKyAgICBDb2RlT3JpZ2luIGxhc3RDb2RlT3JpZ2luKDAsIG51bGxwdHIp
OworICAgIGF1dG8gYnVpbGRDb2RlT3JpZ2luVGFibGUgPSBbJl0gKGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4pIHsKKyAgICAgICAgaW50cHRyX3QgZGVsdGEgPSBzdGF0aWNfY2FzdDxpbnRw
dHJfdD4oY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSAtIHN0YXRpY19jYXN0PGludHB0cl90Pihs
YXN0Q29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgbGFzdENvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luOworICAgICAgICBpZiAoZGVsdGEgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDhf
dD46Om1heCgpIHx8IGRlbHRhIDwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ4X3Q+OjptaW4oKSB8
fCBkZWx0YSA9PSBzZW50aW5lbEJ5dGVjb2RlRGVsdGEpIHsKKyAgICAgICAgICAgIGNvZGVPcmln
aW5Db21wcmVzc29yLndyaXRlPGludDhfdD4oc2VudGluZWxCeXRlY29kZURlbHRhKTsKKyAgICAg
ICAgICAgIGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPGludHB0cl90PihkZWx0YSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50OF90
PihzdGF0aWNfY2FzdDxpbnQ4X3Q+KGRlbHRhKSk7CisKKyAgICAgICAgaW50OF90IGhhc0lubGlu
ZUNhbGxGcmFtZUJ5dGUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA/IDEgOiAwOworICAg
ICAgICBjb2RlT3JpZ2luQ29tcHJlc3Nvci53cml0ZTxpbnQ4X3Q+KGhhc0lubGluZUNhbGxGcmFt
ZUJ5dGUpOworICAgICAgICBpZiAoaGFzSW5saW5lQ2FsbEZyYW1lQnl0ZSkKKyAgICAgICAgICAg
IGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPElubGluZUNhbGxGcmFtZSo+KGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKTsKKyAgICB9OworCisgICAgbV9wY1JhbmdlU3RhcnQgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYnVpbGRlci5tX2NvZGVSYW5n
ZXMuZmlyc3QoKS5zdGFydCkuZGF0YUxvY2F0aW9uKCkpOworICAgIG1fcGNSYW5nZUVuZCA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxpbmtCdWZmZXIubG9jYXRpb25PZihidWlsZGVyLm1fY29k
ZVJhbmdlcy5sYXN0KCkuZW5kKS5kYXRhTG9jYXRpb24oKSk7CisgICAgbV9wY1JhbmdlRW5kIC09
IDE7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVpbGRlci5tX2NvZGVSYW5nZXMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFu
Z2UmIGNvZGVSYW5nZSA9IGJ1aWxkZXIubV9jb2RlUmFuZ2VzW2ldOworICAgICAgICB2b2lkKiBz
dGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2RlUmFuZ2Uuc3RhcnQpLmRhdGFMb2NhdGlv
bigpOworICAgICAgICB2b2lkKiBlbmQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY29kZVJhbmdl
LmVuZCkuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgIEFTU0VSVChtX3BjUmFuZ2VTdGFydCA8PSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdGFydCkpOworICAgICAgICBBU1NFUlQobV9wY1Jhbmdl
RW5kID49IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVuZCkgLSAxKTsKKyAgICAgICAgaWYgKHN0
YXJ0ID09IGVuZCkKKyAgICAgICAgICAgIEFTU0VSVChpID09IGJ1aWxkZXIubV9jb2RlUmFuZ2Vz
LnNpemUoKSAtIDEpOworICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICBBU1NFUlQobGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzW2kgLSAxXS5lbmQpLmRhdGFM
b2NhdGlvbigpID09IHN0YXJ0KTsKKworICAgICAgICBidWlsZFBDVGFibGUoc3RhcnQpOworICAg
ICAgICBidWlsZENvZGVPcmlnaW5UYWJsZShjb2RlUmFuZ2UuY29kZU9yaWdpbik7CisgICAgfQor
CisgICAgbV9jb21wcmVzc2VkUENCdWZmZXJTaXplID0gcGNDb21wcmVzc29yLm1fb2Zmc2V0Owor
ICAgIG1fY29tcHJlc3NlZFBDcyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhw
Y0NvbXByZXNzb3IubV9idWZmZXIsIG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZSkpOworCisgICAg
bV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplID0gY29kZU9yaWdpbkNvbXByZXNzb3IubV9vZmZz
ZXQ7CisgICAgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4o
ZmFzdFJlYWxsb2MoY29kZU9yaWdpbkNvbXByZXNzb3IubV9idWZmZXIsIG1fY29tcHJlc3NlZENv
ZGVPcmlnaW5zU2l6ZSkpOworfQorCitQQ1RvQ29kZU9yaWdpbk1hcDo6flBDVG9Db2RlT3JpZ2lu
TWFwKCkKK3sKKyAgICBpZiAobV9jb21wcmVzc2VkUENzKQorICAgICAgICBmYXN0RnJlZShtX2Nv
bXByZXNzZWRQQ3MpOworICAgIGlmIChtX2NvbXByZXNzZWRDb2RlT3JpZ2lucykKKyAgICAgICAg
ZmFzdEZyZWUobV9jb21wcmVzc2VkQ29kZU9yaWdpbnMpOworfQorCitkb3VibGUgUENUb0NvZGVP
cmlnaW5NYXA6Om1lbW9yeVNpemUoKQoreworICAgIGRvdWJsZSBzaXplID0gMDsKKyAgICBzaXpl
ICs9IG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZTsKKyAgICBzaXplICs9IG1fY29tcHJlc3NlZENv
ZGVPcmlnaW5zU2l6ZTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKworT3B0aW9uYWw8Q29kZU9yaWdp
bj4gUENUb0NvZGVPcmlnaW5NYXA6OmZpbmRQQyh2b2lkKiBwYykgY29uc3QKK3sKKyAgICB1aW50
cHRyX3QgcGNBc0ludCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBjKTsKKyAgICBpZiAoISht
X3BjUmFuZ2VTdGFydCA8PSBwY0FzSW50ICYmIHBjQXNJbnQgPD0gbV9wY1JhbmdlRW5kKSkKKyAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CisKKyAgICB1aW50cHRyX3QgY3VycmVudFBDID0gMDsKKyAg
ICBDb2RlT3JpZ2luIGN1cnJlbnRDb2RlT3JpZ2luKDAsIG51bGxwdHIpOworCisgICAgRGVsdGFD
b21wcmVzc2Vpb25SZWFkZXIgcGNSZWFkZXIobV9jb21wcmVzc2VkUENzLCBtX2NvbXByZXNzZWRQ
Q0J1ZmZlclNpemUpOworICAgIERlbHRhQ29tcHJlc3NlaW9uUmVhZGVyIGNvZGVPcmlnaW5SZWFk
ZXIobV9jb21wcmVzc2VkQ29kZU9yaWdpbnMsIG1fY29tcHJlc3NlZENvZGVPcmlnaW5zU2l6ZSk7
CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgdWludHB0cl90IHByZXZpb3VzUEMgPSBjdXJy
ZW50UEM7CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgdmFsdWUgPSBwY1JlYWRlci5y
ZWFkPHVpbnQ4X3Q+KCk7CisgICAgICAgICAgICB1aW50cHRyX3QgZGVsdGE7CisgICAgICAgICAg
ICBpZiAodmFsdWUgPT0gc2VudGluZWxQQ0RlbHRhKQorICAgICAgICAgICAgICAgIGRlbHRhID0g
cGNSZWFkZXIucmVhZDx1aW50cHRyX3Q+KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgZGVsdGEgPSB2YWx1ZTsKKyAgICAgICAgICAgIGN1cnJlbnRQQyArPSBkZWx0YTsKKyAg
ICAgICAgfQorCisgICAgICAgIENvZGVPcmlnaW4gcHJldmlvdXNPcmlnaW4gPSBjdXJyZW50Q29k
ZU9yaWdpbjsKKyAgICAgICAgeworICAgICAgICAgICAgaW50OF90IHZhbHVlID0gY29kZU9yaWdp
blJlYWRlci5yZWFkPGludDhfdD4oKTsKKyAgICAgICAgICAgIGludHB0cl90IGRlbHRhOworICAg
ICAgICAgICAgaWYgKHZhbHVlID09IHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSkKKyAgICAgICAgICAg
ICAgICBkZWx0YSA9IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxpbnRwdHJfdD4oKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZWx0YSA9IHN0YXRpY19jYXN0PGludHB0cl90Pih2
YWx1ZSk7CisKKyAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGN1cnJlbnRDb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpICsgZGVsdGEpOworCisgICAgICAgICAgICBpbnQ4X3QgaGFzSW5s
aW5lRnJhbWUgPSBjb2RlT3JpZ2luUmVhZGVyLnJlYWQ8aW50OF90PigpOworICAgICAgICAgICAg
QVNTRVJUKGhhc0lubGluZUZyYW1lID09IDAgfHwgaGFzSW5saW5lRnJhbWUgPT0gMSk7CisgICAg
ICAgICAgICBpZiAoaGFzSW5saW5lRnJhbWUpCisgICAgICAgICAgICAgICAgY3VycmVudENvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblJlYWRlci5yZWFkPElubGluZUNhbGxG
cmFtZSo+KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3VycmVudENvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChwcmV2aW91c1BDKSB7CisgICAgICAgICAgICB1aW50cHRyX3Qgc3RhcnRPZlJhbmdlID0gcHJl
dmlvdXNQQzsKKyAgICAgICAgICAgIC8vIFdlIHN1YnRyYWN0IDEgYmVjYXVzZSB3ZSBnZW5lcmF0
ZSBlbmQgcG9pbnRzIGluY2x1c2l2ZWx5IGluIHRoaXMgdGFibGUsIGV2ZW4gdGhvdWdoIHdlIGFy
ZSBpbnRlcmVzdGVkIGluIHJhbmdlcyBvZiB0aGUgZm9ybTogW3ByZXZpb3VzUEMsIGN1cnJlbnRQ
QykKKyAgICAgICAgICAgIHVpbnRwdHJfdCBlbmRPZlJhbmdlID0gY3VycmVudFBDIC0gMTsKKyAg
ICAgICAgICAgIGlmIChzdGFydE9mUmFuZ2UgPD0gcGNBc0ludCAmJiBwY0FzSW50IDw9IGVuZE9m
UmFuZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+KHByZXZp
b3VzT3JpZ2luKTsgLy8gV2UgcmV0dXJuIHByZXZpb3VzT3JpZ2luIGhlcmUgYmVjYXVzZSBDb2Rl
T3JpZ2luJ3MgYXJlIG1hcHBlZCB0byB0aGUgc3RhcnRWYWx1ZSBvZiB0aGUgcmFuZ2UuCisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBOdWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29k
ZU9yaWdpbk1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUENUb0NvZGVPcmln
aW5NYXBfaAorI2RlZmluZSBQQ1RvQ29kZU9yaWdpbk1hcF9oCisKKyNpZiBFTkFCTEUoSklUKQor
CisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvQmFn
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJl
ZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBG
VExfVVNFU19CMworbmFtZXNwYWNlIEIzIHsKK2NsYXNzIFBDVG9PcmlnaW5NYXA7Cit9CisjZW5k
aWYKKworY2xhc3MgTGlua0J1ZmZlcjsKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsK
KworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOworICAgIGZyaWVuZCBjbGFzcyBQQ1RvQ29k
ZU9yaWdpbk1hcDsKKworcHVibGljOgorICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihWTSYp
OworICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIm
JiBvdGhlcik7CisKKyNpZiBGVExfVVNFU19CMworICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cihWTSYsIEIzOjpQQ1RvT3JpZ2luTWFwJiYpOworI2VuZGlmCisKKyAgICB2b2lkIGFwcGVuZEl0
ZW0oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsLCBjb25zdCBDb2RlT3JpZ2luJik7CisgICAgc3RhdGlj
IENvZGVPcmlnaW4gZGVmYXVsdENvZGVPcmlnaW4oKSB7IHJldHVybiBDb2RlT3JpZ2luKDAsIG51
bGxwdHIpOyB9CisKKyAgICBib29sIGRpZEJ1aWxkTWFwcGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
c2hvdWxkQnVpbGRNYXBwaW5nOyB9CisKK3ByaXZhdGU6CisKKyAgICBzdHJ1Y3QgQ29kZVJhbmdl
IHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHN0YXJ0OworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgZW5kOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAg
fTsKKworICAgIFZNJiBtX3ZtOworICAgIFZlY3RvcjxDb2RlUmFuZ2U+IG1fY29kZVJhbmdlczsK
KyAgICBib29sIG1fc2hvdWxkQnVpbGRNYXBwaW5nOworfTsKKworY2xhc3MgUENUb0NvZGVPcmln
aW5NYXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBDVG9Db2RlT3JpZ2luTWFwKTsKK3B1
YmxpYzoKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcChQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImJiwg
TGlua0J1ZmZlciYpOworICAgIH5QQ1RvQ29kZU9yaWdpbk1hcCgpOworCisgICAgT3B0aW9uYWw8
Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKSBjb25zdDsKKworICAgIGRvdWJsZSBtZW1vcnlT
aXplKCk7CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZTsK
KyAgICBzaXplX3QgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplOworICAgIHVpbnQ4X3QqIG1f
Y29tcHJlc3NlZFBDczsKKyAgICB1aW50OF90KiBtX2NvbXByZXNzZWRDb2RlT3JpZ2luczsKKyAg
ICB1aW50cHRyX3QgbV9wY1JhbmdlU3RhcnQ7CisgICAgdWludHB0cl90IG1fcGNSYW5nZUVuZDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2Vu
ZGlmIC8vIFBDVG9Db2RlT3JpZ2luTWFwX2ggCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRQQ1Jhbmdlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFBDUmFuZ2VzLmgJKHJldmlzaW9uIDE5NTYzNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFBDUmFuZ2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYg
KzQ1LDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0xMSW50UEModm9pZCogcGMpCiAgICAgcmV0
dXJuIGxsaW50U3RhcnQgPD0gcGNBc0ludCAmJiBwY0FzSW50IDw9IGxsaW50RW5kOwogfQogCisj
aWYgRU5BQkxFKEpJVCkKK3N0YXRpYyBjb25zdCBHUFJSZWcgTExJbnRQQyA9IEdQUkluZm86OnJl
Z1Q0OworI2VuZGlmCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludAogCiAjZW5kaWYgLy8g
TExJbnRQQ1Jhbmdlc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTI1OCw3ICsyNTgsNyBAQCBpZiBKU1ZBTFVFNjQKICAgICAjIC0gVGhlIFBDIGJhc2Ug
KG9yIFBCIGZvciBzaG9ydCkgbXVzdCBiZSBzdG9yZWQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3Rl
ci4KICAgICAjIC0gQyBjYWxscyBhcmUgc3RpbGwgZ2l2ZW4gdGhlIEluc3RydWN0aW9uKiByYXRo
ZXIgdGhhbiB0aGUgUEMgaW5kZXguCiAgICAgIyAgIFRoaXMgcmVxdWlyZXMgYW4gYWRkIGJlZm9y
ZSB0aGUgY2FsbCwgYW5kIGEgc3ViIGFmdGVyLgotICAgIGNvbnN0IFBDID0gdDQKKyAgICBjb25z
dCBQQyA9IHQ0ICMgV2hlbiBjaGFuZ2luZyB0aGlzLCBtYWtlIHN1cmUgTExJbnRQQyBpcyB1cCB0
byBkYXRlIGluIExMSW50UENSYW5nZXMuaAogICAgIGlmIEFSTTY0CiAgICAgICAgIGNvbnN0IFBC
ID0gY3NyNwogICAgICAgICBjb25zdCB0YWdUeXBlTnVtYmVyID0gY3NyOApAQCAtMjkwLDcgKzI5
MCw3IEBAIGlmIEpTVkFMVUU2NAogICAgIGVuZAogCiBlbHNlCi0gICAgY29uc3QgUEMgPSB0NAor
ICAgIGNvbnN0IFBDID0gdDQgIyBXaGVuIGNoYW5naW5nIHRoaXMsIG1ha2Ugc3VyZSBMTEludFBD
IGlzIHVwIHRvIGRhdGUgaW4gTExJbnRQQ1Jhbmdlcy5oCiAgICAgbWFjcm8gbG9hZGlzRnJvbUlu
c3RydWN0aW9uKG9mZnNldCwgZGVzdCkKICAgICAgICAgbG9hZGlzIG9mZnNldCAqIDRbUENdLCBk
ZXN0CiAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMTk1NjM0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJMTEludFBDUmFuZ2VzLmgiCiAjaW5jbHVkZSAiTWFy
a2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgorI2luY2x1ZGUgIlBDVG9D
b2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJTbG90
VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgpAQCAtNDksNyArNTAsNiBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBkb3VibGUgc051bVRvdGFsU3RhY2tUcmFjZXMgPSAwOwot
c3RhdGljIGRvdWJsZSBzTnVtVW52ZXJpZmllZFN0YWNrVHJhY2VzID0gMDsKIHN0YXRpYyBkb3Vi
bGUgc051bVRvdGFsV2Fsa3MgPSAwOwogc3RhdGljIGRvdWJsZSBzTnVtRmFpbGVkV2Fsa3MgPSAw
Owogc3RhdGljIGNvbnN0IHVpbnQzMl90IHNOdW1XYWxrUmVwb3J0aW5nRnJlcXVlbmN5ID0gNTA7
CkBAIC01OCw2ICs1OCw4IEBAIHN0YXRpYyBjb25zdCBib29sIHNSZXBvcnRTdGF0c09ubHlXaGVu
VGgKIHN0YXRpYyBjb25zdCBib29sIHNSZXBvcnRTdGF0cyA9IGZhbHNlOwogCiB1c2luZyBGcmFt
ZVR5cGUgPSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU7Cit1c2luZyBVbnByb2Nlc3NlZEZy
YW1lVHlwZSA9IFNhbXBsaW5nUHJvZmlsZXI6OlVucHJvY2Vzc2VkRnJhbWVUeXBlOwordXNpbmcg
VW5wcm9jZXNzZWRTdGFja0ZyYW1lID0gU2FtcGxpbmdQcm9maWxlcjo6VW5wcm9jZXNzZWRTdGFj
a0ZyYW1lOwogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHJlcG9ydFN0YXRzKCkKIHsKQEAg
LTY1LDggKzY3LDYgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCByZXBvcnRTdGF0cygpCiAg
ICAgICAgIGlmICghc1JlcG9ydFN0YXRzT25seVdoZW5UaGV5cmVBYm92ZVRocmVzaG9sZCB8fCAo
c051bUZhaWxlZFdhbGtzIC8gc051bVRvdGFsV2Fsa3MgPiBzV2Fsa0Vycm9yUGVyY2VudGFnZSkp
IHsKICAgICAgICAgICAgIGRhdGFMb2dGKCJOdW0gdG90YWwgd2Fsa3M6ICVsbHUuIEZhaWxlZCB3
YWxrcyBwZXJjZW50OiAlbGZcbiIsCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHNOdW1Ub3RhbFdhbGtzKSwgc051bUZhaWxlZFdhbGtzIC8gc051bVRvdGFsV2Fsa3MpOwot
ICAgICAgICAgICAgZGF0YUxvZ0YoIlRvdGFsIHN0YWNrIHRyYWNlczogJWxsdS4gTmVlZHMgdmVy
aWZpY2F0aW9uIHBlcmNlbnQ6ICVsZlxuIiwKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oc051bVRvdGFsU3RhY2tUcmFjZXMpLCBzTnVtVW52ZXJpZmllZFN0YWNrVHJhY2Vz
IC8gc051bVRvdGFsU3RhY2tUcmFjZXMpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtODIsMzMg
KzgyLDIwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgc2l6ZV90IHdhbGsoVmVjdG9y
PFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU+JiBzdGFja1RyYWNlLCBib29sJiBkaWRSdW5P
dXRPZlNwYWNlLCBib29sJiBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24pCisgICAgc2l6ZV90
IHdhbGsoVmVjdG9yPFVucHJvY2Vzc2VkU3RhY2tGcmFtZT4mIHN0YWNrVHJhY2UsIGJvb2wmIGRp
ZFJ1bk91dE9mU3BhY2UpCiAgICAgewotICAgICAgICBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRp
b24gPSBmYWxzZTsKICAgICAgICAgaWYgKHNSZXBvcnRTdGF0cykKICAgICAgICAgICAgIHNOdW1U
b3RhbFdhbGtzKys7CiAgICAgICAgIHJlc2V0QXRNYWNoaW5lRnJhbWUoKTsKICAgICAgICAgc2l6
ZV90IG1heFN0YWNrVHJhY2VTaXplID0gc3RhY2tUcmFjZS5zaXplKCk7CiAgICAgICAgIHdoaWxl
ICghaXNBdFRvcCgpICYmICFtX2JhaWxpbmdPdXQgJiYgbV9kZXB0aCA8IG1heFN0YWNrVHJhY2VT
aXplKSB7Ci0gICAgICAgICAgICB3aGlsZSAobV9pbmxpbmVDYWxsRnJhbWUgJiYgbV9kZXB0aCA8
IG1heFN0YWNrVHJhY2VTaXplKSB7Ci0gICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZENvZGVCbG9jayhjb2RlQmxvY2spKTsKLSAg
ICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gU2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZShTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0YWJsZSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7Ci0gICAgICAgICAgICAgICAgbV9kZXB0aCsr
OwotICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gbV9pbmxpbmVDYWxsRnJhbWUt
PmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChtX2RlcHRoID49IG1heFN0YWNrVHJhY2VTaXplKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKLSAgICAgICAgICAgIGlmIChpc1ZhbGlkQ29kZUJsb2NrKGNvZGVCbG9jaykp
IHsKLSAgICAgICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCk7Ci0gICAgICAgICAgICAgICAgc3RhY2tUcmFjZVttX2RlcHRo
XSA9IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWUoRnJhbWVUeXBlOjpWZXJpZmllZEV4ZWN1
dGFibGUsZXhlY3V0YWJsZSk7CisgICAgICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNW
YWxpZENvZGVCbG9jayhjb2RlQmxvY2spKTsKKyAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21f
ZGVwdGhdID0gVW5wcm9jZXNzZWRTdGFja0ZyYW1lKGNvZGVCbG9jaywgbV9jYWxsRnJhbWUtPmNh
bGxTaXRlSW5kZXgoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0
YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY29kZUJsb2NrID09IG51bGxwdHIpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUg
dW5zYWZlQ2FsbGVlID0gbV9jYWxsRnJhbWUtPnVuc2FmZUNhbGxlZSgpOwotICAgICAgICAgICAg
ICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0gPSBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lKEZy
YW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSwgSlNWYWx1ZTo6ZW5jb2RlKHVuc2FmZUNhbGxlZSkp
OworICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0gPSBVbnByb2Nlc3NlZFN0YWNr
RnJhbWUoSlNWYWx1ZTo6ZW5jb2RlKHVuc2FmZUNhbGxlZSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgbV9kZXB0aCsrOwogICAgICAgICAgICAgYWR2YW5jZVRvUGFyZW50RnJhbWUoKTsK
QEAgLTEzOCw4ICsxMjUsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZXNldEF0TWFjaGluZUZy
YW1lKCkKICAgICB7Ci0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0cjsKLQogICAg
ICAgICBpZiAoaXNBdFRvcCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0xNTEsOSArMTM2
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0jaWYgRU5B
QkxFKERGR19KSVQpCi0gICAgICAgIC8vIElmIHRoZSBmcmFtZSBkb2Vzbid0IGhhdmUgYSBjb2Rl
IGJsb2NrLCB0aGVuIGl0J3Mgbm90IGEgCi0gICAgICAgIC8vIERGRy9GVEwgZnJhbWUgd2hpY2gg
bWVhbnMgd2UncmUgbm90IGFuIGlubGluZWQgZnJhbWUuCiAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBpZiAoIWNvZGVCbG9j
aykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2NCwyNSArMTQ2LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBzTnVtRmFpbGVkV2Fsa3MrKzsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBjb2RlIGJsb2NrIGRvZXMgbm90IGhhdmUgYW55
IGNvZGUgb3JpZ2lucywgdGhlbiB0aGVyZSdzIG5vCi0gICAgICAgIC8vIGlubGluaW5nLiBIZW5j
ZSwgd2UncmUgbm90IGF0IGFuIGlubGluZWQgZnJhbWUuCi0gICAgICAgIGlmICghY29kZUJsb2Nr
LT5oYXNDb2RlT3JpZ2lucygpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENhbGxT
aXRlSW5kZXggaW5kZXggPSBtX2NhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpOwotICAgICAgICBp
ZiAoIWNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRleCkpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOgotICAgICAgICAgICAgLy8gRm9yIHRoZSBtb3N0IHBhcnQsIHdlIG9ubHkgZmFpbCBo
ZXJlIHdoZW4gd2UncmUgbG9va2luZwotICAgICAgICAgICAgLy8gYXQgdGhlIHRvcCBtb3N0IGNh
bGwgZnJhbWUuIEFsbCBvdGhlciBwYXJlbnQgY2FsbCBmcmFtZXMKLSAgICAgICAgICAgIC8vIHNo
b3VsZCBoYXZlIHNldCB0aGUgQ2FsbFNpdGVJbmRleCB3aGVuIG1ha2luZyBhIGNhbGwuCi0gICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHJlc29ydCB0byBnZXR0aW5nIGlu
Zm9ybWF0aW9uIGZyb20gdGhlIFBDPT5Db2RlT3JpZ2luIG1hcHBpbmcKLSAgICAgICAgICAgIC8v
IG9uY2Ugd2UgaW1wbGVtZW50IGl0OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUyNjI5Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbV9p
bmxpbmVDYWxsRnJhbWUgPSBjb2RlQmxvY2stPmNvZGVPcmlnaW4oaW5kZXgpLmlubGluZUNhbGxG
cmFtZTsKLSNlbmRpZiAvLyAhRU5BQkxFKERGR19KSVQpCiAgICAgfQogCiAgICAgYm9vbCBpc1Zh
bGlkRnJhbWVQb2ludGVyKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTIxMywxNCArMTc2LDEyIEBAIHBy
aXZhdGU6CiAgICAgY29uc3QgTG9ja0hvbGRlciYgbV9jb2RlQmxvY2tTZXRMb2NrZXI7CiAgICAg
Y29uc3QgTG9ja0hvbGRlciYgbV9tYWNoaW5lVGhyZWFkc0xvY2tlcjsKICAgICBib29sIG1fYmFp
bGluZ091dCB7IGZhbHNlIH07Ci0gICAgSW5saW5lQ2FsbEZyYW1lKiBtX2lubGluZUNhbGxGcmFt
ZTsKICAgICBzaXplX3QgbV9kZXB0aCB7IDAgfTsKIH07CiAKIFNhbXBsaW5nUHJvZmlsZXI6OlNh
bXBsaW5nUHJvZmlsZXIoVk0mIHZtLCBSZWZQdHI8U3RvcHdhdGNoPiYmIHN0b3B3YXRjaCkKICAg
ICA6IG1fdm0odm0pCiAgICAgLCBtX3N0b3B3YXRjaChXVEZNb3ZlKHN0b3B3YXRjaCkpCi0gICAg
LCBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5KDApCiAgICAgLCBtX3RpbWluZ0ludGVy
dmFsKHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMTAwMCkpCiAgICAgLCBtX3RvdGFsVGltZSgw
KQogICAgICwgbV90aW1lclF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJqc2Muc2FtcGxpbmctcHJv
ZmlsZXIucXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCwgV29ya1F1ZXVlOjpRT1M6OlVz
ZXJJbnRlcmFjdGl2ZSkpCkBAIC0yNTYsMjMgKzIxNywyNyBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpT
YW1wbGluZ1Byb2ZpbGVyKFZNJiB2CiAgICAgICAgICAgICAgICAgLy8gV2hpbGUgdGhlIEpTQyB0
aHJlYWQgaXMgc3VzcGVuZGVkLCB3ZSBjYW4ndCBkbyB0aGluZ3MgbGlrZSBtYWxsb2MgYmVjYXVz
ZSB0aGUgSlNDIHRocmVhZAogICAgICAgICAgICAgICAgIC8vIG1heSBiZSBob2xkaW5nIHRoZSBt
YWxsb2MgbG9jay4KICAgICAgICAgICAgICAgICBFeGVjU3RhdGUqIGNhbGxGcmFtZTsKLSAgICAg
ICAgICAgICAgICB2b2lkKiBwYzsKKyAgICAgICAgICAgICAgICB2b2lkKiBtYWNoaW5lUEM7Cisg
ICAgICAgICAgICAgICAgYm9vbCB0b3BGcmFtZUlzTExJbnQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB2b2lkKiBsbGludFBDOwogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lzdGVyczsKICAgICAgICAg
ICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmdldFJlZ2lzdGVycyhyZWdpc3RlcnMp
OwogICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBzdGF0aWNfY2FzdDxFeGVjU3RhdGUq
PihyZWdpc3RlcnMuZnJhbWVQb2ludGVyKCkpOwotICAgICAgICAgICAgICAgICAgICBwYyA9IHJl
Z2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgbWFjaGlu
ZVBDID0gcmVnaXN0ZXJzLmluc3RydWN0aW9uUG9pbnRlcigpOworICAgICAgICAgICAgICAgICAg
ICBsbGludFBDID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKICAgICAgICAgICAgICAgICAgICAgbV9q
c2NFeGVjdXRpb25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRl
Y3Rpbmcgd2hlbiB3ZSdyZSBwYXJzaW5nIGNvZGUuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQotICAgICAgICAgICAgICAg
IGlmIChtX3ZtLmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoZXhl
Y3V0YWJsZUFsbG9jYXRvckxvY2tlciwgcGMpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fdm0u
ZXhlY3V0YWJsZUFsbG9jYXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlQWxs
b2NhdG9yTG9ja2VyLCBtYWNoaW5lUEMpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX3Zt
LmlzRXhlY3V0aW5nSW5SZWdFeHBKSVQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSdyZSBleGVjdXRpbmcgYSByZWdleHAuIExldHMgZ2F0aGVyIG1vcmUgaW50ZXJzdGlu
ZyBkYXRhLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MjcyOQogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZy
YW1lID0gbV92bS50b3BDYWxsRnJhbWU7IC8vIFdlIG5lZWQgdG8gZG8gdGhpcyBvciBlbHNlIHdl
J2QgZmFpbCBvdXIgYmFja3RyYWNlIHZhbGlkYXRpb24gYi9jIHRoaXMgaXNuJ3QgYSBKUyBmcmFt
ZS4KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTExJ
bnQ6OmlzTExJbnRQQyhwYykpIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKExMSW50Ojpp
c0xMSW50UEMobWFjaGluZVBDKSkgeworICAgICAgICAgICAgICAgICAgICB0b3BGcmFtZUlzTExJ
bnQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBva2F5IHRvIHRha2UgYSBu
b3JtYWwgc3RhY2sgdHJhY2Ugd2hlbiB0aGUgUEMKICAgICAgICAgICAgICAgICAgICAgLy8gaXMg
aW4gTExJbnQgY29kZS4KICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjg0LDEwICsyNDks
OSBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2CiAgICAgICAgICAg
ICAgICAgc2l6ZV90IHdhbGtTaXplOwogICAgICAgICAgICAgICAgIGJvb2wgd2FzVmFsaWRXYWxr
OwogICAgICAgICAgICAgICAgIGJvb2wgZGlkUnVuT3V0T2ZWZWN0b3JTcGFjZTsKLSAgICAgICAg
ICAgICAgICBib29sIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNhdGlvbjsKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIEZyYW1lV2Fsa2VyIHdhbGtlcihjYWxsRnJhbWUsIG1f
dm0sIGNvZGVCbG9ja1NldExvY2tlciwgbWFjaGluZVRocmVhZHNMb2NrZXIpOwotICAgICAgICAg
ICAgICAgICAgICB3YWxrU2l6ZSA9IHdhbGtlci53YWxrKG1fY3VycmVudEZyYW1lcywgZGlkUnVu
T3V0T2ZWZWN0b3JTcGFjZSwgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uKTsKKyAgICAgICAg
ICAgICAgICAgICAgd2Fsa1NpemUgPSB3YWxrZXIud2FsayhtX2N1cnJlbnRGcmFtZXMsIGRpZFJ1
bk91dE9mVmVjdG9yU3BhY2UpOwogICAgICAgICAgICAgICAgICAgICB3YXNWYWxpZFdhbGsgPSB3
YWxrZXIud2FzVmFsaWRXYWxrKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yOTgsMjEgKzI2
MiwxNiBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2CiAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IEl0J2QgYmUgaW50ZXJlc3RpbmcgdG8gdGFrZSBkYXRhIGFib3V0
IHRoZSBwcm9ncmFtJ3Mgc3RhdGUgd2hlbgogICAgICAgICAgICAgICAgIC8vIHdlIGZhaWwgdG8g
dGFrZSBhIHN0YWNrIHRyYWNlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUyNzU4CiAgICAgICAgICAgICAgICAgaWYgKHdhc1ZhbGlkV2FsayAmJiB3YWxrU2l6ZSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoc1JlcG9ydFN0YXRzKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzUmVwb3J0U3RhdHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBzTnVtVG90
YWxTdGFja1RyYWNlcysrOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrdHJhY2VO
ZWVkc1ZlcmlmaWNhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzTnVtVW52ZXJp
ZmllZFN0YWNrVHJhY2VzKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7CisgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7CiAgICAgICAgICAgICAg
ICAgICAgIHN0YWNrVHJhY2UucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh3YWxrU2l6ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Fsa1NpemU7IGkrKykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZSBmcmFtZSA9IG1fY3VycmVudEZyYW1l
c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrVHJhY2UudW5jaGVja2VkQXBwZW5k
KGZyYW1lKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWUuZnJhbWVUeXBlID09
IEZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc2VlbkV4ZWN1dGFibGVzLmFkZChmcmFtZS51LnZlcmlmaWVkRXhlY3V0YWJsZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUgZnJhbWUgPSBtX2N1
cnJlbnRGcmFtZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLnVuY2hl
Y2tlZEFwcGVuZChmcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICBtX3N0YWNrVHJhY2VzLmFwcGVuZChTdGFja1RyYWNleyBzdGFja3RyYWNlTmVlZHNW
ZXJpZmljYXRpb24sIG5vd1RpbWUsIFdURk1vdmUoc3RhY2tUcmFjZSkgfSk7CisgICAgICAgICAg
ICAgICAgICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5hcHBlbmQoVW5wcm9jZXNzZWRTdGFj
a1RyYWNlIHsgbm93VGltZSwgbWFjaGluZVBDLCB0b3BGcmFtZUlzTExJbnQsIGxsaW50UEMsIFdU
Rk1vdmUoc3RhY2tUcmFjZSkgfSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZFJ1bk91
dE9mVmVjdG9yU3BhY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZXMu
Z3JvdyhtX2N1cnJlbnRGcmFtZXMuc2l6ZSgpICogMS4yNSk7CkBAIC0zMzIsNiArMjkxLDMwIEBA
IFNhbXBsaW5nUHJvZmlsZXI6On5TYW1wbGluZ1Byb2ZpbGVyKCkKIHsKIH0KIAorc3RhdGljIEFM
V0FZU19JTkxJTkUgdW5zaWduZWQgdHJ5R2V0Qnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBsbGludFBD
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgYm9vbCYgaXNWYWxpZCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVCghY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKTsKKworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IGxsaW50UEM7CisgICAgaWYgKGJ5dGVjb2Rl
SW5kZXggPCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSkgeworICAgICAgICBpc1ZhbGlk
ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXg7CisgICAgfQorICAgIGlzVmFs
aWQgPSBmYWxzZTsKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uID0gYml0d2lzZV9jYXN0PEluc3RydWN0aW9uKj4obGxpbnRQQyk7CisgICAgaWYgKGlu
c3RydWN0aW9uID49IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAmJiBpbnN0cnVj
dGlvbiA8IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25Db3VudCgpKSB7CisgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAgICB1bnNp
Z25lZCBieXRlY29kZUluZGV4ID0gaW5zdHJ1Y3Rpb24gLSBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmJlZ2luKCk7CisgICAgICAgIHJldHVybiBieXRlY29kZUluZGV4OworICAgIH0KKyAgICBp
c1ZhbGlkID0gZmFsc2U7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwogdm9pZCBTYW1wbGlu
Z1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkKIHsKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBKU0MgZXhlY3V0aW9uIHRocmVh
ZC4KQEAgLTM0MCwyMiArMzIzLDMwIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1Vu
dmVyaWZpZWQKICAgICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyID0gbV92bS5oZWFwLm9iamVjdFNw
YWNlKCkuYmxvY2tzKCkuZmlsdGVyKCk7CiAgICAgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2Nr
U2V0ID0gbV92bS5oZWFwLm9iamVjdFNwYWNlKCkuYmxvY2tzKCk7CiAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5OyBpIDwgbV9zdGFja1RyYWNl
cy5zaXplKCk7IGkrKykgewotICAgICAgICBTdGFja1RyYWNlJiBzdGFja1RyYWNlID0gbV9zdGFj
a1RyYWNlc1tpXTsgCi0gICAgICAgIGlmICghc3RhY2tUcmFjZS5uZWVkc1ZlcmlmaWNhdGlvbikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGFja1RyYWNlLm5lZWRzVmVyaWZpY2F0
aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChTdGFja0ZyYW1lJiBzdGFja0ZyYW1lIDogc3Rh
Y2tUcmFjZS5mcmFtZXMpIHsKLSAgICAgICAgICAgIGlmIChzdGFja0ZyYW1lLmZyYW1lVHlwZSAh
PSBGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpIHsKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdGFja0ZyYW1lLmZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0
YWJsZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgZm9yIChVbnByb2Nlc3NlZFN0
YWNrVHJhY2UmIHVucHJvY2Vzc2VkU3RhY2tUcmFjZSA6IG1fdW5wcm9jZXNzZWRTdGFja1RyYWNl
cykgeworICAgICAgICBtX3N0YWNrVHJhY2VzLmFwcGVuZChTdGFja1RyYWNlKCkpOworICAgICAg
ICBTdGFja1RyYWNlJiBzdGFja1RyYWNlID0gbV9zdGFja1RyYWNlcy5sYXN0KCk7CisgICAgICAg
IHN0YWNrVHJhY2UudGltZXN0YW1wID0gdW5wcm9jZXNzZWRTdGFja1RyYWNlLnRpbWVzdGFtcDsK
KworICAgICAgICBhdXRvIGFwcGVuZENvZGVCbG9jayA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAgIHN0YWNrVHJhY2UuZnJh
bWVzLmFwcGVuZChTdGFja0ZyYW1lKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKTsKKwor
ICAgICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXggPCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291
bnQoKSkgeworICAgICAgICAgICAgICAgIGludCBkaXZvdDsKKyAgICAgICAgICAgICAgICBpbnQg
c3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgaW50IGVuZE9mZnNldDsKKyAgICAgICAgICAg
ICAgICBjb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
SW5kZXgsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LAorICAgICAgICAgICAgICAgICAg
ICBzdGFja1RyYWNlLmZyYW1lcy5sYXN0KCkubGluZU51bWJlciwgc3RhY2tUcmFjZS5mcmFtZXMu
bGFzdCgpLmNvbHVtbk51bWJlcik7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3NlZW5F
eGVjdXRhYmxlcy5hZGQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CisgICAgICAgIH07
CiAKLSAgICAgICAgICAgIEpTVmFsdWUgY2FsbGVlID0gSlNWYWx1ZTo6ZGVjb2RlKHN0YWNrRnJh
bWUudS51bnZlcmlmaWVkQ2FsbGVlKTsKKyAgICAgICAgYXV0byBhcHBlbmRVbnZlcmlmaWVkQ2Fs
bGVlID0gWyZdIChKU1ZhbHVlIGNhbGxlZSkgeworICAgICAgICAgICAgc3RhY2tUcmFjZS5mcmFt
ZXMuYXBwZW5kKFN0YWNrRnJhbWUoKSk7CisgICAgICAgICAgICBTdGFja0ZyYW1lJiBzdGFja0Zy
YW1lID0gc3RhY2tUcmFjZS5mcmFtZXMubGFzdCgpOwogICAgICAgICAgICAgaWYgKCFIZWFwOjpp
c1ZhbHVlR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgY2FsbGVlKSkgewogICAgICAg
ICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gRnJhbWVUeXBlOjpVbmtub3duOwotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgSlNDZWxsKiBjYWxsZWVDZWxsID0gY2FsbGVlLmFzQ2VsbCgp
OwpAQCAtMzcyLDIyICszNjMsODggQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52
ZXJpZmllZAogCiAgICAgICAgICAgICBpZiAoY2FsbGVlQ2VsbC0+dHlwZSgpICE9IEpTRnVuY3Rp
b25UeXBlKSB7CiAgICAgICAgICAgICAgICAgc3RhY2tGcmFtZS5mcmFtZVR5cGUgPSBmcmFtZVR5
cGVGcm9tQ2FsbERhdGEoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVDZWxsKS0+ZXhlY3V0
YWJsZSgpOwogICAgICAgICAgICAgaWYgKCFleGVjdXRhYmxlKSB7CiAgICAgICAgICAgICAgICAg
c3RhY2tGcmFtZS5mcmFtZVR5cGUgPSBmcmFtZVR5cGVGcm9tQ2FsbERhdGEoKTsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KGZp
bHRlciwgbWFya2VkQmxvY2tTZXQsIGV4ZWN1dGFibGUpKTsKLSAgICAgICAgICAgIHN0YWNrRnJh
bWUuZnJhbWVUeXBlID0gRnJhbWVUeXBlOjpWZXJpZmllZEV4ZWN1dGFibGU7Ci0gICAgICAgICAg
ICBzdGFja0ZyYW1lLnUudmVyaWZpZWRFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKKyAgICAgICAg
ICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gRnJhbWVUeXBlOjpFeGVjdXRhYmxlOworICAgICAg
ICAgICAgc3RhY2tGcmFtZS5leGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICAgICAgICAgIG1f
c2VlbkV4ZWN1dGFibGVzLmFkZChleGVjdXRhYmxlKTsKKyAgICAgICAgfTsKKworICAgICAgICAv
LyBQcmVwZW5kIHRoZSB0b3AtbW9zdCBpbmxpbmVkIGZyYW1lIGlmIG5lZWRlZC4gQWxzbywgZ2F0
aGVyCisgICAgICAgIC8vIGxvY2F0aW9uIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHRoZSB0b3Ag
ZnJhbWUgaXMgZXhlY3V0aW5nLgorICAgICAgICBzaXplX3Qgc3RhcnRJbmRleCA9IDA7CisgICAg
ICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzLnNpemUoKSAmJiB1bnByb2Nlc3Nl
ZFN0YWNrVHJhY2UuZnJhbWVzWzBdLmZyYW1lVHlwZSA9PSBVbnByb2Nlc3NlZEZyYW1lVHlwZTo6
VmVyaWZpZWRDb2RlQmxvY2spIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogdG9wQ29kZUJsb2Nr
ID0gdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXS51LnZlcmlmaWVkQ29kZUJsb2NrOwor
ICAgICAgICAgICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tUcmFjZS50b3BGcmFtZUlzTExJbnQpIHsK
KyAgICAgICAgICAgICAgICAvLyBXZSByZXVzZSBMTEludCBDb2RlQmxvY2tzIGZvciB0aGUgYmFz
ZWxpbmUgSklULCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBib3RoIGppdCB0eXBlcy4KKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFsc28gYmUgZmFsc2UgZm9yIHZhcmlvdXMgcmVhc29u
cyAoa25vd24gYW5kIHVua25vd24pLCBldmVuIHRob3VnaAorICAgICAgICAgICAgICAgIC8vIGl0
J3Mgc3VwZXIgdW5saWtlbHkuIE9uZSByZWFzb24gdGhhdCB0aGlzIGNhbiBiZSBmYWxzZSBpcyB3
aGVuIHdlIHRocm93IGZyb20gYSBERkcgZnJhbWUsCisgICAgICAgICAgICAgICAgLy8gYW5kIHdl
IGVuZCB1cCBoYXZpbmcgdG8gdW53aW5kIHBhc3QgYSBWTUVudHJ5RnJhbWUsIHdlIHdpbGwgZW5k
IHVwIGV4ZWN1dGluZworICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgTExJbnQncyBoYW5k
bGVVbmNhdWdodEV4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcworICAg
ICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgorICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXggPSAwOworICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgICAgICAgICAgICAgIGJv
b2wgaXNWYWxpZFBDOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgICAgIGJpdHMgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW5wcm9jZXNzZWRTdGFja1RyYWNlLmxsaW50
UEMpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIGJpdHMgPSBiaXR3aXNlX2Nhc3Q8dW5z
aWduZWQ+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJbmRleChiaXRzLCB0b3BD
b2RlQmxvY2ssIGlzVmFsaWRQQyk7CisKKyAgICAgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFN
KGlzVmFsaWRQQyk7IC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGluZm8gZm9yIHRo
ZSB3ZWIgaW5zcGVjdG9yOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUzNDU1CisKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKHRvcENvZGVCbG9j
aywgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAxOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoT3B0aW9uYWw8Q29kZU9y
aWdpbj4gY29kZU9yaWdpbiA9IHRvcENvZGVCbG9jay0+ZmluZFBDKHVucHJvY2Vzc2VkU3RhY2tU
cmFjZS50b3BQQykpIHsKKyAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLT53YWxrVXBJbmxpbmVT
dGFjayhbJl0gKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID8gY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpIDogdG9wQ29kZUJs
b2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCB1bnByb2Nlc3NlZFN0YWNr
VHJhY2UuZnJhbWVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBVbnByb2Nlc3NlZFN0YWNr
RnJhbWUmIHVucHJvY2Vzc2VkU3RhY2tGcmFtZSA9IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFt
ZXNbaV07CisgICAgICAgICAgICBpZiAodW5wcm9jZXNzZWRTdGFja0ZyYW1lLmZyYW1lVHlwZSA9
PSBVbnByb2Nlc3NlZEZyYW1lVHlwZTo6VmVyaWZpZWRDb2RlQmxvY2spIHsKKyAgICAgICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHVucHJvY2Vzc2VkU3RhY2tGcmFtZS51LnZlcmlm
aWVkQ29kZUJsb2NrOworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCA9IHVucHJvY2Vzc2VkU3RhY2tGcmFtZS5jYWxsU2l0ZUluZGV4OworCisgICAgICAgICAgICAg
ICAgYXV0byBhcHBlbmRDb2RlQmxvY2tOb0lubGluaW5nID0gWyZdIHsKKyAgICAgICAgICAgICAg
ICAgICAgYm9vbCBpc1ZhbGlkUEM7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9j
ayhjb2RlQmxvY2ssIHRyeUdldEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVJbmRleC5iaXRzKCksIGNv
ZGVCbG9jaywgaXNWYWxpZFBDKSk7CisgICAgICAgICAgICAgICAgfTsKKworI2lmIEVOQUJMRShE
RkdfSklUKQorICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihj
YWxsU2l0ZUluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5jb2Rl
T3JpZ2luKGNhbGxTaXRlSW5kZXgpLndhbGtVcElubGluZVN0YWNrKFsmXSAoY29uc3QgQ29kZU9y
aWdpbiYgY29kZU9yaWdpbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENv
ZGVCbG9jayhjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA/IGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSA6IGNvZGVCbG9jaywgY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhj
b2RlQmxvY2ssIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9ja05vSW5s
aW5pbmcoKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrTm9Jbmxpbmlu
ZygpOworI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VS
VCh1bnByb2Nlc3NlZFN0YWNrRnJhbWUuZnJhbWVUeXBlID09IFVucHJvY2Vzc2VkRnJhbWVUeXBl
OjpVbnZlcmlmaWVkQ2FsbGVlKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRVbnZlcmlmaWVkQ2Fs
bGVlKEpTVmFsdWU6OmRlY29kZSh1bnByb2Nlc3NlZFN0YWNrRnJhbWUudS51bnZlcmlmaWVkQ2Fs
bGVlKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2luZGV4T2ZO
ZXh0U3RhY2tUcmFjZVRvVmVyaWZ5ID0gbV9zdGFja1RyYWNlcy5zaXplKCk7CisgICAgbV91bnBy
b2Nlc3NlZFN0YWNrVHJhY2VzLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6
dmlzaXQoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQpAQCAtNDc4LDE4ICs1MzUsMTIgQEAgdm9p
ZCBTYW1wbGluZ1Byb2ZpbGVyOjpub3RpY2VWTUVudHJ5KCkKICAgICBkaXNwYXRjaElmTmVjZXNz
YXJ5KGxvY2tlcik7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6Y2xlYXJEYXRhKCkKLXsK
LSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwotICAgIGNsZWFyRGF0YShsb2NrZXIpOwot
fQotCiB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmNsZWFyRGF0YShjb25zdCBMb2NrSG9sZGVyJikK
IHsKICAgICBBU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwogICAgIG1fc3RhY2tUcmFjZXMuY2xl
YXIoKTsKICAgICBtX3NlZW5FeGVjdXRhYmxlcy5jbGVhcigpOwotICAgIG1faW5kZXhPZk5leHRT
dGFja1RyYWNlVG9WZXJpZnkgPSAwOworICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVh
cigpOwogfQogCiBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzcGxheU5h
bWUoKQpAQCAtNDk4LDkgKzU0OSw3IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0Zy
YW1lOjpkaXMKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiKHVua25vd24pIik7CiAgICAg
aWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoIihob3N0KSIpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5
cGU6OlVudmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUg
PSB1LnZlcmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rp
b24oKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihleGVj
dXRhYmxlKS0+bmFtZSgpOwogCkBAIC01MjEsOSArNTcwLDcgQEAgU3RyaW5nIFNhbXBsaW5nUHJv
ZmlsZXI6OlN0YWNrRnJhbWU6OmRpcwogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIodW5r
bm93bikiKTsKICAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgiKGhvc3QpIik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVU
eXBlICE9IEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRhYmxl
LT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5uYW1lKCk7CiAKQEAgLTU0NCwyNSArNTkxLDIxIEBAIFN0
cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXMKICAgICByZXR1cm4gU3RyaW5n
KCk7CiB9CiAKLWludCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzdGFydExpbmUoKQor
aW50IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9uU3RhcnRMaW5lKCkKIHsK
ICAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0g
RnJhbWVUeXBlOjpIb3N0KQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
ZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CiAKLSAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxlOwogICAgIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Zmlyc3RMaW5lKCk7
CiB9CiAKLXVuc2lnbmVkIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnN0YXJ0Q29sdW1u
KCkKK3Vuc2lnbmVkIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9uU3RhcnRD
b2x1bW4oKQogewogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpVbmtub3duIHx8IGZy
YW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBSRUxF
QVNFX0FTU0VSVChmcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKIAot
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1dGFibGU7CiAg
ICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiAtMTsK
IApAQCAtNTczLDkgKzYxNiw3IEBAIGludHB0cl90IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJh
bWU6OnMKIHsKICAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFt
ZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0KQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CiAKLSAg
ICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxlOwogICAg
IGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gLTE7CiAK
QEAgLTU4Niw5ICs2MjcsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6
dXJsCiB7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVU
eXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxl
ZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRh
YmxlOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKIApAQCAtNTk4LDcgKzYzNyw3IEBAIFN0cmluZyBTYW1wbGluZ1By
b2ZpbGVyOjpTdGFja0ZyYW1lOjp1cmwKICAgICByZXR1cm4gdXJsOwogfQogCi1WZWN0b3I8U2Ft
cGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZT4mIFNhbXBsaW5nUHJvZmlsZXI6OnN0YWNrVHJhY2Vz
KGNvbnN0IExvY2tIb2xkZXImKQorVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+
IFNhbXBsaW5nUHJvZmlsZXI6OnJlbGVhc2VTdGFja1RyYWNlcyhjb25zdCBMb2NrSG9sZGVyJiBs
b2NrZXIpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsKICAgICB7CkBAIC02MDYs
NyArNjQ1LDkgQEAgVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+JiBTYQogICAg
ICAgICBwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CiAgICAgfQogCi0gICAgcmV0dXJu
IG1fc3RhY2tUcmFjZXM7CisgICAgVmVjdG9yPFN0YWNrVHJhY2U+IHJlc3VsdChXVEZNb3ZlKG1f
c3RhY2tUcmFjZXMpKTsKKyAgICBjbGVhckRhdGEobG9ja2VyKTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6c3RhY2tUcmFjZXNBc0pTT04oKQpAQCAt
NjQzLDYgKzY4NCw4IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpzdGFja1RyYWNlc0FzSlMK
IAogICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiXSIpOwogCisgICAgY2xlYXJEYXRhKGxvY2tlcik7
CisKICAgICByZXR1cm4ganNvbi50b1N0cmluZygpOwogfQogCkBAIC02NTUsMTEgKzY5OCw4IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlIGZyYW1lVHlwZSkKIHsKICAgICBzd2l0Y2gg
KGZyYW1lVHlwZSkgewotICAgIGNhc2UgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpWZXJp
ZmllZEV4ZWN1dGFibGU6Ci0gICAgICAgIG91dC5wcmludCgiVmVyaWZpZWRFeGVjdXRhYmxlIik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpV
bnZlcmlmaWVkQ2FsbGVlOgotICAgICAgICBvdXQucHJpbnQoIlVudmVyaWZpZWRDYWxsZWUiKTsK
KyAgICBjYXNlIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6RXhlY3V0YWJsZToKKyAgICAg
ICAgb3V0LnByaW50KCJFeGVjdXRhYmxlIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2Ft
cGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpIb3N0OgogICAgICAgICBvdXQucHJpbnQoIkhvc3Qi
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmgJKHJldmlzaW9uIDE5NTYzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNDggKzQ0LDg4IEBA
IGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogY2xhc3MgU2FtcGxpbmdQcm9maWxlciA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTYW1wbGluZ1Byb2ZpbGVyPiB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBGcmFtZVR5cGUgeyAKLSAgICAg
ICAgVmVyaWZpZWRFeGVjdXRhYmxlLCAKKworICAgIGVudW0gY2xhc3MgVW5wcm9jZXNzZWRGcmFt
ZVR5cGUgeyAKICAgICAgICAgVW52ZXJpZmllZENhbGxlZSwKLSAgICAgICAgSG9zdCwgCi0gICAg
ICAgIFVua25vd24gCisgICAgICAgIFZlcmlmaWVkQ29kZUJsb2NrCiAgICAgfTsKIAotICAgIHN0
cnVjdCBTdGFja0ZyYW1lIHsKLSAgICAgICAgU3RhY2tGcmFtZShGcmFtZVR5cGUgZnJhbWVUeXBl
LCBFbmNvZGVkSlNWYWx1ZSBjYWxsZWUpCi0gICAgICAgICAgICA6IGZyYW1lVHlwZShmcmFtZVR5
cGUpCisgICAgc3RydWN0IFVucHJvY2Vzc2VkU3RhY2tGcmFtZSB7CisgICAgICAgIFVucHJvY2Vz
c2VkU3RhY2tGcmFtZShFbmNvZGVkSlNWYWx1ZSBjYWxsZWUpCisgICAgICAgICAgICA6IGZyYW1l
VHlwZShVbnByb2Nlc3NlZEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSkKICAgICAgICAgewog
ICAgICAgICAgICAgdS51bnZlcmlmaWVkQ2FsbGVlID0gY2FsbGVlOwogICAgICAgICB9Ci0gICAg
ICAgIFN0YWNrRnJhbWUoRnJhbWVUeXBlIGZyYW1lVHlwZSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1
dGFibGUpCi0gICAgICAgICAgICA6IGZyYW1lVHlwZShmcmFtZVR5cGUpCisgICAgICAgIFVucHJv
Y2Vzc2VkU3RhY2tGcmFtZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KQorICAgICAgICAgICAgOiBmcmFtZVR5cGUoVW5wcm9jZXNzZWRGcmFtZVR5cGU6
OlZlcmlmaWVkQ29kZUJsb2NrKQorICAgICAgICAgICAgLCBjYWxsU2l0ZUluZGV4KGNhbGxTaXRl
SW5kZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHUudmVyaWZpZWRFeGVjdXRhYmxlID0gZXhl
Y3V0YWJsZTsKKyAgICAgICAgICAgIHUudW52ZXJpZmllZENhbGxlZSA9IEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOworICAgICAgICAgICAgdS52ZXJpZmllZENvZGVCbG9jayA9IGNvZGVCbG9j
azsKICAgICAgICAgfQotICAgICAgICBTdGFja0ZyYW1lKCkKLSAgICAgICAgICAgIDogZnJhbWVU
eXBlKEZyYW1lVHlwZTo6VW5rbm93bikKKyAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lKCkK
KyAgICAgICAgICAgIDogZnJhbWVUeXBlKFVucHJvY2Vzc2VkRnJhbWVUeXBlOjpVbnZlcmlmaWVk
Q2FsbGVlKQogICAgICAgICB7Ci0gICAgICAgICAgICB1LnZlcmlmaWVkRXhlY3V0YWJsZSA9IG51
bGxwdHI7CisgICAgICAgICAgICB1LnVudmVyaWZpZWRDYWxsZWUgPSBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIEZyYW1lVHlwZSBmcmFtZVR5cGU7Cisg
ICAgICAgIFVucHJvY2Vzc2VkRnJhbWVUeXBlIGZyYW1lVHlwZTsKICAgICAgICAgdW5pb24gewog
ICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUgdW52ZXJpZmllZENhbGxlZTsKLSAgICAgICAgICAg
IEV4ZWN1dGFibGVCYXNlKiB2ZXJpZmllZEV4ZWN1dGFibGU7CisgICAgICAgICAgICBDb2RlQmxv
Y2sqIHZlcmlmaWVkQ29kZUJsb2NrOwogICAgICAgICB9IHU7CisgICAgICAgIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleDsKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBGcmFtZVR5cGUgeyAK
KyAgICAgICAgRXhlY3V0YWJsZSwKKyAgICAgICAgSG9zdCwKKyAgICAgICAgVW5rbm93biAKKyAg
ICB9OwogCisgICAgc3RydWN0IFN0YWNrRnJhbWUgeworICAgICAgICBTdGFja0ZyYW1lKEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlKQorICAgICAgICAgICAgOiBmcmFtZVR5cGUoRnJhbWVUeXBl
OjpFeGVjdXRhYmxlKQorICAgICAgICAgICAgLCBleGVjdXRhYmxlKGV4ZWN1dGFibGUpCisgICAg
ICAgIHsgfQorICAgICAgICBTdGFja0ZyYW1lKCkKKyAgICAgICAgICAgIDogZnJhbWVUeXBlKEZy
YW1lVHlwZTo6VW5rbm93bikKKyAgICAgICAgICAgICwgZXhlY3V0YWJsZShudWxscHRyKQorICAg
ICAgICB7IH0KKworICAgICAgICBGcmFtZVR5cGUgZnJhbWVUeXBlOworICAgICAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZTsKKworICAgICAgICAvLyBUaGVzZSBhdHRlbXB0IHRvIGJlIGV4
cHJlc3Npb24tbGV2ZWwgbGluZSBhbmQgY29sdW1uIG51bWJlci4KKyAgICAgICAgdW5zaWduZWQg
bGluZU51bWJlciB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAg
ICAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXIgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgfTsKKworICAgICAgICAvLyBUaGVzZSBhcmUgZnVuY3Rpb24tbGV2ZWwgZGF0YS4K
ICAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lKCk7CiAgICAgICAgIFN0cmluZyBkaXNwbGF5TmFt
ZUZvckpTT05UZXN0cygpOyAvLyBVc2VkIGZvciBKU0Mgc3RyZXNzIHRlc3RzIGJlY2F1c2UgdGhl
eSB3YW50IHRoZSAiKGFub255bW91cyBmdW5jdGlvbikiIHN0cmluZyBmb3IgYW5vbnltb3VzIGZ1
bmN0aW9ucyBhbmQgdGhleSB3YW50ICIoZXZhbCkiIGZvciBldmFsJ2QgY29kZS4KLSAgICAgICAg
aW50IHN0YXJ0TGluZSgpOwotICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpOworICAgICAg
ICBpbnQgZnVuY3Rpb25TdGFydExpbmUoKTsKKyAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25TdGFy
dENvbHVtbigpOwogICAgICAgICBpbnRwdHJfdCBzb3VyY2VJRCgpOwogICAgICAgICBTdHJpbmcg
dXJsKCk7CiAgICAgfTsKIAorICAgIHN0cnVjdCBVbnByb2Nlc3NlZFN0YWNrVHJhY2UgeworICAg
ICAgICBkb3VibGUgdGltZXN0YW1wOworICAgICAgICB2b2lkKiB0b3BQQzsKKyAgICAgICAgYm9v
bCB0b3BGcmFtZUlzTExJbnQ7CisgICAgICAgIHZvaWQqIGxsaW50UEM7CisgICAgICAgIFZlY3Rv
cjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IGZyYW1lczsKKyAgICB9OworCiAgICAgc3RydWN0IFN0
YWNrVHJhY2UgewotICAgICAgICBib29sIG5lZWRzVmVyaWZpY2F0aW9uOwogICAgICAgICBkb3Vi
bGUgdGltZXN0YW1wOwogICAgICAgICBWZWN0b3I8U3RhY2tGcmFtZT4gZnJhbWVzOworICAgICAg
ICBTdGFja1RyYWNlKCkKKyAgICAgICAgeyB9CisgICAgICAgIFN0YWNrVHJhY2UoU3RhY2tUcmFj
ZSYmIG90aGVyKQorICAgICAgICAgICAgOiB0aW1lc3RhbXAob3RoZXIudGltZXN0YW1wKQorICAg
ICAgICAgICAgLCBmcmFtZXMoV1RGTW92ZShvdGhlci5mcmFtZXMpKQorICAgICAgICB7IH0KICAg
ICB9OwogCiAgICAgU2FtcGxpbmdQcm9maWxlcihWTSYsIFJlZlB0cjxTdG9wd2F0Y2g+JiYpOwpA
QCAtMTAwLDEyICsxNDAsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnQoY29uc3QgTG9ja0hv
bGRlciYpOwogICAgIHZvaWQgc3RvcCgpOwogICAgIHZvaWQgc3RvcChjb25zdCBMb2NrSG9sZGVy
Jik7Ci0gICAgVmVjdG9yPFN0YWNrVHJhY2U+JiBzdGFja1RyYWNlcyhjb25zdCBMb2NrSG9sZGVy
Jik7CisgICAgVmVjdG9yPFN0YWNrVHJhY2U+IHJlbGVhc2VTdGFja1RyYWNlcyhjb25zdCBMb2Nr
SG9sZGVyJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHN0YWNrVHJhY2VzQXNKU09O
KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpY2VDdXJyZW50VGhyZWFkQXNKU0NF
eGVjdXRpb25UaHJlYWQoKTsKICAgICB2b2lkIG5vdGljZUN1cnJlbnRUaHJlYWRBc0pTQ0V4ZWN1
dGlvblRocmVhZChjb25zdCBMb2NrSG9sZGVyJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBjbGVhckRhdGEoKTsKLSAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBMb2NrSG9sZGVyJik7CiAg
ICAgdm9pZCBwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7IC8vIFlvdSBzaG91bGQgY2Fs
bCB0aGlzIG9ubHkgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBsb2NrLgogICAgIGRvdWJsZSB0b3RhbFRp
bWUoY29uc3QgTG9ja0hvbGRlciYpIHsgcmV0dXJuIG1fdG90YWxUaW1lOyB9CiAgICAgdm9pZCBz
ZXRTdG9wV2F0Y2goY29uc3QgTG9ja0hvbGRlciYsIFJlZjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNo
KSB7IG1fc3RvcHdhdGNoID0gV1RGTW92ZShzdG9wd2F0Y2gpOyB9CkBAIC0xMTQsMTEgKzE1Miwx
MiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzcGF0Y2hJZk5lY2Vzc2FyeShjb25zdCBMb2NrSG9s
ZGVyJik7CiAgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uKGNvbnN0IExvY2tIb2xkZXImKTsKICAg
ICB2b2lkIHBhdXNlKCk7CisgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgTG9ja0hvbGRlciYpOwog
CiAgICAgVk0mIG1fdm07CiAgICAgUmVmUHRyPFN0b3B3YXRjaD4gbV9zdG9wd2F0Y2g7CiAgICAg
VmVjdG9yPFN0YWNrVHJhY2U+IG1fc3RhY2tUcmFjZXM7Ci0gICAgc2l6ZV90IG1faW5kZXhPZk5l
eHRTdGFja1RyYWNlVG9WZXJpZnk7CisgICAgVmVjdG9yPFVucHJvY2Vzc2VkU3RhY2tUcmFjZT4g
bV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzOwogICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMg
bV90aW1pbmdJbnRlcnZhbDsKICAgICBkb3VibGUgbV9sYXN0VGltZTsKICAgICBkb3VibGUgbV90
b3RhbFRpbWU7CkBAIC0xMzAsNyArMTY5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNQYXVz
ZWQ7CiAgICAgYm9vbCBtX2hhc0Rpc3BhdGNoZWRGdW5jdGlvbjsKICAgICBIYXNoU2V0PEV4ZWN1
dGFibGVCYXNlKj4gbV9zZWVuRXhlY3V0YWJsZXM7Ci0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IG1f
Y3VycmVudEZyYW1lczsKKyAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFja0ZyYW1lPiBtX2N1cnJl
bnRGcmFtZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE5NTYzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAgICAgZW5hYmxlQ29u
dHJvbEZsb3dQcm9maWxlcigpOwogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICBp
ZiAoT3B0aW9uczo6dXNlU2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgIHNldFNob3VsZEJ1
aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nKCk7CiAgICAgICAgIG1fc2FtcGxpbmdQcm9maWxlciA9
IGFkb3B0UmVmKG5ldyBTYW1wbGluZ1Byb2ZpbGVyKCp0aGlzLCBTdG9wd2F0Y2g6OmNyZWF0ZSgp
KSk7CiAgICAgICAgIG1fc2FtcGxpbmdQcm9maWxlci0+c3RhcnQoKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE5NTYzNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5Nyw2ICs1OTcs
OSBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUgYm9vbCBzaG91bGRUcmlnZ2VyVGVybWluYXRpb24o
RXhlY1N0YXRlKik7CiAKKyAgICB2b2lkIHNldFNob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBw
aW5nKCkgeyBtX3Nob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nID0gdHJ1ZTsgfQorICAg
IGJvb2wgc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmc7IH0KKwogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBDbGVh
ckV4Y2VwdGlvblNjb3BlOwpAQCAtNjQ4LDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2ZhaWxOZXh0TmV3Q29kZUJsb2NrIHsgZmFsc2UgfTsKICAgICBib29sIG1faW5EZWZpbmVPd25Q
cm9wZXJ0eTsKICAgICBib29sIG1fc2hvdWxkUmV3cml0ZUNvbnN0QXNWYXIgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyB7IGZhbHNlIH07CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgTGVnYWN5UHJv
ZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCdWlsdGluRXhl
Y3V0YWJsZXM+IG1fYnVpbHRpbkV4ZWN1dGFibGVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci1iYXNpYy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLWJh
c2ljLmpzCShyZXZpc2lvbiAxOTU2MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLWJhc2ljLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MSArMjYsOCBAQCBpZiAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIoKSkgCiAgICAg
ICAgICAgICB4LS07CiAgICAgICAgIH0KICAgICB9Ci0gICAgbm9JbmxpbmUodG9wKTsKLSAgICAv
LyBGSVhNRTogV2UgbmVlZCB0byBjYWxsIHRvcCgpIHRvIGdldCB0aGUgQ2FsbFNpdGVJbmRleCB0
byB1cGRhdGUKLSAgICAvLyBpbnNpZGUgdGhlIGNhbGwgZnJhbWUuIFdlIG5lZWQgdG8gZml4IHRo
YXQgYnkgaGF2aW5nIGEgUEM9PkNvZGVPcmlnaW4KLSAgICAvLyBtYXBwaW5nOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNjI5Ci0gICAgZnVuY3Rpb24gamF6KHgp
IHsgcmV0dXJuIHggKyB0b3AoKTsgfSAvLyAKKworICAgIGZ1bmN0aW9uIGpheih4KSB7IHJldHVy
biB4ICsgdG9wKCk7IH0KICAgICBmdW5jdGlvbiBrYXooeSkgewogICAgICAgICByZXR1cm4gamF6
KHkpICsgNTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270246</attachid>
            <date>2016-01-29 13:09:29 -0800</date>
            <delta_ts>2016-01-29 14:08:09 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>104922</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1ODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMiBA
QAorMjAxNi0wMS0yOSAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBKU0MgU2FtcGxpbmcgUHJvZmlsZXI6IENvbWUgdXAgd2l0aCBhIChwcm9ncmFtIGNvdW50ZXIg
PT4gQ29kZU9yaWdpbikgbWFwcGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGEgbWFwcGluZyBmcm9tIFBDIHRv
IENvZGVPcmlnaW4KKyAgICAgICAgdGhhdCBsaXZlcyBvZmYgb2YgSklUZWQgQ29kZUJsb2Nrcy4g
V2UgYnVpbGQgdGhpcyBtYXBwaW5nCisgICAgICAgIHdoaWxlIEpJVGluZyBjb2RlLCBhbmQgdGhl
biB3ZSBjb21wcmVzcyBpdCBhbmQgc3RvcmUKKyAgICAgICAgaXQgb24gdGhlIENvZGVCbG9jay4g
V2Ugb25seSBidWlsZCB0aGUgbWFwcGluZyBpZiBhIGRlYnVnZ2VyCisgICAgICAgIGhhcyBldmVy
IGJlZW4gYXR0YWNoZWQgdG8gYW55IGdsb2JhbCBvYmplY3QuCisKKyAgICAgICAgQ29kZUJsb2Nr
IGNvbnN1bHRzIHRoaXMgbWFwcGluZyB3aGVuIHNlYXJjaGluZyBmb3IgYSBDb2RlT3JpZ2luCisg
ICAgICAgIGZvciBhIGdpdmVuIFBDLCBidXQgaXQgYWxzbyBjb25zdWx0cyBvdGhlciBjb2RlIHJh
bmdlcworICAgICAgICBvZmYgdGhlIG1haW4gcGF0aCB0aGF0IG1heSBvd24gdGhlIFBDLiBTcGVj
aWZpY2FsbHksIGl0IHNlYXJjaGVzCisgICAgICAgIHRocm91Z2ggaW5saW5lIGNhY2hlcywgT1NS
RXhpdHMsIGFuZCBMYXp5U2xvd1BhdGhzLgorCisgICAgICAgIFRvIGZpbmQgUEMgaW5mbyBmb3Ig
dGhlIExMSW50LCB3ZSBhbHNvIHNhdmUgdGhlIExMSW50IHBjIHdoZW4KKyAgICAgICAgdGFraW5n
IGEgc3RhY2sgdHJhY2Ugd2hlcmUgdGhlIHRvcCBmcmFtZSBpcyBpbiBMTEludCBjb2RlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgY29kZSBpbnNpZGUgdGhlIFNhbXBsaW5n
UHJvZmllci4KKyAgICAgICAgSSByZWFsaXplZCBhIGJ1ZyBpbiB0aGUgU2FtcGxpbmdQcm9maWxl
cidzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBXZSB1c2VkIHRvIHdhbGsgdGhlIGlubGluZSBz
dGFjayB3aGlsZSBnYXRoZXJpbmcgYSBzdGFjaworICAgICAgICB0cmFjZS4gVGhpcyBpcyB3cm9u
Zy4gSXQncyBzdXBlciBkYW5nZXJvdXMgdG8gZG8gdGhpcyBiZWNhdXNlCisgICAgICAgIHdlIG1p
Z2h0IHBhdXNlIHRoZSBKU0MgcHJvY2VzcyB3aGlsZSBpdCdzIG1vZGlmeWluZyBpdHMKKyAgICAg
ICAgQ29kZU9yaWdpbiB0YWJsZS4gV2UgdXNlZCB0byB3YWxrIHRoZSBpbmxpbmUgc3RhY2sgd2hp
bGUKKyAgICAgICAgdGFraW5nIGEgc3RhY2sgdHJhY2UgYmVjYXVzZSBkb2luZyBzbyBjb3VsZCBz
YXZlIHVzIGZyb20KKyAgICAgICAgaGF2aW5nIHRvIHZlcmlmeSBhIHBhcnRpY3VsYXIgc3RhY2sg
dHJhY2UuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGF0LgorICAgICAgICBXZSBub3cgaGF2ZSB0byB2
ZXJpZnkgYWxsIHN0YWNrIHRyYWNlcyB0YWtlbi4gVGhpcyB2ZXJpZmljYXRpb24gc3RlcAorICAg
ICAgICBpbmNsdWRlcyB3YWxraW5nIHRoZSBpbmxpbmUgc3RhY2suCisKKyAgICAgICAgQmVjYXVz
ZSB3ZSBoYXZlIGEgUEM9PkNvZGVPcmlnaW4gbWFwLCB3ZSBjYW4gbm93IGdhdGhlciBtb3JlCisg
ICAgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0b3AtZnJhbWUgd2UgcGF1c2Uu
IFRoaXMgYWxsb3dzCisgICAgICAgIHVzIHRvIGNvcnJlY3RseSBvYnNlcnZlIGlubGluaW5nLiBJ
dCBhbHNvIGFsbG93cyB1cyB0byBvYnNlcnZlCisgICAgICAgIGV4cHJlc3Npb24tbGV2ZWwgbGlu
ZS9jb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgZnJhbWUuCisgICAgICAgIFRoZSByZWFz
b24gd2UgZG9uJ3QgY29uc3VsdCB0aGlzIG1hcHBpbmcgZm9yIHBhcmVudCBmcmFtZXMgaXMgCisg
ICAgICAgIHRoYXQgYWxsIHBhcmVudCBmcmFtZXMgc2hvdWxkIHNldCB0aGUgQ2FsbFNpdGVJbmRl
eCBvbiB0aGUgY2FsbAorICAgICAgICBmcmFtZSBoZWFkZXIsIHdoaWNoIG1lYW5zIHdlIGNhbiBj
b25zdWx0IHRoYXQgdmFsdWUgdG8gZ2V0IGlubGluaW5nIAorICAgICAgICBhbmQgZXhwcmVzc2lv
bi1sZXZlbCBsaW5lL2NvbHVtbiBpbmZvcm1hdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6
CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkxhYmVsOjpMYWJlbCk6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkxhYmVsOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6TGFiZWw6OmlzU2V0KToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
YmxlckxhYmVsOjpsYWJlbEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyTGFiZWw6
Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAqIGIz
L0IzT3JpZ2luLmg6CisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgorICAgICAgICAo
SlNDOjpCMzo6T3JpZ2luOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBiMy9CM1BDVG9PcmlnaW5N
YXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQQ1RvT3JpZ2luTWFwOjpQQ1RvT3JpZ2lu
TWFwKToKKyAgICAgICAgKEpTQzo6QjM6OlBDVG9PcmlnaW5NYXA6OmFwcGVuZEl0ZW0pOgorICAg
ICAgICAoSlNDOjpCMzo6UENUb09yaWdpbk1hcDo6cmFuZ2VzKToKKyAgICAgICAgKiBiMy9CM1By
b2NlZHVyZS5oOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpwY1RvT3JpZ2luTWFwKToK
KyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVsZWFzZVBDVG9PcmlnaW5NYXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omdl
bmVyYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9m
aWxlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRQQyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW5IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdp
bkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAg
ICAgICAgKEpTQzo6YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKToKKyAgICAg
ICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpQb2x5bW9y
cGhpY0FjY2Vzczo6Y29udGFpbnNQQyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVm
ZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpjb250YWluc1BDKToK
KyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpoYXNFeHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpl
eHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRUaGlz
UmVnaXN0ZXIpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OmF0dGFjaCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29kZTo6ZmluZFBDKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmNvbW1vbkRhdGFPZmZzZXQpOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpyZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JF
eGl0SWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpzZXRFbmRPZk1h
aW5QYXRoKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5kT2ZDb2RlKToK
KyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6c2V0U3RhcnRPZkNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
OjpzZXRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkQ2FsbFNp
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpwY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpzZXRFbmRPZk1haW5QYXRo
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5kT2ZDb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6Y2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U2xvd1BhdGhHZW5lcmF0b3I6Om9yaWdpbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YWRkU2xvd1Bh
dGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpydW5TbG93
UGF0aEdlbmVyYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKiBmdGwvRlRMQjNDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxl
KToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklU
Q29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUp
OgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmZpbmRQQyk6CisgICAgICAgICogZnRsL0ZU
TEpJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpiM0NvZGUpOgorICAgICAg
ICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TWFjaGluZVRo
cmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3RlcnM6OmxsaW50UEMpOgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKToKKyAgICAgICAg
KiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OmFkZEV2ZW50KToKKyAgICAgICAgKEluc3BlY3Rv
cjo6YnVpbGRTYW1wbGVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yU2NyaXB0UHJv
ZmlsZXJBZ2VudDo6dHJhY2tpbmdDb21wbGV0ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQu
aDoKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpmaW5k
UEMpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cik6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6YXBwZW5kSXRlbSk6
CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpQQ1RvQ29kZU9yaWdpbk1hcCk6Cisg
ICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjp+UENUb0NvZGVPcmlnaW5NYXApOgorICAg
ICAgICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcDo6bWVtb3J5U2l6ZSk6CisgICAgICAgIChKU0M6
OlBDVG9Db2RlT3JpZ2luTWFwOjpmaW5kUEMpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpk
ZWZhdWx0Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjo6ZGlkQnVpbGRNYXBwaW5nKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rp
b25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMpOgorICAgICAgICAqIGxsaW50L0xMSW50UENS
YW5nZXMuaDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmlzTExJbnRQQyk6CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwb3J0U3RhdHMpOgorICAgICAgICAoSlNDOjpG
cmFtZVdhbGtlcjo6RnJhbWVXYWxrZXIpOgorICAgICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6d2Fs
ayk6CisgICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjpyZXNldEF0TWFjaGluZUZyYW1lKToKKyAg
ICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmlzVmFsaWRGcmFtZVBvaW50ZXIpOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6
U2FtcGxpbmdQcm9maWxlcjo6flNhbXBsaW5nUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjp0cnlH
ZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vz
c1VudmVyaWZpZWRTdGFja1RyYWNlcyk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6
OnZpc2l0KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6bm90aWNlVk1FbnRyeSk6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OmNsZWFyRGF0YSk6CisgICAgICAgIChK
U0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRpc3BsYXlOYW1lKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzcGxheU5hbWVGb3JKU09OVGVz
dHMpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpmdW5jdGlv
blN0YXJ0TGluZSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6
OmZ1bmN0aW9uU3RhcnRDb2x1bW4pOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpT
dGFja0ZyYW1lOjpzb3VyY2VJRCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0
YWNrRnJhbWU6OnVybCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnJlbGVhc2VT
dGFja1RyYWNlcyk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnN0YWNrVHJhY2Vz
QXNKU09OKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlNh
bXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnN0YXJ0TGluZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnN0YXJ0Q29sdW1uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6c3RhY2tUcmFjZXMpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgorICAgICAgICAoSlNDOjpT
YW1wbGluZ1Byb2ZpbGVyOjpVbnByb2Nlc3NlZFN0YWNrRnJhbWU6OlVucHJvY2Vzc2VkU3RhY2tG
cmFtZSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OlN0YWNr
RnJhbWUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlOjpTdGFj
a1RyYWNlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6dG90YWxUaW1lKToKKyAg
ICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6c2V0U3RvcFdhdGNoKToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpzZXRTaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFw
cGluZyk6CisgICAgICAgIChKU0M6OlZNOjpzaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBw
aW5nKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItYmFzaWMuanM6
CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlci50b3ApOgorICAgICAg
ICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIuamF6KToKKyAgICAgICAgKHBsYXRm
b3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLmtheik6CisKIDIwMTYtMDEtMjkgIEFuZHJlYXMg
S2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFNocmluayBDb2RlQmxvY2shCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTU4MzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTUxMSw2ICs1MTEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGppdC9KSVRT
dWJHZW5lcmF0b3IuY3BwCiAgICAgaml0L0pJVFRodW5rcy5jcHAKICAgICBqaXQvSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCisgICAgaml0L1BDVG9Db2RlT3JpZ2luTWFw
LmNwcAogICAgIGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKICAgICBqaXQvUmVn
LmNwcAogICAgIGppdC9SZWdpc3RlckF0T2Zmc2V0LmNwcApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAJKHJldmlzaW9uIDE5NTgzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjQzLDcgKzE2NDMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uU2FtCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5zYW1w
bGluZ1Byb2ZpbGVyKCkpOwogICAgIFN0cmluZyBqc29uU3RyaW5nID0gZXhlYy0+dm0oKS5zYW1w
bGluZ1Byb2ZpbGVyKCktPnN0YWNrVHJhY2VzQXNKU09OKCk7Ci0gICAgZXhlYy0+dm0oKS5zYW1w
bGluZ1Byb2ZpbGVyKCktPmNsZWFyRGF0YSgpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9
IEpTVmFsdWU6OmVuY29kZShKU09OUGFyc2UoZXhlYywganNvblN0cmluZykpOwogICAgIFJFTEVB
U0VfQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTk1ODMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjcwLDYgKzY3MCw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcU2V0dXBWYXJhcmdzRnJhbWUu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFBDVG9Db2RlT3JpZ2luTWFw
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUmVnLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlckF0T2Zmc2V0LmNw
cCIgLz4KQEAgLTE1MDIsNyArMTUwMyw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxq
aXRcSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRXcml0ZUJhcnJpZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxKU0ludGVyZmFjZUpJVC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caml0XFNldHVwVmFyYXJnc0ZyYW1lLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcUENUb0NvZGVPcmlnaW5NYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XFJlZy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aml0XFJlZ2lzdGVyQXRPZmZzZXQuaCIgLz4KQEAgLTE1MTEsNiArMTUxMiw3IEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxSZXBhdGNoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxqaXRcU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcU2V0dXBWYXJhcmdzRnJhbWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxTbmlwcGV0T3BlcmFuZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caml0XFNwZWNpYWxpemVkVGh1bmtKSVQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxUZW1wUmVnaXN0ZXJTZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE5NTgzMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTkxMSw2ICsxOTExLDkgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxCaW5hcnlTd2l0Y2guY3BwIj4KICAgICAgIDxG
aWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcUENUb0NvZGVPcmlnaW5NYXAuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aml0PC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwIj4KICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0
ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC00NTk2LDYgKzQ1OTksOSBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCI+CiAgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caml0XFBDVG9Db2RlT3JpZ2luTWFwLmgiPgorICAgICAgPEZpbHRlcj5qaXQ8L0Zp
bHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIj4KICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTk1ODMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMDUsOSArMTMwNSwx
MiBAQAogCQk3MEVDQTYwNzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMjFB
RkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjA4
MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMzFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVD
QTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5MkNCMzQ5MUM0RUVENUMw
MEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0Nv
ZGVPcmlnaW5NYXAuY3BwICovOyB9OworCQk3OTJDQjM0QTFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5NjQ2NTZB
MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdB
NzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9
OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0Uw
N0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5OUVGN0M0MUM1
NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BD
VG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3OUM0QjE1RDFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUM0QjE1QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTky
RSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMzM0IxMDAw
MEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0z
NTAyLDkgKzM1MDUsMTIgQEAKIAkJNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxh
dGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFG
REJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyog
UENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk5RUY3QzMx
QzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QjFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUMxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9u
UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDRkM2RUYxQzMzQjEwMDAw
Qzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTExJbnRQQ1Jhbmdlcy5oOyBwYXRoID0gbGxpbnQvTExJbnRQQ1Jhbmdlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg0NCw2ICs0ODUwLDcgQEAKIAkJCQkwRkVDODREQzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAogCQkJCTBGRUM4NERE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0
REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJNzk5RUY3
QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovLAogCQkJCTBGRUM4NERG
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovLAogCQkJCTBGRUM4NEUwMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLywKIAkJCQkwRjM3MzA4QTFDMEJEMjkx
MDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgKi8sCkBAIC01MTU1LDYgKzUxNjIsOCBAQAog
CQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCAqLywKKwkJCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmln
aW5NYXAuY3BwICovLAorCQkJCTc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9y
aWdpbk1hcC5oICovLAogCQkJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8q
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZBN0E4RTkxOEI0MTNDODAw
NTIzNzFEIC8qIFJlZy5jcHAgKi8sCkBAIC03MDMxLDYgKzcwNDAsOCBAQAogCQkJCTBGRUM4NTc2
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5
MzFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAu
aCBpbiBIZWFkZXJzICovLAorCQkJCTc5MkNCMzRBMUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29k
ZU9yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVB
IC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkw
MENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMz
MTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLApAQCAt
ODk3OCw2ICs4OTg5LDcgQEAKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92
SGludFJlbW92YWxQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4
MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5N
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8qIERG
R05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMzg3OEYxQkZCQzQ0RDAwRTNBQjFFIC8q
IEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1
MEU5NTJDMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5NTgzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTYsNiArMzk2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbWFzbS0+aW52YWxpZGF0ZUFsbFRl
bXBSZWdpc3RlcnMoKTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwgPT0gb3RoZXIubV9sYWJlbDsg
fQorCiAgICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsLmlzU2V0KCk7
IH0KICAgICBwcml2YXRlOgogICAgICAgICBBc3NlbWJsZXJMYWJlbCBtX2xhYmVsOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5o
CShyZXZpc2lvbiAxOTU4MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fz
c2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVsKG1fb2Zmc2V0ICsgb2Zm
c2V0KTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBc3NlbWJs
ZXJMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0
OyB9CisKICAgICAgICAgdWludDMyX3QgbV9vZmZzZXQ7CiAgICAgfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1ODMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiQjNSZWR1Y2VTdHJlbmd0aC5oIgogI2luY2x1ZGUgIkIz
VGltaW5nU2NvcGUuaCIKICNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAxOTU4MzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiAr
NDcsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3JpZ2luJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9kYXRhID09IG90aGVyLm1fZGF0YTsgfQorCiAgICAgLy8gWW91IHNob3Vs
ZCBhdm9pZCB1c2luZyB0aGlzLiBVc2UgT3JpZ2luRHVtcCBpbnN0ZWFkLgogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUENUb09yaWdpbk1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNQQ1RvT3JpZ2luTWFwX2gKKyNkZWZpbmUgQjNQQ1RvT3JpZ2luTWFwX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgUENUb09yaWdpbk1hcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUENUb09yaWdpbk1hcCk7CitwdWJsaWM6CisgICAgUENUb09yaWdpbk1hcCgpCisgICAgeyB9
CisKKyAgICBQQ1RvT3JpZ2luTWFwKFBDVG9PcmlnaW5NYXAmJiBvdGhlcikKKyAgICAgICAgOiBt
X3JhbmdlcyhXVEZNb3ZlKG90aGVyLm1fcmFuZ2VzKSkKKyAgICB7IH0KKworICAgIHN0cnVjdCBP
cmlnaW5SYW5nZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbDsKKyAgICAg
ICAgT3JpZ2luIG9yaWdpbjsKKyAgICB9OworCisgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsYWJlbCwgT3JpZ2luIG9yaWdpbikKKyAgICB7CisgICAgICAgIGlmICht
X3Jhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3Jhbmdlcy5sYXN0KCkubGFiZWwg
PT0gbGFiZWwpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
bV9yYW5nZXMuYXBwZW5kKE9yaWdpblJhbmdle2xhYmVsLCBvcmlnaW59KTsKKyAgICB9CisKKyAg
ICBjb25zdCBWZWN0b3I8T3JpZ2luUmFuZ2U+JiByYW5nZXMoKSBjb25zdCAgeyByZXR1cm4gbV9y
YW5nZXM7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8T3JpZ2luUmFuZ2U+IG1fcmFuZ2VzOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNQQ1RvT3JpZ2luTWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTU4MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
CiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiQjNPcmlnaW4uaCIK
KyNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAuaCIKICNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQu
aCIKICNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCkBAIC0zNjEs
NiArMzYyLDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGZyYW1l
U2l6ZSgpIGNvbnN0OwogICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkgY29uc3Q7CiAKKyAgICBQQ1RvT3JpZ2luTWFwJiBwY1RvT3JpZ2luTWFwKCkg
eyByZXR1cm4gbV9wY1RvT3JpZ2luTWFwOyB9CisgICAgUENUb09yaWdpbk1hcCByZWxlYXNlUENU
b09yaWdpbk1hcCgpIHsgcmV0dXJuIFdURk1vdmUobV9wY1RvT3JpZ2luTWFwKTsgfQorCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICAKQEAgLTM4Myw2
ICszODcsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoUHJpbnRTdHJl
YW0mLCBPcmlnaW4pPj4gbV9vcmlnaW5QcmludGVyOwogICAgIGNvbnN0IHZvaWQqIG1fZnJvbnRl
bmREYXRhOwogICAgIFZhbHVlc0NvbGxlY3Rpb24gbV92YWx1ZXNDb2xsZWN0aW9uOworICAgIFBD
VG9PcmlnaW5NYXAgbV9wY1RvT3JpZ2luTWFwOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNw
cAkocmV2aXNpb24gMTk1ODMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJB
aXJWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNJbmRleE1h
cC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5jbHVkZSAiQjNUaW1pbmdTY29wZS5o
IgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZS5oIgpAQCAtMTcxLDEyICsxNzIsMjMgQEAgdm9pZCBnZW5lcmF0ZShD
b2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICBibG9ja0p1bXBzW3RhcmdldF0uYXBw
ZW5kKGp1bXApOwogICAgIH07CiAKKyAgICBQQ1RvT3JpZ2luTWFwJiBwY1RvT3JpZ2luTWFwID0g
Y29kZS5wcm9jKCkucGNUb09yaWdpbk1hcCgpOworICAgIGF1dG8gYWRkSXRlbSA9IFsmXSAoSW5z
dCYgaW5zdCkgeworICAgICAgICBpZiAoIWluc3Qub3JpZ2luKSB7CisgICAgICAgICAgICBwY1Rv
T3JpZ2luTWFwLmFwcGVuZEl0ZW0oaml0LmxhYmVsKCksIE9yaWdpbigpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwY1RvT3JpZ2luTWFwLmFwcGVuZEl0ZW0oaml0
LmxhYmVsKCksIGluc3Qub3JpZ2luLT5vcmlnaW4oKSk7CisgICAgfTsKKwogICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAgICAgICAgIGJsb2NrSnVtcHNbYmxvY2tdLmxpbmso
JmppdCk7CiAgICAgICAgIGJsb2NrTGFiZWxzW2Jsb2NrXSA9IGppdC5sYWJlbCgpOwogICAgICAg
ICBBU1NFUlQoYmxvY2stPnNpemUoKSA+PSAxKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJsb2NrLT5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBqdW1wID0gYmxvY2stPmF0KGkpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAg
ICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgYWRkSXRlbShp
bnN0KTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gaW5zdC5nZW5lcmF0
ZShqaXQsIGNvbnRleHQpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5p
c1NldCgpKTsKICAgICAgICAgfQogCkBAIC0xODQsNiArMTk2LDggQEAgdm9pZCBnZW5lcmF0ZShD
b2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICAgICAgJiYgYmxvY2stPnN1Y2Nlc3Nv
ckJsb2NrKDApID09IGNvZGUuZmluZE5leHRCbG9jayhibG9jaykpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAorICAgICAgICBhZGRJdGVtKGJsb2NrLT5sYXN0KCkpOworCiAgICAgICAgIGlmIChp
c1JldHVybihibG9jay0+bGFzdCgpLm9wY29kZSkpIHsKICAgICAgICAgICAgIC8vIFdlIGN1cnJl
bnRseSBkb24ndCByZXByZXNlbnQgdGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWlyLCBz
byB3ZSBuZWVkIHRvCiAgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCkBAIC0xOTgs
NiArMjEyLDcgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
V2l0aEVtcHR5RnJhbWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgIGFk
ZEl0ZW0oYmxvY2stPmxhc3QoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
CkBAIC0yMTgsMTAgKzIzMywxMyBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVs
cGVycyYgCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgYWRkSXRlbShibG9jay0+bGFzdCgpKTsK
ICAgICB9CiAKKyAgICBwY1RvT3JpZ2luTWFwLmFwcGVuZEl0ZW0oaml0LmxhYmVsKCksIE9yaWdp
bigpKTsKICAgICBmb3IgKGF1dG8mIGxhdGVQYXRoIDogY29udGV4dC5sYXRlUGF0aHMpCiAgICAg
ICAgIGxhdGVQYXRoLT5ydW4oaml0LCBjb250ZXh0KTsKKyAgICBwY1RvT3JpZ2luTWFwLmFwcGVu
ZEl0ZW0oaml0LmxhYmVsKCksIE9yaWdpbigpKTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDE5NTgzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBACiAjaW5j
bHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5o
IgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRh
YmFzZS5oIgogI2luY2x1ZGUgIlJlZHVjZVdoaXRlc3BhY2UuaCIKQEAgLTQyNzUsNCArNDI3Niwz
MCBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiAgICAgfQogfQog
CisjaWYgRU5BQkxFKEpJVCkKK3ZvaWQgQ29kZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcChz
dGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYgbWFwKSAKK3sgCisgICAgbV9wY1Rv
Q29kZU9yaWdpbk1hcCA9IFdURk1vdmUobWFwKTsKK30KKworT3B0aW9uYWw8Q29kZU9yaWdpbj4g
Q29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMpCit7CisgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5N
YXApIHsKKyAgICAgICAgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX3Bj
VG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmln
aW47CisgICAgfQorCisgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBp
dGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWIgPSAqaXRlcjsKKyAgICAgICAgaWYgKHN0dWItPmNvbnRhaW5z
UEMocGMpKQorICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+KHN0dWItPmNv
ZGVPcmlnaW4pOworICAgIH0KKworICAgIGlmIChPcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3Jp
Z2luID0gbV9qaXRDb2RlLT5maW5kUEModGhpcywgcGMpKQorICAgICAgICByZXR1cm4gY29kZU9y
aWdpbjsKKworICAgIHJldHVybiBOdWxsb3B0OworfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTk1ODMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0Owog
Y2xhc3MgVHlwZUxvY2F0aW9uOwogY2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVudDsKK2NsYXNzIFBD
VG9Db2RlT3JpZ2luTWFwOwogCiBlbnVtIFJlb3B0aW1pemF0aW9uTW9kZSB7IERvbnRDb3VudFJl
b3B0aW1pemF0aW9uLCBDb3VudFJlb3B0aW1pemF0aW9uIH07CiAKQEAgLTI3NCw3ICsyNzUsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwogICAg
IH0KLSAgICAKKwogICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiByZXR1
cm5BZGRyZXNzKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmV0dXJuQWRkcmVzcyA+
PSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICYmIHJldHVybkFkZHJlc3MgPCBpbnN0cnVjdGlvbnMo
KS5lbmQoKSk7CkBAIC05MjcsNiArOTI4LDExIEBAIHB1YmxpYzoKIAogICAgIENhbGxTaXRlSW5k
ZXggbmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggb3JpZ2lu
YWxDYWxsU2l0ZSk7CiAKKyNpZiBFTkFCTEUoSklUKQorICAgIHZvaWQgc2V0UENUb0NvZGVPcmln
aW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKKyAgICBPcHRpb25h
bDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKICAgICB2b2lkIGZpbmFsaXplQmFz
ZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKQEAgLTEwOTYsNiArMTEwMiw3IEBAIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOwogI2lmIEVOQUJMRShKSVQp
CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAj
ZW5kaWYKIAogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxp
emVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5o
CShyZXZpc2lvbiAxOTU4MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDkgQEAgc3RydWN0IENvZGVP
cmlnaW4gewogICAgIGJvb2wgaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhjb25zdCBDb2RlT3JpZ2lu
JiBvdGhlcikgY29uc3Q7CiAgICAgCiAgICAgdW5zaWduZWQgYXBwcm94aW1hdGVIYXNoKCkgY29u
c3Q7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCB3YWxrVXBJ
bmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpOwogICAgIAogICAgIC8vIEdldCB0aGUgaW5saW5l
IHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIG9ubHku
CiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CkBAIC0xMjcsNyAr
MTMwLDcgQEAgaW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6b3BlcmF0b3I9PShjb25zdAogICAgIHJl
dHVybiBieXRlY29kZUluZGV4ID09IG90aGVyLmJ5dGVjb2RlSW5kZXgKICAgICAgICAgJiYgaW5s
aW5lQ2FsbEZyYW1lID09IG90aGVyLmlubGluZUNhbGxGcmFtZTsKIH0KLSAgICAKKwogc3RydWN0
IENvZGVPcmlnaW5IYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDb2RlT3Jp
Z2luJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBDb2RlT3JpZ2luJiBhLCBjb25zdCBDb2RlT3JpZ2luJiBiKSB7IHJldHVybiBhID09IGI7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2Fs
bEZyYW1lLmgJKHJldmlzaW9uIDE5NTgzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbmxpbmVDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDYgKzI0NiwxOCBA
QCBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yCiAgICAgcmV0dXJuIGJh
c2VsaW5lQ29kZUJsb2NrOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Citpbmxp
bmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVu
Y3Rpb24pCit7CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7CisgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgZnVuY3Rpb24oY29kZU9yaWdpbik7CisgICAgICAgIGlmICghY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY29k
ZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CisgICAg
fQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAko
cmV2aXNpb24gMTk1ODMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw2ICszMjQsMTQgQEAgcHVibGlj
OgogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnNQQyh2b2lkKiBwYykgY29uc3QKKyAgICB7IAor
ICAgICAgICBpZiAoIW1fc3R1YlJvdXRpbmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgdWludHB0cl90IHBjQXNJbnQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihwYyk7
CisgICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLT5zdGFydEFkZHJlc3MoKSA8PSBwY0FzSW50
ICYmIHBjQXNJbnQgPD0gbV9zdHViUm91dGluZS0+ZW5kQWRkcmVzcygpOworICAgIH0KIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWNjZXNzQ2FzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMTk1ODMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCwxMyBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgcmVzZXQoY29kZUJsb2NrKTsKICAg
ICByZXNldEJ5R0MgPSB0cnVlOwogfQorCitib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpjb250YWlu
c1BDKHZvaWQqIHBjKSBjb25zdAoreworICAgIGlmIChjYWNoZVR5cGUgIT0gQ2FjaGVUeXBlOjpT
dHViKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHUuc3R1Yi0+Y29udGFpbnNQ
QyhwYyk7Cit9CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNp
b24gMTk1ODMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsOCBAQCBwdWJsaWM6CiAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleDsK
IAorICAgIGJvb2wgY29udGFpbnNQQyh2b2lkKiBwYykgY29uc3Q7CisKICAgICB1bmlvbiB7CiAg
ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4g
YmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxOTU4MzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMTMxLDYgKzEzMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFR5cGVQcm9maWxl
ckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFy
dERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCk7CiAKICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZv
KCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8
RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNz
aW9uSW5mbzsgfQogCiAgICAgLy8gU3BlY2lhbCByZWdpc3RlcnMKICAgICB2b2lkIHNldFRoaXNS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0g
dGhpc1JlZ2lzdGVyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE5NTgzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsOCBAQCB2
b2lkIERlYnVnZ2VyOjphdHRhY2goSlNHbG9iYWxPYmplY3QqIGdsCiAgICAgZ2xvYmFsT2JqZWN0
LT5zZXREZWJ1Z2dlcih0aGlzKTsKICAgICBtX2dsb2JhbE9iamVjdHMuYWRkKGdsb2JhbE9iamVj
dCk7CiAKKyAgICBtX3ZtLnNldFNob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nKCk7CisK
ICAgICAvLyBDYWxsIHNvdXJjZVBhcnNlZCBiZWNhdXNlIGl0IHdpbGwgZXhlY3V0ZSBKYXZhU2Ny
aXB0IGluIHRoZSBpbnNwZWN0b3IuCiAgICAgR2F0aGVyU291cmNlUHJvdmlkZXJzIGdhdGhlclNv
dXJjZVByb3ZpZGVycyhnbG9iYWxPYmplY3QpOwogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMTk1ODMyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDYg
KzIxNSwxOCBAQCB2b2lkIEpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUCiAgICAg
bWluaWZpZWRERkcudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAor
T3B0aW9uYWw8Q29kZU9yaWdpbj4gSklUQ29kZTo6ZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBj
KQoreworICAgIGZvciAoT1NSRXhpdCYgZXhpdCA6IG9zckV4aXQpIHsKKyAgICAgICAgaWYgKEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGhhbmRsZSA9IGV4aXQubV9jb2RlLmV4ZWN1dGFibGVNZW1v
cnkoKSkgeworICAgICAgICAgICAgaWYgKGhhbmRsZS0+c3RhcnQoKSA8PSBwYyAmJiBwYyA8IGhh
bmRsZS0+ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+
KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlLmgJKHJldmlzaW9uIDE5NTgzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDggQEAgcHVibGljOgog
I2VuZGlmCiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGNvbW1vbkRhdGFPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSklUQ29kZSwgY29tbW9uKTsgfQorCisgICAgT3B0aW9uYWw8Q29k
ZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBvdmVycmlkZTsKICAgICAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxl
ciB0byBjYWxsIHNldENvZGVSZWYoKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxOTU4MzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiAr
NTIsNyBAQCBKSVRDb21waWxlcjo6SklUQ29tcGlsZXIoR3JhcGgmIGRmZykKICAgICAsIG1fZ3Jh
cGgoZGZnKQogICAgICwgbV9qaXRDb2RlKGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpKQogICAgICwg
bV9ibG9ja0hlYWRzKGRmZy5udW1CbG9ja3MoKSkKKyAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyKGRmZy5tX3ZtKQogewogICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBt
X2dyYXBoLm1fdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxl
ciA9IHN0ZDo6bWFrZV91bmlxdWU8RGlzYXNzZW1ibGVyPihkZmcpOwpAQCAtMzA1LDYgKzMwNiw5
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25IYW5kbGVyKG5ld0V4Y2VwdGlvbkhhbmRsZXIp
OwogICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
LmRpZEJ1aWxkTWFwcGluZygpKQorICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmln
aW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpKTsKIH0KIAogdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZSgpCkBAIC0zMzksNyArMzQzLDggQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGls
ZSgpCiAgICAgbV9zcGVjdWxhdGl2ZS0+Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9j
ayk7CiAKICAgICAvLyBHZW5lcmF0ZSBzbG93IHBhdGggY29kZS4KLSAgICBtX3NwZWN1bGF0aXZl
LT5ydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICBtX3NwZWN1bGF0aXZlLT5ydW5TbG93UGF0
aEdlbmVyYXRvcnMobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOworICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKICAgICAKICAgICBjb21waWxlRXhjZXB0aW9uSGFu
ZGxlcnMoKTsKICAgICBsaW5rT1NSRXhpdHMoKTsKQEAgLTQzMiw3ICs0MzcsOCBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIGp1bXAoZnJvbUFyaXR5Q2hlY2spOwog
ICAgIAogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgotICAgIG1fc3BlY3VsYXRpdmUt
PnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRo
R2VuZXJhdG9ycyhtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik7CisgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogICAgIAogICAgIGNvbXBpbGVFeGNlcHRpb25IYW5k
bGVycygpOwogICAgIGxpbmtPU1JFeGl0cygpOwpAQCAtNTk2LDYgKzYwMiwyMiBAQCBDYWxsU2l0
ZUluZGV4IEpJVENvbXBpbGVyOjpyZWNvcmRDYWxsU2l0CiAgICAgcmV0dXJuIGNhbGxTaXRlOwog
fQogCit2b2lkIEpJVENvbXBpbGVyOjpzZXRFbmRPZk1haW5QYXRoKCkKK3sKKyAgICBtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygp
LCBtX3NwZWN1bGF0aXZlLT5tX29yaWdpbi5zZW1hbnRpYyk7CisgICAgaWYgKExJS0VMWSghbV9k
aXNhc3NlbWJsZXIpKQorICAgICAgICByZXR1cm47CisgICAgbV9kaXNhc3NlbWJsZXItPnNldEVu
ZE9mTWFpblBhdGgobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOworfQorCit2b2lkIEpJVENv
bXBpbGVyOjpzZXRFbmRPZkNvZGUoKQoreworICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
LmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCksIFBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CisgICAgaWYgKExJS0VMWSghbV9kaXNhc3Nl
bWJsZXIpKQorICAgICAgICByZXR1cm47CisgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29k
ZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTk1ODMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRl
ICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlRlbXBSZWdpc3RlclNldC5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTExOCw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgLy8gTWV0aG9k
cyB0byBzZXQgbGFiZWxzIGZvciB0aGUgZGlzYXNzZW1ibGVyLgogICAgIHZvaWQgc2V0U3RhcnRP
ZkNvZGUoKQogICAgIHsKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5k
SXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgQ29kZU9yaWdpbigwLCBudWxscHRyKSk7
CiAgICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2RlKGxhYmVsSWdub3JpbmdX
YXRjaHBvaW50cygpKTsKQEAgLTEzNywxOSArMTM5LDggQEAgcHVibGljOgogICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0Rm9yTm9kZShub2RlLCBsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0RW5kT2ZNYWluUGF0aCgpCi0gICAgewotICAgICAg
ICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZk1haW5QYXRoKGxhYmVsSWdub3JpbmdXYXRjaHBv
aW50cygpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRFbmRPZkNvZGUoKQotICAgIHsKLSAg
ICAgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBv
aW50cygpKTsKLSAgICB9CisgICAgdm9pZCBzZXRFbmRPZk1haW5QYXRoKCk7CisgICAgdm9pZCBz
ZXRFbmRPZkNvZGUoKTsKICAgICAKICAgICBDYWxsU2l0ZUluZGV4IGFkZENhbGxTaXRlKENvZGVP
cmlnaW4gY29kZU9yaWdpbikKICAgICB7CkBAIC0yNjUsNiArMjU2LDggQEAgcHVibGljOgogCiAg
ICAgQ2FsbFNpdGVJbmRleCByZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxp
bmdPU1JFeGl0SWZOZWVkZWQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVkIGV2ZW50U3RyZWFt
SW5kZXgpOwogCisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIoKSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsgfQorCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyOwogICAgIApAQCAt
MzI4LDYgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbCBtX2NhbGxBcml0eUZpeHVwOwogICAg
IExhYmVsIG1fYXJpdHlDaGVjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3BlY3VsYXRpdmVKSVQ+
IG1fc3BlY3VsYXRpdmU7CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAko
cmV2aXNpb24gMTk1ODMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0
aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIHB1YmxpYzoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQnkgZGVmYXVsdCBzbG93IHBh
dGggZ2VuZXJhdG9ycyBkb24ndCBoYXZlIGEgY2FsbC4KICAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsKCk7CiAgICAgfQorCisgICAgY29uc3QgTm9kZU9yaWdpbiYgb3JpZ2luKCkg
Y29uc3QgIHsgcmV0dXJuIG1fb3JpZ2luOyB9CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCopID0gMDsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9sYWJlbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxOTU4MzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMwLDEwICszMzAsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkU2xvd1BhdGhHZW5lcmF0
bwogICAgIG1fc2xvd1BhdGhHZW5lcmF0b3JzLmFwcGVuZChXVEZNb3ZlKHNsb3dQYXRoR2VuZXJh
dG9yKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnJ1blNsb3dQYXRoR2VuZXJhdG9ycygp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpydW5TbG93UGF0aEdlbmVyYXRvcnMoUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpCiB7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fc2xvd1BhdGhHZW5lcmF0b3JzLnNpemUoKTsgKytpKQorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3dQYXRoR2VuZXJhdG9ycy5zaXplKCk7ICsraSkg
eworICAgICAgICBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShtX2ppdC5sYWJl
bCgpLCBtX3Nsb3dQYXRoR2VuZXJhdG9yc1tpXS0+b3JpZ2luKCkuc2VtYW50aWMpOwogICAgICAg
ICBtX3Nsb3dQYXRoR2VuZXJhdG9yc1tpXS0+Z2VuZXJhdGUodGhpcyk7CisgICAgfQogfQogCiAv
LyBPbiBXaW5kb3dzIHdlIG5lZWQgdG8gd3JhcCBmbW9kOyBvbiBvdGhlciBwbGF0Zm9ybXMgd2Ug
Y2FuIGNhbGwgaXQgZGlyZWN0bHkuCkBAIC0xNTA0LDYgKzE1MDYsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0
ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgJiYgbWF5RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1cnJl
bnROb2RlKSAhPSBEb2VzTm90RXhpdCkKICAgICAgICAgICAgIG1faml0LmppdFJlbGVhc2VBc3Nl
cnROb0V4Y2VwdGlvbigpOwogCisgICAgICAgIG1faml0LnBjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cigpLmFwcGVuZEl0ZW0obV9qaXQubGFiZWwoKSwgbV9vcmlnaW4uc2VtYW50aWMpOworCiAgICAg
ICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoYmVsb25n
c0luTWluaWZpZWRHcmFwaChtX2N1cnJlbnROb2RlLT5vcCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE5NTgzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzE3LDcgKzMxNyw3IEBAIHB1YmxpYzoKICAgICBHZW5lcmF0ZWRPcGVyYW5k
VHlwZSBjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKE5vZGUqKTsKIAogICAgIHZvaWQgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPik7Ci0g
ICAgdm9pZCBydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICB2b2lkIHJ1blNsb3dQYXRoR2Vu
ZXJhdG9ycyhQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImKTsKICAgICAKICAgICB2b2lkIGNvbXBp
bGUoTm9kZSopOwogICAgIHZvaWQgbm90aWNlT1NSQmlydGgoTm9kZSopOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxlLmNwcAkocmV2aXNpb24gMTk1ODMyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRlRMVW53aW5kSW5mby5oIgogI2luY2x1
ZGUgIkpJVFN1YkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRl
ICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBAIC0xNDAsNiArMTQxLDEw
IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgc3Rh
dGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAg
CisgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFzZVBD
VG9PcmlnaW5NYXAoKTsKKyAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFw
cGluZygpKQorICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFr
ZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwg
V1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikp
OwogCiAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8R2VuZXJhdGVk
RnVuY3Rpb24+KAogICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmVu
dHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTk1ODMyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4
NiwyNSBAQCBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVzCiAgICAgcmV0
dXJuIFJlZ2lzdGVyU2V0KCk7CiB9CiAKK09wdGlvbmFsPENvZGVPcmlnaW4+IEpJVENvZGU6OmZp
bmRQQyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgdm9pZCogcGMpCit7CisgICAgZm9yIChPU1JFeGl0
JiBleGl0IDogb3NyRXhpdCkgeworICAgICAgICBpZiAoRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSog
aGFuZGxlID0gZXhpdC5tX2NvZGUuZXhlY3V0YWJsZU1lbW9yeSgpKSB7CisgICAgICAgICAgICBp
ZiAoaGFuZGxlLT5zdGFydCgpIDw9IHBjICYmIHBjIDwgaGFuZGxlLT5lbmQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oZXhpdC5tX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0
cjxMYXp5U2xvd1BhdGg+JiBsYXp5U2xvd1BhdGggOiBsYXp5U2xvd1BhdGhzKSB7CisgICAgICAg
IGlmIChFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBsYXp5U2xvd1BhdGgtPnN0dWIo
KS5leGVjdXRhYmxlTWVtb3J5KCkpIHsKKyAgICAgICAgICAgIGlmIChoYW5kbGUtPnN0YXJ0KCkg
PD0gcGMgJiYgcGMgPCBoYW5kbGUtPmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBPcHRp
b25hbDxDb2RlT3JpZ2luPihjb2RlQmxvY2stPmNvZGVPcmlnaW4obGF6eVNsb3dQYXRoLT5jYWxs
U2l0ZUluZGV4KCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOdWxsb3B0Owor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAx
OTU4MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBwdWJsaWM6CiAKICAgICBSZWdpc3RlclNldCBsaXZl
UmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShDb2RlQmxvY2sq
LCBDYWxsU2l0ZUluZGV4KSBvdmVycmlkZTsKIAorICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+IGZp
bmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgb3ZlcnJpZGU7CisKICNpZiBGVExfVVNFU19CMwog
ICAgIENvZGVSZWYgYjNDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9iM0NvZGU7IH0KICNlbHNlCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtl
ci5jcHAJKHJldmlzaW9uIDE5NTgzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
Y2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDEyIEBACiAj
aW5jbHVkZSAiTWFjaGluZVN0YWNrTWFya2VyLmgiCiAKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVS
b290cy5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVk
ZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMTEludFBD
UmFuZ2VzLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJWTS5oIgog
I2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNTc3LDYgKzU4MCw2
NCBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3RlcnM6CiAjZXJyb3IgTmVl
ZCBhIHdheSB0byBnZXQgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgZm9yIGFub3RoZXIgdGhyZWFk
IG9uIHRoaXMgcGxhdGZvcm0KICNlbmRpZgogfQordm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVh
ZDo6UmVnaXN0ZXJzOjpsbGludFBDKCkgY29uc3QKK3sKKyAgICAvLyBMTEludCB1c2VzIHJlZ1Q0
IGFzIFBDLgorI2lmIE9TKERBUldJTikKKworI2lmIF9fREFSV0lOX1VOSVgwMworCisjaWYgQ1BV
KFg4NikKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6
ZXNpLCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlZ3MuX19lc2kpOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICBzdGF0aWNfYXNzZXJ0KExM
SW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6cjgsICJXcm9uZyBMTEludCBQQy4iKTsKKyAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVncy5fX3I4KTsKKyNlbGlmIENQVShB
Uk0pCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBBUk1SZWdpc3RlcnM6OnI4
LCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJlZ3MuX19yWzhdKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50
OjpMTEludFBDID09IEFSTTY0UmVnaXN0ZXJzOjp4NCwgIldyb25nIExMSW50IFBDLiIpOworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLl9feFs0XSk7CisjZWxzZQorI2Vy
cm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworI2Vsc2UgLy8gIV9fREFSV0lOX1VO
SVgwMworI2lmIENQVShYODYpCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBY
ODZSZWdpc3RlcnM6OmVzaSwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWdzLmVzaSk7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIHN0YXRp
Y19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0ZXJzOjpyOCwgIldyb25nIExMSW50
IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLnI4KTsKKyNl
bHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZW5kaWYgLy8gX19E
QVJXSU5fVU5JWDAzCisKKy8vIGVuZCBPUyhEQVJXSU4pCisjZWxpZiBPUyhXSU5ET1dTKQorCisj
aWYgQ1BVKEFSTSkKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IEFSTVJlZ2lz
dGVyczo6cjgsICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oKHVpbnRwdHJfdCkgcmVncy5SOCk7CisjZWxpZiBDUFUoTUlQUykKKyNlcnJvciBE
b250IGtub3cgd2hhdCB0byBkbyB3aXRoIG1pcHMuIERvIHdlIGV2ZW4gbmVlZCB0aGlzPworI2Vs
aWYgQ1BVKFg4NikKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lz
dGVyczo6ZXNpLCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KCh1aW50cHRyX3QpIHJlZ3MuRXNpKTsKKyNlbGlmIENQVShYODZfNjQpCisgICAg
c3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBYODZSZWdpc3RlcnM6OnIxMCwgIldyb25n
IExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPigodWludHB0
cl90KSByZWdzLlIxMCk7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5k
aWYKKworI2Vsc2UKKyNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aGUgTExJbnRQQyBmb3IgYW5v
dGhlciB0aHJlYWQgb24gdGhpcyBwbGF0Zm9ybQorI2VuZGlmCit9CiAjZW5kaWYgLy8gRU5BQkxF
KFNBTVBMSU5HX1BST0ZJTEVSKQogCiB2b2lkIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmZyZWVS
ZWdpc3RlcnMoVGhyZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCShyZXZpc2lvbiAxOTU4
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFNBTVBM
SU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgdm9pZCogZnJhbWVQb2ludGVyKCkgY29uc3Q7CiAg
ICAgICAgICAgICB2b2lkKiBpbnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdDsKKyAgICAgICAgICAg
IHZvaWQqIGxsaW50UEMoKSBjb25zdDsKICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklM
RVIpCiAgICAgICAgICAgICAKICNpZiBPUyhEQVJXSU4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAkocmV2aXNpb24gMTk1ODMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEluc3BlY3Rv
clNjcmlwdFByb2ZpbGVyQWdlbnQ6OmFkZEV2CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCi1zdGF0aWMgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U2FtcGxlcz4gYnVp
bGRTYW1wbGVzKFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiYgc2FtcGxpbmdQ
cm9maWxlclN0YWNrVHJhY2VzLCBkb3VibGUgdG90YWxUaW1lKQorc3RhdGljIFJlZjxQcm90b2Nv
bDo6U2NyaXB0UHJvZmlsZXI6OlNhbXBsZXM+IGJ1aWxkU2FtcGxlcyhWZWN0b3I8U2FtcGxpbmdQ
cm9maWxlcjo6U3RhY2tUcmFjZT4mJiBzYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMsIGRvdWJs
ZSB0b3RhbFRpbWUpCiB7CiAgICAgUmVmPFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6U2NyaXB0
UHJvZmlsZXI6OlN0YWNrVHJhY2U+PiBzdGFja1RyYWNlcyA9IFByb3RvY29sOjpBcnJheTxQcm90
b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlN0YWNrVHJhY2U+OjpjcmVhdGUoKTsKICAgICBmb3IgKFNh
bXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2UmIHN0YWNrVHJhY2UgOiBzYW1wbGluZ1Byb2ZpbGVy
U3RhY2tUcmFjZXMpIHsKQEAgLTE2Niw4ICsxNjYsOCBAQCBzdGF0aWMgUmVmPFByb3RvY29sOjpT
Y3JpcHRQcm9maWxlcjo6U2FtCiAgICAgICAgICAgICBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2Zp
bGVyOjpTdGFja0ZyYW1lPiBmcmFtZSA9IFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U3RhY2tG
cmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0U291cmNlSUQoU3RyaW5nOjpudW1i
ZXIoc3RhY2tGcmFtZS5zb3VyY2VJRCgpKSkKICAgICAgICAgICAgICAgICAuc2V0TmFtZShzdGFj
a0ZyYW1lLmRpc3BsYXlOYW1lKCkpCi0gICAgICAgICAgICAgICAgLnNldExpbmUoc3RhY2tGcmFt
ZS5zdGFydExpbmUoKSkKLSAgICAgICAgICAgICAgICAuc2V0Q29sdW1uKHN0YWNrRnJhbWUuc3Rh
cnRDb2x1bW4oKSkKKyAgICAgICAgICAgICAgICAuc2V0TGluZShzdGFja0ZyYW1lLmZ1bmN0aW9u
U3RhcnRMaW5lKCkpCisgICAgICAgICAgICAgICAgLnNldENvbHVtbihzdGFja0ZyYW1lLmZ1bmN0
aW9uU3RhcnRDb2x1bW4oKSkKICAgICAgICAgICAgICAgICAuc2V0VXJsKHN0YWNrRnJhbWUudXJs
KCkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgIGZyYW1lcy0+YWRk
SXRlbShXVEZNb3ZlKGZyYW1lKSk7CkBAIC0xOTQsOCArMTk0LDggQEAgdm9pZCBJbnNwZWN0b3JT
Y3JpcHRQcm9maWxlckFnZW50Ojp0cmFjawogICAgICAgICBSRUxFQVNFX0FTU0VSVChzYW1wbGlu
Z1Byb2ZpbGVyKTsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+
Z2V0TG9jaygpKTsKICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+c3RvcChsb2NrZXIpOwotICAg
ICAgICBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW1wbGVzPiBzYW1wbGVzID0gYnVp
bGRTYW1wbGVzKHNhbXBsaW5nUHJvZmlsZXItPnN0YWNrVHJhY2VzKGxvY2tlciksIHNhbXBsaW5n
UHJvZmlsZXItPnRvdGFsVGltZShsb2NrZXIpKTsKLSAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+
Y2xlYXJEYXRhKGxvY2tlcik7CisgICAgICAgIFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFj
a1RyYWNlPiBzdGFja1RyYWNlcyA9IHNhbXBsaW5nUHJvZmlsZXItPnJlbGVhc2VTdGFja1RyYWNl
cyhsb2NrZXIpOworICAgICAgICBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW1wbGVz
PiBzYW1wbGVzID0gYnVpbGRTYW1wbGVzKFdURk1vdmUoc3RhY2tUcmFjZXMpLCBzYW1wbGluZ1By
b2ZpbGVyLT50b3RhbFRpbWUobG9ja2VyKSk7CiAKICAgICAgICAgbG9ja2VyLnVubG9ja0Vhcmx5
KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE5NTgzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCkBAIC02
OSw2ICs3MCw3IEBAIEpJVDo6SklUKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAg
LCBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleChVSU5UX01BWCkKICAgICAsIG1fY2FsbExpbmtJbmZv
SW5kZXgoVUlOVF9NQVgpCiAgICAgLCBtX3JhbmRvbUdlbmVyYXRvcihjcnlwdG9ncmFwaGljYWxs
eVJhbmRvbU51bWJlcigpKQorICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKnZtKQog
ICAgICwgbV9jYW5CZU9wdGltaXplZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZyhmYWxzZSkKIHsKQEAgLTE1OCw2ICsxNjAsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0
cnVjdGlvbnNCZWdpbiArIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UobV9pbnRlcnByZXRlci0+aXNPcGNvZGUoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29k
ZSksICJwcml2YXRlQ29tcGlsZU1haW5QYXNzIGdvbmUgYmFkIEAgJWQiLCBtX2J5dGVjb2RlT2Zm
c2V0KTsKIAorICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxh
YmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCkpOworCiAjaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgPiAwKSAvLyBBdm9pZCB0
aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCiAgICAgICAgICAgICBzYW1w
bGVJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMzY1LDYgKzM2OSw4IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgZm9yIChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1f
c2xvd0Nhc2VzLmVuZCgpOykgewogICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gaXRlci0+dG87
CiAKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKwogICAgICAgICB1bnNpZ25lZCBmaXJz
dFRvID0gbV9ieXRlY29kZU9mZnNldDsKIAogICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBtX2J5dGVjb2RlT2Zmc2V0OwpAQCAtNTE5
LDYgKzUyNSw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAg
ICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOwogICAgIH0KICAgICAKKyAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oMCwgbnVsbHB0
cikpOworCiAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
c2V0U3RhcnRPZkNvZGUobGFiZWwoKSk7CiAKQEAgLTU3MSw2ICs1NzksNyBAQCBDb21waWxhdGlv
blJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgCiAgICAgaWYgKG1fZGlzYXNzZW1i
bGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsK
KyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKICAgICBzdGFja092
ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZU9mZnNldCA9IDA7CkBAIC02MTIsNiAr
NjIxLDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIAog
ICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9m
Q29kZShsYWJlbCgpKTsKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7
CisKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9j
aywgZWZmb3J0KTsKICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKQEAg
LTcwOCw2ICs3MTksOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJ
CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24u
Z2V0KCksIHBhdGNoQnVmZmVyKTsKICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LT5hZGRDb21waWxhdGlvbihtX2NvbXBpbGF0aW9uKTsKICAgICB9CisKKyAgICBpZiAobV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCisgICAgICAgIG1fY29kZUJs
b2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2lu
TWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpKTsK
ICAgICAKICAgICBDb2RlUmVmIHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNo
QnVmZmVyLApAQCAtNzE2LDcgKzczMCw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0
ZUNvbXBpbGUoSkkKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9y
QmFzZWxpbmVKSVQuYWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KHJlc3VsdC5zaXpl
KCkpIC8KICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKSk7Ci0gICAgCisKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoQ29k
ZUJsb2NrOjpMYXRlU2hyaW5rKTsKICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKICAgICAg
ICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklU
Q29kZTo6QmFzZWxpbmVKSVQpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDE5NTgzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCisj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAj
aW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgpAQCAt
OTEzLDYgKzkxNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXZWFrUmFuZG9tIG1fcmFu
ZG9tR2VuZXJhdG9yOwogICAgICAgICBzdGF0aWMgQ29kZVJlZiBzdHJpbmdHZXRCeVZhbFN0dWJH
ZW5lcmF0b3IoVk0qKTsKIAorICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgbV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXI7CisKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwog
ICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9z
aG91bGRFbWl0UHJvZmlsaW5nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJ
KHJldmlzaW9uIDE5NTgzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTIgQEAKIAogI2luY2x1ZGUgIkFyaXR5Q2hl
Y2tNb2RlLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5o
IgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTk1
LDYgKzE5Nyw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdmlydHVhbCBSZWdp
c3RlclNldCBsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0
ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPENvZGVP
cmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgeyBVTlVTRURfUEFSQU0ocGMpOyBy
ZXR1cm4gTnVsbG9wdDsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9y
aWdpbk1hcC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkIzUENUb09yaWdpbk1h
cC5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitjbGFzcyBEZWx0YUNvbXByZXNzaW9uQnVp
bGRlciB7CitwdWJsaWM6CisgICAgRGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIoc2l6ZV90IG1heFNp
emUpCisgICAgICAgIDogbV9vZmZzZXQoMCkKKyAgICAgICAgLCBtX21heFNpemUobWF4U2l6ZSkK
KyAgICB7CisgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxs
b2MobV9tYXhTaXplKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAg
dm9pZCB3cml0ZShUIGl0ZW0pCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX29mZnNl
dCArIHNpemVvZihUKSA8PSBtX21heFNpemUpOworICAgICAgICBzdGF0aWMgY29uc3QgdWludDhf
dCBtYXNrID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YoVCk7IGkrKykgeworICAgICAgICAgICAgKiht
X2J1ZmZlciArIG1fb2Zmc2V0KSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGl0ZW0gJiBtYXNrKTsK
KyAgICAgICAgICAgIGl0ZW0gPSBpdGVtID4+IChzaXplb2YodWludDhfdCkgKiA4KTsKKyAgICAg
ICAgICAgIG1fb2Zmc2V0ICs9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1aW50OF90KiBt
X2J1ZmZlcjsgCisgICAgc2l6ZV90IG1fb2Zmc2V0OworICAgIHNpemVfdCBtX21heFNpemU7Cit9
OworCitjbGFzcyBEZWx0YUNvbXByZXNzZWlvblJlYWRlciB7CitwdWJsaWM6CisgICAgRGVsdGFD
b21wcmVzc2Vpb25SZWFkZXIodWludDhfdCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAg
OiBtX2J1ZmZlcihidWZmZXIpCisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAgICwgbV9v
ZmZzZXQoMCkKKyAgICB7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIFQgcmVh
ZCgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX29mZnNldCArIHNpemVvZihUKSA8
PSBtX3NpemUpOworICAgICAgICBUIHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplb2YoVCk7IGkrKykgeworICAgICAgICAgICAgdWludDhfdCBiaXRzQXNJ
bnQ4ID0gKihtX2J1ZmZlciArIG1fb2Zmc2V0KTsKKyAgICAgICAgICAgIFQgYml0cyA9IHN0YXRp
Y19jYXN0PFQ+KGJpdHNBc0ludDgpOworICAgICAgICAgICAgYml0cyA9IGJpdHMgPDwgKHNpemVv
Zih1aW50OF90KSAqIDggKiBpKTsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBiaXRzOworICAgICAg
ICAgICAgbV9vZmZzZXQgKz0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90KiBtX2J1ZmZlcjsKKyAgICBzaXplX3QgbV9z
aXplOworICAgIHNpemVfdCBtX29mZnNldDsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorCitQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihW
TSYgdm0pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9zaG91bGRCdWlsZE1hcHBpbmcodm0uc2hv
dWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKQoreyB9CisKK1BDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFBDVG9Db2RlT3JpZ2luTWFwQnVp
bGRlciYmIG90aGVyKQorICAgIDogbV92bShvdGhlci5tX3ZtKQorICAgICwgbV9jb2RlUmFuZ2Vz
KFdURk1vdmUob3RoZXIubV9jb2RlUmFuZ2VzKSkKKyAgICAsIG1fc2hvdWxkQnVpbGRNYXBwaW5n
KG90aGVyLm1fc2hvdWxkQnVpbGRNYXBwaW5nKQoreyB9CisKKyNpZiBGVExfVVNFU19CMworUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoVk0mIHZtLCBC
Mzo6UENUb09yaWdpbk1hcCYmIGIzUENUb09yaWdpbk1hcCkKKyAgICA6IG1fdm0odm0pCisgICAg
LCBtX3Nob3VsZEJ1aWxkTWFwcGluZyh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBw
aW5nKCkpCit7CisgICAgaWYgKCFtX3Nob3VsZEJ1aWxkTWFwcGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yIChjb25zdCBCMzo6UENUb09yaWdpbk1hcDo6T3JpZ2luUmFuZ2UmIG9yaWdp
blJhbmdlIDogYjNQQ1RvT3JpZ2luTWFwLnJhbmdlcygpKSB7CisgICAgICAgIERGRzo6Tm9kZSog
bm9kZSA9IGJpdHdpc2VfY2FzdDxERkc6Ok5vZGUqPihvcmlnaW5SYW5nZS5vcmlnaW4uZGF0YSgp
KTsKKyAgICAgICAgaWYgKG5vZGUpCisgICAgICAgICAgICBhcHBlbmRJdGVtKG9yaWdpblJhbmdl
LmxhYmVsLCBub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBhcHBlbmRJdGVtKG9yaWdpblJhbmdlLmxhYmVsLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6
OmRlZmF1bHRDb2RlT3JpZ2luKCkpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlcjo6YXBwZW5kSXRlbShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWws
IGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCit7CisgICAgaWYgKCFtX3Nob3VsZEJ1aWxk
TWFwcGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29kZVJhbmdlcy5zaXplKCkp
IHsKKyAgICAgICAgaWYgKG1fY29kZVJhbmdlcy5sYXN0KCkuZW5kID09IGxhYmVsKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX2NvZGVSYW5nZXMubGFzdCgpLmVuZCA9IGxhYmVsOwor
ICAgICAgICBpZiAobV9jb2RlUmFuZ2VzLmxhc3QoKS5jb2RlT3JpZ2luID09IGNvZGVPcmlnaW4g
fHwgIWNvZGVPcmlnaW4pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb2Rl
UmFuZ2VzLmFwcGVuZChDb2RlUmFuZ2V7bGFiZWwsIGxhYmVsLCBjb2RlT3JpZ2lufSk7Cit9CisK
Kworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2VudGluZWxQQ0RlbHRhID0gMDsKK3N0YXRpYyBjb25z
dCBpbnQ4X3Qgc2VudGluZWxCeXRlY29kZURlbHRhID0gMDsKKworUENUb0NvZGVPcmlnaW5NYXA6
OlBDVG9Db2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYmIGJ1aWxkZXIsIExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoYnVpbGRlci5kaWRC
dWlsZE1hcHBpbmcoKSk7CisKKyAgICBpZiAoIWJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSkg
eworICAgICAgICBtX3BjUmFuZ2VTdGFydCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90
Pjo6bWF4KCk7CisgICAgICAgIG1fcGNSYW5nZUVuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dHB0cl90Pjo6bWF4KCk7CisKKyAgICAgICAgbV9jb21wcmVzc2VkUENCdWZmZXJTaXplID0gMDsK
KyAgICAgICAgbV9jb21wcmVzc2VkUENzID0gbnVsbHB0cjsKKworICAgICAgICBtX2NvbXByZXNz
ZWRDb2RlT3JpZ2luc1NpemUgPSAwOworICAgICAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2lucyA9
IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvIGEgZmlu
YWwgdG91Y2gtdXAgb24gdGhlIGxhc3QgcmFuZ2UgaGVyZSBiZWNhdXNlIG9mIGhvdyB3ZSBnZW5l
cmF0ZSB0aGUgdGFibGUuCisgICAgLy8gVGhlIGZpbmFsIHJhbmdlIChpZiBub24gZW1wdHkpIHdv
dWxkIGJlIGlnbm9yZWQgaWYgd2UgZGlkbid0IGFwcGVuZCBhbnkgKGFyYml0cmFyeSkKKyAgICAv
LyByYW5nZSBhcyB0aGUgbGFzdCBpdGVtIG9mIHRoZSB2ZWN0b3IuCisgICAgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2UmIGxhc3QgPSBidWlsZGVyLm1fY29kZVJhbmdlcy5sYXN0
KCk7CisgICAgaWYgKCEobGFzdC5zdGFydCA9PSBsYXN0LmVuZCkpCisgICAgICAgIGJ1aWxkZXIu
bV9jb2RlUmFuZ2VzLmFwcGVuZChQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZXsg
bGFzdC5lbmQsIGxhc3QuZW5kLCBsYXN0LmNvZGVPcmlnaW4gfSk7IC8vIFRoaXMgcmFuZ2Ugd2ls
bCBuZXZlciBhY3R1YWxseSBiZSBmb3VuZCwgYnV0IGl0IGVuc3VyZXMgdGhlIHJlYWwgbGFzdCBy
YW5nZSBpcyBmb3VuZC4KKworICAgIERlbHRhQ29tcHJlc3Npb25CdWlsZGVyIHBjQ29tcHJlc3Nv
cigoc2l6ZW9mKHVpbnRwdHJfdCkgKyBzaXplb2YodWludDhfdCkpICogYnVpbGRlci5tX2NvZGVS
YW5nZXMuc2l6ZSgpKTsKKyAgICB2b2lkKiBsYXN0UENWYWx1ZSA9IG51bGxwdHI7CisgICAgYXV0
byBidWlsZFBDVGFibGUgPSBbJl0gKHZvaWQqIHBjVmFsdWUpIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQocGNWYWx1ZSA+IGxhc3RQQ1ZhbHVlKTsKKyAgICAgICAgdWludHB0cl90IGRlbHRhID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocGNWYWx1ZSkgLSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihsYXN0UENWYWx1ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlbHRhICE9IHNlbnRpbmVs
UENEZWx0YSk7CisgICAgICAgIGxhc3RQQ1ZhbHVlID0gcGNWYWx1ZTsKKyAgICAgICAgaWYgKGRl
bHRhID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpIHsKKyAgICAgICAgICAg
IHBjQ29tcHJlc3Nvci53cml0ZTx1aW50OF90PihzZW50aW5lbFBDRGVsdGEpOworICAgICAgICAg
ICAgcGNDb21wcmVzc29yLndyaXRlPHVpbnRwdHJfdD4oZGVsdGEpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgcGNDb21wcmVzc29yLndyaXRlPHVpbnQ4X3Q+KHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KGRlbHRhKSk7CisgICAgfTsKKworICAgIERlbHRhQ29tcHJlc3Np
b25CdWlsZGVyIGNvZGVPcmlnaW5Db21wcmVzc29yKChzaXplb2YoaW50cHRyX3QpICsgc2l6ZW9m
KGludDhfdCkgKyBzaXplb2YoaW50OF90KSArIHNpemVvZihJbmxpbmVDYWxsRnJhbWUqKSkgKiBi
dWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCkpOworICAgIENvZGVPcmlnaW4gbGFzdENvZGVPcmln
aW4oMCwgbnVsbHB0cik7CisgICAgYXV0byBidWlsZENvZGVPcmlnaW5UYWJsZSA9IFsmXSAoY29u
c3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikgeworICAgICAgICBpbnRwdHJfdCBkZWx0YSA9IHN0
YXRpY19jYXN0PGludHB0cl90Pihjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpIC0gc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KGxhc3RDb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBsYXN0
Q29kZU9yaWdpbiA9IGNvZGVPcmlnaW47CisgICAgICAgIGlmIChkZWx0YSA+IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50OF90Pjo6bWF4KCkgfHwgZGVsdGEgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDhfdD46Om1pbigpIHx8IGRlbHRhID09IHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSkgeworICAgICAg
ICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50OF90PihzZW50aW5lbEJ5dGVjb2Rl
RGVsdGEpOworICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50cHRyX3Q+
KGRlbHRhKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb2RlT3JpZ2luQ29tcHJlc3Nv
ci53cml0ZTxpbnQ4X3Q+KHN0YXRpY19jYXN0PGludDhfdD4oZGVsdGEpKTsKKworICAgICAgICBp
bnQ4X3QgaGFzSW5saW5lQ2FsbEZyYW1lQnl0ZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
ID8gMSA6IDA7CisgICAgICAgIGNvZGVPcmlnaW5Db21wcmVzc29yLndyaXRlPGludDhfdD4oaGFz
SW5saW5lQ2FsbEZyYW1lQnl0ZSk7CisgICAgICAgIGlmIChoYXNJbmxpbmVDYWxsRnJhbWVCeXRl
KQorICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8dWludHB0cl90PihiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOworICAgIH07
CisKKyAgICBtX3BjUmFuZ2VTdGFydCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxpbmtCdWZm
ZXIubG9jYXRpb25PZihidWlsZGVyLm1fY29kZVJhbmdlcy5maXJzdCgpLnN0YXJ0KS5kYXRhTG9j
YXRpb24oKSk7CisgICAgbV9wY1JhbmdlRW5kID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmxhc3QoKS5lbmQpLmRhdGFM
b2NhdGlvbigpKTsKKyAgICBtX3BjUmFuZ2VFbmQgLT0gMTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZSYgY29kZVJhbmdlID0gYnVpbGRlci5t
X2NvZGVSYW5nZXNbaV07CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKGNvZGVSYW5nZS5zdGFydCkuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgIHZvaWQqIGVuZCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2RlUmFuZ2UuZW5kKS5kYXRhTG9jYXRpb24oKTsKKyAg
ICAgICAgQVNTRVJUKG1fcGNSYW5nZVN0YXJ0IDw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0
YXJ0KSk7CisgICAgICAgIEFTU0VSVChtX3BjUmFuZ2VFbmQgPj0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oZW5kKSAtIDEpOworICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQorICAgICAgICAgICAg
QVNTRVJUKGkgPT0gYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpIC0gMSk7CisgICAgICAgIGlm
IChpID4gMCkKKyAgICAgICAgICAgIEFTU0VSVChsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYnVpbGRl
ci5tX2NvZGVSYW5nZXNbaSAtIDFdLmVuZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3RhcnQpOworCisg
ICAgICAgIGJ1aWxkUENUYWJsZShzdGFydCk7CisgICAgICAgIGJ1aWxkQ29kZU9yaWdpblRhYmxl
KGNvZGVSYW5nZS5jb2RlT3JpZ2luKTsKKyAgICB9CisKKyAgICBtX2NvbXByZXNzZWRQQ0J1ZmZl
clNpemUgPSBwY0NvbXByZXNzb3IubV9vZmZzZXQ7CisgICAgbV9jb21wcmVzc2VkUENzID0gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKHBjQ29tcHJlc3Nvci5tX2J1ZmZlciwgbV9j
b21wcmVzc2VkUENCdWZmZXJTaXplKSk7CisKKyAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1Np
emUgPSBjb2RlT3JpZ2luQ29tcHJlc3Nvci5tX29mZnNldDsKKyAgICBtX2NvbXByZXNzZWRDb2Rl
T3JpZ2lucyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhjb2RlT3JpZ2luQ29t
cHJlc3Nvci5tX2J1ZmZlciwgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplKSk7Cit9CisKK1BD
VG9Db2RlT3JpZ2luTWFwOjp+UENUb0NvZGVPcmlnaW5NYXAoKQoreworICAgIGlmIChtX2NvbXBy
ZXNzZWRQQ3MpCisgICAgICAgIGZhc3RGcmVlKG1fY29tcHJlc3NlZFBDcyk7CisgICAgaWYgKG1f
Y29tcHJlc3NlZENvZGVPcmlnaW5zKQorICAgICAgICBmYXN0RnJlZShtX2NvbXByZXNzZWRDb2Rl
T3JpZ2lucyk7Cit9CisKK2RvdWJsZSBQQ1RvQ29kZU9yaWdpbk1hcDo6bWVtb3J5U2l6ZSgpCit7
CisgICAgZG91YmxlIHNpemUgPSAwOworICAgIHNpemUgKz0gbV9jb21wcmVzc2VkUENCdWZmZXJT
aXplOworICAgIHNpemUgKz0gbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplOworICAgIHJldHVy
biBzaXplOworfQorCitPcHRpb25hbDxDb2RlT3JpZ2luPiBQQ1RvQ29kZU9yaWdpbk1hcDo6Zmlu
ZFBDKHZvaWQqIHBjKSBjb25zdAoreworICAgIHVpbnRwdHJfdCBwY0FzSW50ID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4ocGMpOworICAgIGlmICghKG1fcGNSYW5nZVN0YXJ0IDw9IHBjQXNJbnQg
JiYgcGNBc0ludCA8PSBtX3BjUmFuZ2VFbmQpKQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKwor
ICAgIHVpbnRwdHJfdCBjdXJyZW50UEMgPSAwOworICAgIENvZGVPcmlnaW4gY3VycmVudENvZGVP
cmlnaW4oMCwgbnVsbHB0cik7CisKKyAgICBEZWx0YUNvbXByZXNzZWlvblJlYWRlciBwY1JlYWRl
cihtX2NvbXByZXNzZWRQQ3MsIG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZSk7CisgICAgRGVsdGFD
b21wcmVzc2Vpb25SZWFkZXIgY29kZU9yaWdpblJlYWRlcihtX2NvbXByZXNzZWRDb2RlT3JpZ2lu
cywgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICB1aW50cHRyX3QgcHJldmlvdXNQQyA9IGN1cnJlbnRQQzsKKyAgICAgICAgeworICAgICAg
ICAgICAgdWludDhfdCB2YWx1ZSA9IHBjUmVhZGVyLnJlYWQ8dWludDhfdD4oKTsKKyAgICAgICAg
ICAgIHVpbnRwdHJfdCBkZWx0YTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBzZW50aW5lbFBD
RGVsdGEpCisgICAgICAgICAgICAgICAgZGVsdGEgPSBwY1JlYWRlci5yZWFkPHVpbnRwdHJfdD4o
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZWx0YSA9IHZhbHVlOworICAg
ICAgICAgICAgY3VycmVudFBDICs9IGRlbHRhOworICAgICAgICB9CisKKyAgICAgICAgQ29kZU9y
aWdpbiBwcmV2aW91c09yaWdpbiA9IGN1cnJlbnRDb2RlT3JpZ2luOworICAgICAgICB7CisgICAg
ICAgICAgICBpbnQ4X3QgdmFsdWUgPSBjb2RlT3JpZ2luUmVhZGVyLnJlYWQ8aW50OF90PigpOwor
ICAgICAgICAgICAgaW50cHRyX3QgZGVsdGE7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gc2Vu
dGluZWxCeXRlY29kZURlbHRhKQorICAgICAgICAgICAgICAgIGRlbHRhID0gY29kZU9yaWdpblJl
YWRlci5yZWFkPGludHB0cl90PigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKKworICAgICAgICAgICAgY3Vy
cmVudENvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4oY3VycmVudENvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkgKyBkZWx0
YSk7CisKKyAgICAgICAgICAgIGludDhfdCBoYXNJbmxpbmVGcmFtZSA9IGNvZGVPcmlnaW5SZWFk
ZXIucmVhZDxpbnQ4X3Q+KCk7CisgICAgICAgICAgICBBU1NFUlQoaGFzSW5saW5lRnJhbWUgPT0g
MCB8fCBoYXNJbmxpbmVGcmFtZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChoYXNJbmxpbmVGcmFt
ZSkKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPSBi
aXR3aXNlX2Nhc3Q8SW5saW5lQ2FsbEZyYW1lKj4oY29kZU9yaWdpblJlYWRlci5yZWFkPHVpbnRw
dHJfdD4oKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3VycmVudENvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChwcmV2aW91c1BDKSB7CisgICAgICAgICAgICB1aW50cHRyX3Qgc3RhcnRPZlJhbmdlID0gcHJl
dmlvdXNQQzsKKyAgICAgICAgICAgIC8vIFdlIHN1YnRyYWN0IDEgYmVjYXVzZSB3ZSBnZW5lcmF0
ZSBlbmQgcG9pbnRzIGluY2x1c2l2ZWx5IGluIHRoaXMgdGFibGUsIGV2ZW4gdGhvdWdoIHdlIGFy
ZSBpbnRlcmVzdGVkIGluIHJhbmdlcyBvZiB0aGUgZm9ybTogW3ByZXZpb3VzUEMsIGN1cnJlbnRQ
QykKKyAgICAgICAgICAgIHVpbnRwdHJfdCBlbmRPZlJhbmdlID0gY3VycmVudFBDIC0gMTsKKyAg
ICAgICAgICAgIGlmIChzdGFydE9mUmFuZ2UgPD0gcGNBc0ludCAmJiBwY0FzSW50IDw9IGVuZE9m
UmFuZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+KHByZXZp
b3VzT3JpZ2luKTsgLy8gV2UgcmV0dXJuIHByZXZpb3VzT3JpZ2luIGhlcmUgYmVjYXVzZSBDb2Rl
T3JpZ2luJ3MgYXJlIG1hcHBlZCB0byB0aGUgc3RhcnRWYWx1ZSBvZiB0aGUgcmFuZ2UuCisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBOdWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29k
ZU9yaWdpbk1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUENUb0NvZGVPcmln
aW5NYXBfaAorI2RlZmluZSBQQ1RvQ29kZU9yaWdpbk1hcF9oCisKKyNpZiBFTkFCTEUoSklUKQor
CisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvQmFn
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJl
ZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBG
VExfVVNFU19CMworbmFtZXNwYWNlIEIzIHsKK2NsYXNzIFBDVG9PcmlnaW5NYXA7Cit9CisjZW5k
aWYKKworY2xhc3MgTGlua0J1ZmZlcjsKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsK
KworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOworICAgIGZyaWVuZCBjbGFzcyBQQ1RvQ29k
ZU9yaWdpbk1hcDsKKworcHVibGljOgorICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihWTSYp
OworICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIm
JiBvdGhlcik7CisKKyNpZiBGVExfVVNFU19CMworICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cihWTSYsIEIzOjpQQ1RvT3JpZ2luTWFwJiYpOworI2VuZGlmCisKKyAgICB2b2lkIGFwcGVuZEl0
ZW0oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsLCBjb25zdCBDb2RlT3JpZ2luJik7CisgICAgc3RhdGlj
IENvZGVPcmlnaW4gZGVmYXVsdENvZGVPcmlnaW4oKSB7IHJldHVybiBDb2RlT3JpZ2luKDAsIG51
bGxwdHIpOyB9CisKKyAgICBib29sIGRpZEJ1aWxkTWFwcGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
c2hvdWxkQnVpbGRNYXBwaW5nOyB9CisKK3ByaXZhdGU6CisKKyAgICBzdHJ1Y3QgQ29kZVJhbmdl
IHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHN0YXJ0OworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgZW5kOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAg
fTsKKworICAgIFZNJiBtX3ZtOworICAgIFZlY3RvcjxDb2RlUmFuZ2U+IG1fY29kZVJhbmdlczsK
KyAgICBib29sIG1fc2hvdWxkQnVpbGRNYXBwaW5nOworfTsKKworY2xhc3MgUENUb0NvZGVPcmln
aW5NYXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBDVG9Db2RlT3JpZ2luTWFwKTsKK3B1
YmxpYzoKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcChQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImJiwg
TGlua0J1ZmZlciYpOworICAgIH5QQ1RvQ29kZU9yaWdpbk1hcCgpOworCisgICAgT3B0aW9uYWw8
Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKSBjb25zdDsKKworICAgIGRvdWJsZSBtZW1vcnlT
aXplKCk7CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6ZTsK
KyAgICBzaXplX3QgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplOworICAgIHVpbnQ4X3QqIG1f
Y29tcHJlc3NlZFBDczsKKyAgICB1aW50OF90KiBtX2NvbXByZXNzZWRDb2RlT3JpZ2luczsKKyAg
ICB1aW50cHRyX3QgbV9wY1JhbmdlU3RhcnQ7CisgICAgdWludHB0cl90IG1fcGNSYW5nZUVuZDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2Vu
ZGlmIC8vIFBDVG9Db2RlT3JpZ2luTWFwX2ggCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRQQ1Jhbmdlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFBDUmFuZ2VzLmgJKHJldmlzaW9uIDE5NTgzMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFBDUmFuZ2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYg
KzQ1LDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0xMSW50UEModm9pZCogcGMpCiAgICAgcmV0
dXJuIGxsaW50U3RhcnQgPD0gcGNBc0ludCAmJiBwY0FzSW50IDw9IGxsaW50RW5kOwogfQogCisj
aWYgRU5BQkxFKEpJVCkKK3N0YXRpYyBjb25zdCBHUFJSZWcgTExJbnRQQyA9IEdQUkluZm86OnJl
Z1Q0OworI2VuZGlmCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludAogCiAjZW5kaWYgLy8g
TExJbnRQQ1Jhbmdlc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxOTU4MzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTI1OCw3ICsyNTgsNyBAQCBpZiBKU1ZBTFVFNjQKICAgICAjIC0gVGhlIFBDIGJhc2Ug
KG9yIFBCIGZvciBzaG9ydCkgbXVzdCBiZSBzdG9yZWQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3Rl
ci4KICAgICAjIC0gQyBjYWxscyBhcmUgc3RpbGwgZ2l2ZW4gdGhlIEluc3RydWN0aW9uKiByYXRo
ZXIgdGhhbiB0aGUgUEMgaW5kZXguCiAgICAgIyAgIFRoaXMgcmVxdWlyZXMgYW4gYWRkIGJlZm9y
ZSB0aGUgY2FsbCwgYW5kIGEgc3ViIGFmdGVyLgotICAgIGNvbnN0IFBDID0gdDQKKyAgICBjb25z
dCBQQyA9IHQ0ICMgV2hlbiBjaGFuZ2luZyB0aGlzLCBtYWtlIHN1cmUgTExJbnRQQyBpcyB1cCB0
byBkYXRlIGluIExMSW50UENSYW5nZXMuaAogICAgIGlmIEFSTTY0CiAgICAgICAgIGNvbnN0IFBC
ID0gY3NyNwogICAgICAgICBjb25zdCB0YWdUeXBlTnVtYmVyID0gY3NyOApAQCAtMjkwLDcgKzI5
MCw3IEBAIGlmIEpTVkFMVUU2NAogICAgIGVuZAogCiBlbHNlCi0gICAgY29uc3QgUEMgPSB0NAor
ICAgIGNvbnN0IFBDID0gdDQgIyBXaGVuIGNoYW5naW5nIHRoaXMsIG1ha2Ugc3VyZSBMTEludFBD
IGlzIHVwIHRvIGRhdGUgaW4gTExJbnRQQ1Jhbmdlcy5oCiAgICAgbWFjcm8gbG9hZGlzRnJvbUlu
c3RydWN0aW9uKG9mZnNldCwgZGVzdCkKICAgICAgICAgbG9hZGlzIG9mZnNldCAqIDRbUENdLCBk
ZXN0CiAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CShyZXZpc2lvbiAxOTU4MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw2ICszMjMsNyBAQCB0eXBlZGVmIGNvbnN0IGNo
YXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIHVzZVR5cGVQcm9maWxlciwgZmFsc2UsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUNvbnRyb2xGbG93UHJvZmlsZXIsIGZhbHNlLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCB1c2VTYW1wbGluZ1Byb2ZpbGVyLCBmYWxzZSwgbnVsbHB0cikg
XAorICAgIHYoYm9vbCwgYWx3YXlzR2VuZXJhdGVQQ1RvQ29kZU9yaWdpbk1hcCwgZmFsc2UsICJU
aGlzIHdpbGwgbWFrZSBzdXJlIHdlIGFsd2F5cyBnZW5lcmF0ZSBhIFBDVG9Db2RlT3JpZ2luTWFw
IGZvciBKSVRlZCBjb2RlLiIpIFwKICAgICBcCiAgICAgdihib29sLCB2ZXJpZnlIZWFwLCBmYWxz
ZSwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZv
clZlcmlmaWNhdGlvbiwgMywgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDE5NTgzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiTExJbnRQQ1Jhbmdlcy5o
IgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIK
KyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgi
CiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQ5
LDcgKzUwLDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgZG91YmxlIHNOdW1Ub3RhbFN0
YWNrVHJhY2VzID0gMDsKLXN0YXRpYyBkb3VibGUgc051bVVudmVyaWZpZWRTdGFja1RyYWNlcyA9
IDA7CiBzdGF0aWMgZG91YmxlIHNOdW1Ub3RhbFdhbGtzID0gMDsKIHN0YXRpYyBkb3VibGUgc051
bUZhaWxlZFdhbGtzID0gMDsKIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzTnVtV2Fsa1JlcG9ydGlu
Z0ZyZXF1ZW5jeSA9IDUwOwpAQCAtNTgsNiArNTgsOCBAQCBzdGF0aWMgY29uc3QgYm9vbCBzUmVw
b3J0U3RhdHNPbmx5V2hlblRoCiBzdGF0aWMgY29uc3QgYm9vbCBzUmVwb3J0U3RhdHMgPSBmYWxz
ZTsKIAogdXNpbmcgRnJhbWVUeXBlID0gU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOwordXNp
bmcgVW5wcm9jZXNzZWRGcmFtZVR5cGUgPSBTYW1wbGluZ1Byb2ZpbGVyOjpVbnByb2Nlc3NlZEZy
YW1lVHlwZTsKK3VzaW5nIFVucHJvY2Vzc2VkU3RhY2tGcmFtZSA9IFNhbXBsaW5nUHJvZmlsZXI6
OlVucHJvY2Vzc2VkU3RhY2tGcmFtZTsKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCByZXBv
cnRTdGF0cygpCiB7CkBAIC02NSw4ICs2Nyw2IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQg
cmVwb3J0U3RhdHMoKQogICAgICAgICBpZiAoIXNSZXBvcnRTdGF0c09ubHlXaGVuVGhleXJlQWJv
dmVUaHJlc2hvbGQgfHwgKHNOdW1GYWlsZWRXYWxrcyAvIHNOdW1Ub3RhbFdhbGtzID4gc1dhbGtF
cnJvclBlcmNlbnRhZ2UpKSB7CiAgICAgICAgICAgICBkYXRhTG9nRigiTnVtIHRvdGFsIHdhbGtz
OiAlbGx1LiBGYWlsZWQgd2Fsa3MgcGVyY2VudDogJWxmXG4iLAogICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzTnVtVG90YWxXYWxrcyksIHNOdW1GYWlsZWRXYWxrcyAvIHNO
dW1Ub3RhbFdhbGtzKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJUb3RhbCBzdGFjayB0cmFjZXM6
ICVsbHUuIE5lZWRzIHZlcmlmaWNhdGlvbiBwZXJjZW50OiAlbGZcbiIsCi0gICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNOdW1Ub3RhbFN0YWNrVHJhY2VzKSwgc051bVVudmVy
aWZpZWRTdGFja1RyYWNlcyAvIHNOdW1Ub3RhbFN0YWNrVHJhY2VzKTsKICAgICAgICAgfQogICAg
IH0KIH0KQEAgLTgyLDMzICs4MiwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHNp
emVfdCB3YWxrKFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lPiYgc3RhY2tUcmFj
ZSwgYm9vbCYgZGlkUnVuT3V0T2ZTcGFjZSwgYm9vbCYgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0
aW9uKQorICAgIHNpemVfdCB3YWxrKFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+JiBzdGFj
a1RyYWNlLCBib29sJiBkaWRSdW5PdXRPZlNwYWNlKQogICAgIHsKLSAgICAgICAgc3RhY2t0cmFj
ZU5lZWRzVmVyaWZpY2F0aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChzUmVwb3J0U3RhdHMpCiAg
ICAgICAgICAgICBzTnVtVG90YWxXYWxrcysrOwogICAgICAgICByZXNldEF0TWFjaGluZUZyYW1l
KCk7CiAgICAgICAgIHNpemVfdCBtYXhTdGFja1RyYWNlU2l6ZSA9IHN0YWNrVHJhY2Uuc2l6ZSgp
OwogICAgICAgICB3aGlsZSAoIWlzQXRUb3AoKSAmJiAhbV9iYWlsaW5nT3V0ICYmIG1fZGVwdGgg
PCBtYXhTdGFja1RyYWNlU2l6ZSkgewotICAgICAgICAgICAgd2hpbGUgKG1faW5saW5lQ2FsbEZy
YW1lICYmIG1fZGVwdGggPCBtYXhTdGFja1RyYWNlU2l6ZSkgewotICAgICAgICAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
LmdldCgpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRDb2RlQmxvY2so
Y29kZUJsb2NrKSk7Ci0gICAgICAgICAgICAgICAgc3RhY2tUcmFjZVttX2RlcHRoXSA9IFNhbXBs
aW5nUHJvZmlsZXI6OlN0YWNrRnJhbWUoU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpWZXJp
ZmllZEV4ZWN1dGFibGUsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwotICAgICAgICAg
ICAgICAgIG1fZGVwdGgrKzsKLSAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZSA9IG1f
aW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAobV9kZXB0aCA+PSBtYXhTdGFja1RyYWNlU2l6ZSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZENvZGVC
bG9jayhjb2RlQmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1
dGFibGUgPSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwotICAgICAgICAgICAgICAgIHN0
YWNrVHJhY2VbbV9kZXB0aF0gPSBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lKEZyYW1lVHlw
ZTo6VmVyaWZpZWRFeGVjdXRhYmxlLGV4ZWN1dGFibGUpOworICAgICAgICAgICAgaWYgKENvZGVC
bG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzVmFsaWRDb2RlQmxvY2soY29kZUJsb2NrKSk7CisgICAgICAgICAgICAg
ICAgc3RhY2tUcmFjZVttX2RlcHRoXSA9IFVucHJvY2Vzc2VkU3RhY2tGcmFtZShjb2RlQmxvY2ss
IG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24gPSB0cnVlOworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jayA9PSBudWxscHRyKTsKICAgICAgICAg
ICAgICAgICBKU1ZhbHVlIHVuc2FmZUNhbGxlZSA9IG1fY2FsbEZyYW1lLT51bnNhZmVDYWxsZWUo
KTsKLSAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gU2FtcGxpbmdQcm9maWxl
cjo6U3RhY2tGcmFtZShGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUsIEpTVmFsdWU6OmVuY29k
ZSh1bnNhZmVDYWxsZWUpKTsKKyAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0g
VW5wcm9jZXNzZWRTdGFja0ZyYW1lKEpTVmFsdWU6OmVuY29kZSh1bnNhZmVDYWxsZWUpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG1fZGVwdGgrKzsKICAgICAgICAgICAgIGFkdmFuY2VU
b1BhcmVudEZyYW1lKCk7CkBAIC0xMzgsOCArMTI1LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
cmVzZXRBdE1hY2hpbmVGcmFtZSgpCiAgICAgewotICAgICAgICBtX2lubGluZUNhbGxGcmFtZSA9
IG51bGxwdHI7Ci0KICAgICAgICAgaWYgKGlzQXRUb3AoKSkKICAgICAgICAgICAgIHJldHVybjsK
IApAQCAtMTUxLDkgKzEzNiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICAvLyBJZiB0aGUgZnJhbWUgZG9l
c24ndCBoYXZlIGEgY29kZSBibG9jaywgdGhlbiBpdCdzIG5vdCBhIAotICAgICAgICAvLyBERkcv
RlRMIGZyYW1lIHdoaWNoIG1lYW5zIHdlJ3JlIG5vdCBhbiBpbmxpbmVkIGZyYW1lLgogICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAg
ICAgaWYgKCFjb2RlQmxvY2spCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjQsMjUgKzE0Niw2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc051bUZhaWxlZFdhbGtzKys7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgY29kZSBibG9jayBk
b2VzIG5vdCBoYXZlIGFueSBjb2RlIG9yaWdpbnMsIHRoZW4gdGhlcmUncyBubwotICAgICAgICAv
LyBpbmxpbmluZy4gSGVuY2UsIHdlJ3JlIG5vdCBhdCBhbiBpbmxpbmVkIGZyYW1lLgotICAgICAg
ICBpZiAoIWNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBDYWxsU2l0ZUluZGV4IGluZGV4ID0gbV9jYWxsRnJhbWUtPmNhbGxTaXRlSW5k
ZXgoKTsKLSAgICAgICAgaWYgKCFjb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRToKLSAgICAgICAgICAgIC8vIEZvciB0aGUgbW9zdCBwYXJ0
LCB3ZSBvbmx5IGZhaWwgaGVyZSB3aGVuIHdlJ3JlIGxvb2tpbmcKLSAgICAgICAgICAgIC8vIGF0
IHRoZSB0b3AgbW9zdCBjYWxsIGZyYW1lLiBBbGwgb3RoZXIgcGFyZW50IGNhbGwgZnJhbWVzCi0g
ICAgICAgICAgICAvLyBzaG91bGQgaGF2ZSBzZXQgdGhlIENhbGxTaXRlSW5kZXggd2hlbiBtYWtp
bmcgYSBjYWxsLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCByZXNv
cnQgdG8gZ2V0dGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBQQz0+Q29kZU9yaWdpbiBtYXBwaW5n
Ci0gICAgICAgICAgICAvLyBvbmNlIHdlIGltcGxlbWVudCBpdDogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjYyOQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gY29kZUJsb2NrLT5jb2RlT3JpZ2luKGlu
ZGV4KS5pbmxpbmVDYWxsRnJhbWU7Ci0jZW5kaWYgLy8gIUVOQUJMRShERkdfSklUKQogICAgIH0K
IAogICAgIGJvb2wgaXNWYWxpZEZyYW1lUG9pbnRlcihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0yMTMs
MTQgKzE3NiwxMiBAQCBwcml2YXRlOgogICAgIGNvbnN0IExvY2tIb2xkZXImIG1fY29kZUJsb2Nr
U2V0TG9ja2VyOwogICAgIGNvbnN0IExvY2tIb2xkZXImIG1fbWFjaGluZVRocmVhZHNMb2NrZXI7
CiAgICAgYm9vbCBtX2JhaWxpbmdPdXQgeyBmYWxzZSB9OwotICAgIElubGluZUNhbGxGcmFtZSog
bV9pbmxpbmVDYWxsRnJhbWU7CiAgICAgc2l6ZV90IG1fZGVwdGggeyAwIH07CiB9OwogCiBTYW1w
bGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2bSwgUmVmUHRyPFN0b3B3YXRjaD4m
JiBzdG9wd2F0Y2gpCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9zdG9wd2F0Y2goV1RGTW92ZShz
dG9wd2F0Y2gpKQotICAgICwgbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeSgwKQogICAg
ICwgbV90aW1pbmdJbnRlcnZhbChzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDEwMDApKQogICAg
ICwgbV90b3RhbFRpbWUoMCkKICAgICAsIG1fdGltZXJRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgi
anNjLnNhbXBsaW5nLXByb2ZpbGVyLnF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwsIFdv
cmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQpAQCAtMjU2LDIzICsyMTcsMjcgQEAgU2Ft
cGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihWTSYgdgogICAgICAgICAgICAgICAgIC8v
IFdoaWxlIHRoZSBKU0MgdGhyZWFkIGlzIHN1c3BlbmRlZCwgd2UgY2FuJ3QgZG8gdGhpbmdzIGxp
a2UgbWFsbG9jIGJlY2F1c2UgdGhlIEpTQyB0aHJlYWQKICAgICAgICAgICAgICAgICAvLyBtYXkg
YmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCiAgICAgICAgICAgICAgICAgRXhlY1N0YXRlKiBj
YWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgdm9pZCogcGM7CisgICAgICAgICAgICAgICAgdm9p
ZCogbWFjaGluZVBDOworICAgICAgICAgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50ID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgdm9pZCogbGxpbnRQQzsKICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVycyByZWdp
c3RlcnM7CiAgICAgICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5nZXRSZWdp
c3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gc3RhdGlj
X2Nhc3Q8RXhlY1N0YXRlKj4ocmVnaXN0ZXJzLmZyYW1lUG9pbnRlcigpKTsKLSAgICAgICAgICAg
ICAgICAgICAgcGMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1hY2hpbmVQQyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5mcmVlUmVnaXN0ZXJzKHJlZ2lzdGVy
cyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhh
dmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgogICAgICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NjEK
LSAgICAgICAgICAgICAgICBpZiAobV92bS5leGVjdXRhYmxlQWxsb2NhdG9yLmlzVmFsaWRFeGVj
dXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIsIHBjKSkgeworICAgICAgICAg
ICAgICAgIGlmIChtX3ZtLmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZEV4ZWN1dGFibGVNZW1v
cnkoZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlciwgbWFjaGluZVBDKSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAobV92bS5pc0V4ZWN1dGluZ0luUmVnRXhwSklUKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2UncmUgZXhlY3V0aW5nIGEgcmVnZXhwLiBMZXRzIGdhdGhl
ciBtb3JlIGludGVyc3RpbmcgZGF0YS4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3MjkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxGcmFtZSA9IG1fdm0udG9wQ2FsbEZyYW1lOyAvLyBXZSBuZWVkIHRvIGRv
IHRoaXMgb3IgZWxzZSB3ZSdkIGZhaWwgb3VyIGJhY2t0cmFjZSB2YWxpZGF0aW9uIGIvYyB0aGlz
IGlzbid0IGEgSlMgZnJhbWUuCiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKExMSW50Ojppc0xMSW50UEMocGMpKSB7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChMTEludDo6aXNMTEludFBDKG1hY2hpbmVQQykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdG9wRnJhbWVJc0xMSW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUg
b2theSB0byB0YWtlIGEgbm9ybWFsIHN0YWNrIHRyYWNlIHdoZW4gdGhlIFBDCiAgICAgICAgICAg
ICAgICAgICAgIC8vIGlzIGluIExMSW50IGNvZGUuCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
QEAgLTI4NCwxMCArMjQ5LDkgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihW
TSYgdgogICAgICAgICAgICAgICAgIHNpemVfdCB3YWxrU2l6ZTsKICAgICAgICAgICAgICAgICBi
b29sIHdhc1ZhbGlkV2FsazsKICAgICAgICAgICAgICAgICBib29sIGRpZFJ1bk91dE9mVmVjdG9y
U3BhY2U7Ci0gICAgICAgICAgICAgICAgYm9vbCBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb247
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBGcmFtZVdhbGtlciB3YWxr
ZXIoY2FsbEZyYW1lLCBtX3ZtLCBjb2RlQmxvY2tTZXRMb2NrZXIsIG1hY2hpbmVUaHJlYWRzTG9j
a2VyKTsKLSAgICAgICAgICAgICAgICAgICAgd2Fsa1NpemUgPSB3YWxrZXIud2FsayhtX2N1cnJl
bnRGcmFtZXMsIGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UsIHN0YWNrdHJhY2VOZWVkc1ZlcmlmaWNh
dGlvbik7CisgICAgICAgICAgICAgICAgICAgIHdhbGtTaXplID0gd2Fsa2VyLndhbGsobV9jdXJy
ZW50RnJhbWVzLCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlKTsKICAgICAgICAgICAgICAgICAgICAg
d2FzVmFsaWRXYWxrID0gd2Fsa2VyLndhc1ZhbGlkV2FsaygpOwogICAgICAgICAgICAgICAgIH0K
IApAQCAtMjk4LDIxICsyNjIsMTYgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxl
cihWTSYgdgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIGludGVyZXN0aW5nIHRv
IHRha2UgZGF0YSBhYm91dCB0aGUgcHJvZ3JhbSdzIHN0YXRlIHdoZW4KICAgICAgICAgICAgICAg
ICAvLyB3ZSBmYWlsIHRvIHRha2UgYSBzdGFjayB0cmFjZTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1Mjc1OAogICAgICAgICAgICAgICAgIGlmICh3YXNWYWxpZFdh
bGsgJiYgd2Fsa1NpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNSZXBvcnRTdGF0cykg
eworICAgICAgICAgICAgICAgICAgICBpZiAoc1JlcG9ydFN0YXRzKQogICAgICAgICAgICAgICAg
ICAgICAgICAgc051bVRvdGFsU3RhY2tUcmFjZXMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc051bVVudmVyaWZpZWRTdGFja1RyYWNlcysrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOworICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFja0ZyYW1lPiBzdGFja1RyYWNl
OwogICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
d2Fsa1NpemUpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdh
bGtTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrRnJhbWUgZnJhbWUg
PSBtX2N1cnJlbnRGcmFtZXNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNl
LnVuY2hlY2tlZEFwcGVuZChmcmFtZSk7IAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZy
YW1lLmZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0YWJsZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3NlZW5FeGVjdXRhYmxlcy5hZGQoZnJhbWUudS52ZXJpZmll
ZEV4ZWN1dGFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgVW5wcm9jZXNzZWRTdGFja0Zy
YW1lIGZyYW1lID0gbV9jdXJyZW50RnJhbWVzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhY2tUcmFjZS51bmNoZWNrZWRBcHBlbmQoZnJhbWUpOwogICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgbV9zdGFja1RyYWNlcy5hcHBlbmQoU3RhY2tUcmFjZXsg
c3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uLCBub3dUaW1lLCBXVEZNb3ZlKHN0YWNrVHJhY2Up
IH0pOworICAgICAgICAgICAgICAgICAgICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMuYXBwZW5k
KFVucHJvY2Vzc2VkU3RhY2tUcmFjZSB7IG5vd1RpbWUsIG1hY2hpbmVQQywgdG9wRnJhbWVJc0xM
SW50LCBsbGludFBDLCBXVEZNb3ZlKHN0YWNrVHJhY2UpIH0pOwogCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChkaWRSdW5PdXRPZlZlY3RvclNwYWNlKQogICAgICAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50RnJhbWVzLmdyb3cobV9jdXJyZW50RnJhbWVzLnNpemUoKSAqIDEuMjUpOwpAQCAt
MzMyLDYgKzI5MSwzMCBAQCBTYW1wbGluZ1Byb2ZpbGVyOjp+U2FtcGxpbmdQcm9maWxlcigpCiB7
CiB9CiAKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHRyeUdldEJ5dGVjb2RlSW5kZXgo
dW5zaWduZWQgbGxpbnRQQywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGJvb2wmIGlzVmFsaWQpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSk7CisKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBsbGludFBDOwor
ICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpIHsK
KyAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAgICAgIHJldHVybiBieXRlY29kZUluZGV4Owor
ICAgIH0KKyAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvbio+KGxsaW50
UEMpOworICAgIGlmIChpbnN0cnVjdGlvbiA+PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJl
Z2luKCkgJiYgaW5zdHJ1Y3Rpb24gPCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkg
KyBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSkgeworICAgICAgICBpc1ZhbGlkID0gdHJ1
ZTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IGluc3RydWN0aW9uIC0gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgICAgICByZXR1cm4gYnl0ZWNvZGVJbmRl
eDsKKyAgICB9CisgICAgaXNWYWxpZCA9IGZhbHNlOworICAgIHJldHVybiAwOworI2VuZGlmCit9
CisKIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygp
CiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBjYWxsZWQgZnJvbSB0aGUgSlND
IGV4ZWN1dGlvbiB0aHJlYWQuCkBAIC0zNDAsMjIgKzMyMywzMCBAQCB2b2lkIFNhbXBsaW5nUHJv
ZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgVGlueUJsb29tRmlsdGVyIGZpbHRlciA9IG1f
dm0uaGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLmZpbHRlcigpOwogICAgIE1hcmtlZEJsb2Nr
U2V0JiBtYXJrZWRCbG9ja1NldCA9IG1fdm0uaGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpOwog
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeTsg
aSA8IG1fc3RhY2tUcmFjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgU3RhY2tUcmFjZSYgc3Rh
Y2tUcmFjZSA9IG1fc3RhY2tUcmFjZXNbaV07IAotICAgICAgICBpZiAoIXN0YWNrVHJhY2UubmVl
ZHNWZXJpZmljYXRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhY2tUcmFj
ZS5uZWVkc1ZlcmlmaWNhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoU3RhY2tGcmFtZSYg
c3RhY2tGcmFtZSA6IHN0YWNrVHJhY2UuZnJhbWVzKSB7Ci0gICAgICAgICAgICBpZiAoc3RhY2tG
cmFtZS5mcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKSB7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tGcmFtZS5mcmFtZVR5cGUgPT0gRnJhbWVUeXBl
OjpWZXJpZmllZEV4ZWN1dGFibGUpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGZv
ciAoVW5wcm9jZXNzZWRTdGFja1RyYWNlJiB1bnByb2Nlc3NlZFN0YWNrVHJhY2UgOiBtX3VucHJv
Y2Vzc2VkU3RhY2tUcmFjZXMpIHsKKyAgICAgICAgbV9zdGFja1RyYWNlcy5hcHBlbmQoU3RhY2tU
cmFjZSgpKTsKKyAgICAgICAgU3RhY2tUcmFjZSYgc3RhY2tUcmFjZSA9IG1fc3RhY2tUcmFjZXMu
bGFzdCgpOworICAgICAgICBzdGFja1RyYWNlLnRpbWVzdGFtcCA9IHVucHJvY2Vzc2VkU3RhY2tU
cmFjZS50aW1lc3RhbXA7CisKKyAgICAgICAgYXV0byBhcHBlbmRDb2RlQmxvY2sgPSBbJl0gKENv
ZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSB7CisgICAgICAgICAg
ICBzdGFja1RyYWNlLmZyYW1lcy5hcHBlbmQoU3RhY2tGcmFtZShjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpKSk7CisKKyAgICAgICAgICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgZGl2b3Q7CisgICAg
ICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBlbmRPZmZz
ZXQ7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29k
ZU9mZnNldChieXRlY29kZUluZGV4LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZS5mcmFtZXMubGFzdCgpLmxpbmVOdW1iZXIsIHN0
YWNrVHJhY2UuZnJhbWVzLmxhc3QoKS5jb2x1bW5OdW1iZXIpOwogICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9zZWVuRXhlY3V0YWJsZXMuYWRkKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCkpOworICAgICAgICB9OwogCi0gICAgICAgICAgICBKU1ZhbHVlIGNhbGxlZSA9IEpTVmFsdWU6
OmRlY29kZShzdGFja0ZyYW1lLnUudW52ZXJpZmllZENhbGxlZSk7CisgICAgICAgIGF1dG8gYXBw
ZW5kVW52ZXJpZmllZENhbGxlZSA9IFsmXSAoSlNWYWx1ZSBjYWxsZWUpIHsKKyAgICAgICAgICAg
IHN0YWNrVHJhY2UuZnJhbWVzLmFwcGVuZChTdGFja0ZyYW1lKCkpOworICAgICAgICAgICAgU3Rh
Y2tGcmFtZSYgc3RhY2tGcmFtZSA9IHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKTsKICAgICAgICAg
ICAgIGlmICghSGVhcDo6aXNWYWx1ZUdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGNh
bGxlZSkpIHsKICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlw
ZTo6VW5rbm93bjsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEpTQ2VsbCogY2FsbGVlQ2VsbCA9
IGNhbGxlZS5hc0NlbGwoKTsKQEAgLTM3MiwyMiArMzYzLDg4IEBAIHZvaWQgU2FtcGxpbmdQcm9m
aWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKIAogICAgICAgICAgICAgaWYgKGNhbGxlZUNlbGwtPnR5
cGUoKSAhPSBKU0Z1bmN0aW9uVHlwZSkgewogICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJh
bWVUeXBlID0gZnJhbWVUeXBlRnJvbUNhbGxEYXRhKCk7Ci0gICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oY2Fs
bGVlQ2VsbCktPmV4ZWN1dGFibGUoKTsKICAgICAgICAgICAgIGlmICghZXhlY3V0YWJsZSkgewog
ICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gZnJhbWVUeXBlRnJvbUNhbGxE
YXRhKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChIZWFwOjppc1Bv
aW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVjdXRhYmxlKSk7Ci0gICAg
ICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRh
YmxlOwotICAgICAgICAgICAgc3RhY2tGcmFtZS51LnZlcmlmaWVkRXhlY3V0YWJsZSA9IGV4ZWN1
dGFibGU7CisgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6RXhl
Y3V0YWJsZTsKKyAgICAgICAgICAgIHN0YWNrRnJhbWUuZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7
CiAgICAgICAgICAgICBtX3NlZW5FeGVjdXRhYmxlcy5hZGQoZXhlY3V0YWJsZSk7CisgICAgICAg
IH07CisKKyAgICAgICAgLy8gUHJlcGVuZCB0aGUgdG9wLW1vc3QgaW5saW5lZCBmcmFtZSBpZiBu
ZWVkZWQuIEFsc28sIGdhdGhlcgorICAgICAgICAvLyBsb2NhdGlvbiBpbmZvcm1hdGlvbiBhYm91
dCB3aGVyZSB0aGUgdG9wIGZyYW1lIGlzIGV4ZWN1dGluZy4KKyAgICAgICAgc2l6ZV90IHN0YXJ0
SW5kZXggPSAwOworICAgICAgICBpZiAodW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lcy5zaXpl
KCkgJiYgdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXS5mcmFtZVR5cGUgPT0gVW5wcm9j
ZXNzZWRGcmFtZVR5cGU6OlZlcmlmaWVkQ29kZUJsb2NrKSB7CisgICAgICAgICAgICBDb2RlQmxv
Y2sqIHRvcENvZGVCbG9jayA9IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXNbMF0udS52ZXJp
ZmllZENvZGVCbG9jazsKKyAgICAgICAgICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrVHJhY2UudG9w
RnJhbWVJc0xMSW50KSB7CisgICAgICAgICAgICAgICAgLy8gV2UgcmV1c2UgTExJbnQgQ29kZUJs
b2NrcyBmb3IgdGhlIGJhc2VsaW5lIEpJVCwgc28gd2UgbmVlZCB0byBjaGVjayBmb3IgYm90aCBq
aXQgdHlwZXMuCisgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBhbHNvIGJlIGZhbHNlIGZv
ciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtub3duKSwgZXZlbiB0aG91Z2gKKyAgICAg
ICAgICAgICAgICAvLyBpdCdzIHN1cGVyIHVubGlrZWx5LiBPbmUgcmVhc29uIHRoYXQgdGhpcyBj
YW4gYmUgZmFsc2UgaXMgd2hlbiB3ZSB0aHJvdyBmcm9tIGEgREZHIGZyYW1lLAorICAgICAgICAg
ICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0IGEgVk1FbnRyeUZy
YW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKKyAgICAgICAgICAgICAgICAvLyBpbnNpZGUg
dGhlIExMSW50J3MgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBh
Z2FpbnN0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAo
dG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0
b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCkgeworICAgICAg
ICAgICAgICAgICAgICBib29sIGlzVmFsaWRQQzsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgYml0czsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgICAgICBiaXRzID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2Vk
U3RhY2tUcmFjZS5sbGludFBDKSk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBiaXRzID0g
Yml0d2lzZV9jYXN0PHVuc2lnbmVkPih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQyk7Cisj
ZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHRyeUdldEJ5dGVjb2Rl
SW5kZXgoYml0cywgdG9wQ29kZUJsb2NrLCBpc1ZhbGlkUEMpOworCisgICAgICAgICAgICAgICAg
ICAgIFVOVVNFRF9QQVJBTShpc1ZhbGlkUEMpOyAvLyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGgg
dGhpcyBpbmZvIGZvciB0aGUgd2ViIGluc3BlY3RvcjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MzQ1NQorCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVC
bG9jayh0b3BDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBz
dGFydEluZGV4ID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYg
KE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSB0b3BDb2RlQmxvY2stPmZpbmRQQyh1
bnByb2Nlc3NlZFN0YWNrVHJhY2UudG9wUEMpKSB7CisgICAgICAgICAgICAgICAgY29kZU9yaWdp
bi0+d2Fsa1VwSW5saW5lU3RhY2soWyZdIChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKSB7
CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSA/IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5n
ZXQoKSA6IHRvcENvZGVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gMTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwg
dW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAg
VW5wcm9jZXNzZWRTdGFja0ZyYW1lJiB1bnByb2Nlc3NlZFN0YWNrRnJhbWUgPSB1bnByb2Nlc3Nl
ZFN0YWNrVHJhY2UuZnJhbWVzW2ldOworICAgICAgICAgICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tG
cmFtZS5mcmFtZVR5cGUgPT0gVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlZlcmlmaWVkQ29kZUJsb2Nr
KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB1bnByb2Nlc3NlZFN0
YWNrRnJhbWUudS52ZXJpZmllZENvZGVCbG9jazsKKyAgICAgICAgICAgICAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXggPSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUuY2FsbFNpdGVJbmRleDsK
KworICAgICAgICAgICAgICAgIGF1dG8gYXBwZW5kQ29kZUJsb2NrTm9JbmxpbmluZyA9IFsmXSB7
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNWYWxpZFBDOworICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCB0cnlHZXRCeXRlY29kZUluZGV4KGNhbGxTaXRl
SW5kZXguYml0cygpLCBjb2RlQmxvY2ssIGlzVmFsaWRQQykpOworICAgICAgICAgICAgICAgIH07
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5o
YXNDb2RlT3JpZ2lucygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmNh
bkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVCbG9jay0+Y29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KS53YWxrVXBJbmxpbmVTdGFjayhb
Jl0gKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPyBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkgOiBjb2RlQmxv
Y2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBhcHBl
bmRDb2RlQmxvY2tOb0lubGluaW5nKCk7CisjZWxzZQorICAgICAgICAgICAgICAgIGFwcGVuZENv
ZGVCbG9ja05vSW5saW5pbmcoKTsKKyNlbmRpZgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQodW5wcm9jZXNzZWRTdGFja0ZyYW1lLmZyYW1lVHlwZSA9PSBVbnBy
b2Nlc3NlZEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CisgICAgICAgICAgICAgICAgYXBw
ZW5kVW52ZXJpZmllZENhbGxlZShKU1ZhbHVlOjpkZWNvZGUodW5wcm9jZXNzZWRTdGFja0ZyYW1l
LnUudW52ZXJpZmllZENhbGxlZSkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeSA9IG1fc3RhY2tUcmFjZXMuc2l6
ZSgpOworICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVhcigpOwogfQogCiB2b2lkIFNh
bXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKQEAgLTQ3OCwx
OCArNTM1LDEyIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6bm90aWNlVk1FbnRyeSgpCiAgICAg
ZGlzcGF0Y2hJZk5lY2Vzc2FyeShsb2NrZXIpOwogfQogCi12b2lkIFNhbXBsaW5nUHJvZmlsZXI6
OmNsZWFyRGF0YSgpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICBjbGVh
ckRhdGEobG9ja2VyKTsKLX0KLQogdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjbGVhckRhdGEoY29u
c3QgTG9ja0hvbGRlciYpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsKICAgICBt
X3N0YWNrVHJhY2VzLmNsZWFyKCk7CiAgICAgbV9zZWVuRXhlY3V0YWJsZXMuY2xlYXIoKTsKLSAg
ICBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5ID0gMDsKKyAgICBtX3VucHJvY2Vzc2Vk
U3RhY2tUcmFjZXMuY2xlYXIoKTsKIH0KIAogU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNr
RnJhbWU6OmRpc3BsYXlOYW1lKCkKQEAgLTQ5OCw5ICs1NDksNyBAQCBTdHJpbmcgU2FtcGxpbmdQ
cm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIih1
bmtub3duKSIpOwogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0KQogICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCIoaG9zdCkiKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmcmFt
ZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKIAotICAgIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1dGFibGU7CiAgICAgaWYgKGV4ZWN1dGFi
bGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVF
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPm5hbWUoKTsKIApAQCAtNTIxLDkgKzU3MCw3IEBAIFN0
cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXMKICAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgiKHVua25vd24pIik7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6
Okhvc3QpCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIihob3N0KSIpOwotICAgIFJFTEVB
U0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpOwogCi0g
ICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVkRXhlY3V0YWJsZTsKICAg
ICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+bmFtZSgpOwogCkBAIC01NDQs
MjUgKzU5MSwyMSBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzCiAg
ICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1pbnQgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFt
ZTo6c3RhcnRMaW5lKCkKK2ludCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpmdW5jdGlv
blN0YXJ0TGluZSgpCiB7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24g
fHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAgcmV0dXJuIC0xOwotICAg
IFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUp
OwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVkRXhlY3V0YWJs
ZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJu
IC0xOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSktPmZpcnN0TGluZSgpOwogfQogCi11bnNpZ25lZCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0Zy
YW1lOjpzdGFydENvbHVtbigpCit1bnNpZ25lZCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1l
OjpmdW5jdGlvblN0YXJ0Q29sdW1uKCkKIHsKICAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlw
ZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0KQogICAgICAgICByZXR1
cm4gLTE7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBlICE9IEZyYW1lVHlwZTo6VW52ZXJp
ZmllZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHUudmVyaWZp
ZWRFeGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAg
ICAgICByZXR1cm4gLTE7CiAKQEAgLTU3Myw5ICs2MTYsNyBAQCBpbnRwdHJfdCBTYW1wbGluZ1By
b2ZpbGVyOjpTdGFja0ZyYW1lOjpzCiB7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6
OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAgcmV0dXJu
IC0xOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZp
ZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVk
RXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAg
ICAgcmV0dXJuIC0xOwogCkBAIC01ODYsOSArNjI3LDcgQEAgU3RyaW5nIFNhbXBsaW5nUHJvZmls
ZXI6OlN0YWNrRnJhbWU6OnVybAogewogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpV
bmtub3duIHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6
OlVudmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1
LnZlcmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24o
KSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKQEAgLTU5OCw3ICs2MzcsNyBAQCBT
dHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6dXJsCiAgICAgcmV0dXJuIHVybDsK
IH0KIAotVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+JiBTYW1wbGluZ1Byb2Zp
bGVyOjpzdGFja1RyYWNlcyhjb25zdCBMb2NrSG9sZGVyJikKK1ZlY3RvcjxTYW1wbGluZ1Byb2Zp
bGVyOjpTdGFja1RyYWNlPiBTYW1wbGluZ1Byb2ZpbGVyOjpyZWxlYXNlU3RhY2tUcmFjZXMoY29u
c3QgTG9ja0hvbGRlciYgbG9ja2VyKQogewogICAgIEFTU0VSVChtX2xvY2suaXNMb2NrZWQoKSk7
CiAgICAgewpAQCAtNjA2LDcgKzY0NSw5IEBAIFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFj
a1RyYWNlPiYgU2EKICAgICAgICAgcHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOwogICAg
IH0KIAotICAgIHJldHVybiBtX3N0YWNrVHJhY2VzOworICAgIFZlY3RvcjxTdGFja1RyYWNlPiBy
ZXN1bHQoV1RGTW92ZShtX3N0YWNrVHJhY2VzKSk7CisgICAgY2xlYXJEYXRhKGxvY2tlcik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OnN0YWNrVHJh
Y2VzQXNKU09OKCkKQEAgLTY0Myw2ICs2ODQsOCBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6
c3RhY2tUcmFjZXNBc0pTCiAKICAgICBqc29uLmFwcGVuZExpdGVyYWwoIl0iKTsKIAorICAgIGNs
ZWFyRGF0YShsb2NrZXIpOworCiAgICAgcmV0dXJuIGpzb24udG9TdHJpbmcoKTsKIH0KIApAQCAt
NjU1LDExICs2OTgsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZSBmcmFtZVR5cGUp
CiB7CiAgICAgc3dpdGNoIChmcmFtZVR5cGUpIHsKLSAgICBjYXNlIFNhbXBsaW5nUHJvZmlsZXI6
OkZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlOgotICAgICAgICBvdXQucHJpbnQoIlZlcmlm
aWVkRXhlY3V0YWJsZSIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNhbXBsaW5nUHJvZmls
ZXI6OkZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZToKLSAgICAgICAgb3V0LnByaW50KCJVbnZl
cmlmaWVkQ2FsbGVlIik7CisgICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU6OkV4
ZWN1dGFibGU6CisgICAgICAgIG91dC5wcmludCgiRXhlY3V0YWJsZSIpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6SG9zdDoKICAgICAgICAg
b3V0LnByaW50KCJIb3N0Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCShyZXZpc2lvbiAxOTU4MzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDQ4ICs0NCw4OCBAQCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKIGNsYXNzIFNhbXBsaW5nUHJv
ZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGVudW0gY2xhc3MgRnJh
bWVUeXBlIHsgCi0gICAgICAgIFZlcmlmaWVkRXhlY3V0YWJsZSwgCisKKyAgICBlbnVtIGNsYXNz
IFVucHJvY2Vzc2VkRnJhbWVUeXBlIHsgCiAgICAgICAgIFVudmVyaWZpZWRDYWxsZWUsCi0gICAg
ICAgIEhvc3QsIAotICAgICAgICBVbmtub3duIAorICAgICAgICBWZXJpZmllZENvZGVCbG9jawog
ICAgIH07CiAKLSAgICBzdHJ1Y3QgU3RhY2tGcmFtZSB7Ci0gICAgICAgIFN0YWNrRnJhbWUoRnJh
bWVUeXBlIGZyYW1lVHlwZSwgRW5jb2RlZEpTVmFsdWUgY2FsbGVlKQotICAgICAgICAgICAgOiBm
cmFtZVR5cGUoZnJhbWVUeXBlKQorICAgIHN0cnVjdCBVbnByb2Nlc3NlZFN0YWNrRnJhbWUgewor
ICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoRW5jb2RlZEpTVmFsdWUgY2FsbGVlKQorICAg
ICAgICAgICAgOiBmcmFtZVR5cGUoVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxs
ZWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHUudW52ZXJpZmllZENhbGxlZSA9IGNhbGxlZTsK
ICAgICAgICAgfQotICAgICAgICBTdGFja0ZyYW1lKEZyYW1lVHlwZSBmcmFtZVR5cGUsIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlKQotICAgICAgICAgICAgOiBmcmFtZVR5cGUoZnJhbWVUeXBl
KQorICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICAgICAgICAgIDogZnJhbWVUeXBlKFVucHJv
Y2Vzc2VkRnJhbWVUeXBlOjpWZXJpZmllZENvZGVCbG9jaykKKyAgICAgICAgICAgICwgY2FsbFNp
dGVJbmRleChjYWxsU2l0ZUluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICB1LnZlcmlmaWVk
RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgICAgICAgICB1LnVudmVyaWZpZWRDYWxsZWUg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIHUudmVyaWZpZWRDb2Rl
QmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgICAgIH0KLSAgICAgICAgU3RhY2tGcmFtZSgpCi0gICAg
ICAgICAgICA6IGZyYW1lVHlwZShGcmFtZVR5cGU6OlVua25vd24pCisgICAgICAgIFVucHJvY2Vz
c2VkU3RhY2tGcmFtZSgpCisgICAgICAgICAgICA6IGZyYW1lVHlwZShVbnByb2Nlc3NlZEZyYW1l
VHlwZTo6VW52ZXJpZmllZENhbGxlZSkKICAgICAgICAgewotICAgICAgICAgICAgdS52ZXJpZmll
ZEV4ZWN1dGFibGUgPSBudWxscHRyOworICAgICAgICAgICAgdS51bnZlcmlmaWVkQ2FsbGVlID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBGcmFtZVR5
cGUgZnJhbWVUeXBlOworICAgICAgICBVbnByb2Nlc3NlZEZyYW1lVHlwZSBmcmFtZVR5cGU7CiAg
ICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIEVuY29kZWRKU1ZhbHVlIHVudmVyaWZpZWRDYWxs
ZWU7Ci0gICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogdmVyaWZpZWRFeGVjdXRhYmxlOworICAg
ICAgICAgICAgQ29kZUJsb2NrKiB2ZXJpZmllZENvZGVCbG9jazsKICAgICAgICAgfSB1OworICAg
ICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXg7CisgICAgfTsKKworICAgIGVudW0gY2xh
c3MgRnJhbWVUeXBlIHsgCisgICAgICAgIEV4ZWN1dGFibGUsCisgICAgICAgIEhvc3QsCisgICAg
ICAgIFVua25vd24gCisgICAgfTsKIAorICAgIHN0cnVjdCBTdGFja0ZyYW1lIHsKKyAgICAgICAg
U3RhY2tGcmFtZShFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKKyAgICAgICAgICAgIDogZnJh
bWVUeXBlKEZyYW1lVHlwZTo6RXhlY3V0YWJsZSkKKyAgICAgICAgICAgICwgZXhlY3V0YWJsZShl
eGVjdXRhYmxlKQorICAgICAgICB7IH0KKyAgICAgICAgU3RhY2tGcmFtZSgpCisgICAgICAgICAg
ICA6IGZyYW1lVHlwZShGcmFtZVR5cGU6OlVua25vd24pCisgICAgICAgICAgICAsIGV4ZWN1dGFi
bGUobnVsbHB0cikKKyAgICAgICAgeyB9CisKKyAgICAgICAgRnJhbWVUeXBlIGZyYW1lVHlwZTsK
KyAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGU7CisKKyAgICAgICAgLy8gVGhlc2Ug
YXR0ZW1wdCB0byBiZSBleHByZXNzaW9uLWxldmVsIGxpbmUgYW5kIGNvbHVtbiBudW1iZXIuCisg
ICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgfTsKKyAgICAgICAgdW5zaWduZWQgY29sdW1uTnVtYmVyIHsgc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKKyAgICAgICAgLy8gVGhlc2UgYXJlIGZ1bmN0
aW9uLWxldmVsIGRhdGEuCiAgICAgICAgIFN0cmluZyBkaXNwbGF5TmFtZSgpOwogICAgICAgICBT
dHJpbmcgZGlzcGxheU5hbWVGb3JKU09OVGVzdHMoKTsgLy8gVXNlZCBmb3IgSlNDIHN0cmVzcyB0
ZXN0cyBiZWNhdXNlIHRoZXkgd2FudCB0aGUgIihhbm9ueW1vdXMgZnVuY3Rpb24pIiBzdHJpbmcg
Zm9yIGFub255bW91cyBmdW5jdGlvbnMgYW5kIHRoZXkgd2FudCAiKGV2YWwpIiBmb3IgZXZhbCdk
IGNvZGUuCi0gICAgICAgIGludCBzdGFydExpbmUoKTsKLSAgICAgICAgdW5zaWduZWQgc3RhcnRD
b2x1bW4oKTsKKyAgICAgICAgaW50IGZ1bmN0aW9uU3RhcnRMaW5lKCk7CisgICAgICAgIHVuc2ln
bmVkIGZ1bmN0aW9uU3RhcnRDb2x1bW4oKTsKICAgICAgICAgaW50cHRyX3Qgc291cmNlSUQoKTsK
ICAgICAgICAgU3RyaW5nIHVybCgpOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgVW5wcm9jZXNzZWRT
dGFja1RyYWNlIHsKKyAgICAgICAgZG91YmxlIHRpbWVzdGFtcDsKKyAgICAgICAgdm9pZCogdG9w
UEM7CisgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50OworICAgICAgICB2b2lkKiBsbGludFBD
OworICAgICAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFja0ZyYW1lPiBmcmFtZXM7CisgICAgfTsK
KwogICAgIHN0cnVjdCBTdGFja1RyYWNlIHsKLSAgICAgICAgYm9vbCBuZWVkc1ZlcmlmaWNhdGlv
bjsKICAgICAgICAgZG91YmxlIHRpbWVzdGFtcDsKICAgICAgICAgVmVjdG9yPFN0YWNrRnJhbWU+
IGZyYW1lczsKKyAgICAgICAgU3RhY2tUcmFjZSgpCisgICAgICAgIHsgfQorICAgICAgICBTdGFj
a1RyYWNlKFN0YWNrVHJhY2UmJiBvdGhlcikKKyAgICAgICAgICAgIDogdGltZXN0YW1wKG90aGVy
LnRpbWVzdGFtcCkKKyAgICAgICAgICAgICwgZnJhbWVzKFdURk1vdmUob3RoZXIuZnJhbWVzKSkK
KyAgICAgICAgeyB9CiAgICAgfTsKIAogICAgIFNhbXBsaW5nUHJvZmlsZXIoVk0mLCBSZWZQdHI8
U3RvcHdhdGNoPiYmKTsKQEAgLTEwMCwxMiArMTQwLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHN0
YXJ0KGNvbnN0IExvY2tIb2xkZXImKTsKICAgICB2b2lkIHN0b3AoKTsKICAgICB2b2lkIHN0b3Ao
Y29uc3QgTG9ja0hvbGRlciYpOwotICAgIFZlY3RvcjxTdGFja1RyYWNlPiYgc3RhY2tUcmFjZXMo
Y29uc3QgTG9ja0hvbGRlciYpOworICAgIFZlY3RvcjxTdGFja1RyYWNlPiByZWxlYXNlU3RhY2tU
cmFjZXMoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBz
dGFja1RyYWNlc0FzSlNPTigpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbm90aWNlQ3Vy
cmVudFRocmVhZEFzSlNDRXhlY3V0aW9uVGhyZWFkKCk7CiAgICAgdm9pZCBub3RpY2VDdXJyZW50
VGhyZWFkQXNKU0NFeGVjdXRpb25UaHJlYWQoY29uc3QgTG9ja0hvbGRlciYpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgY2xlYXJEYXRhKCk7Ci0gICAgdm9pZCBjbGVhckRhdGEoY29uc3Qg
TG9ja0hvbGRlciYpOwogICAgIHZvaWQgcHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOyAv
LyBZb3Ugc2hvdWxkIGNhbGwgdGhpcyBvbmx5IGFmdGVyIGFjcXVpcmluZyB0aGUgbG9jay4KICAg
ICBkb3VibGUgdG90YWxUaW1lKGNvbnN0IExvY2tIb2xkZXImKSB7IHJldHVybiBtX3RvdGFsVGlt
ZTsgfQogICAgIHZvaWQgc2V0U3RvcFdhdGNoKGNvbnN0IExvY2tIb2xkZXImLCBSZWY8U3RvcHdh
dGNoPiYmIHN0b3B3YXRjaCkgeyBtX3N0b3B3YXRjaCA9IFdURk1vdmUoc3RvcHdhdGNoKTsgfQpA
QCAtMTE0LDExICsxNTIsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoSWZOZWNlc3Nh
cnkoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvbihjb25zdCBM
b2NrSG9sZGVyJik7CiAgICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0
IExvY2tIb2xkZXImKTsKIAogICAgIFZNJiBtX3ZtOwogICAgIFJlZlB0cjxTdG9wd2F0Y2g+IG1f
c3RvcHdhdGNoOwogICAgIFZlY3RvcjxTdGFja1RyYWNlPiBtX3N0YWNrVHJhY2VzOwotICAgIHNp
emVfdCBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5OworICAgIFZlY3RvcjxVbnByb2Nl
c3NlZFN0YWNrVHJhY2U+IG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlczsKICAgICBzdGQ6OmNocm9u
bzo6bWljcm9zZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91YmxlIG1fbGFzdFRpbWU7
CiAgICAgZG91YmxlIG1fdG90YWxUaW1lOwpAQCAtMTMwLDcgKzE2OSw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2lzUGF1c2VkOwogICAgIGJvb2wgbV9oYXNEaXNwYXRjaGVkRnVuY3Rpb247CiAg
ICAgSGFzaFNldDxFeGVjdXRhYmxlQmFzZSo+IG1fc2VlbkV4ZWN1dGFibGVzOwotICAgIFZlY3Rv
cjxTdGFja0ZyYW1lPiBtX2N1cnJlbnRGcmFtZXM7CisgICAgVmVjdG9yPFVucHJvY2Vzc2VkU3Rh
Y2tGcmFtZT4gbV9jdXJyZW50RnJhbWVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxOTU4MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
MiwxMSArMzEyLDE1IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkK
ICAgICAgICAgZW5hYmxlQ29udHJvbEZsb3dQcm9maWxlcigpOwogI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKICAgICBpZiAoT3B0aW9uczo6dXNlU2FtcGxpbmdQcm9maWxlcigpKSB7Cisg
ICAgICAgIHNldFNob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nKCk7CiAgICAgICAgIG1f
c2FtcGxpbmdQcm9maWxlciA9IGFkb3B0UmVmKG5ldyBTYW1wbGluZ1Byb2ZpbGVyKCp0aGlzLCBT
dG9wd2F0Y2g6OmNyZWF0ZSgpKSk7CiAgICAgICAgIG1fc2FtcGxpbmdQcm9maWxlci0+c3RhcnQo
KTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogCisgICAgaWYg
KE9wdGlvbnM6OmFsd2F5c0dlbmVyYXRlUENUb0NvZGVPcmlnaW5NYXAoKSkKKyAgICAgICAgc2V0
U2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKTsKKwogICAgIGlmIChPcHRpb25zOjp3
YXRjaGRvZygpKSB7CiAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dE1p
bGxpcyhPcHRpb25zOjp3YXRjaGRvZygpKTsKICAgICAgICAgV2F0Y2hkb2cmIHdhdGNoZG9nID0g
ZW5zdXJlV2F0Y2hkb2coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2
aXNpb24gMTk1ODMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtNTk3LDYgKzU5Nyw5IEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBib29s
IHNob3VsZFRyaWdnZXJUZXJtaW5hdGlvbihFeGVjU3RhdGUqKTsKIAorICAgIHZvaWQgc2V0U2hv
dWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSB7IG1fc2hvdWxkQnVpbGRQQ1RvQ29kZU9y
aWdpbk1hcHBpbmcgPSB0cnVlOyB9CisgICAgYm9vbCBzaG91bGRCdWlsZGVyUENUb0NvZGVPcmln
aW5NYXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFw
cGluZzsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAgICAgZnJpZW5kIGNsYXNzIENsZWFyRXhjZXB0aW9uU2NvcGU7CkBAIC02NDgsNiArNjUx
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZmFpbE5leHROZXdDb2RlQmxvY2sgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5OwogICAgIGJvb2wgbV9zaG91bGRSZXdy
aXRlQ29uc3RBc1ZhciB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Nob3VsZEJ1aWxkUENUb0NvZGVP
cmlnaW5NYXBwaW5nIHsgZmFsc2UgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29kZUNhY2hlPiBt
X2NvZGVDYWNoZTsKICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVkUHJvZmlsZXI7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ1aWx0aW5FeGVjdXRhYmxlcz4gbV9idWlsdGluRXhlY3V0YWJsZXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2Zp
bGVyLWJhc2ljLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItYmFzaWMuanMJKHJldmlzaW9uIDE5NTgzMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItYmFzaWMu
anMJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiw4IEBAIGlmIChwbGF0Zm9ybVN1cHBvcnRz
U2FtcGxpbmdQcm9maWxlcigpKSAKICAgICAgICAgICAgIHgtLTsKICAgICAgICAgfQogICAgIH0K
LSAgICBub0lubGluZSh0b3ApOwotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGNhbGwgdG9wKCkg
dG8gZ2V0IHRoZSBDYWxsU2l0ZUluZGV4IHRvIHVwZGF0ZQotICAgIC8vIGluc2lkZSB0aGUgY2Fs
bCBmcmFtZS4gV2UgbmVlZCB0byBmaXggdGhhdCBieSBoYXZpbmcgYSBQQz0+Q29kZU9yaWdpbgot
ICAgIC8vIG1hcHBpbmc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTI2MjkKLSAgICBmdW5jdGlvbiBqYXooeCkgeyByZXR1cm4geCArIHRvcCgpOyB9IC8vIAorCisg
ICAgZnVuY3Rpb24gamF6KHgpIHsgcmV0dXJuIHggKyB0b3AoKTsgfQogICAgIGZ1bmN0aW9uIGth
eih5KSB7CiAgICAgICAgIHJldHVybiBqYXooeSkgKyA1OwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270253</attachid>
            <date>2016-01-29 14:08:09 -0800</date>
            <delta_ts>2016-01-29 14:17:56 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>105108</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1ODM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMyBA
QAorMjAxNi0wMS0yOSAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBKU0MgU2FtcGxpbmcgUHJvZmlsZXI6IENvbWUgdXAgd2l0aCBhIChwcm9ncmFtIGNvdW50ZXIg
PT4gQ29kZU9yaWdpbikgbWFwcGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGEgbWFwcGluZyBmcm9tIFBDIHRv
IENvZGVPcmlnaW4KKyAgICAgICAgdGhhdCBsaXZlcyBvZmYgb2YgSklUZWQgQ29kZUJsb2Nrcy4g
V2UgYnVpbGQgdGhpcyBtYXBwaW5nCisgICAgICAgIHdoaWxlIEpJVGluZyBjb2RlLCBhbmQgdGhl
biB3ZSBjb21wcmVzcyBpdCBhbmQgc3RvcmUKKyAgICAgICAgaXQgb24gdGhlIENvZGVCbG9jay4g
V2Ugb25seSBidWlsZCB0aGUgbWFwcGluZyBpZiBhIGRlYnVnZ2VyCisgICAgICAgIGhhcyBldmVy
IGJlZW4gYXR0YWNoZWQgdG8gYW55IGdsb2JhbCBvYmplY3QuCisKKyAgICAgICAgQ29kZUJsb2Nr
IGNvbnN1bHRzIHRoaXMgbWFwcGluZyB3aGVuIHNlYXJjaGluZyBmb3IgYSBDb2RlT3JpZ2luCisg
ICAgICAgIGZvciBhIGdpdmVuIFBDLCBidXQgaXQgYWxzbyBjb25zdWx0cyBvdGhlciBjb2RlIHJh
bmdlcworICAgICAgICBvZmYgdGhlIG1haW4gcGF0aCB0aGF0IG1heSBvd24gdGhlIFBDLiBTcGVj
aWZpY2FsbHksIGl0IHNlYXJjaGVzCisgICAgICAgIHRocm91Z2ggaW5saW5lIGNhY2hlcywgT1NS
RXhpdHMsIGFuZCBMYXp5U2xvd1BhdGhzLgorCisgICAgICAgIFRvIGZpbmQgUEMgaW5mbyBmb3Ig
dGhlIExMSW50LCB3ZSBhbHNvIHNhdmUgdGhlIExMSW50IHBjIHdoZW4KKyAgICAgICAgdGFraW5n
IGEgc3RhY2sgdHJhY2Ugd2hlcmUgdGhlIHRvcCBmcmFtZSBpcyBpbiBMTEludCBjb2RlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgY29kZSBpbnNpZGUgdGhlIFNhbXBsaW5n
UHJvZmllci4KKyAgICAgICAgSSByZWFsaXplZCBhIGJ1ZyBpbiB0aGUgU2FtcGxpbmdQcm9maWxl
cidzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBXZSB1c2VkIHRvIHdhbGsgdGhlIGlubGluZSBz
dGFjayB3aGlsZSBnYXRoZXJpbmcgYSBzdGFjaworICAgICAgICB0cmFjZS4gVGhpcyBpcyB3cm9u
Zy4gSXQncyBzdXBlciBkYW5nZXJvdXMgdG8gZG8gdGhpcyBiZWNhdXNlCisgICAgICAgIHdlIG1p
Z2h0IHBhdXNlIHRoZSBKU0MgcHJvY2VzcyB3aGlsZSBpdCdzIG1vZGlmeWluZyBpdHMKKyAgICAg
ICAgQ29kZU9yaWdpbiB0YWJsZS4gV2UgdXNlZCB0byB3YWxrIHRoZSBpbmxpbmUgc3RhY2sgd2hp
bGUKKyAgICAgICAgdGFraW5nIGEgc3RhY2sgdHJhY2UgYmVjYXVzZSBkb2luZyBzbyBjb3VsZCBz
YXZlIHVzIGZyb20KKyAgICAgICAgaGF2aW5nIHRvIHZlcmlmeSBhIHBhcnRpY3VsYXIgc3RhY2sg
dHJhY2UuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGF0LgorICAgICAgICBXZSBub3cgaGF2ZSB0byB2
ZXJpZnkgYWxsIHN0YWNrIHRyYWNlcyB0YWtlbi4gVGhpcyB2ZXJpZmljYXRpb24gc3RlcAorICAg
ICAgICBpbmNsdWRlcyB3YWxraW5nIHRoZSBpbmxpbmUgc3RhY2suCisKKyAgICAgICAgQmVjYXVz
ZSB3ZSBoYXZlIGEgUEM9PkNvZGVPcmlnaW4gbWFwLCB3ZSBjYW4gbm93IGdhdGhlciBtb3JlCisg
ICAgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0b3AtZnJhbWUgd2UgcGF1c2Uu
IFRoaXMgYWxsb3dzCisgICAgICAgIHVzIHRvIGNvcnJlY3RseSBvYnNlcnZlIGlubGluaW5nLiBJ
dCBhbHNvIGFsbG93cyB1cyB0byBvYnNlcnZlCisgICAgICAgIGV4cHJlc3Npb24tbGV2ZWwgbGlu
ZS9jb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgZnJhbWUuCisgICAgICAgIFRoZSByZWFz
b24gd2UgZG9uJ3QgY29uc3VsdCB0aGlzIG1hcHBpbmcgZm9yIHBhcmVudCBmcmFtZXMgaXMgCisg
ICAgICAgIHRoYXQgYWxsIHBhcmVudCBmcmFtZXMgc2hvdWxkIHNldCB0aGUgQ2FsbFNpdGVJbmRl
eCBvbiB0aGUgY2FsbAorICAgICAgICBmcmFtZSBoZWFkZXIsIHdoaWNoIG1lYW5zIHdlIGNhbiBj
b25zdWx0IHRoYXQgdmFsdWUgdG8gZ2V0IGlubGluaW5nIAorICAgICAgICBhbmQgZXhwcmVzc2lv
bi1sZXZlbCBsaW5lL2NvbHVtbiBpbmZvcm1hdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6
CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkxhYmVsOjpMYWJlbCk6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkxhYmVsOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6TGFiZWw6OmlzU2V0KToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
YmxlckxhYmVsOjpsYWJlbEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyTGFiZWw6
Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAqIGIz
L0IzT3JpZ2luLmg6CisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgorICAgICAgICAo
SlNDOjpCMzo6T3JpZ2luOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBiMy9CM1BDVG9PcmlnaW5N
YXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQQ1RvT3JpZ2luTWFwOjpQQ1RvT3JpZ2lu
TWFwKToKKyAgICAgICAgKEpTQzo6QjM6OlBDVG9PcmlnaW5NYXA6OmFwcGVuZEl0ZW0pOgorICAg
ICAgICAoSlNDOjpCMzo6UENUb09yaWdpbk1hcDo6cmFuZ2VzKToKKyAgICAgICAgKiBiMy9CM1By
b2NlZHVyZS5oOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpwY1RvT3JpZ2luTWFwKToK
KyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVsZWFzZVBDVG9PcmlnaW5NYXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omdl
bmVyYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9m
aWxlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRQQyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW5IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdp
bkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAg
ICAgICAgKEpTQzo6YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKToKKyAgICAg
ICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpQb2x5bW9y
cGhpY0FjY2Vzczo6Y29udGFpbnNQQyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVm
ZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpjb250YWluc1BDKToK
KyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpoYXNFeHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpl
eHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRUaGlz
UmVnaXN0ZXIpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OmF0dGFjaCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29kZTo6ZmluZFBDKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmNvbW1vbkRhdGFPZmZzZXQpOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpyZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JF
eGl0SWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpzZXRFbmRPZk1h
aW5QYXRoKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5kT2ZDb2RlKToK
KyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6c2V0U3RhcnRPZkNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
OjpzZXRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkQ2FsbFNp
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpwY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpzZXRFbmRPZk1haW5QYXRo
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5kT2ZDb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6Y2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U2xvd1BhdGhHZW5lcmF0b3I6Om9yaWdpbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YWRkU2xvd1Bh
dGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpydW5TbG93
UGF0aEdlbmVyYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKiBmdGwvRlRMQjNDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxl
KToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklU
Q29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUp
OgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmZpbmRQQyk6CisgICAgICAgICogZnRsL0ZU
TEpJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpiM0NvZGUpOgorICAgICAg
ICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TWFjaGluZVRo
cmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3RlcnM6OmxsaW50UEMpOgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKToKKyAgICAgICAg
KiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OmFkZEV2ZW50KToKKyAgICAgICAgKEluc3BlY3Rv
cjo6YnVpbGRTYW1wbGVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yU2NyaXB0UHJv
ZmlsZXJBZ2VudDo6dHJhY2tpbmdDb21wbGV0ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQu
aDoKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpmaW5k
UEMpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cik6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6YXBwZW5kSXRlbSk6
CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpQQ1RvQ29kZU9yaWdpbk1hcCk6Cisg
ICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjp+UENUb0NvZGVPcmlnaW5NYXApOgorICAg
ICAgICAoSlNDOjpQQ1RvQ29kZU9yaWdpbk1hcDo6bWVtb3J5U2l6ZSk6CisgICAgICAgIChKU0M6
OlBDVG9Db2RlT3JpZ2luTWFwOjpmaW5kUEMpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpk
ZWZhdWx0Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjo6ZGlkQnVpbGRNYXBwaW5nKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rp
b25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMpOgorICAgICAgICAqIGxsaW50L0xMSW50UENS
YW5nZXMuaDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmlzTExJbnRQQyk6CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6
CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
cmVwb3J0U3RhdHMpOgorICAgICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6RnJhbWVXYWxrZXIpOgor
ICAgICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6d2Fsayk6CisgICAgICAgIChKU0M6OkZyYW1lV2Fs
a2VyOjpyZXNldEF0TWFjaGluZUZyYW1lKToKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6Omlz
VmFsaWRGcmFtZVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTYW1w
bGluZ1Byb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6flNhbXBsaW5n
UHJvZmlsZXIpOgorICAgICAgICAoSlNDOjp0cnlHZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyk6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KToKKyAgICAgICAgKEpTQzo6U2Ft
cGxpbmdQcm9maWxlcjo6bm90aWNlVk1FbnRyeSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OmNsZWFyRGF0YSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNr
RnJhbWU6OmRpc3BsYXlOYW1lKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZTo6ZGlzcGxheU5hbWVGb3JKU09OVGVzdHMpOgorICAgICAgICAoSlNDOjpTYW1wbGlu
Z1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpmdW5jdGlvblN0YXJ0TGluZSk6CisgICAgICAgIChKU0M6
OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9uU3RhcnRDb2x1bW4pOgorICAg
ICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzb3VyY2VJRCk6CisgICAg
ICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnVybCk6CisgICAgICAgIChK
U0M6OlNhbXBsaW5nUHJvZmlsZXI6OnJlbGVhc2VTdGFja1RyYWNlcyk6CisgICAgICAgIChKU0M6
OlNhbXBsaW5nUHJvZmlsZXI6OnN0YWNrVHJhY2VzQXNKU09OKToKKyAgICAgICAgKFdURjo6cHJp
bnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6
OnN0YXJ0TGluZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0
YWNrRnJhbWU6OnN0YXJ0Q29sdW1uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQ
cm9maWxlcjo6c3RhY2tUcmFjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5oOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpVbnByb2Nlc3Nl
ZFN0YWNrRnJhbWU6OlVucHJvY2Vzc2VkU3RhY2tGcmFtZSk6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OlN0YWNrRnJhbWUpOgorICAgICAgICAoSlNDOjpTYW1w
bGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlOjpTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6U2Ft
cGxpbmdQcm9maWxlcjo6dG90YWxUaW1lKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxl
cjo6c2V0U3RvcFdhdGNoKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpz
ZXRTaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyk6CisgICAgICAgIChKU0M6OlZNOjpz
aG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKToKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3Mvc2FtcGxpbmctcHJvZmlsZXItYmFzaWMuanM6CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRz
U2FtcGxpbmdQcm9maWxlci50b3ApOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5n
UHJvZmlsZXIuamF6KToKKyAgICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVy
Lmtheik6CisKIDIwMTYtMDEtMjkgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgog
CiAgICAgICAgIFNocmluayBDb2RlQmxvY2shCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxOTU4MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGppdC9KSVRTdWJHZW5lcmF0b3IuY3BwCiAgICAgaml0L0pJ
VFRodW5rcy5jcHAKICAgICBqaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwCisgICAgaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAogICAgIGppdC9Qb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5jcHAKICAgICBqaXQvUmVnLmNwcAogICAgIGppdC9SZWdpc3RlckF0T2Zm
c2V0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDE5NTgzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQzLDcgKzE2
NDMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2FtCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5zYW1wbGluZ1Byb2ZpbGVyKCkpOwogICAgIFN0cmlu
ZyBqc29uU3RyaW5nID0gZXhlYy0+dm0oKS5zYW1wbGluZ1Byb2ZpbGVyKCktPnN0YWNrVHJhY2Vz
QXNKU09OKCk7Ci0gICAgZXhlYy0+dm0oKS5zYW1wbGluZ1Byb2ZpbGVyKCktPmNsZWFyRGF0YSgp
OwogICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShKU09OUGFyc2Uo
ZXhlYywganNvblN0cmluZykpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRp
b24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvagkocmV2aXNpb24gMTk1ODM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjcwLDYgKzY3MCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
SklUVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRUb0RG
R0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcU2V0dXBWYXJhcmdzRnJhbWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caml0XFBDVG9Db2RlT3JpZ2luTWFwLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGppdFxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUmVnLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGppdFxSZWdpc3RlckF0T2Zmc2V0LmNwcCIgLz4KQEAgLTE1MDIsNyArMTUwMyw3IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRXcml0
ZUJhcnJpZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKU0ludGVyZmFj
ZUpJVC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFNldHVwVmFyYXJnc0Zy
YW1lLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUENUb0NvZGVPcmlnaW5N
YXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlZy5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlZ2lzdGVyQXRPZmZzZXQuaCIgLz4K
QEAgLTE1MTEsNiArMTUxMiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVn
aXN0ZXJTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZXBhdGNoLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcU2V0dXBWYXJhcmdzRnJh
bWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxTbmlwcGV0T3BlcmFuZC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFNwZWNpYWxpemVkVGh1bmtKSVQu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxUZW1wUmVnaXN0ZXJTZXQuaCIg
Lz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZp
bHRlcnMJKHJldmlzaW9uIDE5NTgzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBj
b3B5KQpAQCAtMTkxMSw2ICsxOTExLDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxCaW5hcnlTd2l0Y2guY3BwIj4KICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9D
bENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUENUb0NvZGVPcmlnaW5N
YXAuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC00
NTk2LDYgKzQ1OTksOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFBDVG9Db2RlT3JpZ2lu
TWFwLmgiPgorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
Ij4KICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk1ODM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTEzMDUsOSArMTMwNSwxMiBAQAogCQk3MEVDQTYwNzFBRkRCRUEyMDA0
NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMjFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVS
ZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjA4MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0
ZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MEVDQTYwMzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwRUNBNjA5MUFGREJF
QTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVt
cGxhdGVSZWdpc3RyeUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTc5MkNCMzQ5MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1h
cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJD
QjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovOyB9OworCQk3
OTJDQjM0QTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MkNCMzQ4MUM0RUVENUMwMEQx
M0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0
NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAv
KiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAw
QkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0ds
b2JhbExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9Pcmln
aW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUM0QjE1RDFCQTIxNThGMDBG
RDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QjFCQTIxNThG
MDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi87
IH07CiAJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVBy
ZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUM0QjE1QzFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFD
MzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTAyLDkgKzM1MDUsMTIgQEAKIAkJNzBFQ0E2
MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJl
Z2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0
cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5
NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyog
UENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUENU
b0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1Njgx
Qjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdF
MDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5
MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09y
aWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5N
YXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OUM0QjE1QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzlDRkM2RUYxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRQQ1Jhbmdlcy5oOyBwYXRoID0g
bGxpbnQvTExJbnRQQ1Jhbmdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg0
NCw2ICs0ODUwLDcgQEAKIAkJCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50U3BlY2lhbC5oICovLAogCQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNo
cG9pbnRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0
Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENU
b09yaWdpbk1hcC5oICovLAogCQkJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNl
U2NvcGUuY3BwICovLAogCQkJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2Nv
cGUuaCAqLywKIAkJCQkwRjM3MzA4QTFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5j
cHAgKi8sCkBAIC01MTU1LDYgKzUxNjIsOCBAQAogCQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkz
QyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1
NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3
NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLywKKwkJCQk3OTJDQjM0NzFD
NEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovLAorCQkJCTc5MkNCMzQ4
MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICovLAogCQkJCTBGRTgzNDE1
MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgKi8sCiAJ
CQkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmggKi8sCiAJCQkJMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi8sCkBAIC03
MDMxLDYgKzcwNDAsOCBAQAogCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5MzFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNl
Q291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyog
QWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5OUVGN0M0MUM1NkVE
OTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5MkNC
MzRBMUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMzMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93
ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLApAQCAtODk3OCw2ICs4OTg5LDcgQEAKIAkJCQkwRjhG
MTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMz
IC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OTJDQjM0OTFDNEVF
RDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZCMzg3OEYxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEyRDkgLyogREZHTm9kZUZs
YWdzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5
NTgzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNiArMzk2LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgbWFzbS0+aW52YWxpZGF0ZUFsbFRlbXBSZWdpc3RlcnMoKTsKICAgICAgICAgfQog
CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIG1fbGFiZWwgPT0gb3RoZXIubV9sYWJlbDsgfQorCiAgICAgICAgIGJvb2wgaXNTZXQoKSBj
b25zdCB7IHJldHVybiBtX2xhYmVsLmlzU2V0KCk7IH0KICAgICBwcml2YXRlOgogICAgICAgICBB
c3NlbWJsZXJMYWJlbCBtX2xhYmVsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiAxOTU4MzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw2ICs1Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IEFzc2VtYmxlckxhYmVsKG1fb2Zmc2V0ICsgb2Zmc2V0KTsKICAgICAgICAgfQogCisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBBc3NlbWJsZXJMYWJlbCYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0OyB9CisKICAgICAgICAgdWludDMyX3QgbV9v
ZmZzZXQ7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRl
LmNwcAkocmV2aXNpb24gMTk1ODM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2Vu
ZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiQjNS
ZWR1Y2VTdHJlbmd0aC5oIgogI2luY2x1ZGUgIkIzVGltaW5nU2NvcGUuaCIKICNpbmNsdWRlICJC
M1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdp
bi5oCShyZXZpc2lvbiAxOTU4MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmln
aW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOCBAQCBwdWJsaWM6CiAKICAgICBjb25z
dCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgT3JpZ2luJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9kYXRhID09IG90aGVy
Lm1fZGF0YTsgfQorCiAgICAgLy8gWW91IHNob3VsZCBhdm9pZCB1c2luZyB0aGlzLiBVc2UgT3Jp
Z2luRHVtcCBpbnN0ZWFkLgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUENUb09yaWdpbk1hcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BDVG9PcmlnaW5NYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQQ1RvT3JpZ2luTWFwX2gKKyNkZWZpbmUg
QjNQQ1RvT3JpZ2luTWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM09y
aWdpbi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUENUb09yaWdp
bk1hcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUENUb09yaWdpbk1hcCk7CitwdWJsaWM6
CisgICAgUENUb09yaWdpbk1hcCgpCisgICAgeyB9CisKKyAgICBQQ1RvT3JpZ2luTWFwKFBDVG9P
cmlnaW5NYXAmJiBvdGhlcikKKyAgICAgICAgOiBtX3JhbmdlcyhXVEZNb3ZlKG90aGVyLm1fcmFu
Z2VzKSkKKyAgICB7IH0KKworICAgIHN0cnVjdCBPcmlnaW5SYW5nZSB7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBsYWJlbDsKKyAgICAgICAgT3JpZ2luIG9yaWdpbjsKKyAgICB9Owor
CisgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCwgT3JpZ2lu
IG9yaWdpbikKKyAgICB7CisgICAgICAgIGlmIChtX3Jhbmdlcy5zaXplKCkpIHsKKyAgICAgICAg
ICAgIGlmIChtX3Jhbmdlcy5sYXN0KCkubGFiZWwgPT0gbGFiZWwpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9yYW5nZXMuYXBwZW5kKE9yaWdpblJhbmdl
e2xhYmVsLCBvcmlnaW59KTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8T3JpZ2luUmFuZ2U+
JiByYW5nZXMoKSBjb25zdCAgeyByZXR1cm4gbV9yYW5nZXM7IH0KKworcHJpdmF0ZToKKyAgICBW
ZWN0b3I8T3JpZ2luUmFuZ2U+IG1fcmFuZ2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQQ1RvT3JpZ2lu
TWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lv
biAxOTU4MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1
Y3RzLmgiCiAjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAu
aCIKICNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKICNpbmNsdWRlICJCM1R5cGUuaCIKICNp
bmNsdWRlICJCM1ZhbHVlS2V5LmgiCkBAIC0zNjEsNiArMzYyLDkgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGZyYW1lU2l6ZSgpIGNvbnN0OwogICAgIGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3Q7CiAKKyAgICBQ
Q1RvT3JpZ2luTWFwJiBwY1RvT3JpZ2luTWFwKCkgeyByZXR1cm4gbV9wY1RvT3JpZ2luTWFwOyB9
CisgICAgUENUb09yaWdpbk1hcCByZWxlYXNlUENUb09yaWdpbk1hcCgpIHsgcmV0dXJuIFdURk1v
dmUobV9wY1RvT3JpZ2luTWFwKTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCbG9j
a0luc2VydGlvblNldDsKICAgICAKQEAgLTM4Myw2ICszODcsNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoUHJpbnRTdHJlYW0mLCBPcmlnaW4pPj4gbV9vcmlnaW5Qcmlu
dGVyOwogICAgIGNvbnN0IHZvaWQqIG1fZnJvbnRlbmREYXRhOwogICAgIFZhbHVlc0NvbGxlY3Rp
b24gbV92YWx1ZXNDb2xsZWN0aW9uOworICAgIFBDVG9PcmlnaW5NYXAgbV9wY1RvT3JpZ2luTWFw
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1ODM5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkIz
Q29tbW9uLmgiCiAjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCiAjaW5jbHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgogI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgpAQCAtMTcx
LDEyICsxNzIsMjMgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAog
ICAgICAgICBibG9ja0p1bXBzW3RhcmdldF0uYXBwZW5kKGp1bXApOwogICAgIH07CiAKKyAgICBQ
Q1RvT3JpZ2luTWFwJiBwY1RvT3JpZ2luTWFwID0gY29kZS5wcm9jKCkucGNUb09yaWdpbk1hcCgp
OworICAgIGF1dG8gYWRkSXRlbSA9IFsmXSAoSW5zdCYgaW5zdCkgeworICAgICAgICBpZiAoIWlu
c3Qub3JpZ2luKSB7CisgICAgICAgICAgICBwY1RvT3JpZ2luTWFwLmFwcGVuZEl0ZW0oaml0Lmxh
YmVsKCksIE9yaWdpbigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBwY1RvT3JpZ2luTWFwLmFwcGVuZEl0ZW0oaml0LmxhYmVsKCksIGluc3Qub3JpZ2luLT5vcmln
aW4oKSk7CisgICAgfTsKKwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAg
ICAgICAgIGJsb2NrSnVtcHNbYmxvY2tdLmxpbmsoJmppdCk7CiAgICAgICAgIGJsb2NrTGFiZWxz
W2Jsb2NrXSA9IGppdC5sYWJlbCgpOwogICAgICAgICBBU1NFUlQoYmxvY2stPnNpemUoKSA+PSAx
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCkgLSAxOyAr
K2kpIHsKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmF0KGkp
LmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2st
PmF0KGkpOworICAgICAgICAgICAgYWRkSXRlbShpbnN0KTsKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBqdW1wID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwogICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5pc1NldCgpKTsKICAgICAgICAgfQogCkBAIC0x
ODQsNiArMTk2LDggQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAog
ICAgICAgICAgICAgJiYgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApID09IGNvZGUuZmluZE5leHRC
bG9jayhibG9jaykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBhZGRJdGVtKGJs
b2NrLT5sYXN0KCkpOworCiAgICAgICAgIGlmIChpc1JldHVybihibG9jay0+bGFzdCgpLm9wY29k
ZSkpIHsKICAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCByZXByZXNlbnQgdGhlIGZ1
bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWlyLCBzbyB3ZSBuZWVkIHRvCiAgICAgICAgICAgICAv
LyBoYXZlIHRoaXMgb3ZlcnJpZGUuCkBAIC0xOTgsNiArMjEyLDcgQEAgdm9pZCBnZW5lcmF0ZShD
b2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlV2l0aEVtcHR5RnJhbWUoKTsKICAgICAgICAg
ICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgIGFkZEl0ZW0oYmxvY2stPmxhc3QoKSk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0yMTgsMTAgKzIzMywxMyBAQCB2b2lk
IGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAg
ICAgICAgYWRkSXRlbShibG9jay0+bGFzdCgpKTsKICAgICB9CiAKKyAgICBwY1RvT3JpZ2luTWFw
LmFwcGVuZEl0ZW0oaml0LmxhYmVsKCksIE9yaWdpbigpKTsKICAgICBmb3IgKGF1dG8mIGxhdGVQ
YXRoIDogY29udGV4dC5sYXRlUGF0aHMpCiAgICAgICAgIGxhdGVQYXRoLT5ydW4oaml0LCBjb250
ZXh0KTsKKyAgICBwY1RvT3JpZ2luTWFwLmFwcGVuZEl0ZW0oaml0LmxhYmVsKCksIE9yaWdpbigp
KTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE5NTgzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAj
aW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNj
ZXNzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlZHVjZVdo
aXRlc3BhY2UuaCIKQEAgLTQyNzQsNCArNDI3NSwzMCBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0
QmFzaWNCbG9ja0JvdW5kYXJpCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK3ZvaWQgQ29k
ZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmln
aW5NYXA+JiYgbWFwKSAKK3sgCisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1vdmUobWFw
KTsKK30KKworT3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMp
Cit7CisgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApIHsKKyAgICAgICAgaWYgKE9wdGlvbmFs
PENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMp
KQorICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCisgICAgZm9yIChCYWc8
U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsg
ISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIgPSAqaXRl
cjsKKyAgICAgICAgaWYgKHN0dWItPmNvbnRhaW5zUEMocGMpKQorICAgICAgICAgICAgcmV0dXJu
IE9wdGlvbmFsPENvZGVPcmlnaW4+KHN0dWItPmNvZGVPcmlnaW4pOworICAgIH0KKworICAgIGlm
IChPcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gbV9qaXRDb2RlLT5maW5kUEModGhp
cywgcGMpKQorICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKKworICAgIHJldHVybiBOdWxsb3B0
OworfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTk1
ODM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
IGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OwogY2xhc3MgVHlwZUxvY2F0aW9uOwogY2xhc3Mg
SlNNb2R1bGVFbnZpcm9ubWVudDsKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogCiBlbnVtIFJl
b3B0aW1pemF0aW9uTW9kZSB7IERvbnRDb3VudFJlb3B0aW1pemF0aW9uLCBDb3VudFJlb3B0aW1p
emF0aW9uIH07CiAKQEAgLTI3Myw3ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwogICAgIH0KLSAgICAKKwogICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQogICAgIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmV0dXJuQWRkcmVzcyA+PSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICYm
IHJldHVybkFkZHJlc3MgPCBpbnN0cnVjdGlvbnMoKS5lbmQoKSk7CkBAIC05MzcsNiArOTM4LDEx
IEBAIHB1YmxpYzoKIAogICAgIENhbGxTaXRlSW5kZXggbmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxs
U2l0ZUluZGV4KENhbGxTaXRlSW5kZXggb3JpZ2luYWxDYWxsU2l0ZSk7CiAKKyNpZiBFTkFCTEUo
SklUKQorICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9D
b2RlT3JpZ2luTWFwPiYmKTsKKyAgICBPcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCog
cGMpOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVD
YWNoZXMoKTsKICAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKQEAg
LTEwNTYsNiArMTA2Miw3IEBAIHByaXZhdGU6CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxs
TGlua0luZm9zOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIEJhc2ljUmF3
U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICBTZW50aW5l
bExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgQmFzaWNSYXdTZW50aW5lbE5vZGU8UG9s
eW1vcnBoaWNDYWxsTm9kZT4+IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICNlbmRp
ZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOwog
I2lmIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lvbiAxOTU4MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDkg
QEAgc3RydWN0IENvZGVPcmlnaW4gewogICAgIGJvb2wgaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhj
b25zdCBDb2RlT3JpZ2luJiBvdGhlcikgY29uc3Q7CiAgICAgCiAgICAgdW5zaWduZWQgYXBwcm94
aW1hdGVIYXNoKCkgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Cisg
ICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpOwogICAgIAogICAgIC8v
IEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3Ig
ZGVidWdnaW5nIG9ubHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29u
c3Q7CkBAIC0xMjcsNyArMTMwLDcgQEAgaW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6b3BlcmF0b3I9
PShjb25zdAogICAgIHJldHVybiBieXRlY29kZUluZGV4ID09IG90aGVyLmJ5dGVjb2RlSW5kZXgK
ICAgICAgICAgJiYgaW5saW5lQ2FsbEZyYW1lID09IG90aGVyLmlubGluZUNhbGxGcmFtZTsKIH0K
LSAgICAKKwogc3RydWN0IENvZGVPcmlnaW5IYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBDb2RlT3JpZ2luJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBDb2RlT3JpZ2luJiBhLCBjb25zdCBDb2RlT3JpZ2luJiBiKSB7
IHJldHVybiBhID09IGI7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE5NTgzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjQ2LDYgKzI0NiwxOCBAQCBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9y
CiAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rpb24+CitpbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25z
dCBGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gKnRo
aXM7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgZnVuY3Rpb24oY29kZU9yaWdpbik7Cisg
ICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5kaXJl
Y3RDYWxsZXI7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdU
RiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMTk1ODM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw2ICsz
MjQsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnNQQyh2b2lkKiBwYykg
Y29uc3QKKyAgICB7IAorICAgICAgICBpZiAoIW1fc3R1YlJvdXRpbmUpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdWludHB0cl90IHBjQXNJbnQgPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihwYyk7CisgICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLT5zdGFydEFkZHJl
c3MoKSA8PSBwY0FzSW50ICYmIHBjQXNJbnQgPD0gbV9zdHViUm91dGluZS0+ZW5kQWRkcmVzcygp
OworICAgIH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWNjZXNzQ2FzZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAkocmV2aXNpb24gMTk1ODM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCwx
MyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgcmVzZXQo
Y29kZUJsb2NrKTsKICAgICByZXNldEJ5R0MgPSB0cnVlOwogfQorCitib29sIFN0cnVjdHVyZVN0
dWJJbmZvOjpjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdAoreworICAgIGlmIChjYWNoZVR5cGUg
IT0gQ2FjaGVUeXBlOjpTdHViKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHUu
c3R1Yi0+Y29udGFpbnNQQyhwYyk7Cit9CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAkocmV2aXNpb24gMTk1ODM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsOCBA
QCBwdWJsaWM6CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleDsKIAorICAgIGJvb2wgY29udGFpbnNQQyh2b2lkKiBwYykgY29uc3Q7CisK
ICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJC
YXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAx
OTU4MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0
LCB1bnNpZ25lZCBzdGFydERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCk7CiAKICAgICBib29sIGhh
c0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXplKCk7IH0KKyAg
ICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvKCkgeyBy
ZXR1cm4gbV9leHByZXNzaW9uSW5mbzsgfQogCiAgICAgLy8gU3BlY2lhbCByZWdpc3RlcnMKICAg
ICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1f
dGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE5NTgzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
NSw2ICsxNDUsOCBAQCB2b2lkIERlYnVnZ2VyOjphdHRhY2goSlNHbG9iYWxPYmplY3QqIGdsCiAg
ICAgZ2xvYmFsT2JqZWN0LT5zZXREZWJ1Z2dlcih0aGlzKTsKICAgICBtX2dsb2JhbE9iamVjdHMu
YWRkKGdsb2JhbE9iamVjdCk7CiAKKyAgICBtX3ZtLnNldFNob3VsZEJ1aWxkUENUb0NvZGVPcmln
aW5NYXBwaW5nKCk7CisKICAgICAvLyBDYWxsIHNvdXJjZVBhcnNlZCBiZWNhdXNlIGl0IHdpbGwg
ZXhlY3V0ZSBKYXZhU2NyaXB0IGluIHRoZSBpbnNwZWN0b3IuCiAgICAgR2F0aGVyU291cmNlUHJv
dmlkZXJzIGdhdGhlclNvdXJjZVByb3ZpZGVycyhnbG9iYWxPYmplY3QpOwogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMTk1ODM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE1LDYgKzIxNSwxOCBAQCB2b2lkIEpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNl
cyhjb25zdCBUCiAgICAgbWluaWZpZWRERkcudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZl
cmVuY2VzKTsKIH0KIAorT3B0aW9uYWw8Q29kZU9yaWdpbj4gSklUQ29kZTo6ZmluZFBDKENvZGVC
bG9jayosIHZvaWQqIHBjKQoreworICAgIGZvciAoT1NSRXhpdCYgZXhpdCA6IG9zckV4aXQpIHsK
KyAgICAgICAgaWYgKEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGhhbmRsZSA9IGV4aXQubV9jb2Rl
LmV4ZWN1dGFibGVNZW1vcnkoKSkgeworICAgICAgICAgICAgaWYgKGhhbmRsZS0+c3RhcnQoKSA8
PSBwYyAmJiBwYyA8IGhhbmRsZS0+ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlv
bmFsPENvZGVPcmlnaW4+KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDE5NTgzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0
LDggQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGNvbW1vbkRhdGFP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklUQ29kZSwgY29tbW9uKTsgfQorCisg
ICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBvdmVy
cmlkZTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAvLyBB
bGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxOTU4MzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNiArNTIsNyBAQCBKSVRDb21waWxlcjo6SklUQ29tcGlsZXIoR3JhcGgmIGRm
ZykKICAgICAsIG1fZ3JhcGgoZGZnKQogICAgICwgbV9qaXRDb2RlKGFkb3B0UmVmKG5ldyBKSVRD
b2RlKCkpKQogICAgICwgbV9ibG9ja0hlYWRzKGRmZy5udW1CbG9ja3MoKSkKKyAgICAsIG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKGRmZy5tX3ZtKQogewogICAgIGlmIChzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSB8fCBtX2dyYXBoLm1fdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQogICAgICAg
ICBtX2Rpc2Fzc2VtYmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8RGlzYXNzZW1ibGVyPihkZmcpOwpA
QCAtMzA1LDYgKzMwNiw5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlu
a0IKICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25IYW5kbGVyKG5ld0V4
Y2VwdGlvbkhhbmRsZXIpOwogICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQorICAgICAgICBtX2NvZGVCbG9jay0+
c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4o
V1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpKTsKIH0KIAog
dm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCkBAIC0zMzksNyArMzQzLDggQEAgdm9pZCBKSVRD
b21waWxlcjo6Y29tcGlsZSgpCiAgICAgbV9zcGVjdWxhdGl2ZS0+Y2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yLCBtX2NvZGVCbG9jayk7CiAKICAgICAvLyBHZW5lcmF0ZSBzbG93IHBhdGggY29kZS4KLSAg
ICBtX3NwZWN1bGF0aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICBtX3NwZWN1bGF0
aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRvcnMobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOwor
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKICAgICAKICAgICBjb21w
aWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKICAgICBsaW5rT1NSRXhpdHMoKTsKQEAgLTQzMiw3ICs0
MzcsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIGp1bXAoZnJv
bUFyaXR5Q2hlY2spOwogICAgIAogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgotICAg
IG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIG1fc3BlY3VsYXRp
dmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycyhtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik7Cisg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogICAgIAogICAgIGNvbXBp
bGVFeGNlcHRpb25IYW5kbGVycygpOwogICAgIGxpbmtPU1JFeGl0cygpOwpAQCAtNTk2LDYgKzYw
MiwyMiBAQCBDYWxsU2l0ZUluZGV4IEpJVENvbXBpbGVyOjpyZWNvcmRDYWxsU2l0CiAgICAgcmV0
dXJuIGNhbGxTaXRlOwogfQogCit2b2lkIEpJVENvbXBpbGVyOjpzZXRFbmRPZk1haW5QYXRoKCkK
K3sKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsSWdub3Jp
bmdXYXRjaHBvaW50cygpLCBtX3NwZWN1bGF0aXZlLT5tX29yaWdpbi5zZW1hbnRpYyk7CisgICAg
aWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQorICAgICAgICByZXR1cm47CisgICAgbV9kaXNh
c3NlbWJsZXItPnNldEVuZE9mTWFpblBhdGgobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOwor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpzZXRFbmRPZkNvZGUoKQoreworICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCksIFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CisgICAgaWYgKExJ
S0VMWSghbV9kaXNhc3NlbWJsZXIpKQorICAgICAgICByZXR1cm47CisgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mQ29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7Cit9CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTk1
ODM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXIuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlRlbXBSZWdp
c3RlclNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTExOCw2ICsxMTksNyBAQCBwdWJsaWM6
CiAgICAgLy8gTWV0aG9kcyB0byBzZXQgbGFiZWxzIGZvciB0aGUgZGlzYXNzZW1ibGVyLgogICAg
IHZvaWQgc2V0U3RhcnRPZkNvZGUoKQogICAgIHsKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgQ29kZU9yaWdp
bigwLCBudWxscHRyKSk7CiAgICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2Rl
KGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKQEAgLTEzNywxOSArMTM5LDggQEAgcHVibGlj
OgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yTm9kZShub2RlLCBsYWJlbElnbm9yaW5n
V2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0RW5kT2ZNYWluUGF0aCgp
Ci0gICAgewotICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZk1haW5QYXRoKGxhYmVs
SWdub3JpbmdXYXRjaHBvaW50cygpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRFbmRPZkNv
ZGUoKQotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVs
SWdub3JpbmdXYXRjaHBvaW50cygpKTsKLSAgICB9CisgICAgdm9pZCBzZXRFbmRPZk1haW5QYXRo
KCk7CisgICAgdm9pZCBzZXRFbmRPZkNvZGUoKTsKICAgICAKICAgICBDYWxsU2l0ZUluZGV4IGFk
ZENhbGxTaXRlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CkBAIC0yNjUsNiArMjU2LDgg
QEAgcHVibGljOgogCiAgICAgQ2FsbFNpdGVJbmRleCByZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRl
RXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2ln
bmVkIGV2ZW50U3RyZWFtSW5kZXgpOwogCisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBw
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlcjsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyOwogICAgIApAQCAtMzI4LDYgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbCBtX2NhbGxB
cml0eUZpeHVwOwogICAgIExhYmVsIG1fYXJpdHlDaGVjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U3BlY3VsYXRpdmVKSVQ+IG1fc3BlY3VsYXRpdmU7CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1Bh
dGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMTk1ODM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5
IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQnkg
ZGVmYXVsdCBzbG93IHBhdGggZ2VuZXJhdG9ycyBkb24ndCBoYXZlIGEgY2FsbC4KICAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpDYWxsKCk7CiAgICAgfQorCisgICAgY29uc3QgTm9kZU9y
aWdpbiYgb3JpZ2luKCkgY29uc3QgIHsgcmV0dXJuIG1fb3JpZ2luOyB9CisKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCopID0gMDsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9sYWJlbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxOTU4Mzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMwLDEwICszMzAsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRk
U2xvd1BhdGhHZW5lcmF0bwogICAgIG1fc2xvd1BhdGhHZW5lcmF0b3JzLmFwcGVuZChXVEZNb3Zl
KHNsb3dQYXRoR2VuZXJhdG9yKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnJ1blNsb3dQ
YXRoR2VuZXJhdG9ycygpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpydW5TbG93UGF0aEdlbmVyYXRv
cnMoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpCiB7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2xvd1BhdGhHZW5lcmF0b3JzLnNpemUo
KTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3dQYXRoR2VuZXJhdG9y
cy5zaXplKCk7ICsraSkgeworICAgICAgICBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5k
SXRlbShtX2ppdC5sYWJlbCgpLCBtX3Nsb3dQYXRoR2VuZXJhdG9yc1tpXS0+b3JpZ2luKCkuc2Vt
YW50aWMpOwogICAgICAgICBtX3Nsb3dQYXRoR2VuZXJhdG9yc1tpXS0+Z2VuZXJhdGUodGhpcyk7
CisgICAgfQogfQogCiAvLyBPbiBXaW5kb3dzIHdlIG5lZWQgdG8gd3JhcCBmbW9kOyBvbiBvdGhl
ciBwbGF0Zm9ybXMgd2UgY2FuIGNhbGwgaXQgZGlyZWN0bHkuCkBAIC0xNTA0LDYgKzE1MDYsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgIGlmIChP
cHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgJiYgbWF5RXhpdChtX2ppdC5n
cmFwaCgpLCBtX2N1cnJlbnROb2RlKSAhPSBEb2VzTm90RXhpdCkKICAgICAgICAgICAgIG1faml0
LmppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwogCisgICAgICAgIG1faml0LnBjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlcigpLmFwcGVuZEl0ZW0obV9qaXQubGFiZWwoKSwgbV9vcmlnaW4uc2Vt
YW50aWMpOworCiAgICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoYmVsb25nc0luTWluaWZpZWRHcmFwaChtX2N1cnJlbnROb2RlLT5vcCgpKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJl
dmlzaW9uIDE5NTgzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDcgKzMxNyw3IEBAIHB1YmxpYzoKICAgICBH
ZW5lcmF0ZWRPcGVyYW5kVHlwZSBjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKE5vZGUqKTsK
IAogICAgIHZvaWQgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRo
R2VuZXJhdG9yPik7Ci0gICAgdm9pZCBydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICB2b2lk
IHJ1blNsb3dQYXRoR2VuZXJhdG9ycyhQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImKTsKICAgICAK
ICAgICB2b2lkIGNvbXBpbGUoTm9kZSopOwogICAgIHZvaWQgbm90aWNlT1NSQmlydGgoTm9kZSop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxlLmNwcAkocmV2
aXNpb24gMTk1ODM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRlRMVW53aW5k
SW5mby5oIgogI2luY2x1ZGUgIkpJVFN1YkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBA
IC0xNDAsNiArMTQxLDEwIEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6
UmUKICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgCisgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFwID0gc3RhdGUu
cHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKKyAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBD
VG9Db2RlT3JpZ2luTWFwcGluZygpKQorICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjND
b2RlTGlua0J1ZmZlcikpOwogCiAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBiaXR3aXNl
X2Nhc3Q8R2VuZXJhdGVkRnVuY3Rpb24+KAogICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29k
ZUxpbmtCdWZmZXItPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTk1ODM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg2LDYgKzE4NiwyNSBAQCBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJz
VG9QcmVzCiAgICAgcmV0dXJuIFJlZ2lzdGVyU2V0KCk7CiB9CiAKK09wdGlvbmFsPENvZGVPcmln
aW4+IEpJVENvZGU6OmZpbmRQQyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgdm9pZCogcGMpCit7Cisg
ICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgeworICAgICAgICBpZiAoRXhlY3V0YWJs
ZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gZXhpdC5tX2NvZGUuZXhlY3V0YWJsZU1lbW9yeSgpKSB7
CisgICAgICAgICAgICBpZiAoaGFuZGxlLT5zdGFydCgpIDw9IHBjICYmIHBjIDwgaGFuZGxlLT5l
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oZXhpdC5t
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+JiBsYXp5U2xvd1BhdGggOiBsYXp5U2xvd1Bh
dGhzKSB7CisgICAgICAgIGlmIChFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBsYXp5
U2xvd1BhdGgtPnN0dWIoKS5leGVjdXRhYmxlTWVtb3J5KCkpIHsKKyAgICAgICAgICAgIGlmICho
YW5kbGUtPnN0YXJ0KCkgPD0gcGMgJiYgcGMgPCBoYW5kbGUtPmVuZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihjb2RlQmxvY2stPmNvZGVPcmlnaW4obGF6
eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBOdWxsb3B0OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
Q29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29k
ZS5oCShyZXZpc2lvbiAxOTU4MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBwdWJsaWM6CiAKICAgICBS
ZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxs
U2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KSBvdmVycmlkZTsKIAorICAgIE9wdGlvbmFs
PENvZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgb3ZlcnJpZGU7CisKICNp
ZiBGVExfVVNFU19CMwogICAgIENvZGVSZWYgYjNDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9iM0Nv
ZGU7IH0KICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
Y2hpbmVTdGFja01hcmtlci5jcHAJKHJldmlzaW9uIDE5NTgzOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDkgKzIzLDEyIEBACiAjaW5jbHVkZSAiTWFjaGluZVN0YWNrTWFya2VyLmgiCiAKICNpbmNsdWRl
ICJDb25zZXJ2YXRpdmVSb290cy5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJI
ZWFwLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJMTEludFBDUmFuZ2VzLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNp
bmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpA
QCAtNTc3LDYgKzU4MCw2NCBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3Rl
cnM6CiAjZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgZm9y
IGFub3RoZXIgdGhyZWFkIG9uIHRoaXMgcGxhdGZvcm0KICNlbmRpZgogfQordm9pZCogTWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOjpsbGludFBDKCkgY29uc3QKK3sKKyAgICAvLyBM
TEludCB1c2VzIHJlZ1Q0IGFzIFBDLgorI2lmIE9TKERBUldJTikKKworI2lmIF9fREFSV0lOX1VO
SVgwMworCisjaWYgQ1BVKFg4NikKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09
IFg4NlJlZ2lzdGVyczo6ZXNpLCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX19lc2kpOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICBz
dGF0aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IFg4NlJlZ2lzdGVyczo6cjgsICJXcm9uZyBM
TEludCBQQy4iKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVncy5fX3I4
KTsKKyNlbGlmIENQVShBUk0pCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBB
Uk1SZWdpc3RlcnM6OnI4LCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX19yWzhdKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBzdGF0
aWNfYXNzZXJ0KExMSW50OjpMTEludFBDID09IEFSTTY0UmVnaXN0ZXJzOjp4NCwgIldyb25nIExM
SW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLl9feFs0
XSk7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworI2Vsc2Ug
Ly8gIV9fREFSV0lOX1VOSVgwMworI2lmIENQVShYODYpCisgICAgc3RhdGljX2Fzc2VydChMTElu
dDo6TExJbnRQQyA9PSBYODZSZWdpc3RlcnM6OmVzaSwgIldyb25nIExMSW50IFBDLiIpOworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLmVzaSk7CisjZWxpZiBDUFUoWDg2
XzY0KQorICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OkxMSW50UEMgPT0gWDg2UmVnaXN0ZXJzOjpy
OCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWdzLnI4KTsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgor
CisjZW5kaWYgLy8gX19EQVJXSU5fVU5JWDAzCisKKy8vIGVuZCBPUyhEQVJXSU4pCisjZWxpZiBP
UyhXSU5ET1dTKQorCisjaWYgQ1BVKEFSTSkKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTElu
dFBDID09IEFSTVJlZ2lzdGVyczo6cjgsICJXcm9uZyBMTEludCBQQy4iKTsKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHVpbnRwdHJfdCkgcmVncy5SOCk7CisjZWxpZiBDUFUo
TUlQUykKKyNlcnJvciBEb250IGtub3cgd2hhdCB0byBkbyB3aXRoIG1pcHMuIERvIHdlIGV2ZW4g
bmVlZCB0aGlzPworI2VsaWYgQ1BVKFg4NikKKyAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpMTElu
dFBDID09IFg4NlJlZ2lzdGVyczo6ZXNpLCAiV3JvbmcgTExJbnQgUEMuIik7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCh1aW50cHRyX3QpIHJlZ3MuRXNpKTsKKyNlbGlmIENQ
VShYODZfNjQpCisgICAgc3RhdGljX2Fzc2VydChMTEludDo6TExJbnRQQyA9PSBYODZSZWdpc3Rl
cnM6OnIxMCwgIldyb25nIExMSW50IFBDLiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPigodWludHB0cl90KSByZWdzLlIxMCk7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJj
aGl0ZWN0dXJlCisjZW5kaWYKKworI2Vsc2UKKyNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aGUg
TExJbnRQQyBmb3IgYW5vdGhlciB0aHJlYWQgb24gdGhpcyBwbGF0Zm9ybQorI2VuZGlmCit9CiAj
ZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogCiB2b2lkIE1hY2hpbmVUaHJlYWRz
OjpUaHJlYWQ6OmZyZWVSZWdpc3RlcnMoVGhyZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5o
CShyZXZpc2lvbiAxOTU4MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAj
aWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgdm9pZCogZnJhbWVQb2lu
dGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2b2lkKiBpbnN0cnVjdGlvblBvaW50ZXIoKSBjb25z
dDsKKyAgICAgICAgICAgIHZvaWQqIGxsaW50UEMoKSBjb25zdDsKICNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICAKICNpZiBPUyhEQVJXSU4pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9m
aWxlckFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAkocmV2aXNpb24gMTk1
ODM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
U2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBA
QCB2b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OmFkZEV2CiB9CiAKICNpZiBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCi1zdGF0aWMgUmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxl
cjo6U2FtcGxlcz4gYnVpbGRTYW1wbGVzKFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1Ry
YWNlPiYgc2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzLCBkb3VibGUgdG90YWxUaW1lKQorc3Rh
dGljIFJlZjxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlNhbXBsZXM+IGJ1aWxkU2FtcGxlcyhW
ZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZT4mJiBzYW1wbGluZ1Byb2ZpbGVyU3Rh
Y2tUcmFjZXMsIGRvdWJsZSB0b3RhbFRpbWUpCiB7CiAgICAgUmVmPFByb3RvY29sOjpBcnJheTxQ
cm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlN0YWNrVHJhY2U+PiBzdGFja1RyYWNlcyA9IFByb3Rv
Y29sOjpBcnJheTxQcm90b2NvbDo6U2NyaXB0UHJvZmlsZXI6OlN0YWNrVHJhY2U+OjpjcmVhdGUo
KTsKICAgICBmb3IgKFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2UmIHN0YWNrVHJhY2UgOiBz
YW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMpIHsKQEAgLTE2Niw4ICsxNjYsOCBAQCBzdGF0aWMg
UmVmPFByb3RvY29sOjpTY3JpcHRQcm9maWxlcjo6U2FtCiAgICAgICAgICAgICBSZWY8UHJvdG9j
b2w6OlNjcmlwdFByb2ZpbGVyOjpTdGFja0ZyYW1lPiBmcmFtZSA9IFByb3RvY29sOjpTY3JpcHRQ
cm9maWxlcjo6U3RhY2tGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0U291cmNl
SUQoU3RyaW5nOjpudW1iZXIoc3RhY2tGcmFtZS5zb3VyY2VJRCgpKSkKICAgICAgICAgICAgICAg
ICAuc2V0TmFtZShzdGFja0ZyYW1lLmRpc3BsYXlOYW1lKCkpCi0gICAgICAgICAgICAgICAgLnNl
dExpbmUoc3RhY2tGcmFtZS5zdGFydExpbmUoKSkKLSAgICAgICAgICAgICAgICAuc2V0Q29sdW1u
KHN0YWNrRnJhbWUuc3RhcnRDb2x1bW4oKSkKKyAgICAgICAgICAgICAgICAuc2V0TGluZShzdGFj
a0ZyYW1lLmZ1bmN0aW9uU3RhcnRMaW5lKCkpCisgICAgICAgICAgICAgICAgLnNldENvbHVtbihz
dGFja0ZyYW1lLmZ1bmN0aW9uU3RhcnRDb2x1bW4oKSkKICAgICAgICAgICAgICAgICAuc2V0VXJs
KHN0YWNrRnJhbWUudXJsKCkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAg
ICAgIGZyYW1lcy0+YWRkSXRlbShXVEZNb3ZlKGZyYW1lKSk7CkBAIC0xOTQsOCArMTk0LDggQEAg
dm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50Ojp0cmFjawogICAgICAgICBSRUxFQVNF
X0FTU0VSVChzYW1wbGluZ1Byb2ZpbGVyKTsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2Ft
cGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+c3Rv
cChsb2NrZXIpOwotICAgICAgICBSZWY8UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW1wbGVz
PiBzYW1wbGVzID0gYnVpbGRTYW1wbGVzKHNhbXBsaW5nUHJvZmlsZXItPnN0YWNrVHJhY2VzKGxv
Y2tlciksIHNhbXBsaW5nUHJvZmlsZXItPnRvdGFsVGltZShsb2NrZXIpKTsKLSAgICAgICAgc2Ft
cGxpbmdQcm9maWxlci0+Y2xlYXJEYXRhKGxvY2tlcik7CisgICAgICAgIFZlY3RvcjxTYW1wbGlu
Z1Byb2ZpbGVyOjpTdGFja1RyYWNlPiBzdGFja1RyYWNlcyA9IHNhbXBsaW5nUHJvZmlsZXItPnJl
bGVhc2VTdGFja1RyYWNlcyhsb2NrZXIpOworICAgICAgICBSZWY8UHJvdG9jb2w6OlNjcmlwdFBy
b2ZpbGVyOjpTYW1wbGVzPiBzYW1wbGVzID0gYnVpbGRTYW1wbGVzKFdURk1vdmUoc3RhY2tUcmFj
ZXMpLCBzYW1wbGluZ1Byb2ZpbGVyLT50b3RhbFRpbWUobG9ja2VyKSk7CiAKICAgICAgICAgbG9j
a2VyLnVubG9ja0Vhcmx5KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJl
dmlzaW9uIDE5NTgzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNp
bmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2Zp
bGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2FtcGxp
bmdUb29sLmgiCkBAIC02OSw2ICs3MCw3IEBAIEpJVDo6SklUKFZNKiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiAgICAgLCBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleChVSU5UX01BWCkKICAgICAs
IG1fY2FsbExpbmtJbmZvSW5kZXgoVUlOVF9NQVgpCiAgICAgLCBtX3JhbmRvbUdlbmVyYXRvcihj
cnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpKQorICAgICwgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIoKnZtKQogICAgICwgbV9jYW5CZU9wdGltaXplZChmYWxzZSkKICAgICAsIG1fc2hv
dWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKIHsKQEAgLTE1OCw2ICsxNjAsOCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNCZWdpbiArIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UobV9pbnRlcnByZXRlci0+aXNPcGNvZGUoY3VycmVudEluc3Ry
dWN0aW9uLT51Lm9wY29kZSksICJwcml2YXRlQ29tcGlsZU1haW5QYXNzIGdvbmUgYmFkIEAgJWQi
LCBtX2J5dGVjb2RlT2Zmc2V0KTsKIAorICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCkpOworCiAj
aWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQg
PiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCiAg
ICAgICAgICAgICBzYW1wbGVJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMzY1
LDYgKzM2OSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgZm9y
IChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdp
bigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewogICAgICAgICBtX2J5dGVjb2RlT2Zm
c2V0ID0gaXRlci0+dG87CiAKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKwogICAgICAg
ICB1bnNpZ25lZCBmaXJzdFRvID0gbV9ieXRlY29kZU9mZnNldDsKIAogICAgICAgICBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBtX2J5dGVjb2Rl
T2Zmc2V0OwpAQCAtNTE5LDYgKzUyNSw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0
ZUNvbXBpbGUoSkkKICAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMo
Km1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOwogICAgIH0KICAgICAK
KyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVP
cmlnaW4oMCwgbnVsbHB0cikpOworCiAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0U3RhcnRPZkNvZGUobGFiZWwoKSk7CiAKQEAgLTU3MSw2ICs1Nzks
NyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgCiAgICAg
aWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93
UGF0aChsYWJlbCgpKTsKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7
CiAKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZU9mZnNldCA9
IDA7CkBAIC02MTIsNiArNjIxLDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29t
cGlsZShKSQogICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3Nl
bWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVs
dENvZGVPcmlnaW4oKSk7CisKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0
aGlzLCBtX2NvZGVCbG9jaywgZWZmb3J0KTsKICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRv
QWxsb2NhdGUoKSkKQEAgLTcwOCw2ICs3MTksOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnBy
aXZhdGVDb21waWxlKEpJCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVy
KG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKICAgICAgICAgbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvbXBpbGF0aW9uKTsKICAgICB9CisK
KyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCisg
ICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVl
PFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwg
cGF0Y2hCdWZmZXIpKTsKICAgICAKICAgICBDb2RlUmVmIHJlc3VsdCA9IEZJTkFMSVpFX0NPREUo
CiAgICAgICAgIHBhdGNoQnVmZmVyLApAQCAtNzE2LDcgKzczMCw3IEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVy
Qnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQuYWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3Vi
bGU+KHJlc3VsdC5zaXplKCkpIC8KICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Ci0gICAgCisKICAgICBtX2NvZGVCbG9jay0+
c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpMYXRlU2hyaW5rKTsKICAgICBtX2NvZGVCbG9jay0+c2V0
SklUQ29kZSgKICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRo
QXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxpbmVKSVQpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDE5NTgzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVk
ZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJS
ZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCiAjaW5jbHVkZSAiVW51c2Vk
UG9pbnRlci5oIgpAQCAtOTEzLDYgKzkxNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBX
ZWFrUmFuZG9tIG1fcmFuZG9tR2VuZXJhdG9yOwogICAgICAgICBzdGF0aWMgQ29kZVJlZiBzdHJp
bmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoVk0qKTsKIAorICAgICAgICBQQ1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CisKICAgICAgICAgYm9vbCBtX2Nh
bkJlT3B0aW1pemVkOwogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAg
ICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE5NTgzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTIgQEAKIAogI2lu
Y2x1ZGUgIkFyaXR5Q2hlY2tNb2RlLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVk
ZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkpT
Q0pTVmFsdWUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRl
ICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApAQCAtMTk1LDYgKzE5Nyw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgdmlydHVhbCBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9u
SGFuZGxpbmdDYWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKyAgICB2aXJ0dWFs
IE9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgeyBVTlVT
RURfUEFSQU0ocGMpOyByZXR1cm4gTnVsbG9wdDsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5N
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUg
IkIzUENUb09yaWdpbk1hcC5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitjbGFzcyBEZWx0
YUNvbXByZXNzaW9uQnVpbGRlciB7CitwdWJsaWM6CisgICAgRGVsdGFDb21wcmVzc2lvbkJ1aWxk
ZXIoc2l6ZV90IG1heFNpemUpCisgICAgICAgIDogbV9vZmZzZXQoMCkKKyAgICAgICAgLCBtX21h
eFNpemUobWF4U2l6ZSkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KGZhc3RNYWxsb2MobV9tYXhTaXplKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgdm9pZCB3cml0ZShUIGl0ZW0pCisgICAgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX29mZnNldCArIHNpemVvZihUKSA8PSBtX21heFNpemUpOworICAgICAgICBzdGF0
aWMgY29uc3QgdWludDhfdCBtYXNrID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YoVCk7IGkrKykgewor
ICAgICAgICAgICAgKihtX2J1ZmZlciArIG1fb2Zmc2V0KSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KGl0ZW0gJiBtYXNrKTsKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtID4+IChzaXplb2YodWludDhf
dCkgKiA4KTsKKyAgICAgICAgICAgIG1fb2Zmc2V0ICs9IDE7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB1aW50OF90KiBtX2J1ZmZlcjsgCisgICAgc2l6ZV90IG1fb2Zmc2V0OworICAgIHNpemVf
dCBtX21heFNpemU7Cit9OworCitjbGFzcyBEZWx0YUNvbXByZXNzZWlvblJlYWRlciB7CitwdWJs
aWM6CisgICAgRGVsdGFDb21wcmVzc2Vpb25SZWFkZXIodWludDhfdCogYnVmZmVyLCBzaXplX3Qg
c2l6ZSkKKyAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgICAgICwgbV9zaXplKHNpemUp
CisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorICAgIFQgcmVhZCgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX29mZnNl
dCArIHNpemVvZihUKSA8PSBtX3NpemUpOworICAgICAgICBUIHJlc3VsdCA9IDA7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YoVCk7IGkrKykgeworICAgICAgICAgICAg
dWludDhfdCBiaXRzQXNJbnQ4ID0gKihtX2J1ZmZlciArIG1fb2Zmc2V0KTsKKyAgICAgICAgICAg
IFQgYml0cyA9IHN0YXRpY19jYXN0PFQ+KGJpdHNBc0ludDgpOworICAgICAgICAgICAgYml0cyA9
IGJpdHMgPDwgKHNpemVvZih1aW50OF90KSAqIDggKiBpKTsKKyAgICAgICAgICAgIHJlc3VsdCB8
PSBiaXRzOworICAgICAgICAgICAgbV9vZmZzZXQgKz0gMTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90KiBtX2J1ZmZlcjsK
KyAgICBzaXplX3QgbV9zaXplOworICAgIHNpemVfdCBtX29mZnNldDsKK307CisKK30gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCitQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcihWTSYgdm0pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9zaG91bGRCdWls
ZE1hcHBpbmcodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKQoreyB9CisK
K1BDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlciYmIG90aGVyKQorICAgIDogbV92bShvdGhlci5tX3ZtKQorICAg
ICwgbV9jb2RlUmFuZ2VzKFdURk1vdmUob3RoZXIubV9jb2RlUmFuZ2VzKSkKKyAgICAsIG1fc2hv
dWxkQnVpbGRNYXBwaW5nKG90aGVyLm1fc2hvdWxkQnVpbGRNYXBwaW5nKQoreyB9CisKKyNpZiBG
VExfVVNFU19CMworUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIoVk0mIHZtLCBCMzo6UENUb09yaWdpbk1hcCYmIGIzUENUb09yaWdpbk1hcCkKKyAgICA6
IG1fdm0odm0pCisgICAgLCBtX3Nob3VsZEJ1aWxkTWFwcGluZyh2bS5zaG91bGRCdWlsZGVyUENU
b0NvZGVPcmlnaW5NYXBwaW5nKCkpCit7CisgICAgaWYgKCFtX3Nob3VsZEJ1aWxkTWFwcGluZykK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChjb25zdCBCMzo6UENUb09yaWdpbk1hcDo6T3Jp
Z2luUmFuZ2UmIG9yaWdpblJhbmdlIDogYjNQQ1RvT3JpZ2luTWFwLnJhbmdlcygpKSB7CisgICAg
ICAgIERGRzo6Tm9kZSogbm9kZSA9IGJpdHdpc2VfY2FzdDxERkc6Ok5vZGUqPihvcmlnaW5SYW5n
ZS5vcmlnaW4uZGF0YSgpKTsKKyAgICAgICAgaWYgKG5vZGUpCisgICAgICAgICAgICBhcHBlbmRJ
dGVtKG9yaWdpblJhbmdlLmxhYmVsLCBub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBhcHBlbmRJdGVtKG9yaWdpblJhbmdlLmxhYmVsLCBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOworICAgIH0KK30KKyNlbmRpZgor
Cit2b2lkIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6YXBwZW5kSXRlbShNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbGFiZWwsIGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCit7CisgICAgaWYg
KCFtX3Nob3VsZEJ1aWxkTWFwcGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29k
ZVJhbmdlcy5zaXplKCkpIHsKKyAgICAgICAgaWYgKG1fY29kZVJhbmdlcy5sYXN0KCkuZW5kID09
IGxhYmVsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2NvZGVSYW5nZXMubGFzdCgp
LmVuZCA9IGxhYmVsOworICAgICAgICBpZiAobV9jb2RlUmFuZ2VzLmxhc3QoKS5jb2RlT3JpZ2lu
ID09IGNvZGVPcmlnaW4gfHwgIWNvZGVPcmlnaW4pCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9jb2RlUmFuZ2VzLmFwcGVuZChDb2RlUmFuZ2V7bGFiZWwsIGxhYmVsLCBjb2Rl
T3JpZ2lufSk7Cit9CisKKworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2VudGluZWxQQ0RlbHRhID0g
MDsKK3N0YXRpYyBjb25zdCBpbnQ4X3Qgc2VudGluZWxCeXRlY29kZURlbHRhID0gMDsKKworUENU
b0NvZGVPcmlnaW5NYXA6OlBDVG9Db2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ciYmIGJ1aWxkZXIsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoYnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSk7CisKKyAgICBpZiAoIWJ1aWxkZXIubV9jb2Rl
UmFuZ2VzLnNpemUoKSkgeworICAgICAgICBtX3BjUmFuZ2VTdGFydCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludHB0cl90Pjo6bWF4KCk7CisgICAgICAgIG1fcGNSYW5nZUVuZCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCk7CisKKyAgICAgICAgbV9jb21wcmVzc2VkUENC
dWZmZXJTaXplID0gMDsKKyAgICAgICAgbV9jb21wcmVzc2VkUENzID0gbnVsbHB0cjsKKworICAg
ICAgICBtX2NvbXByZXNzZWRDb2RlT3JpZ2luc1NpemUgPSAwOworICAgICAgICBtX2NvbXByZXNz
ZWRDb2RlT3JpZ2lucyA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFdlIGRvIGEgZmluYWwgdG91Y2gtdXAgb24gdGhlIGxhc3QgcmFuZ2UgaGVyZSBiZWNhdXNl
IG9mIGhvdyB3ZSBnZW5lcmF0ZSB0aGUgdGFibGUuCisgICAgLy8gVGhlIGZpbmFsIHJhbmdlIChp
ZiBub24gZW1wdHkpIHdvdWxkIGJlIGlnbm9yZWQgaWYgd2UgZGlkbid0IGFwcGVuZCBhbnkgKGFy
Yml0cmFyeSkKKyAgICAvLyByYW5nZSBhcyB0aGUgbGFzdCBpdGVtIG9mIHRoZSB2ZWN0b3IuCisg
ICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpDb2RlUmFuZ2UmIGxhc3QgPSBidWlsZGVyLm1f
Y29kZVJhbmdlcy5sYXN0KCk7CisgICAgaWYgKCEobGFzdC5zdGFydCA9PSBsYXN0LmVuZCkpCisg
ICAgICAgIGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmFwcGVuZChQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXI6OkNvZGVSYW5nZXsgbGFzdC5lbmQsIGxhc3QuZW5kLCBsYXN0LmNvZGVPcmlnaW4gfSk7IC8v
IFRoaXMgcmFuZ2Ugd2lsbCBuZXZlciBhY3R1YWxseSBiZSBmb3VuZCwgYnV0IGl0IGVuc3VyZXMg
dGhlIHJlYWwgbGFzdCByYW5nZSBpcyBmb3VuZC4KKworICAgIERlbHRhQ29tcHJlc3Npb25CdWls
ZGVyIHBjQ29tcHJlc3Nvcigoc2l6ZW9mKHVpbnRwdHJfdCkgKyBzaXplb2YodWludDhfdCkpICog
YnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpKTsKKyAgICB2b2lkKiBsYXN0UENWYWx1ZSA9IG51
bGxwdHI7CisgICAgYXV0byBidWlsZFBDVGFibGUgPSBbJl0gKHZvaWQqIHBjVmFsdWUpIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocGNWYWx1ZSA+IGxhc3RQQ1ZhbHVlKTsKKyAgICAgICAgdWlu
dHB0cl90IGRlbHRhID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocGNWYWx1ZSkgLSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihsYXN0UENWYWx1ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRl
bHRhICE9IHNlbnRpbmVsUENEZWx0YSk7CisgICAgICAgIGxhc3RQQ1ZhbHVlID0gcGNWYWx1ZTsK
KyAgICAgICAgaWYgKGRlbHRhID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkp
IHsKKyAgICAgICAgICAgIHBjQ29tcHJlc3Nvci53cml0ZTx1aW50OF90PihzZW50aW5lbFBDRGVs
dGEpOworICAgICAgICAgICAgcGNDb21wcmVzc29yLndyaXRlPHVpbnRwdHJfdD4oZGVsdGEpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcGNDb21wcmVzc29yLndy
aXRlPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGRlbHRhKSk7CisgICAgfTsKKworICAg
IERlbHRhQ29tcHJlc3Npb25CdWlsZGVyIGNvZGVPcmlnaW5Db21wcmVzc29yKChzaXplb2YoaW50
cHRyX3QpICsgc2l6ZW9mKGludDhfdCkgKyBzaXplb2YoaW50OF90KSArIHNpemVvZihJbmxpbmVD
YWxsRnJhbWUqKSkgKiBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCkpOworICAgIENvZGVPcmln
aW4gbGFzdENvZGVPcmlnaW4oMCwgbnVsbHB0cik7CisgICAgYXV0byBidWlsZENvZGVPcmlnaW5U
YWJsZSA9IFsmXSAoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikgeworICAgICAgICBpbnRw
dHJfdCBkZWx0YSA9IHN0YXRpY19jYXN0PGludHB0cl90Pihjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpIC0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGxhc3RDb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgp
OworICAgICAgICBsYXN0Q29kZU9yaWdpbiA9IGNvZGVPcmlnaW47CisgICAgICAgIGlmIChkZWx0
YSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWF4KCkgfHwgZGVsdGEgPCBzdGQ6Om51
bWVyaWNfbGltaXRzPGludDhfdD46Om1pbigpIHx8IGRlbHRhID09IHNlbnRpbmVsQnl0ZWNvZGVE
ZWx0YSkgeworICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50OF90Pihz
ZW50aW5lbEJ5dGVjb2RlRGVsdGEpOworICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iu
d3JpdGU8aW50cHRyX3Q+KGRlbHRhKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb2Rl
T3JpZ2luQ29tcHJlc3Nvci53cml0ZTxpbnQ4X3Q+KHN0YXRpY19jYXN0PGludDhfdD4oZGVsdGEp
KTsKKworICAgICAgICBpbnQ4X3QgaGFzSW5saW5lQ2FsbEZyYW1lQnl0ZSA9IGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lID8gMSA6IDA7CisgICAgICAgIGNvZGVPcmlnaW5Db21wcmVzc29yLndy
aXRlPGludDhfdD4oaGFzSW5saW5lQ2FsbEZyYW1lQnl0ZSk7CisgICAgICAgIGlmIChoYXNJbmxp
bmVDYWxsRnJhbWVCeXRlKQorICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8
dWludHB0cl90PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkpOworICAgIH07CisKKyAgICBtX3BjUmFuZ2VTdGFydCA9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KGxpbmtCdWZmZXIubG9jYXRpb25PZihidWlsZGVyLm1fY29kZVJhbmdlcy5maXJzdCgp
LnN0YXJ0KS5kYXRhTG9jYXRpb24oKSk7CisgICAgbV9wY1JhbmdlRW5kID0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmxh
c3QoKS5lbmQpLmRhdGFMb2NhdGlvbigpKTsKKyAgICBtX3BjUmFuZ2VFbmQgLT0gMTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCk7IGkr
KykgeworICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZSYgY29kZVJh
bmdlID0gYnVpbGRlci5tX2NvZGVSYW5nZXNbaV07CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVSYW5nZS5zdGFydCkuZGF0YUxvY2F0aW9uKCk7CisgICAg
ICAgIHZvaWQqIGVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2RlUmFuZ2UuZW5kKS5kYXRh
TG9jYXRpb24oKTsKKyAgICAgICAgQVNTRVJUKG1fcGNSYW5nZVN0YXJ0IDw9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHN0YXJ0KSk7CisgICAgICAgIEFTU0VSVChtX3BjUmFuZ2VFbmQgPj0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kKSAtIDEpOworICAgICAgICBpZiAoc3RhcnQgPT0gZW5k
KQorICAgICAgICAgICAgQVNTRVJUKGkgPT0gYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpIC0g
MSk7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIEFTU0VSVChsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoYnVpbGRlci5tX2NvZGVSYW5nZXNbaSAtIDFdLmVuZCkuZGF0YUxvY2F0aW9uKCkg
PT0gc3RhcnQpOworCisgICAgICAgIGJ1aWxkUENUYWJsZShzdGFydCk7CisgICAgICAgIGJ1aWxk
Q29kZU9yaWdpblRhYmxlKGNvZGVSYW5nZS5jb2RlT3JpZ2luKTsKKyAgICB9CisKKyAgICBtX2Nv
bXByZXNzZWRQQ0J1ZmZlclNpemUgPSBwY0NvbXByZXNzb3IubV9vZmZzZXQ7CisgICAgbV9jb21w
cmVzc2VkUENzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKHBjQ29tcHJlc3Nv
ci5tX2J1ZmZlciwgbV9jb21wcmVzc2VkUENCdWZmZXJTaXplKSk7CisKKyAgICBtX2NvbXByZXNz
ZWRDb2RlT3JpZ2luc1NpemUgPSBjb2RlT3JpZ2luQ29tcHJlc3Nvci5tX29mZnNldDsKKyAgICBt
X2NvbXByZXNzZWRDb2RlT3JpZ2lucyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxv
Yyhjb2RlT3JpZ2luQ29tcHJlc3Nvci5tX2J1ZmZlciwgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNT
aXplKSk7Cit9CisKK1BDVG9Db2RlT3JpZ2luTWFwOjp+UENUb0NvZGVPcmlnaW5NYXAoKQorewor
ICAgIGlmIChtX2NvbXByZXNzZWRQQ3MpCisgICAgICAgIGZhc3RGcmVlKG1fY29tcHJlc3NlZFBD
cyk7CisgICAgaWYgKG1fY29tcHJlc3NlZENvZGVPcmlnaW5zKQorICAgICAgICBmYXN0RnJlZSht
X2NvbXByZXNzZWRDb2RlT3JpZ2lucyk7Cit9CisKK2RvdWJsZSBQQ1RvQ29kZU9yaWdpbk1hcDo6
bWVtb3J5U2l6ZSgpCit7CisgICAgZG91YmxlIHNpemUgPSAwOworICAgIHNpemUgKz0gbV9jb21w
cmVzc2VkUENCdWZmZXJTaXplOworICAgIHNpemUgKz0gbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNT
aXplOworICAgIHJldHVybiBzaXplOworfQorCitPcHRpb25hbDxDb2RlT3JpZ2luPiBQQ1RvQ29k
ZU9yaWdpbk1hcDo6ZmluZFBDKHZvaWQqIHBjKSBjb25zdAoreworICAgIHVpbnRwdHJfdCBwY0Fz
SW50ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocGMpOworICAgIGlmICghKG1fcGNSYW5nZVN0
YXJ0IDw9IHBjQXNJbnQgJiYgcGNBc0ludCA8PSBtX3BjUmFuZ2VFbmQpKQorICAgICAgICByZXR1
cm4gTnVsbG9wdDsKKworICAgIHVpbnRwdHJfdCBjdXJyZW50UEMgPSAwOworICAgIENvZGVPcmln
aW4gY3VycmVudENvZGVPcmlnaW4oMCwgbnVsbHB0cik7CisKKyAgICBEZWx0YUNvbXByZXNzZWlv
blJlYWRlciBwY1JlYWRlcihtX2NvbXByZXNzZWRQQ3MsIG1fY29tcHJlc3NlZFBDQnVmZmVyU2l6
ZSk7CisgICAgRGVsdGFDb21wcmVzc2Vpb25SZWFkZXIgY29kZU9yaWdpblJlYWRlcihtX2NvbXBy
ZXNzZWRDb2RlT3JpZ2lucywgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplKTsKKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICB1aW50cHRyX3QgcHJldmlvdXNQQyA9IGN1cnJlbnRQQzsKKyAg
ICAgICAgeworICAgICAgICAgICAgdWludDhfdCB2YWx1ZSA9IHBjUmVhZGVyLnJlYWQ8dWludDhf
dD4oKTsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBkZWx0YTsKKyAgICAgICAgICAgIGlmICh2YWx1
ZSA9PSBzZW50aW5lbFBDRGVsdGEpCisgICAgICAgICAgICAgICAgZGVsdGEgPSBwY1JlYWRlci5y
ZWFkPHVpbnRwdHJfdD4oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZWx0
YSA9IHZhbHVlOworICAgICAgICAgICAgY3VycmVudFBDICs9IGRlbHRhOworICAgICAgICB9CisK
KyAgICAgICAgQ29kZU9yaWdpbiBwcmV2aW91c09yaWdpbiA9IGN1cnJlbnRDb2RlT3JpZ2luOwor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQ4X3QgdmFsdWUgPSBjb2RlT3JpZ2luUmVhZGVyLnJl
YWQ8aW50OF90PigpOworICAgICAgICAgICAgaW50cHRyX3QgZGVsdGE7CisgICAgICAgICAgICBp
ZiAodmFsdWUgPT0gc2VudGluZWxCeXRlY29kZURlbHRhKQorICAgICAgICAgICAgICAgIGRlbHRh
ID0gY29kZU9yaWdpblJlYWRlci5yZWFkPGludHB0cl90PigpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKKwor
ICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY3VycmVudENvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCkgKyBkZWx0YSk7CisKKyAgICAgICAgICAgIGludDhfdCBoYXNJbmxpbmVGcmFtZSA9
IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxpbnQ4X3Q+KCk7CisgICAgICAgICAgICBBU1NFUlQoaGFz
SW5saW5lRnJhbWUgPT0gMCB8fCBoYXNJbmxpbmVGcmFtZSA9PSAxKTsKKyAgICAgICAgICAgIGlm
IChoYXNJbmxpbmVGcmFtZSkKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUgPSBiaXR3aXNlX2Nhc3Q8SW5saW5lQ2FsbEZyYW1lKj4oY29kZU9yaWdpblJl
YWRlci5yZWFkPHVpbnRwdHJfdD4oKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgY3VycmVudENvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0cjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChwcmV2aW91c1BDKSB7CisgICAgICAgICAgICB1aW50cHRyX3Qgc3Rh
cnRPZlJhbmdlID0gcHJldmlvdXNQQzsKKyAgICAgICAgICAgIC8vIFdlIHN1YnRyYWN0IDEgYmVj
YXVzZSB3ZSBnZW5lcmF0ZSBlbmQgcG9pbnRzIGluY2x1c2l2ZWx5IGluIHRoaXMgdGFibGUsIGV2
ZW4gdGhvdWdoIHdlIGFyZSBpbnRlcmVzdGVkIGluIHJhbmdlcyBvZiB0aGUgZm9ybTogW3ByZXZp
b3VzUEMsIGN1cnJlbnRQQykKKyAgICAgICAgICAgIHVpbnRwdHJfdCBlbmRPZlJhbmdlID0gY3Vy
cmVudFBDIC0gMTsKKyAgICAgICAgICAgIGlmIChzdGFydE9mUmFuZ2UgPD0gcGNBc0ludCAmJiBw
Y0FzSW50IDw9IGVuZE9mUmFuZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENv
ZGVPcmlnaW4+KHByZXZpb3VzT3JpZ2luKTsgLy8gV2UgcmV0dXJuIHByZXZpb3VzT3JpZ2luIGhl
cmUgYmVjYXVzZSBDb2RlT3JpZ2luJ3MgYXJlIG1hcHBlZCB0byB0aGUgc3RhcnRWYWx1ZSBvZiB0
aGUgcmFuZ2UuCisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBOdWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BD
VG9Db2RlT3JpZ2luTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9QQ1RvQ29kZU9yaWdpbk1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgUENUb0NvZGVPcmlnaW5NYXBfaAorI2RlZmluZSBQQ1RvQ29kZU9yaWdpbk1hcF9oCisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0Nv
bW1vbi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNp
bmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKKyNpZiBGVExfVVNFU19CMworbmFtZXNwYWNlIEIzIHsKK2NsYXNzIFBDVG9Pcmln
aW5NYXA7Cit9CisjZW5kaWYKKworY2xhc3MgTGlua0J1ZmZlcjsKK2NsYXNzIFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcjsKKworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOworICAgIGZyaWVu
ZCBjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKKworcHVibGljOgorICAgIFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcihWTSYpOworICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXImJiBvdGhlcik7CisKKyNpZiBGVExfVVNFU19CMworICAgIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlcihWTSYsIEIzOjpQQ1RvT3JpZ2luTWFwJiYpOworI2VuZGlmCisKKyAg
ICB2b2lkIGFwcGVuZEl0ZW0oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsLCBjb25zdCBDb2RlT3JpZ2lu
Jik7CisgICAgc3RhdGljIENvZGVPcmlnaW4gZGVmYXVsdENvZGVPcmlnaW4oKSB7IHJldHVybiBD
b2RlT3JpZ2luKDAsIG51bGxwdHIpOyB9CisKKyAgICBib29sIGRpZEJ1aWxkTWFwcGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvdWxkQnVpbGRNYXBwaW5nOyB9CisKK3ByaXZhdGU6CisKKyAgICBz
dHJ1Y3QgQ29kZVJhbmdlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHN0YXJ0Owor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZW5kOworICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW47CisgICAgfTsKKworICAgIFZNJiBtX3ZtOworICAgIFZlY3RvcjxDb2RlUmFuZ2U+
IG1fY29kZVJhbmdlczsKKyAgICBib29sIG1fc2hvdWxkQnVpbGRNYXBwaW5nOworfTsKKworY2xh
c3MgUENUb0NvZGVPcmlnaW5NYXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBDVG9Db2Rl
T3JpZ2luTWFwKTsKK3B1YmxpYzoKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcChQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXImJiwgTGlua0J1ZmZlciYpOworICAgIH5QQ1RvQ29kZU9yaWdpbk1hcCgpOwor
CisgICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKSBjb25zdDsKKworICAg
IGRvdWJsZSBtZW1vcnlTaXplKCk7CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1fY29tcHJlc3Nl
ZFBDQnVmZmVyU2l6ZTsKKyAgICBzaXplX3QgbV9jb21wcmVzc2VkQ29kZU9yaWdpbnNTaXplOwor
ICAgIHVpbnQ4X3QqIG1fY29tcHJlc3NlZFBDczsKKyAgICB1aW50OF90KiBtX2NvbXByZXNzZWRD
b2RlT3JpZ2luczsKKyAgICB1aW50cHRyX3QgbV9wY1JhbmdlU3RhcnQ7CisgICAgdWludHB0cl90
IG1fcGNSYW5nZUVuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKworI2VuZGlmIC8vIFBDVG9Db2RlT3JpZ2luTWFwX2ggCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRQQ1Jhbmdlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFBDUmFuZ2VzLmgJKHJldmlzaW9uIDE5NTgzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFBDUmFuZ2VzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDYgKzQ1LDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0xMSW50UEModm9p
ZCogcGMpCiAgICAgcmV0dXJuIGxsaW50U3RhcnQgPD0gcGNBc0ludCAmJiBwY0FzSW50IDw9IGxs
aW50RW5kOwogfQogCisjaWYgRU5BQkxFKEpJVCkKK3N0YXRpYyBjb25zdCBHUFJSZWcgTExJbnRQ
QyA9IEdQUkluZm86OnJlZ1Q0OworI2VuZGlmCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTElu
dAogCiAjZW5kaWYgLy8gTExJbnRQQ1Jhbmdlc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxOTU4
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsNyBAQCBpZiBKU1ZBTFVFNjQKICAgICAj
IC0gVGhlIFBDIGJhc2UgKG9yIFBCIGZvciBzaG9ydCkgbXVzdCBiZSBzdG9yZWQgaW4gYSBjYWxs
ZWUtc2F2ZSByZWdpc3Rlci4KICAgICAjIC0gQyBjYWxscyBhcmUgc3RpbGwgZ2l2ZW4gdGhlIElu
c3RydWN0aW9uKiByYXRoZXIgdGhhbiB0aGUgUEMgaW5kZXguCiAgICAgIyAgIFRoaXMgcmVxdWly
ZXMgYW4gYWRkIGJlZm9yZSB0aGUgY2FsbCwgYW5kIGEgc3ViIGFmdGVyLgotICAgIGNvbnN0IFBD
ID0gdDQKKyAgICBjb25zdCBQQyA9IHQ0ICMgV2hlbiBjaGFuZ2luZyB0aGlzLCBtYWtlIHN1cmUg
TExJbnRQQyBpcyB1cCB0byBkYXRlIGluIExMSW50UENSYW5nZXMuaAogICAgIGlmIEFSTTY0CiAg
ICAgICAgIGNvbnN0IFBCID0gY3NyNwogICAgICAgICBjb25zdCB0YWdUeXBlTnVtYmVyID0gY3Ny
OApAQCAtMjkwLDcgKzI5MCw3IEBAIGlmIEpTVkFMVUU2NAogICAgIGVuZAogCiBlbHNlCi0gICAg
Y29uc3QgUEMgPSB0NAorICAgIGNvbnN0IFBDID0gdDQgIyBXaGVuIGNoYW5naW5nIHRoaXMsIG1h
a2Ugc3VyZSBMTEludFBDIGlzIHVwIHRvIGRhdGUgaW4gTExJbnRQQ1Jhbmdlcy5oCiAgICAgbWFj
cm8gbG9hZGlzRnJvbUluc3RydWN0aW9uKG9mZnNldCwgZGVzdCkKICAgICAgICAgbG9hZGlzIG9m
ZnNldCAqIDRbUENdLCBkZXN0CiAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxOTU4MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw2ICszMjMsNyBAQCB0
eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIHVzZVR5cGVQcm9m
aWxlciwgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUNvbnRyb2xGbG93UHJvZmls
ZXIsIGZhbHNlLCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VTYW1wbGluZ1Byb2ZpbGVyLCBm
YWxzZSwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgYWx3YXlzR2VuZXJhdGVQQ1RvQ29kZU9yaWdp
bk1hcCwgZmFsc2UsICJUaGlzIHdpbGwgbWFrZSBzdXJlIHdlIGFsd2F5cyBnZW5lcmF0ZSBhIFBD
VG9Db2RlT3JpZ2luTWFwIGZvciBKSVRlZCBjb2RlLiIpIFwKICAgICBcCiAgICAgdihib29sLCB2
ZXJpZnlIZWFwLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9mR0ND
eWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbiwgMywgbnVsbHB0cikgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJl
dmlzaW9uIDE5NTgzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAi
TExJbnRQQ1Jhbmdlcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFy
a2VkQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUg
IlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiVk0uaCIKQEAgLTQ5LDcgKzUwLDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgZG91
YmxlIHNOdW1Ub3RhbFN0YWNrVHJhY2VzID0gMDsKLXN0YXRpYyBkb3VibGUgc051bVVudmVyaWZp
ZWRTdGFja1RyYWNlcyA9IDA7CiBzdGF0aWMgZG91YmxlIHNOdW1Ub3RhbFdhbGtzID0gMDsKIHN0
YXRpYyBkb3VibGUgc051bUZhaWxlZFdhbGtzID0gMDsKIHN0YXRpYyBjb25zdCB1aW50MzJfdCBz
TnVtV2Fsa1JlcG9ydGluZ0ZyZXF1ZW5jeSA9IDUwOwpAQCAtNTgsNiArNTgsOCBAQCBzdGF0aWMg
Y29uc3QgYm9vbCBzUmVwb3J0U3RhdHNPbmx5V2hlblRoCiBzdGF0aWMgY29uc3QgYm9vbCBzUmVw
b3J0U3RhdHMgPSBmYWxzZTsKIAogdXNpbmcgRnJhbWVUeXBlID0gU2FtcGxpbmdQcm9maWxlcjo6
RnJhbWVUeXBlOwordXNpbmcgVW5wcm9jZXNzZWRGcmFtZVR5cGUgPSBTYW1wbGluZ1Byb2ZpbGVy
OjpVbnByb2Nlc3NlZEZyYW1lVHlwZTsKK3VzaW5nIFVucHJvY2Vzc2VkU3RhY2tGcmFtZSA9IFNh
bXBsaW5nUHJvZmlsZXI6OlVucHJvY2Vzc2VkU3RhY2tGcmFtZTsKIAogQUxXQVlTX0lOTElORSBz
dGF0aWMgdm9pZCByZXBvcnRTdGF0cygpCiB7CkBAIC02NSw4ICs2Nyw2IEBAIEFMV0FZU19JTkxJ
TkUgc3RhdGljIHZvaWQgcmVwb3J0U3RhdHMoKQogICAgICAgICBpZiAoIXNSZXBvcnRTdGF0c09u
bHlXaGVuVGhleXJlQWJvdmVUaHJlc2hvbGQgfHwgKHNOdW1GYWlsZWRXYWxrcyAvIHNOdW1Ub3Rh
bFdhbGtzID4gc1dhbGtFcnJvclBlcmNlbnRhZ2UpKSB7CiAgICAgICAgICAgICBkYXRhTG9nRigi
TnVtIHRvdGFsIHdhbGtzOiAlbGx1LiBGYWlsZWQgd2Fsa3MgcGVyY2VudDogJWxmXG4iLAogICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzTnVtVG90YWxXYWxrcyksIHNOdW1G
YWlsZWRXYWxrcyAvIHNOdW1Ub3RhbFdhbGtzKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJUb3Rh
bCBzdGFjayB0cmFjZXM6ICVsbHUuIE5lZWRzIHZlcmlmaWNhdGlvbiBwZXJjZW50OiAlbGZcbiIs
Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNOdW1Ub3RhbFN0YWNrVHJh
Y2VzKSwgc051bVVudmVyaWZpZWRTdGFja1RyYWNlcyAvIHNOdW1Ub3RhbFN0YWNrVHJhY2VzKTsK
ICAgICAgICAgfQogICAgIH0KIH0KQEAgLTgyLDMzICs4MiwyMCBAQCBwdWJsaWM6CiAgICAgewog
ICAgIH0KIAotICAgIHNpemVfdCB3YWxrKFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0Zy
YW1lPiYgc3RhY2tUcmFjZSwgYm9vbCYgZGlkUnVuT3V0T2ZTcGFjZSwgYm9vbCYgc3RhY2t0cmFj
ZU5lZWRzVmVyaWZpY2F0aW9uKQorICAgIHNpemVfdCB3YWxrKFZlY3RvcjxVbnByb2Nlc3NlZFN0
YWNrRnJhbWU+JiBzdGFja1RyYWNlLCBib29sJiBkaWRSdW5PdXRPZlNwYWNlKQogICAgIHsKLSAg
ICAgICAgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChz
UmVwb3J0U3RhdHMpCiAgICAgICAgICAgICBzTnVtVG90YWxXYWxrcysrOwogICAgICAgICByZXNl
dEF0TWFjaGluZUZyYW1lKCk7CiAgICAgICAgIHNpemVfdCBtYXhTdGFja1RyYWNlU2l6ZSA9IHN0
YWNrVHJhY2Uuc2l6ZSgpOwogICAgICAgICB3aGlsZSAoIWlzQXRUb3AoKSAmJiAhbV9iYWlsaW5n
T3V0ICYmIG1fZGVwdGggPCBtYXhTdGFja1RyYWNlU2l6ZSkgewotICAgICAgICAgICAgd2hpbGUg
KG1faW5saW5lQ2FsbEZyYW1lICYmIG1fZGVwdGggPCBtYXhTdGFja1RyYWNlU2l6ZSkgewotICAg
ICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVDYWxsRnJhbWUtPmJh
c2VsaW5lQ29kZUJsb2NrLmdldCgpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlz
VmFsaWRDb2RlQmxvY2soY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICAgICAgc3RhY2tUcmFjZVtt
X2RlcHRoXSA9IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWUoU2FtcGxpbmdQcm9maWxlcjo6
RnJhbWVUeXBlOjpWZXJpZmllZEV4ZWN1dGFibGUsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCkpOwotICAgICAgICAgICAgICAgIG1fZGVwdGgrKzsKLSAgICAgICAgICAgICAgICBtX2lubGlu
ZUNhbGxGcmFtZSA9IG1faW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZy
YW1lOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV9kZXB0aCA+PSBtYXhTdGFj
a1RyYWNlU2l6ZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgICAgICBp
ZiAoaXNWYWxpZENvZGVCbG9jayhjb2RlQmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwotICAg
ICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0gPSBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFj
a0ZyYW1lKEZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlLGV4ZWN1dGFibGUpOworICAgICAg
ICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygp
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRDb2RlQmxvY2soY29kZUJsb2NrKSk7
CisgICAgICAgICAgICAgICAgc3RhY2tUcmFjZVttX2RlcHRoXSA9IFVucHJvY2Vzc2VkU3RhY2tG
cmFtZShjb2RlQmxvY2ssIG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24g
PSB0cnVlOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jayA9PSBudWxs
cHRyKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHVuc2FmZUNhbGxlZSA9IG1fY2FsbEZyYW1l
LT51bnNhZmVDYWxsZWUoKTsKLSAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0g
U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZShGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUs
IEpTVmFsdWU6OmVuY29kZSh1bnNhZmVDYWxsZWUpKTsKKyAgICAgICAgICAgICAgICBzdGFja1Ry
YWNlW21fZGVwdGhdID0gVW5wcm9jZXNzZWRTdGFja0ZyYW1lKEpTVmFsdWU6OmVuY29kZSh1bnNh
ZmVDYWxsZWUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fZGVwdGgrKzsKICAgICAg
ICAgICAgIGFkdmFuY2VUb1BhcmVudEZyYW1lKCk7CkBAIC0xMzgsOCArMTI1LDYgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgcmVzZXRBdE1hY2hpbmVGcmFtZSgpCiAgICAgewotICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZSA9IG51bGxwdHI7Ci0KICAgICAgICAgaWYgKGlzQXRUb3AoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIApAQCAtMTUxLDkgKzEzNiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICAvLyBJ
ZiB0aGUgZnJhbWUgZG9lc24ndCBoYXZlIGEgY29kZSBibG9jaywgdGhlbiBpdCdzIG5vdCBhIAot
ICAgICAgICAvLyBERkcvRlRMIGZyYW1lIHdoaWNoIG1lYW5zIHdlJ3JlIG5vdCBhbiBpbmxpbmVk
IGZyYW1lLgogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKICAgICAgICAgaWYgKCFjb2RlQmxvY2spCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNjQsMjUgKzE0Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc051bUZhaWxlZFdh
bGtzKys7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0
aGUgY29kZSBibG9jayBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIG9yaWdpbnMsIHRoZW4gdGhlcmUn
cyBubwotICAgICAgICAvLyBpbmxpbmluZy4gSGVuY2UsIHdlJ3JlIG5vdCBhdCBhbiBpbmxpbmVk
IGZyYW1lLgotICAgICAgICBpZiAoIWNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBDYWxsU2l0ZUluZGV4IGluZGV4ID0gbV9jYWxsRnJh
bWUtPmNhbGxTaXRlSW5kZXgoKTsKLSAgICAgICAgaWYgKCFjb2RlQmxvY2stPmNhbkdldENvZGVP
cmlnaW4oaW5kZXgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRToKLSAgICAgICAgICAgIC8vIEZv
ciB0aGUgbW9zdCBwYXJ0LCB3ZSBvbmx5IGZhaWwgaGVyZSB3aGVuIHdlJ3JlIGxvb2tpbmcKLSAg
ICAgICAgICAgIC8vIGF0IHRoZSB0b3AgbW9zdCBjYWxsIGZyYW1lLiBBbGwgb3RoZXIgcGFyZW50
IGNhbGwgZnJhbWVzCi0gICAgICAgICAgICAvLyBzaG91bGQgaGF2ZSBzZXQgdGhlIENhbGxTaXRl
SW5kZXggd2hlbiBtYWtpbmcgYSBjYWxsLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8v
IFdlIHNob3VsZCByZXNvcnQgdG8gZ2V0dGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBQQz0+Q29k
ZU9yaWdpbiBtYXBwaW5nCi0gICAgICAgICAgICAvLyBvbmNlIHdlIGltcGxlbWVudCBpdDogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjYyOQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gY29kZUJsb2Nr
LT5jb2RlT3JpZ2luKGluZGV4KS5pbmxpbmVDYWxsRnJhbWU7Ci0jZW5kaWYgLy8gIUVOQUJMRShE
RkdfSklUKQogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZEZyYW1lUG9pbnRlcihFeGVjU3RhdGUq
IGV4ZWMpCkBAIC0yMTMsMTQgKzE3NiwxMiBAQCBwcml2YXRlOgogICAgIGNvbnN0IExvY2tIb2xk
ZXImIG1fY29kZUJsb2NrU2V0TG9ja2VyOwogICAgIGNvbnN0IExvY2tIb2xkZXImIG1fbWFjaGlu
ZVRocmVhZHNMb2NrZXI7CiAgICAgYm9vbCBtX2JhaWxpbmdPdXQgeyBmYWxzZSB9OwotICAgIElu
bGluZUNhbGxGcmFtZSogbV9pbmxpbmVDYWxsRnJhbWU7CiAgICAgc2l6ZV90IG1fZGVwdGggeyAw
IH07CiB9OwogCiBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2bSwgUmVm
UHRyPFN0b3B3YXRjaD4mJiBzdG9wd2F0Y2gpCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9zdG9w
d2F0Y2goV1RGTW92ZShzdG9wd2F0Y2gpKQotICAgICwgbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VU
b1ZlcmlmeSgwKQogICAgICwgbV90aW1pbmdJbnRlcnZhbChzdGQ6OmNocm9ubzo6bWljcm9zZWNv
bmRzKDEwMDApKQogICAgICwgbV90b3RhbFRpbWUoMCkKICAgICAsIG1fdGltZXJRdWV1ZShXb3Jr
UXVldWU6OmNyZWF0ZSgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnF1ZXVlIiwgV29ya1F1ZXVlOjpU
eXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQpAQCAtMjU2LDIz
ICsyMTcsMjcgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihWTSYgdgogICAg
ICAgICAgICAgICAgIC8vIFdoaWxlIHRoZSBKU0MgdGhyZWFkIGlzIHN1c3BlbmRlZCwgd2UgY2Fu
J3QgZG8gdGhpbmdzIGxpa2UgbWFsbG9jIGJlY2F1c2UgdGhlIEpTQyB0aHJlYWQKICAgICAgICAg
ICAgICAgICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCiAgICAgICAgICAgICAg
ICAgRXhlY1N0YXRlKiBjYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgdm9pZCogcGM7CisgICAg
ICAgICAgICAgICAgdm9pZCogbWFjaGluZVBDOworICAgICAgICAgICAgICAgIGJvb2wgdG9wRnJh
bWVJc0xMSW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdm9pZCogbGxpbnRQQzsKICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6
OlJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAgICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9u
VGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICAgICAgY2Fs
bEZyYW1lID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4ocmVnaXN0ZXJzLmZyYW1lUG9pbnRlcigp
KTsKLSAgICAgICAgICAgICAgICAgICAgcGMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVy
KCk7CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlv
blBvaW50ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlZ2lzdGVycy5sbGlu
dFBDKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5mcmVlUmVn
aXN0ZXJzKHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFyc2luZyBj
b2RlLgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTI3NjEKLSAgICAgICAgICAgICAgICBpZiAobV92bS5leGVjdXRhYmxlQWxsb2Nh
dG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIsIHBj
KSkgeworICAgICAgICAgICAgICAgIGlmIChtX3ZtLmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxp
ZEV4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlciwgbWFjaGluZVBDKSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAobV92bS5pc0V4ZWN1dGluZ0luUmVnRXhwSklUKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UncmUgZXhlY3V0aW5nIGEgcmVn
ZXhwLiBMZXRzIGdhdGhlciBtb3JlIGludGVyc3RpbmcgZGF0YS4KICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3MjkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IG1fdm0udG9wQ2FsbEZyYW1lOyAv
LyBXZSBuZWVkIHRvIGRvIHRoaXMgb3IgZWxzZSB3ZSdkIGZhaWwgb3VyIGJhY2t0cmFjZSB2YWxp
ZGF0aW9uIGIvYyB0aGlzIGlzbid0IGEgSlMgZnJhbWUuCiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKExMSW50Ojppc0xMSW50UEMocGMpKSB7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChMTEludDo6aXNMTEludFBDKG1hY2hpbmVQQykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdG9wRnJhbWVJc0xMSW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UncmUgb2theSB0byB0YWtlIGEgbm9ybWFsIHN0YWNrIHRyYWNlIHdoZW4gdGhl
IFBDCiAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGluIExMSW50IGNvZGUuCiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKQEAgLTI4NCwxMCArMjQ5LDkgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2Ft
cGxpbmdQcm9maWxlcihWTSYgdgogICAgICAgICAgICAgICAgIHNpemVfdCB3YWxrU2l6ZTsKICAg
ICAgICAgICAgICAgICBib29sIHdhc1ZhbGlkV2FsazsKICAgICAgICAgICAgICAgICBib29sIGRp
ZFJ1bk91dE9mVmVjdG9yU3BhY2U7Ci0gICAgICAgICAgICAgICAgYm9vbCBzdGFja3RyYWNlTmVl
ZHNWZXJpZmljYXRpb247CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBG
cmFtZVdhbGtlciB3YWxrZXIoY2FsbEZyYW1lLCBtX3ZtLCBjb2RlQmxvY2tTZXRMb2NrZXIsIG1h
Y2hpbmVUaHJlYWRzTG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgd2Fsa1NpemUgPSB3YWxr
ZXIud2FsayhtX2N1cnJlbnRGcmFtZXMsIGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UsIHN0YWNrdHJh
Y2VOZWVkc1ZlcmlmaWNhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHdhbGtTaXplID0gd2Fs
a2VyLndhbGsobV9jdXJyZW50RnJhbWVzLCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlKTsKICAgICAg
ICAgICAgICAgICAgICAgd2FzVmFsaWRXYWxrID0gd2Fsa2VyLndhc1ZhbGlkV2FsaygpOwogICAg
ICAgICAgICAgICAgIH0KIApAQCAtMjk4LDIxICsyNjIsMTYgQEAgU2FtcGxpbmdQcm9maWxlcjo6
U2FtcGxpbmdQcm9maWxlcihWTSYgdgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJl
IGludGVyZXN0aW5nIHRvIHRha2UgZGF0YSBhYm91dCB0aGUgcHJvZ3JhbSdzIHN0YXRlIHdoZW4K
ICAgICAgICAgICAgICAgICAvLyB3ZSBmYWlsIHRvIHRha2UgYSBzdGFjayB0cmFjZTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc1OAogICAgICAgICAgICAgICAg
IGlmICh3YXNWYWxpZFdhbGsgJiYgd2Fsa1NpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHNSZXBvcnRTdGF0cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc1JlcG9ydFN0YXRzKQog
ICAgICAgICAgICAgICAgICAgICAgICAgc051bVRvdGFsU3RhY2tUcmFjZXMrKzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdGFja3RyYWNlTmVlZHNWZXJpZmljYXRpb24pCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc051bVVudmVyaWZpZWRTdGFja1RyYWNlcysrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBz
dGFja1RyYWNlOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFja0Zy
YW1lPiBzdGFja1RyYWNlOwogICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkod2Fsa1NpemUpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHdhbGtTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0
YWNrRnJhbWUgZnJhbWUgPSBtX2N1cnJlbnRGcmFtZXNbaV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGFja1RyYWNlLnVuY2hlY2tlZEFwcGVuZChmcmFtZSk7IAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGZyYW1lLmZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlZlcmlmaWVkRXhlY3V0
YWJsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NlZW5FeGVjdXRhYmxlcy5hZGQo
ZnJhbWUudS52ZXJpZmllZEV4ZWN1dGFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgVW5w
cm9jZXNzZWRTdGFja0ZyYW1lIGZyYW1lID0gbV9jdXJyZW50RnJhbWVzW2ldOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhY2tUcmFjZS51bmNoZWNrZWRBcHBlbmQoZnJhbWUpOwogICAgICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgbV9zdGFja1RyYWNlcy5hcHBl
bmQoU3RhY2tUcmFjZXsgc3RhY2t0cmFjZU5lZWRzVmVyaWZpY2F0aW9uLCBub3dUaW1lLCBXVEZN
b3ZlKHN0YWNrVHJhY2UpIH0pOworICAgICAgICAgICAgICAgICAgICBtX3VucHJvY2Vzc2VkU3Rh
Y2tUcmFjZXMuYXBwZW5kKFVucHJvY2Vzc2VkU3RhY2tUcmFjZSB7IG5vd1RpbWUsIG1hY2hpbmVQ
QywgdG9wRnJhbWVJc0xMSW50LCBsbGludFBDLCBXVEZNb3ZlKHN0YWNrVHJhY2UpIH0pOwogCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChkaWRSdW5PdXRPZlZlY3RvclNwYWNlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50RnJhbWVzLmdyb3cobV9jdXJyZW50RnJhbWVzLnNpemUo
KSAqIDEuMjUpOwpAQCAtMzMyLDYgKzI5MSwzMCBAQCBTYW1wbGluZ1Byb2ZpbGVyOjp+U2FtcGxp
bmdQcm9maWxlcigpCiB7CiB9CiAKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHRyeUdl
dEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgbGxpbnRQQywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGJv
b2wmIGlzVmFsaWQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+aGFzQ29kZU9y
aWdpbnMoKSk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXggPSBsbGludFBDOworICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkNvdW50KCkpIHsKKyAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAgICAgIHJldHVybiBi
eXRlY29kZUluZGV4OworICAgIH0KKyAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgcmV0dXJuIDA7
CisjZWxzZQorICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJpdHdpc2VfY2FzdDxJbnN0
cnVjdGlvbio+KGxsaW50UEMpOworICAgIGlmIChpbnN0cnVjdGlvbiA+PSBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmJlZ2luKCkgJiYgaW5zdHJ1Y3Rpb24gPCBjb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmJlZ2luKCkgKyBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSkgeworICAgICAg
ICBpc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IGluc3Ry
dWN0aW9uIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgICAgICByZXR1
cm4gYnl0ZWNvZGVJbmRleDsKKyAgICB9CisgICAgaXNWYWxpZCA9IGZhbHNlOworICAgIHJldHVy
biAwOworI2VuZGlmCit9CisKIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZp
ZWRTdGFja1RyYWNlcygpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBjYWxs
ZWQgZnJvbSB0aGUgSlNDIGV4ZWN1dGlvbiB0aHJlYWQuCkBAIC0zNDAsMjIgKzMyMywzMCBAQCB2
b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgVGlueUJsb29tRmls
dGVyIGZpbHRlciA9IG1fdm0uaGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLmZpbHRlcigpOwog
ICAgIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1NldCA9IG1fdm0uaGVhcC5vYmplY3RTcGFj
ZSgpLmJsb2NrcygpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleE9mTmV4dFN0YWNr
VHJhY2VUb1ZlcmlmeTsgaSA8IG1fc3RhY2tUcmFjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAg
U3RhY2tUcmFjZSYgc3RhY2tUcmFjZSA9IG1fc3RhY2tUcmFjZXNbaV07IAotICAgICAgICBpZiAo
IXN0YWNrVHJhY2UubmVlZHNWZXJpZmljYXRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgc3RhY2tUcmFjZS5uZWVkc1ZlcmlmaWNhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIGZv
ciAoU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA6IHN0YWNrVHJhY2UuZnJhbWVzKSB7Ci0gICAgICAg
ICAgICBpZiAoc3RhY2tGcmFtZS5mcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2Fs
bGVlKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tGcmFtZS5mcmFtZVR5
cGUgPT0gRnJhbWVUeXBlOjpWZXJpZmllZEV4ZWN1dGFibGUpOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgIGZvciAoVW5wcm9jZXNzZWRTdGFja1RyYWNlJiB1bnByb2Nlc3NlZFN0YWNr
VHJhY2UgOiBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMpIHsKKyAgICAgICAgbV9zdGFja1RyYWNl
cy5hcHBlbmQoU3RhY2tUcmFjZSgpKTsKKyAgICAgICAgU3RhY2tUcmFjZSYgc3RhY2tUcmFjZSA9
IG1fc3RhY2tUcmFjZXMubGFzdCgpOworICAgICAgICBzdGFja1RyYWNlLnRpbWVzdGFtcCA9IHVu
cHJvY2Vzc2VkU3RhY2tUcmFjZS50aW1lc3RhbXA7CisKKyAgICAgICAgYXV0byBhcHBlbmRDb2Rl
QmxvY2sgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KSB7CisgICAgICAgICAgICBzdGFja1RyYWNlLmZyYW1lcy5hcHBlbmQoU3RhY2tGcmFtZShjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSk7CisKKyAgICAgICAgICAgIGlmIChieXRlY29kZUlu
ZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpIHsKKyAgICAgICAgICAgICAgICBp
bnQgZGl2b3Q7CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0OworICAgICAgICAgICAg
ICAgIGludCBlbmRPZmZzZXQ7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5leHByZXNzaW9u
UmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4LCBkaXZvdCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZS5mcmFtZXMubGFzdCgp
LmxpbmVOdW1iZXIsIHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKS5jb2x1bW5OdW1iZXIpOwogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbV9zZWVuRXhlY3V0YWJsZXMuYWRkKGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCkpOworICAgICAgICB9OwogCi0gICAgICAgICAgICBKU1ZhbHVlIGNh
bGxlZSA9IEpTVmFsdWU6OmRlY29kZShzdGFja0ZyYW1lLnUudW52ZXJpZmllZENhbGxlZSk7Cisg
ICAgICAgIGF1dG8gYXBwZW5kVW52ZXJpZmllZENhbGxlZSA9IFsmXSAoSlNWYWx1ZSBjYWxsZWUp
IHsKKyAgICAgICAgICAgIHN0YWNrVHJhY2UuZnJhbWVzLmFwcGVuZChTdGFja0ZyYW1lKCkpOwor
ICAgICAgICAgICAgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA9IHN0YWNrVHJhY2UuZnJhbWVzLmxh
c3QoKTsKICAgICAgICAgICAgIGlmICghSGVhcDo6aXNWYWx1ZUdDT2JqZWN0KGZpbHRlciwgbWFy
a2VkQmxvY2tTZXQsIGNhbGxlZSkpIHsKICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1l
VHlwZSA9IEZyYW1lVHlwZTo6VW5rbm93bjsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEpTQ2Vs
bCogY2FsbGVlQ2VsbCA9IGNhbGxlZS5hc0NlbGwoKTsKQEAgLTM3MiwyMiArMzYzLDg4IEBAIHZv
aWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKIAogICAgICAgICAgICAgaWYg
KGNhbGxlZUNlbGwtPnR5cGUoKSAhPSBKU0Z1bmN0aW9uVHlwZSkgewogICAgICAgICAgICAgICAg
IHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gZnJhbWVUeXBlRnJvbUNhbGxEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxK
U0Z1bmN0aW9uKj4oY2FsbGVlQ2VsbCktPmV4ZWN1dGFibGUoKTsKICAgICAgICAgICAgIGlmICgh
ZXhlY3V0YWJsZSkgewogICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gZnJh
bWVUeXBlRnJvbUNhbGxEYXRhKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVj
dXRhYmxlKSk7Ci0gICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6
VmVyaWZpZWRFeGVjdXRhYmxlOwotICAgICAgICAgICAgc3RhY2tGcmFtZS51LnZlcmlmaWVkRXhl
Y3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9
IEZyYW1lVHlwZTo6RXhlY3V0YWJsZTsKKyAgICAgICAgICAgIHN0YWNrRnJhbWUuZXhlY3V0YWJs
ZSA9IGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBtX3NlZW5FeGVjdXRhYmxlcy5hZGQoZXhlY3V0
YWJsZSk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gUHJlcGVuZCB0aGUgdG9wLW1vc3QgaW5s
aW5lZCBmcmFtZSBpZiBuZWVkZWQuIEFsc28sIGdhdGhlcgorICAgICAgICAvLyBsb2NhdGlvbiBp
bmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGUgdG9wIGZyYW1lIGlzIGV4ZWN1dGluZy4KKyAgICAg
ICAgc2l6ZV90IHN0YXJ0SW5kZXggPSAwOworICAgICAgICBpZiAodW5wcm9jZXNzZWRTdGFja1Ry
YWNlLmZyYW1lcy5zaXplKCkgJiYgdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXS5mcmFt
ZVR5cGUgPT0gVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlZlcmlmaWVkQ29kZUJsb2NrKSB7CisgICAg
ICAgICAgICBDb2RlQmxvY2sqIHRvcENvZGVCbG9jayA9IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5m
cmFtZXNbMF0udS52ZXJpZmllZENvZGVCbG9jazsKKyAgICAgICAgICAgIGlmICh1bnByb2Nlc3Nl
ZFN0YWNrVHJhY2UudG9wRnJhbWVJc0xMSW50KSB7CisgICAgICAgICAgICAgICAgLy8gV2UgcmV1
c2UgTExJbnQgQ29kZUJsb2NrcyBmb3IgdGhlIGJhc2VsaW5lIEpJVCwgc28gd2UgbmVlZCB0byBj
aGVjayBmb3IgYm90aCBqaXQgdHlwZXMuCisgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBh
bHNvIGJlIGZhbHNlIGZvciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtub3duKSwgZXZl
biB0aG91Z2gKKyAgICAgICAgICAgICAgICAvLyBpdCdzIHN1cGVyIHVubGlrZWx5LiBPbmUgcmVh
c29uIHRoYXQgdGhpcyBjYW4gYmUgZmFsc2UgaXMgd2hlbiB3ZSB0aHJvdyBmcm9tIGEgREZHIGZy
YW1lLAorICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBw
YXN0IGEgVk1FbnRyeUZyYW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKKyAgICAgICAgICAg
ICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24uIFNvIHdl
IGp1c3QgcHJvdGVjdCBhZ2FpbnN0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmlu
ZyBpdC4KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsKKyAgICAg
ICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVCkgeworICAgICAgICAgICAgICAgICAgICBib29sIGlzVmFsaWRQQzsKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYml0czsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAg
ICAgICAgICBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKSk7CisjZWxzZQorICAgICAgICAgICAg
ICAgICAgICBiaXRzID0gYml0d2lzZV9jYXN0PHVuc2lnbmVkPih1bnByb2Nlc3NlZFN0YWNrVHJh
Y2UubGxpbnRQQyk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9
IHRyeUdldEJ5dGVjb2RlSW5kZXgoYml0cywgdG9wQ29kZUJsb2NrLCBpc1ZhbGlkUEMpOworCisg
ICAgICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpc1ZhbGlkUEMpOyAvLyBGSVhNRTogZG8g
c29tZXRoaW5nIHdpdGggdGhpcyBpbmZvIGZvciB0aGUgd2ViIGluc3BlY3RvcjogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzQ1NQorCisgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZENvZGVCbG9jayh0b3BDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICBzdGFydEluZGV4ID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSB0b3BDb2Rl
QmxvY2stPmZpbmRQQyh1bnByb2Nlc3NlZFN0YWNrVHJhY2UudG9wUEMpKSB7CisgICAgICAgICAg
ICAgICAgY29kZU9yaWdpbi0+d2Fsa1VwSW5saW5lU3RhY2soWyZdIChjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSA/IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNl
bGluZUNvZGVCbG9jay5nZXQoKSA6IHRvcENvZGVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0g
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBz
dGFydEluZGV4OyBpIDwgdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lcy5zaXplKCk7IGkrKykg
eworICAgICAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lJiB1bnByb2Nlc3NlZFN0YWNrRnJh
bWUgPSB1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzW2ldOworICAgICAgICAgICAgaWYgKHVu
cHJvY2Vzc2VkU3RhY2tGcmFtZS5mcmFtZVR5cGUgPT0gVW5wcm9jZXNzZWRGcmFtZVR5cGU6OlZl
cmlmaWVkQ29kZUJsb2NrKSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUudS52ZXJpZmllZENvZGVCbG9jazsKKyAgICAgICAgICAg
ICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUu
Y2FsbFNpdGVJbmRleDsKKworICAgICAgICAgICAgICAgIGF1dG8gYXBwZW5kQ29kZUJsb2NrTm9J
bmxpbmluZyA9IFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNWYWxpZFBDOworICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCB0cnlHZXRCeXRlY29k
ZUluZGV4KGNhbGxTaXRlSW5kZXguYml0cygpLCBjb2RlQmxvY2ssIGlzVmFsaWRQQykpOworICAg
ICAgICAgICAgICAgIH07CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgICAgICAgICBp
ZiAoY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+Y29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KS53YWxr
VXBJbmxpbmVTdGFjayhbJl0gKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUgPyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2su
Z2V0KCkgOiBjb2RlQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2tOb0lubGluaW5nKCk7CisjZWxzZQorICAgICAgICAg
ICAgICAgIGFwcGVuZENvZGVCbG9ja05vSW5saW5pbmcoKTsKKyNlbmRpZgorICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQodW5wcm9jZXNzZWRTdGFja0ZyYW1lLmZy
YW1lVHlwZSA9PSBVbnByb2Nlc3NlZEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kVW52ZXJpZmllZENhbGxlZShKU1ZhbHVlOjpkZWNvZGUodW5wcm9j
ZXNzZWRTdGFja0ZyYW1lLnUudW52ZXJpZmllZENhbGxlZSkpOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgbV9pbmRleE9mTmV4dFN0YWNrVHJhY2VUb1ZlcmlmeSA9IG1f
c3RhY2tUcmFjZXMuc2l6ZSgpOworICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVhcigp
OwogfQogCiB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikKQEAgLTQ3OCwxOCArNTM1LDEyIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6bm90aWNl
Vk1FbnRyeSgpCiAgICAgZGlzcGF0Y2hJZk5lY2Vzc2FyeShsb2NrZXIpOwogfQogCi12b2lkIFNh
bXBsaW5nUHJvZmlsZXI6OmNsZWFyRGF0YSgpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2NrKTsKLSAgICBjbGVhckRhdGEobG9ja2VyKTsKLX0KLQogdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
OjpjbGVhckRhdGEoY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xv
Y2tlZCgpKTsKICAgICBtX3N0YWNrVHJhY2VzLmNsZWFyKCk7CiAgICAgbV9zZWVuRXhlY3V0YWJs
ZXMuY2xlYXIoKTsKLSAgICBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5ID0gMDsKKyAg
ICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMuY2xlYXIoKTsKIH0KIAogU3RyaW5nIFNhbXBsaW5n
UHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRpc3BsYXlOYW1lKCkKQEAgLTQ5OCw5ICs1NDksNyBAQCBT
dHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzCiAgICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoIih1bmtub3duKSIpOwogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBl
OjpIb3N0KQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIoaG9zdCkiKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChmcmFtZVR5cGUgIT0gRnJhbWVUeXBlOjpVbnZlcmlmaWVkQ2FsbGVlKTsKIAot
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdS52ZXJpZmllZEV4ZWN1dGFibGU7CiAg
ICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPm5hbWUoKTsKIApAQCAtNTIx
LDkgKzU3MCw3IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXMKICAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiKHVua25vd24pIik7CiAgICAgaWYgKGZyYW1lVHlw
ZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIihob3N0
KSIpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZp
ZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVk
RXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+bmFt
ZSgpOwogCkBAIC01NDQsMjUgKzU5MSwyMSBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZTo6ZGlzCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1pbnQgU2FtcGxpbmdQcm9m
aWxlcjo6U3RhY2tGcmFtZTo6c3RhcnRMaW5lKCkKK2ludCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFj
a0ZyYW1lOjpmdW5jdGlvblN0YXJ0TGluZSgpCiB7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFt
ZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkKICAgICAgICAg
cmV0dXJuIC0xOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFtZVR5cGU6OlVu
dmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB1LnZl
cmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkK
ICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRh
YmxlKj4oZXhlY3V0YWJsZSktPmZpcnN0TGluZSgpOwogfQogCi11bnNpZ25lZCBTYW1wbGluZ1By
b2ZpbGVyOjpTdGFja0ZyYW1lOjpzdGFydENvbHVtbigpCit1bnNpZ25lZCBTYW1wbGluZ1Byb2Zp
bGVyOjpTdGFja0ZyYW1lOjpmdW5jdGlvblN0YXJ0Q29sdW1uKCkKIHsKICAgICBpZiAoZnJhbWVU
eXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0
KQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZnJhbWVUeXBlICE9IEZy
YW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSk7CiAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0
YWJsZSA9IHUudmVyaWZpZWRFeGVjdXRhYmxlOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RG
dW5jdGlvbigpKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTU3Myw5ICs2MTYsNyBAQCBpbnRw
dHJfdCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpzCiB7CiAgICAgaWYgKGZyYW1lVHlw
ZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCkK
ICAgICAgICAgcmV0dXJuIC0xOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlwZSAhPSBGcmFt
ZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUgPSB1LnZlcmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVu
Y3Rpb24oKSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC01ODYsOSArNjI3LDcgQEAgU3RyaW5n
IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnVybAogewogICAgIGlmIChmcmFtZVR5cGUg
PT0gRnJhbWVUeXBlOjpVbmtub3duIHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1lVHlw
ZSAhPSBGcmFtZVR5cGU6OlVudmVyaWZpZWRDYWxsZWUpOwogCi0gICAgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUgPSB1LnZlcmlmaWVkRXhlY3V0YWJsZTsKICAgICBpZiAoZXhlY3V0YWJsZS0+
aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKQEAgLTU5
OCw3ICs2MzcsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6dXJsCiAg
ICAgcmV0dXJuIHVybDsKIH0KIAotVmVjdG9yPFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrVHJhY2U+
JiBTYW1wbGluZ1Byb2ZpbGVyOjpzdGFja1RyYWNlcyhjb25zdCBMb2NrSG9sZGVyJikKK1ZlY3Rv
cjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiBTYW1wbGluZ1Byb2ZpbGVyOjpyZWxlYXNl
U3RhY2tUcmFjZXMoY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyKQogewogICAgIEFTU0VSVChtX2xv
Y2suaXNMb2NrZWQoKSk7CiAgICAgewpAQCAtNjA2LDcgKzY0NSw5IEBAIFZlY3RvcjxTYW1wbGlu
Z1Byb2ZpbGVyOjpTdGFja1RyYWNlPiYgU2EKICAgICAgICAgcHJvY2Vzc1VudmVyaWZpZWRTdGFj
a1RyYWNlcygpOwogICAgIH0KIAotICAgIHJldHVybiBtX3N0YWNrVHJhY2VzOworICAgIFZlY3Rv
cjxTdGFja1RyYWNlPiByZXN1bHQoV1RGTW92ZShtX3N0YWNrVHJhY2VzKSk7CisgICAgY2xlYXJE
YXRhKGxvY2tlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogU3RyaW5nIFNhbXBsaW5nUHJv
ZmlsZXI6OnN0YWNrVHJhY2VzQXNKU09OKCkKQEAgLTY0Myw2ICs2ODQsOCBAQCBTdHJpbmcgU2Ft
cGxpbmdQcm9maWxlcjo6c3RhY2tUcmFjZXNBc0pTCiAKICAgICBqc29uLmFwcGVuZExpdGVyYWwo
Il0iKTsKIAorICAgIGNsZWFyRGF0YShsb2NrZXIpOworCiAgICAgcmV0dXJuIGpzb24udG9TdHJp
bmcoKTsKIH0KIApAQCAtNjU1LDExICs2OTgsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1l
VHlwZSBmcmFtZVR5cGUpCiB7CiAgICAgc3dpdGNoIChmcmFtZVR5cGUpIHsKLSAgICBjYXNlIFNh
bXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6VmVyaWZpZWRFeGVjdXRhYmxlOgotICAgICAgICBv
dXQucHJpbnQoIlZlcmlmaWVkRXhlY3V0YWJsZSIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZToKLSAgICAgICAg
b3V0LnByaW50KCJVbnZlcmlmaWVkQ2FsbGVlIik7CisgICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVy
OjpGcmFtZVR5cGU6OkV4ZWN1dGFibGU6CisgICAgICAgIG91dC5wcmludCgiRXhlY3V0YWJsZSIp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6
SG9zdDoKICAgICAgICAgb3V0LnByaW50KCJIb3N0Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCShyZXZpc2lvbiAxOTU4Mzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDQ4ICs0NCw4OCBAQCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKIGNs
YXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxp
bmdQcm9maWxlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IGVudW0gY2xhc3MgRnJhbWVUeXBlIHsgCi0gICAgICAgIFZlcmlmaWVkRXhlY3V0YWJsZSwgCisK
KyAgICBlbnVtIGNsYXNzIFVucHJvY2Vzc2VkRnJhbWVUeXBlIHsgCiAgICAgICAgIFVudmVyaWZp
ZWRDYWxsZWUsCi0gICAgICAgIEhvc3QsIAotICAgICAgICBVbmtub3duIAorICAgICAgICBWZXJp
ZmllZENvZGVCbG9jawogICAgIH07CiAKLSAgICBzdHJ1Y3QgU3RhY2tGcmFtZSB7Ci0gICAgICAg
IFN0YWNrRnJhbWUoRnJhbWVUeXBlIGZyYW1lVHlwZSwgRW5jb2RlZEpTVmFsdWUgY2FsbGVlKQot
ICAgICAgICAgICAgOiBmcmFtZVR5cGUoZnJhbWVUeXBlKQorICAgIHN0cnVjdCBVbnByb2Nlc3Nl
ZFN0YWNrRnJhbWUgeworICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoRW5jb2RlZEpTVmFs
dWUgY2FsbGVlKQorICAgICAgICAgICAgOiBmcmFtZVR5cGUoVW5wcm9jZXNzZWRGcmFtZVR5cGU6
OlVudmVyaWZpZWRDYWxsZWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHUudW52ZXJpZmllZENh
bGxlZSA9IGNhbGxlZTsKICAgICAgICAgfQotICAgICAgICBTdGFja0ZyYW1lKEZyYW1lVHlwZSBm
cmFtZVR5cGUsIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQotICAgICAgICAgICAgOiBmcmFt
ZVR5cGUoZnJhbWVUeXBlKQorICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICAgICAgICAgIDog
ZnJhbWVUeXBlKFVucHJvY2Vzc2VkRnJhbWVUeXBlOjpWZXJpZmllZENvZGVCbG9jaykKKyAgICAg
ICAgICAgICwgY2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KQogICAgICAgICB7Ci0gICAgICAg
ICAgICB1LnZlcmlmaWVkRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgICAgICAgICB1LnVu
dmVyaWZpZWRDYWxsZWUgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgICAg
IHUudmVyaWZpZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgICAgIH0KLSAgICAgICAgU3Rh
Y2tGcmFtZSgpCi0gICAgICAgICAgICA6IGZyYW1lVHlwZShGcmFtZVR5cGU6OlVua25vd24pCisg
ICAgICAgIFVucHJvY2Vzc2VkU3RhY2tGcmFtZSgpCisgICAgICAgICAgICA6IGZyYW1lVHlwZShV
bnByb2Nlc3NlZEZyYW1lVHlwZTo6VW52ZXJpZmllZENhbGxlZSkKICAgICAgICAgewotICAgICAg
ICAgICAgdS52ZXJpZmllZEV4ZWN1dGFibGUgPSBudWxscHRyOworICAgICAgICAgICAgdS51bnZl
cmlmaWVkQ2FsbGVlID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBGcmFtZVR5cGUgZnJhbWVUeXBlOworICAgICAgICBVbnByb2Nlc3NlZEZyYW1lVHlw
ZSBmcmFtZVR5cGU7CiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIEVuY29kZWRKU1ZhbHVl
IHVudmVyaWZpZWRDYWxsZWU7Ci0gICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogdmVyaWZpZWRF
eGVjdXRhYmxlOworICAgICAgICAgICAgQ29kZUJsb2NrKiB2ZXJpZmllZENvZGVCbG9jazsKICAg
ICAgICAgfSB1OworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXg7CisgICAgfTsK
KworICAgIGVudW0gY2xhc3MgRnJhbWVUeXBlIHsgCisgICAgICAgIEV4ZWN1dGFibGUsCisgICAg
ICAgIEhvc3QsCisgICAgICAgIFVua25vd24gCisgICAgfTsKIAorICAgIHN0cnVjdCBTdGFja0Zy
YW1lIHsKKyAgICAgICAgU3RhY2tGcmFtZShFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKKyAg
ICAgICAgICAgIDogZnJhbWVUeXBlKEZyYW1lVHlwZTo6RXhlY3V0YWJsZSkKKyAgICAgICAgICAg
ICwgZXhlY3V0YWJsZShleGVjdXRhYmxlKQorICAgICAgICB7IH0KKyAgICAgICAgU3RhY2tGcmFt
ZSgpCisgICAgICAgICAgICA6IGZyYW1lVHlwZShGcmFtZVR5cGU6OlVua25vd24pCisgICAgICAg
ICAgICAsIGV4ZWN1dGFibGUobnVsbHB0cikKKyAgICAgICAgeyB9CisKKyAgICAgICAgRnJhbWVU
eXBlIGZyYW1lVHlwZTsKKyAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGU7CisKKyAg
ICAgICAgLy8gVGhlc2UgYXR0ZW1wdCB0byBiZSBleHByZXNzaW9uLWxldmVsIGxpbmUgYW5kIGNv
bHVtbiBudW1iZXIuCisgICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgeyBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgdW5zaWduZWQgY29sdW1uTnVtYmVy
IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKKyAgICAgICAgLy8g
VGhlc2UgYXJlIGZ1bmN0aW9uLWxldmVsIGRhdGEuCiAgICAgICAgIFN0cmluZyBkaXNwbGF5TmFt
ZSgpOwogICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWVGb3JKU09OVGVzdHMoKTsgLy8gVXNlZCBm
b3IgSlNDIHN0cmVzcyB0ZXN0cyBiZWNhdXNlIHRoZXkgd2FudCB0aGUgIihhbm9ueW1vdXMgZnVu
Y3Rpb24pIiBzdHJpbmcgZm9yIGFub255bW91cyBmdW5jdGlvbnMgYW5kIHRoZXkgd2FudCAiKGV2
YWwpIiBmb3IgZXZhbCdkIGNvZGUuCi0gICAgICAgIGludCBzdGFydExpbmUoKTsKLSAgICAgICAg
dW5zaWduZWQgc3RhcnRDb2x1bW4oKTsKKyAgICAgICAgaW50IGZ1bmN0aW9uU3RhcnRMaW5lKCk7
CisgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uU3RhcnRDb2x1bW4oKTsKICAgICAgICAgaW50cHRy
X3Qgc291cmNlSUQoKTsKICAgICAgICAgU3RyaW5nIHVybCgpOwogICAgIH07CiAKKyAgICBzdHJ1
Y3QgVW5wcm9jZXNzZWRTdGFja1RyYWNlIHsKKyAgICAgICAgZG91YmxlIHRpbWVzdGFtcDsKKyAg
ICAgICAgdm9pZCogdG9wUEM7CisgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50OworICAgICAg
ICB2b2lkKiBsbGludFBDOworICAgICAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFja0ZyYW1lPiBm
cmFtZXM7CisgICAgfTsKKwogICAgIHN0cnVjdCBTdGFja1RyYWNlIHsKLSAgICAgICAgYm9vbCBu
ZWVkc1ZlcmlmaWNhdGlvbjsKICAgICAgICAgZG91YmxlIHRpbWVzdGFtcDsKICAgICAgICAgVmVj
dG9yPFN0YWNrRnJhbWU+IGZyYW1lczsKKyAgICAgICAgU3RhY2tUcmFjZSgpCisgICAgICAgIHsg
fQorICAgICAgICBTdGFja1RyYWNlKFN0YWNrVHJhY2UmJiBvdGhlcikKKyAgICAgICAgICAgIDog
dGltZXN0YW1wKG90aGVyLnRpbWVzdGFtcCkKKyAgICAgICAgICAgICwgZnJhbWVzKFdURk1vdmUo
b3RoZXIuZnJhbWVzKSkKKyAgICAgICAgeyB9CiAgICAgfTsKIAogICAgIFNhbXBsaW5nUHJvZmls
ZXIoVk0mLCBSZWZQdHI8U3RvcHdhdGNoPiYmKTsKQEAgLTEwMCwxMiArMTQwLDEwIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHN0YXJ0KGNvbnN0IExvY2tIb2xkZXImKTsKICAgICB2b2lkIHN0b3AoKTsK
ICAgICB2b2lkIHN0b3AoY29uc3QgTG9ja0hvbGRlciYpOwotICAgIFZlY3RvcjxTdGFja1RyYWNl
PiYgc3RhY2tUcmFjZXMoY29uc3QgTG9ja0hvbGRlciYpOworICAgIFZlY3RvcjxTdGFja1RyYWNl
PiByZWxlYXNlU3RhY2tUcmFjZXMoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFN0cmluZyBzdGFja1RyYWNlc0FzSlNPTigpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgbm90aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9uVGhyZWFkKCk7CiAgICAgdm9p
ZCBub3RpY2VDdXJyZW50VGhyZWFkQXNKU0NFeGVjdXRpb25UaHJlYWQoY29uc3QgTG9ja0hvbGRl
ciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXJEYXRhKCk7Ci0gICAgdm9pZCBj
bGVhckRhdGEoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIHZvaWQgcHJvY2Vzc1VudmVyaWZpZWRT
dGFja1RyYWNlcygpOyAvLyBZb3Ugc2hvdWxkIGNhbGwgdGhpcyBvbmx5IGFmdGVyIGFjcXVpcmlu
ZyB0aGUgbG9jay4KICAgICBkb3VibGUgdG90YWxUaW1lKGNvbnN0IExvY2tIb2xkZXImKSB7IHJl
dHVybiBtX3RvdGFsVGltZTsgfQogICAgIHZvaWQgc2V0U3RvcFdhdGNoKGNvbnN0IExvY2tIb2xk
ZXImLCBSZWY8U3RvcHdhdGNoPiYmIHN0b3B3YXRjaCkgeyBtX3N0b3B3YXRjaCA9IFdURk1vdmUo
c3RvcHdhdGNoKTsgfQpAQCAtMTE0LDExICsxNTIsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRp
c3BhdGNoSWZOZWNlc3NhcnkoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIHZvaWQgZGlzcGF0Y2hG
dW5jdGlvbihjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQg
Y2xlYXJEYXRhKGNvbnN0IExvY2tIb2xkZXImKTsKIAogICAgIFZNJiBtX3ZtOwogICAgIFJlZlB0
cjxTdG9wd2F0Y2g+IG1fc3RvcHdhdGNoOwogICAgIFZlY3RvcjxTdGFja1RyYWNlPiBtX3N0YWNr
VHJhY2VzOwotICAgIHNpemVfdCBtX2luZGV4T2ZOZXh0U3RhY2tUcmFjZVRvVmVyaWZ5OworICAg
IFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrVHJhY2U+IG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlczsK
ICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91
YmxlIG1fbGFzdFRpbWU7CiAgICAgZG91YmxlIG1fdG90YWxUaW1lOwpAQCAtMTMwLDcgKzE2OSw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzUGF1c2VkOwogICAgIGJvb2wgbV9oYXNEaXNwYXRj
aGVkRnVuY3Rpb247CiAgICAgSGFzaFNldDxFeGVjdXRhYmxlQmFzZSo+IG1fc2VlbkV4ZWN1dGFi
bGVzOwotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBtX2N1cnJlbnRGcmFtZXM7CisgICAgVmVjdG9y
PFVucHJvY2Vzc2VkU3RhY2tGcmFtZT4gbV9jdXJyZW50RnJhbWVzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAxOTU4MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxMiwxMSArMzEyLDE1IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICAgICAgZW5hYmxlQ29udHJvbEZsb3dQcm9maWxlcigpOwogI2lm
IEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICBpZiAoT3B0aW9uczo6dXNlU2FtcGxpbmdQ
cm9maWxlcigpKSB7CisgICAgICAgIHNldFNob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5n
KCk7CiAgICAgICAgIG1fc2FtcGxpbmdQcm9maWxlciA9IGFkb3B0UmVmKG5ldyBTYW1wbGluZ1By
b2ZpbGVyKCp0aGlzLCBTdG9wd2F0Y2g6OmNyZWF0ZSgpKSk7CiAgICAgICAgIG1fc2FtcGxpbmdQ
cm9maWxlci0+c3RhcnQoKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJ
TEVSKQogCisgICAgaWYgKE9wdGlvbnM6OmFsd2F5c0dlbmVyYXRlUENUb0NvZGVPcmlnaW5NYXAo
KSkKKyAgICAgICAgc2V0U2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKTsKKwogICAg
IGlmIChPcHRpb25zOjp3YXRjaGRvZygpKSB7CiAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgdGltZW91dE1pbGxpcyhPcHRpb25zOjp3YXRjaGRvZygpKTsKICAgICAgICAgV2F0Y2hk
b2cmIHdhdGNoZG9nID0gZW5zdXJlV2F0Y2hkb2coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMTk1ODM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTk3LDYgKzU5Nyw5IEBAIHB1YmxpYzoKIAog
ICAgIGlubGluZSBib29sIHNob3VsZFRyaWdnZXJUZXJtaW5hdGlvbihFeGVjU3RhdGUqKTsKIAor
ICAgIHZvaWQgc2V0U2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSB7IG1fc2hvdWxk
QnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcgPSB0cnVlOyB9CisgICAgYm9vbCBzaG91bGRCdWls
ZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRCdWlsZFBD
VG9Db2RlT3JpZ2luTWFwcGluZzsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIENsZWFyRXhjZXB0aW9uU2NvcGU7
CkBAIC02NDgsNiArNjUxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZmFpbE5leHROZXdDb2Rl
QmxvY2sgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5OwogICAgIGJv
b2wgbV9zaG91bGRSZXdyaXRlQ29uc3RBc1ZhciB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Nob3Vs
ZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nIHsgZmFsc2UgfTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVk
UHJvZmlsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ1aWx0aW5FeGVjdXRhYmxlcz4gbV9idWls
dGluRXhlY3V0YWJsZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3NhbXBsaW5nLXByb2ZpbGVyLWJhc2ljLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItYmFzaWMuanMJKHJldmlzaW9u
IDE5NTgzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2FtcGxpbmct
cHJvZmlsZXItYmFzaWMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiw4IEBAIGlmIChw
bGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlcigpKSAKICAgICAgICAgICAgIHgtLTsKICAg
ICAgICAgfQogICAgIH0KLSAgICBub0lubGluZSh0b3ApOwotICAgIC8vIEZJWE1FOiBXZSBuZWVk
IHRvIGNhbGwgdG9wKCkgdG8gZ2V0IHRoZSBDYWxsU2l0ZUluZGV4IHRvIHVwZGF0ZQotICAgIC8v
IGluc2lkZSB0aGUgY2FsbCBmcmFtZS4gV2UgbmVlZCB0byBmaXggdGhhdCBieSBoYXZpbmcgYSBQ
Qz0+Q29kZU9yaWdpbgotICAgIC8vIG1hcHBpbmc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTI2MjkKLSAgICBmdW5jdGlvbiBqYXooeCkgeyByZXR1cm4geCArIHRv
cCgpOyB9IC8vIAorCisgICAgZnVuY3Rpb24gamF6KHgpIHsgcmV0dXJuIHggKyB0b3AoKTsgfQog
ICAgIGZ1bmN0aW9uIGtheih5KSB7CiAgICAgICAgIHJldHVybiBqYXooeSkgKyA1OwogICAgIH0K
</data>
<flag name="review"
          id="295093"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>