<?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>195925</bug_id>
          
          <creation_ts>2019-03-18 18:36:42 -0700</creation_ts>
          <short_desc>[WHLSL] Implement property resolver</short_desc>
          <delta_ts>2019-05-23 15:41:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=198143</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>197448</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>graouts</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1518053</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-18 18:36:42 -0700</bug_when>
    <thetext>[WHLSL] Implement property resolver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518054</commentid>
    <comment_count>1</comment_count>
      <attachid>365100</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-18 18:38:05 -0700</bug_when>
    <thetext>Created attachment 365100
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518055</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-18 18:39:29 -0700</bug_when>
    <thetext>Left-values can be created by dereference expressions, property accesses (dot expressions and index expressions), and variable references.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518057</commentid>
    <comment_count>3</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-18 18:47:54 -0700</bug_when>
    <thetext>(a, b).c = d;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518069</commentid>
    <comment_count>4</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-18 18:55:37 -0700</bug_when>
    <thetext>There are 4 cases:

1) Only an ander
2) Only a getter
3) Only a setter
4) A getter and a setter

In case 4, we need to make sure the types match.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518095</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-18 19:29:49 -0700</bug_when>
    <thetext>Turns out the spec says that comma expressions are always rvalues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518149</commentid>
    <comment_count>6</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-18 22:59:35 -0700</bug_when>
    <thetext>782 For every declaration of a function with a name of the form ``operator&amp;.field`` for some name ``field`` with argument type ``thread T1*`` and return type ``thread T2*``:
 783
 784     #. Add a declaration of a function ``operator.field=`` for the same name ``field``, with argument types ``T1`` and ``T2``, and return type ``T1``
 785     #. Add a declaration of a function ``operator.field`` for the same name ``field``, with argument type ``T1`` and return type ``T2``
 786
 787 For every declaration of the function ``operator&amp;[]`` with argument types ``thread T1*`` and ``uint32``, and return type ``thread T2*``:
 788
 789     #. Add a declaration of a function ``operator[]=`` with argument types ``T1``, ``uint32`` and ``T2``, and return type ``T1``
 790     #. Add a declaration of a function ``operator[]`` with argument types ``T1`` and ``uint32``, and return type ``T2``
 791
 792 For every function with a name of the form ``operator.field=`` for some name ``field`` which is defined:
 793
 794     #. There must be a function with the name ``operator.field`` (for the same name ``field``) which is defined
 795     #. For each declaration of the former with arguments type ``(t1, t2)``, there must be a declaration of the latter with argument type ``(t1)``, and return type ``t2``
 796
 797 If a function with the name ``operator[]=`` is defined:
 798
 799     #. There must be a function with the name ``operator[]`` which is defined
 800     #. For each declaration of the former with arguments type ``(t1, t2, t3)``, there must be a declaration of the latter with argument type ``(t1, t2)``, and return type ``t3``
 801
 802 If there are two function declarations with the same names, number of parameters, types of their parameters, then the program is invalid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518162</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-18 23:57:55 -0700</bug_when>
    <thetext>We should make sure things like 5.foo work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518167</commentid>
    <comment_count>8</comment_count>
      <attachid>365130</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-19 00:17:35 -0700</bug_when>
    <thetext>Created attachment 365130
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518170</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-19 00:23:42 -0700</bug_when>
    <thetext>We should also make sure we disallow set-only fields and fields with multiple setters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518603</commentid>
    <comment_count>10</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-19 16:02:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/48219643&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518671</commentid>
    <comment_count>11</comment_count>
      <attachid>365275</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-19 17:58:29 -0700</bug_when>
    <thetext>Created attachment 365275
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518676</commentid>
    <comment_count>12</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-19 18:02:01 -0700</bug_when>
    <thetext>Attachment 365275 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 11 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>1518717</commentid>
    <comment_count>13</comment_count>
      <attachid>365291</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-19 19:35:08 -0700</bug_when>
    <thetext>Created attachment 365291
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519376</commentid>
    <comment_count>14</comment_count>
      <attachid>365455</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-20 18:02:30 -0700</bug_when>
    <thetext>Created attachment 365455
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520041</commentid>
    <comment_count>15</comment_count>
      <attachid>365648</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-21 16:58:43 -0700</bug_when>
    <thetext>Created attachment 365648
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520056</commentid>
    <comment_count>16</comment_count>
      <attachid>365651</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-21 17:18:26 -0700</bug_when>
    <thetext>Created attachment 365651
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520115</commentid>
    <comment_count>17</comment_count>
      <attachid>365669</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-21 19:21:40 -0700</bug_when>
    <thetext>Created attachment 365669
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520548</commentid>
    <comment_count>18</comment_count>
      <attachid>365787</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-22 17:25:30 -0700</bug_when>
    <thetext>Created attachment 365787
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528290</commentid>
    <comment_count>19</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-04-17 15:25:08 -0700</bug_when>
    <thetext>*** Bug 195788 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1532082</commentid>
    <comment_count>20</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-05-01 14:43:14 -0700</bug_when>
    <thetext>Example shader that should work after this patch:

vertex float4 vertex_main(uint id : SV_VertexID) : SV_Position
{
    float4 out;

    switch (id) {
    case 0:
        out = float4(-1, 1, 0, 1);
        break;
    case 1:
        out = float4(-1, -1, 0, 1);
        break;
    case 2:
        out = float4(1, 1, 0, 1);
        break;
    default:
        out = float4(1, -1, 0, 1);
        break;
    }
    
    return out;
}

fragment float4 fragment_main() : SV_Target 0 
{
    return float4(0, 1, 0, 1);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1532083</commentid>
    <comment_count>21</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-05-01 14:43:49 -0700</bug_when>
    <thetext>^for simple-triangle-strip.html in our layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1532092</commentid>
    <comment_count>22</comment_count>
      <attachid>365787</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-05-01 15:03:00 -0700</bug_when>
    <thetext>Comment on attachment 365787
WIP

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:62
&gt; +    FunctionDeclaration* getFunction() { return m_getFunction; }

#include &quot;WHLSLFunctionDeclaration.h&quot;

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:113
&gt;  }

In FunctionDefinitionWriter::visit(AST::FunctionDefinition&amp;) [lines 217, 234]:

Ignore all &apos;ASSERT(m_stack.isEmpty());&apos;

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:233
&gt;          checkErrorAndVisit(functionDefinition.block());

In FunctionDefintionWriter::visit(AST::AssignmentExpression&amp;) [line 489]: 

ADD:

    if (is&lt;AST::DereferenceExpression&gt;(assignmentExpression.left())) {
        checkErrorAndVisit(downcast&lt;AST::DereferenceExpression&gt;(assignmentExpression.left()).pointer());
        auto leftName = m_stack.takeLast();
        checkErrorAndVisit(assignmentExpression.right());
        auto rightName = m_stack.takeLast();
        m_stringBuilder.append(makeString(&apos;*&apos;, leftName, &quot; = &quot;, rightName, &quot;;\n&quot;));
        m_stack.append(rightName);
        return;
    }

[previously line 503]:

REPLACE:

m_stack.append(leftName); -&gt; m_stack.append(rightName);

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:30
&gt; +

#include &quot;WHLSLAssignmentExpression.h&quot;
#include &quot;WHLSLCallExpression.h&quot;
#include &quot;WHLSLCommaExpression.h&quot;
#include &quot;WHLSLDereferenceExpression.h&quot;
#include &quot;WHLSLDotExpression.h&quot;
#include &quot;WHLSLFunctionDeclaration.h&quot;
#include &quot;WHLSLFunctionDefinition.h&quot;
#include &quot;WHLSLMakePointerExpression.h&quot;
#include &quot;WHLSLPointerType.h&quot;
#include &quot;WHLSLReadModifyWriteExpression.h&quot;
#include &quot;WHLSLVariableDeclaration.h&quot;
#include &quot;WHLSLVariableReference.h&quot;

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:182
&gt; +        ASSERT(iterator-&gt;base().typeAnnotation());

Move &apos;chain.append(*iterator);&apos; here to prevent underflow math later based on chain.size().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1532155</commentid>
    <comment_count>23</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-05-01 17:33:26 -0700</bug_when>
    <thetext>Also, add the float4() constructor to WHLSLStandardLibrary.txt:

float4 float4(float x, float y, float z, float w) {
    float4 result;
    result.x = x;
    result.y = y;
    result.z = z;
    result.w = w;
    return result;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1536352</commentid>
    <comment_count>24</comment_count>
      <attachid>369928</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-14 23:15:35 -0700</bug_when>
    <thetext>Created attachment 369928
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537902</commentid>
    <comment_count>25</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-21 09:44:12 -0700</bug_when>
    <thetext>(In reply to Justin Fan from comment #23)
&gt; Also, add the float4() constructor to WHLSLStandardLibrary.txt:
&gt; 
&gt; float4 float4(float x, float y, float z, float w) {
operator float4(float x, float y, float z, float w) {
&gt;     float4 result;
&gt;     result.x = x;
&gt;     result.y = y;
&gt;     result.z = z;
&gt;     result.w = w;
&gt;     return result;
&gt; }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537946</commentid>
    <comment_count>26</comment_count>
      <attachid>370332</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-21 12:00:30 -0700</bug_when>
    <thetext>Created attachment 370332
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537975</commentid>
    <comment_count>27</comment_count>
      <attachid>370338</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-21 13:48:32 -0700</bug_when>
    <thetext>Created attachment 370338
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538071</commentid>
    <comment_count>28</comment_count>
      <attachid>370361</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-21 17:56:27 -0700</bug_when>
    <thetext>Created attachment 370361
Simple dot expressions work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538081</commentid>
    <comment_count>29</comment_count>
      <attachid>370366</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-21 18:34:41 -0700</bug_when>
    <thetext>Created attachment 370366
Simple dot expressions work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538087</commentid>
    <comment_count>30</comment_count>
      <attachid>370369</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-21 18:46:25 -0700</bug_when>
    <thetext>Created attachment 370369
Simple dot expressions work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538390</commentid>
    <comment_count>31</comment_count>
      <attachid>370369</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-05-22 14:56:17 -0700</bug_when>
    <thetext>Comment on attachment 370369
Simple dot expressions work

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

I&apos;ve not checked every single line closely, but it looks reasonable overall. I&apos;ve just a few nits that I&apos;ve added inline.

&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLExpression.h:100
&gt; +    Optional&lt;TypeAnnotation&gt; m_typeAnnotation;

I am not sure I understand why it is optional when {RightValue/Abstract left-value/Left value} should cover all types.
Is it because the types is built over time and is not available from the start?

&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:110
&gt; +    FunctionDeclaration* m_andFunction { nullptr };

What is the difference between m_andFunction and m_threadAndFunction?

&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:82
&gt; +using VariableDeclarations = Vector&lt;UniqueRef&lt;VariableDeclaration&gt;&gt;;

Can you mention this change in the changelog and explain its reasoning?
Considering how much of the patch it is, it would probably have been best as a separate patch.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:145
&gt; +    // FIXME: Authors can make a struct field named &quot;length&quot; too. Autogenerated getters for those shouldn&apos;t take this codepath.

As long as this path is only for *native* function declarations, I think it is not a risk.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:623
&gt; +static Optional&lt;UniqueRef&lt;AST::UnnamedType&gt;&gt; commit(ResolvingType&amp; resolvingType)

Could you either give a more informative name to this function or some comment?
It is far from obvious what it does.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:792
&gt; +    auto addressSpaceAddResult = m_typeAnnotations.add(&amp;expression, WTFMove(typeAnnotation));

Nit: maybe rename it typeAnnotationAddResult ?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:985
&gt; +        andFunction = resolveFunctionOverloadImpl(dotExpression.possibleAndOverloads(), andArgumentTypes, nullptr);

Nit: It looks like { baseInfo-&gt;resolvingType } instead of andArgumentTypes might be a bit more readable and let you remove a couple lines.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:1028
&gt; +    if (setFunction &amp;&amp; andFunction) {

Does this mean that we only detect this case when for types that we use in a dot expression?
This would be a deviation from the spec that would reject any program with an ander and a setter that collide, whether or not they are dead code.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:1060
&gt; +    if (!variableReference.variable()-&gt;isAnonymous()) // FIXME: This doesn&apos;t seem right.

I agree, it does not seem right at all. I don&apos;t understand the way the checker and in particular these variable references work well enough to suggest a fix though.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:404
&gt; +    auto modifyResult = modify(downcast&lt;AST::DotExpression&gt;(assignmentExpression.left()), [&amp;](Optional&lt;UniqueRef&lt;AST::Expression&gt;&gt;&amp;&amp;) -&gt; Optional&lt;ModificationResult&gt; {

This looks like it should only execute in the case where we are doing a RMW operation?
Or at least we could skip a lot of that in the normal case.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:454
&gt; +            variableReference-&gt;setTypeAnnotation(AST::LeftValue { AST::AddressSpace::Thread }); // FIXME: Is this right?

I think it is right.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:744
&gt; +    // FIXME: What about function call arguments?

A function call is always a right-value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538427</commentid>
    <comment_count>32</comment_count>
      <attachid>370369</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-22 15:49:25 -0700</bug_when>
    <thetext>Comment on attachment 370369
Simple dot expressions work

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

r=me

&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLAddressSpace.h:46
&gt; +struct LeftValue {

Name nit: Do we really want to go with &quot;Left&quot; instead of &quot;L&quot;, &quot;Right&quot; instead of &quot;R&quot;? I feel like most of the text I see on this just uses &quot;L&quot; and &quot;R&quot; as the canonical name.

&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLAssignmentExpression.h:58
&gt; +    UniqueRef&lt;Expression&gt;&amp;&amp; takeRight() { return WTFMove(m_right); }

nit: This doesn&apos;t actually take the right, e.g, if someone just called:
takeRight();

The value wouldn&apos;t actually end up being moved, since it&apos;s just casted to. Maybe this should return UniqueRef&lt;Expression&gt; instead?

So: UniqueRef&lt;Expression&gt; takeRight() { return WTFMove(m_right); }

&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:102
&gt; +    UniqueRef&lt;Expression&gt;&amp;&amp; takeBase() { return WTFMove(m_base); }

ditto about &quot;take&quot;

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:145
&gt; +    // FIXME: Authors can make a struct field named &quot;length&quot; too. Autogenerated getters for those shouldn&apos;t take this codepath.

Can you link to a bug here so we don&apos;t forget?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:169
&gt; +        auto mangledFieldName = [&amp;](String&amp; fieldName) -&gt; String {

const String&amp; as param?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:987
&gt; +            andReturnType = &amp;downcast&lt;AST::PointerType&gt;(andFunction-&gt;type()).elementType(); // FIXME: Enforce the return of anders will always be a pointer

Can you file a bug and link it here?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:998
&gt; +            threadAndReturnType = &amp;downcast&lt;AST::PointerType&gt;(threadAndFunction-&gt;type()).elementType(); // FIXME: Enforce the return of anders will always be a pointer

ditto

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:1036
&gt; +    dotExpression.setGetFunction(getFunction);
&gt; +    dotExpression.setAndFunction(andFunction);
&gt; +    dotExpression.setThreadAndFunction(threadAndFunction);
&gt; +    dotExpression.setSetFunction(setFunction);

name nit: why not getter/setter/ander instead of set/get/and?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:1060
&gt; +    if (!variableReference.variable()-&gt;isAnonymous()) // FIXME: This doesn&apos;t seem right.

let&apos;s have a bugzilla

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:190
&gt; +    // Find the &quot;.b&quot; &quot;.c&quot; and &quot;.d&quot; expressions.

Nit: Since this code is kinda hairy, might be worth stating what the order of this vector turns out to be too. I think it&apos;s &quot;d&quot;, &quot;c&quot;, &quot;b&quot;

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:199
&gt; +        ASSERT(is&lt;AST::DotExpression&gt;(iterator-&gt;base())); // FIXME: Make this work with index expressions

bugzilla please

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:280
&gt; +    for (size_t i = chain.size() - 1; i &gt; 0; --i) {

nit: I think this is easier to read if you write this as
(site_t i = 0; i--;) and just use &quot;i&quot; below instead of &quot;i - 1&quot;

This is how we write backwards indexed loops in all of JSC. It looks funky at first, but it becomes intuitive to pattern match and understand that it&apos;s correct.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:292
&gt; +        variableReference-&gt;setTypeAnnotation(AST::LeftValue { AST::AddressSpace::Thread }); // FIXME: Is this right?

bugzilla

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:304
&gt; +    // ModificationResult(UniqueRef&lt;AST::Expression&gt;&amp;&amp;)

?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:404
&gt; +    auto modifyResult = modify(downcast&lt;AST::DotExpression&gt;(assignmentExpression.left()), [&amp;](Optional&lt;UniqueRef&lt;AST::Expression&gt;&gt;&amp;&amp;) -&gt; Optional&lt;ModificationResult&gt; {

taking rvalue ref and using it as argument is kinda weird.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:635
&gt; +            static_assert(sizeof(AST::DereferenceExpression) &lt;= sizeof(AST::DotExpression), &quot;Dot expressions need to be able to become dereference expressions without updating backreferences&quot;);
&gt; +            void* location = &amp;dotExpression;
&gt; +            dotExpression.~DotExpression();
&gt; +            auto* dereferenceExpression = new (location) AST::DereferenceExpression(WTFMove(origin), WTFMove(callExpression));
&gt; +            dereferenceExpression-&gt;setType(downcast&lt;AST::PointerType&gt;(andFunction-&gt;type()).elementType().clone());
&gt; +            dereferenceExpression-&gt;setTypeAnnotation(AST::LeftValue { downcast&lt;AST::PointerType&gt;(andFunction-&gt;type()).addressSpace() });

Can we make some kind of function that abstract this AST replacement for us? Maybe like:

template &lt;typename Old, typename New, typename ...Args&gt;
New* replace(Old&amp; old, Args&amp;&amp;... args)
{
    static_assert(sizeof(New) &lt;= sizeof(Old));
    return new (&amp;old) New(std::forward&lt;Args&gt;(args)...);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538601</commentid>
    <comment_count>33</comment_count>
      <attachid>370369</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-23 00:30:23 -0700</bug_when>
    <thetext>Comment on attachment 370369
Simple dot expressions work

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLAddressSpace.h:46
&gt;&gt; +struct LeftValue {
&gt; 
&gt; Name nit: Do we really want to go with &quot;Left&quot; instead of &quot;L&quot;, &quot;Right&quot; instead of &quot;R&quot;? I feel like most of the text I see on this just uses &quot;L&quot; and &quot;R&quot; as the canonical name.

When writing the compiler, I chose to use full names instead of abbreviations because they make things clearer. E.g. &quot;TypeDefinition&quot; instead of &quot;typedef&quot; and &quot;StructureDefinition&quot; instead of &quot;struct&quot;. The logic is just that if I can make it easier to read and understand the code, it&apos;s worth the extra bytes in the source files on our hard drives. Characters are cheap and aren&apos;t an endangered species; we (as humans) are not running out of characters.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLAssignmentExpression.h:58
&gt;&gt; +    UniqueRef&lt;Expression&gt;&amp;&amp; takeRight() { return WTFMove(m_right); }
&gt; 
&gt; nit: This doesn&apos;t actually take the right, e.g, if someone just called:
&gt; takeRight();
&gt; 
&gt; The value wouldn&apos;t actually end up being moved, since it&apos;s just casted to. Maybe this should return UniqueRef&lt;Expression&gt; instead?
&gt; 
&gt; So: UniqueRef&lt;Expression&gt; takeRight() { return WTFMove(m_right); }

Cool.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLExpression.h:100
&gt;&gt; +    Optional&lt;TypeAnnotation&gt; m_typeAnnotation;
&gt; 
&gt; I am not sure I understand why it is optional when {RightValue/Abstract left-value/Left value} should cover all types.
&gt; Is it because the types is built over time and is not available from the start?

Yep! It&apos;s not specified in the constructor.

However, we should probably treat the getter above with the Saam treatment and ASSERT() that m_typeAnnotation is non-nullopt and make the return type of the getter just TypeAnnotation.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:110
&gt;&gt; +    FunctionDeclaration* m_andFunction { nullptr };
&gt; 
&gt; What is the difference between m_andFunction and m_threadAndFunction?

The and function is used in this case:

struct Foo { ... }

device int* operator&amp;.bar(device Foo*) { ... }

compute void computeShader(device Foo[] foos) {
    int baz = foos[0].bar;
}

The thread ander is used in this case:

struct Foo { ... }

thread int* operator&amp;.bar(thread Foo*) { ... }

struct Baz { ... }

Foo operator.quux(Baz) { ... }

compute void computeShader() {
    Baz b = ...;
    int i = b.quux.bar;
}

We need to call the &quot;bar&quot; ander on the result of &quot;b.quux&quot;, however, b.quux is an rvalue and thus doesn&apos;t have an address, so we can&apos;t just call the &quot;bar&quot; ander on it. Therefore, we have to save the result of &quot;b.quux&quot; in a local thread variable and call the thread ander with the address of the local variable.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:82
&gt;&gt; +using VariableDeclarations = Vector&lt;UniqueRef&lt;VariableDeclaration&gt;&gt;;
&gt; 
&gt; Can you mention this change in the changelog and explain its reasoning?
&gt; Considering how much of the patch it is, it would probably have been best as a separate patch.

You&apos;re right.

&gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:145
&gt;&gt;&gt; +    // FIXME: Authors can make a struct field named &quot;length&quot; too. Autogenerated getters for those shouldn&apos;t take this codepath.
&gt;&gt; 
&gt;&gt; As long as this path is only for *native* function declarations, I think it is not a risk.
&gt; 
&gt; Can you link to a bug here so we don&apos;t forget?

Consider the following:

struct Foo {
    int length;
}

synthesizeStructureAccessors() will create a getter for that field (just like it would create a getter for any other field) and this new getter will be named &quot;operator.length&quot;. It will be a NativeFunctionDeclaration because it&apos;s being generated by synthesizeStructureAccessors(). Then, this code will recognize the name, and erroneously treat it as if it was .length on an array reference.

https://bugs.webkit.org/show_bug.cgi?id=198077

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:623
&gt;&gt; +static Optional&lt;UniqueRef&lt;AST::UnnamedType&gt;&gt; commit(ResolvingType&amp; resolvingType)
&gt; 
&gt; Could you either give a more informative name to this function or some comment?
&gt; It is far from obvious what it does.

The functions directly above it are called &quot;matchAndCommit()&quot;, and WHLSLInferTypes has a bunch of matchAndCommit() and a commit(). The name &quot;commit&quot; was taken from the JS compiler, where it means &quot;assigning a concrete type to an abstract type (like a literal)&quot;.

What should we name it instead? Or should we document the meaning a different way (comments?)

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:1028
&gt;&gt; +    if (setFunction &amp;&amp; andFunction) {
&gt; 
&gt; Does this mean that we only detect this case when for types that we use in a dot expression?
&gt; This would be a deviation from the spec that would reject any program with an ander and a setter that collide, whether or not they are dead code.

https://bugs.webkit.org/show_bug.cgi?id=198143

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:190
&gt;&gt; +    // Find the &quot;.b&quot; &quot;.c&quot; and &quot;.d&quot; expressions.
&gt; 
&gt; Nit: Since this code is kinda hairy, might be worth stating what the order of this vector turns out to be too. I think it&apos;s &quot;d&quot;, &quot;c&quot;, &quot;b&quot;

You&apos;re right!

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:280
&gt;&gt; +    for (size_t i = chain.size() - 1; i &gt; 0; --i) {
&gt; 
&gt; nit: I think this is easier to read if you write this as
&gt; (site_t i = 0; i--;) and just use &quot;i&quot; below instead of &quot;i - 1&quot;
&gt; 
&gt; This is how we write backwards indexed loops in all of JSC. It looks funky at first, but it becomes intuitive to pattern match and understand that it&apos;s correct.

cooooooool

&gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:404
&gt;&gt;&gt; +    auto modifyResult = modify(downcast&lt;AST::DotExpression&gt;(assignmentExpression.left()), [&amp;](Optional&lt;UniqueRef&lt;AST::Expression&gt;&gt;&amp;&amp;) -&gt; Optional&lt;ModificationResult&gt; {
&gt;&gt; 
&gt;&gt; This looks like it should only execute in the case where we are doing a RMW operation?
&gt;&gt; Or at least we could skip a lot of that in the normal case.
&gt; 
&gt; taking rvalue ref and using it as argument is kinda weird.

Robin: I don&apos;t think I understand your comment. Do you think you could clarify it?

Saam: This function is supposed to take ownership of its argument. Should I just change it to [&amp;](Optional&lt;UniqueRef&lt;AST::Expression&gt;&gt;)?

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:635
&gt;&gt; +            dereferenceExpression-&gt;setTypeAnnotation(AST::LeftValue { downcast&lt;AST::PointerType&gt;(andFunction-&gt;type()).addressSpace() });
&gt; 
&gt; Can we make some kind of function that abstract this AST replacement for us? Maybe like:
&gt; 
&gt; template &lt;typename Old, typename New, typename ...Args&gt;
&gt; New* replace(Old&amp; old, Args&amp;&amp;... args)
&gt; {
&gt;     static_assert(sizeof(New) &lt;= sizeof(Old));
&gt;     return new (&amp;old) New(std::forward&lt;Args&gt;(args)...);
&gt; }

This is a good idea, but I&apos;d like to do it in a follow-up patch.

https://bugs.webkit.org/show_bug.cgi?id=198175</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538602</commentid>
    <comment_count>34</comment_count>
      <attachid>370493</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-23 00:41:05 -0700</bug_when>
    <thetext>Created attachment 370493
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538622</commentid>
    <comment_count>35</comment_count>
      <attachid>370493</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-23 02:29:35 -0700</bug_when>
    <thetext>Comment on attachment 370493
Patch for committing

Clearing flags on attachment: 370493

Committed r245680: &lt;https://trac.webkit.org/changeset/245680&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538663</commentid>
    <comment_count>36</comment_count>
      <attachid>370369</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-23 09:08:57 -0700</bug_when>
    <thetext>Comment on attachment 370369
Simple dot expressions work

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

&gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLAddressSpace.h:46
&gt;&gt;&gt; +struct LeftValue {
&gt;&gt; 
&gt;&gt; Name nit: Do we really want to go with &quot;Left&quot; instead of &quot;L&quot;, &quot;Right&quot; instead of &quot;R&quot;? I feel like most of the text I see on this just uses &quot;L&quot; and &quot;R&quot; as the canonical name.
&gt; 
&gt; When writing the compiler, I chose to use full names instead of abbreviations because they make things clearer. E.g. &quot;TypeDefinition&quot; instead of &quot;typedef&quot; and &quot;StructureDefinition&quot; instead of &quot;struct&quot;. The logic is just that if I can make it easier to read and understand the code, it&apos;s worth the extra bytes in the source files on our hard drives. Characters are cheap and aren&apos;t an endangered species; we (as humans) are not running out of characters.

My argument was not in favor of doing this to save typing, rather, that “lvalue” and “rvalue” are easier to understand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538814</commentid>
    <comment_count>37</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-23 15:41:51 -0700</bug_when>
    <thetext>Committed r245722: &lt;https://trac.webkit.org/changeset/245722&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365100</attachid>
            <date>2019-03-18 18:38:05 -0700</date>
            <delta_ts>2019-03-19 00:17:33 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190318183805.patch</filename>
            <type>text/plain</type>
            <size>29168</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWUyYzUzOTY2ZjZmYmFh
NmZmN2E3NzY4NjlhY2Y4N2U0YWJjZjdhMi4uNWZlY2QyM2YyZDkzOTE5ZDcxNWViZjdmZmU4Mzk5
NTc2OWZhMjQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTAzLTE4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDMt
MTggIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V0hMU0xdIEhvb2sgdXAgdGhlIGNvbXBpbGVyIHRvIG91ciBXZWJHUFUgaW1wbGVtZW50YXRpb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFkZHJlc3NTcGFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQWRkcmVzc1NwYWNlLmgKaW5kZXggNGE2ZDdjNDY5NWRjNGNhYzgyOTA1NGU0MDU1NTc4
NzY1MTc1Zjg2My4uZDQzNmQ2ODljNzhlMDQwYzVmZGRjZTM5NjBmMzhmNDMwMTUwYjJiMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRk
cmVzc1NwYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQWRkcmVzc1NwYWNlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCiAjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDYgKzQzLDcwIEBAIGVudW0gY2xhc3MgQWRkcmVzc1Nw
YWNlIDogdWludDhfdCB7CiAgICAgVGhyZWFkCiB9OwogCitzdHJ1Y3QgTGVmdFZhbHVlIHsKKyAg
ICBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlOworfTsKKworc3RydWN0IEFic3RyYWN0TGVmdFZh
bHVlIHsKK307CisKK3N0cnVjdCBSaWdodFZhbHVlIHsKK307CisKKy8vIEZJWE1FOiBUaGlzIHdy
YXBwZXIgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeS4KK2NsYXNzIFR5cGVBbm5vdGF0aW9uIHsKK3B1
YmxpYzoKKyAgICBUeXBlQW5ub3RhdGlvbigpCisgICAgICAgIDogbV9lbXB0eSh0cnVlKQorICAg
IHsKKyAgICB9CisKKyAgICBUeXBlQW5ub3RhdGlvbihMZWZ0VmFsdWUgdikKKyAgICAgICAgOiBt
X2lubmVyKHYpCisgICAgeworICAgIH0KKworICAgIFR5cGVBbm5vdGF0aW9uKEFic3RyYWN0TGVm
dFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBUeXBl
QW5ub3RhdGlvbihSaWdodFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAg
ICB9CisKKyAgICBUeXBlQW5ub3RhdGlvbihjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVs
dDsKKyAgICBUeXBlQW5ub3RhdGlvbihUeXBlQW5ub3RhdGlvbiYmIG90aGVyKSA9IGRlZmF1bHQ7
CisKKyAgICBUeXBlQW5ub3RhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IFR5cGVBbm5vdGF0aW9uJikg
PSBkZWZhdWx0OworICAgIFR5cGVBbm5vdGF0aW9uJiBvcGVyYXRvcj0oVHlwZUFubm90YXRpb24m
JiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiBsZWZ0QWRk
cmVzc1NwYWNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0eSk7CisgICAg
ICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPExlZnRWYWx1ZT4obV9pbm5lcikpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpnZXQ8TGVmdFZhbHVlPihtX2lubmVyKS5hZGRyZXNzU3BhY2U7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgYm9vbCBpc1JpZ2h0
VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2VtcHR5KTsKKyAgICAgICAg
cmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmlnaHRWYWx1ZT4obV9pbm5lcik7CisgICAg
fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlz
aXRvciYgdmlzaXRvcikgLT4gZGVjbHR5cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2
YWw8VmFyaWFudDxMZWZ0VmFsdWUsIEFic3RyYWN0TGVmdFZhbHVlLCBSaWdodFZhbHVlPiY+KCkp
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2VtcHR5KTsKKyAgICAgICAgcmV0dXJuIFdURjo6
dmlzaXQodmlzaXRvciwgbV9pbm5lcik7CisgICAgfQorCitwcml2YXRlOgorICAgIFZhcmlhbnQ8
TGVmdFZhbHVlLCBBYnN0cmFjdExlZnRWYWx1ZSwgUmlnaHRWYWx1ZT4gbV9pbm5lcjsKKyAgICBi
b29sIG1fZW1wdHkgeyBmYWxzZSB9OworfTsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5k
ZXggYjdhYjIwY2VkMmM0NTNmOTVmMWMyZTNlZmMyODFmZGE0OGU1YzNhZC4uMzE4YTgxMDYxNjNk
Yjg3ZTg1ZWY0ODFlYzg4N2Q5ZDZjNWMyOWNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaApAQCAtNjUs
MTIgKzY1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV90eXBlID0gV1RGTW92ZSh0eXBlKTsKICAg
ICB9CiAKLSAgICBjb25zdCBPcHRpb25hbDxBZGRyZXNzU3BhY2U+JiBhZGRyZXNzU3BhY2UoKSBj
b25zdCB7IHJldHVybiBtX2FkZHJlc3NTcGFjZTsgfQorICAgIGNvbnN0IFR5cGVBbm5vdGF0aW9u
KiB0eXBlQW5ub3RhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZUFubm90YXRpb24gPyAmKm1f
dHlwZUFubm90YXRpb24gOiBudWxscHRyOyB9CiAKLSAgICB2b2lkIHNldEFkZHJlc3NTcGFjZShP
cHRpb25hbDxBZGRyZXNzU3BhY2U+JiBhZGRyZXNzU3BhY2UpCisgICAgdm9pZCBzZXRUeXBlQW5u
b3RhdGlvbihUeXBlQW5ub3RhdGlvbiYmIHR5cGVBbm5vdGF0aW9uKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKCFtX2FkZHJlc3NTcGFjZSk7Ci0gICAgICAgIG1fYWRkcmVzc1NwYWNlID0gYWRkcmVz
c1NwYWNlOworICAgICAgICBBU1NFUlQoIW1fdHlwZUFubm90YXRpb24pOworICAgICAgICBtX3R5
cGVBbm5vdGF0aW9uID0gV1RGTW92ZSh0eXBlQW5ub3RhdGlvbik7CiAgICAgfQogCiAgICAgdmly
dHVhbCBib29sIGlzQXNzaWdubWVudEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIExleGVyOjpUb2tlbiBt
X29yaWdpbjsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8VW5uYW1lZFR5cGU+PiBtX3R5cGU7Ci0g
ICAgT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiBtX2FkZHJlc3NTcGFjZTsKKyAgICBPcHRpb25hbDxU
eXBlQW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFT
VApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCmlu
ZGV4IDYzMTZmNTRlMTYzMjZiNGE0ODNmYTg3MmUxZjQ3YmIwNDhlZGY4OGUuLjc3MGNmOGJhOWYy
NTI3MjZmNjljMWFlNmRlNWVhNGE1YjEyYmY3N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKQEAgLTM5LDkgKzM5LDkgQEAgbmFtZXNwYWNl
IEFTVCB7CiAKIGNsYXNzIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24gOiBwdWJsaWMgRXhw
cmVzc2lvbiB7CiBwdWJsaWM6Ci0gICAgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbihMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxWYWx1ZSkKKyAgICBN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVl
UmVmPEV4cHJlc3Npb24+JiYgbGVmdFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92
ZShvcmlnaW4pKQotICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKKyAgICAgICAg
LCBtX2xlZnRWYWx1ZShXVEZNb3ZlKGxlZnRWYWx1ZSkpCiAgICAgewogICAgIH0KIApAQCAtNTIs
MTAgKzUyLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNNYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lv
biYgbFZhbHVlKCkgeyByZXR1cm4gbV9sVmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0VmFs
dWUoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogCiBwcml2YXRlOgotICAgIFVuaXF1ZVJlZjxF
eHByZXNzaW9uPiBtX2xWYWx1ZTsKKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sZWZ0VmFs
dWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJF
eHByZXNzaW9uLmgKaW5kZXggN2IwNTJiNmQ1ZjI4ODdmNTkyZGY0NGZkOTQwOWM0ZmE5NTIwM2Fh
OC4uMzQ2MDRkNTZhZWNjNGI2MzBkN2E3ZTZmNzk2YjljODUzNDdjZTFmYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJF
eHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgKQEAgLTM5LDkgKzM5LDkgQEAgbmFtZXNwYWNl
IEFTVCB7CiAKIGNsYXNzIE1ha2VQb2ludGVyRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9u
IHsKIHB1YmxpYzoKLSAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsVmFsdWUpCisgICAgTWFrZVBvaW50ZXJFeHBy
ZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgbGVm
dFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAs
IG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKKyAgICAgICAgLCBtX2xlZnRWYWx1ZShXVEZNb3Zl
KGxlZnRWYWx1ZSkpCiAgICAgewogICAgIH0KIApAQCAtNTIsMTAgKzUyLDEwIEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNNYWtlUG9pbnRlckV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xWYWx1
ZTsgfQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9
CiAKIHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAgIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFT
VApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCmluZGV4IDc5
ZDhkMGY3MDhlOGQwNTc4MzEyYzgxNzk0ZTg4ZWRhZjM0ODdjZjkuLjM4MWRlOWU0M2E3ODExMTZj
NmVlNzc5ODA3ZjQ4NzViOTVmMzU1YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmgKQEAgLTQxLDExICs0MSwxMSBAQCBuYW1lc3BhY2UgV0hMU0wgewog
bmFtZXNwYWNlIEFTVCB7CiAKIC8qCi0gKiAgMS4gRXZhbHVhdGUgbV9sVmFsdWUKKyAqICAxLiBF
dmFsdWF0ZSBtX2xlZnRWYWx1ZQogICogIDIuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1fb2xkVmFs
dWUKICAqICAzLiBFdmFsdWF0ZSBtX25ld1ZhbHVlRXhwcmVzc2lvbgogICogIDQuIEFzc2lnbiB0
aGUgcmVzdWx0IHRvIG1fbmV3VmFsdWUKLSAqICA1LiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX2xW
YWx1ZQorICogIDUuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1fbGVmdFZhbHVlCiAgKiAgNi4gRXZh
bHVhdGUgbV9yZXN1bHRFeHByZXNzaW9uCiAgKiAgNy4gUmV0dXJuIHRoZSByZXN1bHQKICAqLwpA
QCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Np
b24mIGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhwcmVzc2lvbiYgbGVmdFZh
bHVlKCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KICAgICBWYXJpYWJsZURlY2xhcmF0aW9uJiBv
bGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KICAgICBWYXJpYWJsZURlY2xhcmF0aW9u
JiBuZXdWYWx1ZSgpIHsgcmV0dXJuIG1fbmV3VmFsdWU7IH0KICAgICBFeHByZXNzaW9uKiBuZXdW
YWx1ZUV4cHJlc3Npb24oKSB7IHJldHVybiBtX25ld1ZhbHVlRXhwcmVzc2lvbiA/ICYqbV9uZXdW
YWx1ZUV4cHJlc3Npb24gOiBudWxscHRyOyB9CkBAIC05NCwxNSArOTQsMTUgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPiBmcmllbmQgVW5p
cXVlUmVmPFU+IFdURjo6bWFrZVVuaXF1ZVJlZihBcmdzJiYuLi4pOwogCi0gICAgUmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNz
aW9uPiBsVmFsdWUpCisgICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4m
JiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhw
cmVzc2lvbihMZXhlcjo6VG9rZW4ob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShXVEZNb3Zl
KGxWYWx1ZSkpCisgICAgICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUpKQogICAg
ICAgICAsIG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbiksIFF1YWxpZmllcnMoKSwgV1RG
OjpudWxsb3B0LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpCiAgICAgICAg
ICwgbV9uZXdWYWx1ZShXVEZNb3ZlKG9yaWdpbiksIFF1YWxpZmllcnMoKSwgV1RGOjpudWxsb3B0
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpCiAgICAgewogICAgIH0KIAot
ICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xWYWx1ZTsKKyAgICBVbmlxdWVSZWY8RXhwcmVz
c2lvbj4gbV9sZWZ0VmFsdWU7CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX29sZFZhbHVlOwog
ICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9uZXdWYWx1ZTsKICAgICBPcHRpb25hbDxVbmlxdWVS
ZWY8RXhwcmVzc2lvbj4+IG1fbmV3VmFsdWVFeHByZXNzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0
aW9uV3JpdGVyLmNwcAppbmRleCAyZmMxNDY1ODYxNmM5ODljYTIxN2M2OTI4MmFlODZkYzQ4NzE5
ZjA4Li5mMDYzY2VkYjg3MDc1ODk4MWFlOGNhY2Y3Y2M4YmE4NTJkNjFjZTg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9u
V3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtNTcwLDcgKzU3MCw3IEBAIHZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dp
Y2FsTm90RXhwcmVzCiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxh
c3QoKTsKICAgICBBU1NFUlQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5
cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUo
KTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYQogCiB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24m
IG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBv
aW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBv
aW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2su
dGFrZUxhc3QoKTsKICAgICBBU1NFUlQobWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hl
Y2tlci5jcHAKaW5kZXggMTM2NWYyNmQxMjM0ODIwMDBlZTc0MDQ3Y2IzMjFlODAyYjJjNjA4My4u
NGQwZmNjMGRiMzQ5NDRjZTZjMjdhOGM1ZjgzOWZmY2UzNmRmMmQyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC00
NTEsMTUgKzQ1MSwxNSBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNCb29sVHlwZShSZXNvbHZpbmdU
eXBlJik7CiAgICAgc3RydWN0IFJlY3Vyc2VJbmZvIHsKICAgICAgICAgUmVzb2x2aW5nVHlwZSYg
cmVzb2x2aW5nVHlwZTsKLSAgICAgICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+JiBhZGRy
ZXNzU3BhY2U7CisgICAgICAgIEFTVDo6VHlwZUFubm90YXRpb24mIHR5cGVBbm5vdGF0aW9uOwog
ICAgIH07Ci0gICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6
RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMVmFsdWUgPSBmYWxzZSk7Ci0gICAgT3B0aW9uYWw8
UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xWYWx1
ZSA9IGZhbHNlKTsKKyAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4gcmVjdXJzZUFuZEdldEluZm8o
QVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSA9IGZhbHNlKTsKKyAgICBP
cHRpb25hbDxSZWN1cnNlSW5mbz4gZ2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVp
cmVzTGVmdFZhbHVlID0gZmFsc2UpOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPj4gcmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbiYpOwogICAgIGJvb2wgcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZShBU1Q6OkV4cHJlc3Np
b24mKTsKLSAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVs
bG9wdCk7Ci0gICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RG
OjpudWxsb3B0KTsKLSAgICB2b2lkIGZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlc29s
dmluZ1R5cGUmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBXVEY6Om51bGxvcHQpOwor
ICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFT
VDo6RXhwcmVzc2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiwgQVNUOjpU
eXBlQW5ub3RhdGlvbik7CisgICAgdm9pZCBmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBS
ZXNvbHZpbmdUeXBlJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CiAKICAgICB2b2lkIHZpc2l0KEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwpAQCAtNDk0LDcgKzQ5NCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJikgb3ZlcnJpZGU7CiAKICAg
ICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIFJlc29sdmluZ1R5cGU+IG1fdHlwZU1hcDsKLSAg
ICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPj4g
bV9hZGRyZXNzU3BhY2VNYXA7CisgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBBU1Q6OlR5
cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5vdGF0aW9uczsKICAgICBIYXNoU2V0PFN0cmluZz4gbV92
ZXJ0ZXhFbnRyeVBvaW50czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9mcmFnbWVudEVudHJ5UG9p
bnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2NvbXB1dGVFbnRyeVBvaW50czsKQEAgLTUzOCw4
ICs1MzgsOCBAQCBib29sIENoZWNrZXI6OmFzc2lnblR5cGVzKCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IG1fYWRkcmVz
c1NwYWNlTWFwKQotICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5zZXRBZGRyZXNzU3BhY2Uoa2V5
VmFsdWVQYWlyLnZhbHVlKTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IG1fdHlwZUFu
bm90YXRpb25zKQorICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5zZXRUeXBlQW5ub3RhdGlvbihX
VEZNb3ZlKGtleVZhbHVlUGFpci52YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC03
MjgsMjYgKzcyOCwyNiBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYg
dHlwZVJlZmVyZW5jZSkKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7
CiB9CiAKLWF1dG8gQ2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBl
eHByZXNzaW9uLCBib29sIHJlcXVpcmVzTFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4K
K2F1dG8gQ2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBleHByZXNz
aW9uLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4KIHsK
ICAgICBWaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKICAgICBpZiAoZXJyb3IoKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gZ2V0SW5mbyhleHByZXNzaW9uLCBy
ZXF1aXJlc0xWYWx1ZSk7CisgICAgcmV0dXJuIGdldEluZm8oZXhwcmVzc2lvbiwgcmVxdWlyZXNM
ZWZ0VmFsdWUpOwogfQogCi1hdXRvIENoZWNrZXI6OmdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBl
eHByZXNzaW9uLCBib29sIHJlcXVpcmVzTFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4K
K2F1dG8gQ2hlY2tlcjo6Z2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wg
cmVxdWlyZXNMZWZ0VmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgogewogICAgIGF1dG8g
dHlwZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmV4cHJlc3Npb24pOwogICAgIEFTU0VSVCh0
eXBlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKIAotICAgIGF1dG8gYWRkcmVzc1NwYWNl
SXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFjZU1hcC5maW5kKCZleHByZXNzaW9uKTsKLSAgICBBU1NF
UlQoYWRkcmVzc1NwYWNlSXRlcmF0b3IgIT0gbV9hZGRyZXNzU3BhY2VNYXAuZW5kKCkpOwotICAg
IGlmIChyZXF1aXJlc0xWYWx1ZSAmJiAhYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKSB7Cisg
ICAgYXV0byB0eXBlQW5ub3RhdGlvbkl0ZXJhdG9yID0gbV90eXBlQW5ub3RhdGlvbnMuZmluZCgm
ZXhwcmVzc2lvbik7CisgICAgQVNTRVJUKHR5cGVBbm5vdGF0aW9uSXRlcmF0b3IgIT0gbV90eXBl
QW5ub3RhdGlvbnMuZW5kKCkpOworICAgIGlmIChyZXF1aXJlc0xlZnRWYWx1ZSAmJiB0eXBlQW5u
b3RhdGlvbkl0ZXJhdG9yLT52YWx1ZS5pc1JpZ2h0VmFsdWUoKSkgewogICAgICAgICBzZXRFcnJv
cigpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4ge3sg
dHlwZUl0ZXJhdG9yLT52YWx1ZSwgYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlIH19OworICAg
IHJldHVybiB7eyB0eXBlSXRlcmF0b3ItPnZhbHVlLCB0eXBlQW5ub3RhdGlvbkl0ZXJhdG9yLT52
YWx1ZSB9fTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCkBAIC03NjcsMTkgKzc2NywzMiBAQCB2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikK
ICAgICB9CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4
cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRUeXBlLCBPcHRp
b25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlKQordm9pZCBDaGVja2VyOjphc3Np
Z25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+JiYgdW5uYW1lZFR5cGUsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24g
PSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5h
ZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodW5uYW1lZFR5cGUpKTsKICAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIGF1dG8gYWRkcmVzc1NwYWNl
QWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZleHByZXNzaW9uLCBhZGRyZXNzU3Bh
Y2UpOworICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV90eXBlQW5ub3RhdGlvbnMu
YWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiAgICAgQVNTRVJUX1VO
VVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0Vu
dHJ5KTsKIH0KIAotdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhw
cmVzc2lvbiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29sdmFibGVUeXBl
UmVmZXJlbmNlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlKQordm9p
ZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVmUHRy
PFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLCBBU1Q6
OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCiB7CiAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHJl
c29sdmFibGVUeXBlUmVmZXJlbmNlKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1f
YWRkcmVzc1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKKyAgICBhdXRv
IGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lv
biwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1Nw
YWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3Zv
aWQgQ2hlY2tlcjo6Zm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZXNv
bHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0
aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCit7CisgICAgcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc3VsdCkgewor
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHJlc3Vs
dC0+Y2xvbmUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
IHJlc3VsdCkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJl
c3Npb24sIHJlc3VsdC5jb3B5UmVmKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0pKTsKKyAgICBhdXRvIGFkZHJlc3NTcGFj
ZUFkZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh0
eXBlQW5ub3RhdGlvbikpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0
LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKQEAgLTc4OSw2ICs4MDIs
MTEgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3Np
Z25tZW50RXhwcmVzc2lvbikKICAgICBpZiAoIWxlZnRJbmZvKQogICAgICAgICByZXR1cm47CiAK
KyAgICBpZiAobGVmdEluZm8tPnR5cGVBbm5vdGF0aW9uLmlzUmlnaHRWYWx1ZSgpKSB7CisgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBhdXRvIHJpZ2h0
SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwog
ICAgIGlmICghcmlnaHRJbmZvKQogICAgICAgICByZXR1cm47CkBAIC04MDIsMjMgKzgyMCwxMCBA
QCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1l
bnRFeHByZXNzaW9uKQogICAgIGFzc2lnblR5cGUoYXNzaWdubWVudEV4cHJlc3Npb24sIFdURk1v
dmUoKnJlc3VsdFR5cGUpKTsKIH0KIAotdm9pZCBDaGVja2VyOjpmb3J3YXJkVHlwZShBU1Q6OkV4
cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIE9wdGlv
bmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2UpCi17Ci0gICAgcmVzb2x2aW5nVHlw
ZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
IHJlc3VsdCkgewotICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJl
c3Npb24sIHJlc3VsdC0+Y2xvbmUoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIHJlc3VsdCkgewotICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1h
cC5hZGQoJmV4cHJlc3Npb24sIHJlc3VsdC5jb3B5UmVmKCkpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0pKTsKLSAgICBhdXRv
IGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lv
biwgYWRkcmVzc1NwYWNlKTsKLSAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3Vs
dCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOwotfQotCiB2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbikKIHsKLSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpLCB0cnVlKTsKLSAgICBpZiAoIWxWYWx1ZUlu
Zm8pCisgICAgYXV0byBsZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSwgdHJ1ZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVJ
bmZvKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGF0IHRv
IGRvIHdpdGggdGhlIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ncyBBbm9ueW1vdXNWYXJpYWJs
ZXMuCkBAIC04MjcsNyArODMyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiAgICAgaWYgKCFu
ZXdWYWx1ZUluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbWF0Y2hBbmRDb21taXQo
bFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKSkg
eworICAgIGlmICghbWF0Y2hBbmRDb21taXQobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSwg
bmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtODczLDM3ICs4NzgsNDMgQEAgdm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlwZShkZXJlZmVyZW5jZUV4cHJl
c3Npb24sIHBvaW50ZXJUeXBlLT5jbG9uZSgpLCBwb2ludGVyVHlwZS0+YWRkcmVzc1NwYWNlKCkp
OworICAgIGFzc2lnblR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+Y2xv
bmUoKSwgQVNUOjpMZWZ0VmFsdWUgeyBwb2ludGVyVHlwZS0+YWRkcmVzc1NwYWNlKCkgfSk7CiB9
CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQ
b2ludGVyRXhwcmVzc2lvbikKIHsKLSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0
SW5mbyhtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCksIHRydWUpOwotICAgIGlmICghbFZh
bHVlSW5mbykKKyAgICBhdXRvIGxlZnRWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhtYWtl
UG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCksIHRydWUpOworICAgIGlmICghbGVmdFZhbHVl
SW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogbFZhbHVlVHlwZSA9IGdldFVubmFt
ZWRUeXBlKGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOwotICAgIGlmICghbFZhbHVlVHlwZSkg
eworICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0
aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKKyAg
ICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8qIGxl
ZnRWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBl
KTsKKyAgICBpZiAoIWxlZnRWYWx1ZVR5cGUpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9u
LCBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihtYWtlUG9pbnRl
ckV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBsVmFsdWVU
eXBlLT5jbG9uZSgpKSk7CisgICAgYXNzaWduVHlwZShtYWtlUG9pbnRlckV4cHJlc3Npb24sIG1h
a2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VQb2ludGVyRXhw
cmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9u
ZSgpKSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGF1dG8gbFZh
bHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24u
bFZhbHVlKCkpOwotICAgIGlmICghbFZhbHVlSW5mbykKKyAgICBhdXRvIGxlZnRWYWx1ZUluZm8g
PSByZWN1cnNlQW5kR2V0SW5mbyhtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1
ZSgpKTsKKyAgICBpZiAoIWxlZnRWYWx1ZUluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8qIGxWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBl
KTsKLSAgICBpZiAoIWxWYWx1ZVR5cGUpIHsKKyAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0
VW5uYW1lZFR5cGUobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFsZWZ0
VmFsdWVUeXBlKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvJiB1bmlmeU5vZGUgPSBsVmFsdWVUeXBlLT51bmlmeU5vZGUoKTsKKyAgICBh
dXRvJiB1bmlmeU5vZGUgPSBsZWZ0VmFsdWVUeXBlLT51bmlmeU5vZGUoKTsKICAgICBpZiAoaXM8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewogICAgICAgICBhdXRvJiB1bm5hbWVkVHlw
ZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAgICAgICAgIGlmIChp
czxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsKQEAgLTkxMyw3ICs5MjQsOCBAQCB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzcwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCFsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UpIHsKKyAgICAgICAgYXV0byBs
ZWZ0QWRkcmVzc1NwYWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJl
c3NTcGFjZSgpOworICAgICAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKICAgICAgICAgICAg
IHNldEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTkyMSwxNyAr
OTMzLDE4IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzCiAgICAgICAgIGlmIChpczxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBk
b3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpOwogICAgICAgICAgICAgLy8gRklY
TUU6IFNhdmUgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KLSAgICAgICAgICAgIGFzc2lnblR5cGUo
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3Jp
Z2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBhcnJheVR5cGUudHlwZSgpLmNsb25l
KCkpKTsKKyAgICAgICAgICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
biwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwg
YXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoIWxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSkgeworICAgIGF1
dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRB
ZGRyZXNzU3BhY2UoKTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKICAgICAgICAgc2V0
RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUobWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkp
LCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBsVmFsdWVUeXBlLT5jbG9uZSgpKSk7CisgICAg
YXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9u
ZSgpKSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhB
U1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBB
U1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5cGUsIEFTVDo6VW5uYW1lZFR5cGUqIGV4dHJh
QXJndW1lbnRUeXBlKQpAQCAtMTAzMSwxOCArMTA0NCwxOCBAQCB2b2lkIENoZWNrZXI6OmZpbmlz
aFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHBy
b3BlcgogICAgICAgICB9CiAgICAgfQogCi0gICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+
IGFkZHJlc3NTcGFjZTsKKyAgICBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uOwog
ICAgIGlmIChnZXRSZXR1cm5UeXBlIHx8IGFuZFJldHVyblR5cGUpIHsKLSAgICAgICAgLy8gRklY
TUU6IFRoZSByZWZlcmVuY2UgY29tcGlsZXIgaGFzICJlbHNlIGlmICghbm9kZS5iYXNlLmlzTFZh
bHVlICYmICFiYXNlVHlwZS5pc0FycmF5UmVmKSIsCisgICAgICAgIC8vIEZJWE1FOiBUaGUgcmVm
ZXJlbmNlIGNvbXBpbGVyIGhhcyAiZWxzZSBpZiAoIW5vZGUuYmFzZS5pc2xlZnRWYWx1ZSAmJiAh
YmFzZVR5cGUuaXNBcnJheVJlZikiLAogICAgICAgICAvLyBidXQgSSBkb24ndCB1bmRlcnN0YW5k
IHdoeSBpdCBleGlzdHMuIEkgaGF2ZW4ndCB3cml0dGVuIGl0IGhlcmUsIGFuZCBJJ2xsIGludmVz
dGlnYXRlCiAgICAgICAgIC8vIGlmIHdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGUgcmVmZXJlbmNl
IGNvbXBpbGVyLgogICAgICAgICBpZiAoaXM8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVkQmFz
ZVR5cGUpKQotICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gZG93bmNhc3Q8QVNUOjpSZWZlcmVu
Y2VUeXBlPih3cmFwcGVkQmFzZVR5cGUpLmFkZHJlc3NTcGFjZSgpOworICAgICAgICAgICAgdHlw
ZUFubm90YXRpb24gPSBBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UmVmZXJlbmNlVHlw
ZT4od3JhcHBlZEJhc2VUeXBlKS5hZGRyZXNzU3BhY2UoKSB9OwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFjZU1hcC5m
aW5kKCZwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICAgICAgICAgIEFTU0VS
VChhZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7Ci0gICAg
ICAgICAgICBpZiAoYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAgICAgICAg
IGFkZHJlc3NTcGFjZSA9ICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAg
ICBhdXRvIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3IgPSBtX3R5cGVBbm5vdGF0aW9ucy5maW5kKCZw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBl
QW5ub3RhdGlvbkl0ZXJhdG9yICE9IG1fdHlwZUFubm90YXRpb25zLmVuZCgpKTsKKyAgICAgICAg
ICAgIGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSB0eXBlQW5ub3RhdGlvbkl0ZXJhdG9yLT52
YWx1ZS5sZWZ0QWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgdHlwZUFubm90YXRpb24g
PSBBU1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRkcmVzc1NwYWNlIH07CiAgICAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
QEAgLTEwNTIsNyArMTA2NSw3IEBAIHZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9wZXJ0
eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVyCiAKICAgICAvLyBG
SVhNRTogR2VuZXJhdGUgdGhlIGNhbGwgZXhwcmVzc2lvbnMKIAotICAgIGFzc2lnblR5cGUocHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLCBnZXRSZXR1cm5UeXBlID8gZ2V0UmV0dXJuVHlwZS0+Y2xv
bmUoKSA6IGFuZFJldHVyblR5cGUtPmNsb25lKCksIGFkZHJlc3NTcGFjZSk7CisgICAgYXNzaWdu
VHlwZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5U
eXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlwZS0+Y2xvbmUoKSwgV1RGTW92ZSh0eXBlQW5ub3Rh
dGlvbikpOwogfQogCiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IENoZWNr
ZXI6OnJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24m
IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKQEAgLTExMDUsMTAgKzExMTgsMTAgQEAgdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkK
ICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CiAgICAgQVNTRVJUKHZh
cmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKSk7CiAgICAgCi0gICAgT3B0aW9uYWw8
QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKKyAgICBBU1Q6OlR5cGVBbm5vdGF0aW9u
IHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCk7CiAgICAgaWYgKCF2YXJpYWJsZVJl
ZmVyZW5jZS52YXJpYWJsZSgpLT5pc0Fub255bW91cygpKQotICAgICAgICBhZGRyZXNzU3BhY2Ug
PSBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkOwotICAgIGFzc2lnblR5cGUodmFyaWFibGVSZWZl
cmVuY2UsIHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKS0+Y2xvbmUoKSwgYWRk
cmVzc1NwYWNlKTsKKyAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkxlZnRWYWx1ZSB7IEFT
VDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfTsKKyAgICBhc3NpZ25UeXBlKHZhcmlhYmxlUmVmZXJl
bmNlLCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCktPmNsb25lKCksIFdURk1v
dmUodHlwZUFubm90YXRpb24pKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJldHVy
biYgcmV0dXJuU3RhdGVtZW50KQpAQCAtMTQwNyw3ICsxNDIwLDcgQEAgdm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQogICAgIGlmIChlcnJv
cigpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBsYXN0SW5mbyA9IGdldEluZm8oY29tbWFF
eHByZXNzaW9uLmxpc3QoKS5sYXN0KCkpOwotICAgIGZvcndhcmRUeXBlKGNvbW1hRXhwcmVzc2lv
biwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGZvcndhcmRUeXBlKGNvbW1hRXhwcmVz
c2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUsIGxhc3RJbmZvLT50eXBlQW5ub3RhdGlvbik7
CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFy
eUV4cHJlc3Npb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFJlc29sdmluZ1R5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCmluZGV4IGNhNWNiYjU5MjljZjllMTgxOGMyY2Q3
NDFlNzlkOTM2Y2FhYzY4ZWUuLjUzZjI5N2EyNmZjYmE0Y2IwNTdmNDZmZGFlNzA0ZjI2ZmI4ZmE3
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2aW5nVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUmVzb2x2aW5nVHlwZS5oCkBAIC03Miw2ICs3Miw3IEBAIHByaXZhdGU6CiAKIC8vIFRo
aXMgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGEgVmFyaWFudC4KIC8vIEl0IGV4aXN0cyBzbyB3
ZSBjYW4gbWFrZSBzdXJlIHRoYXQgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZG9lcyB0aGUgcmln
aHQgdGhpbmcuCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3Nhcnku
CiBjbGFzcyBSZXNvbHZpbmdUeXBlIHsKIHB1YmxpYzoKICAgICBSZXNvbHZpbmdUeXBlKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3Iu
Y3BwCmluZGV4IGVkMmU4YzAwNTJkNmRmZTliZDA3YmFmNzY0OWQ4Y2U0OGM5YjA5YmIuLjk4NTE5
MDJkNzAyM2U2ZDYxOTkzN2ZmZDk3ZDQ2ODlkZjQ1MDNhY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtNTg5LDE3
ICs1ODksMTcgQEAgdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9u
JiBsb2dpY2FsTm90RXhwcmVzc2lvbikKIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCiB7
Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZh
bHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLmxlZnRWYWx1ZSgpKTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogfQogCiB2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhbHVlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkpOwogICAgIGlmIChyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365130</attachid>
            <date>2019-03-19 00:17:35 -0700</date>
            <delta_ts>2019-03-19 17:58:28 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190319001734.patch</filename>
            <type>text/plain</type>
            <size>40971</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTU2MmI2MjlkYjQ2N2I0
NjRjNGY0M2M2YjY2NjMyYWQ5M2QwNjhkOS4uYzYxNmY1OGE5NTBkNjBlMWIzZWFmZmI0Y2VhNzJm
NGE4MDNmOTU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTAzLTE4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDMt
MTggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgU2Ny
b2xsaW5nIHN0YXRlIG5vZGVzIHNob3VsZCBob2xkIHJlZmVyZW5jZXMgdG8gR3JhcGhpY3NMYXll
cnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEFkZHJlc3NTcGFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQWRkcmVzc1NwYWNlLmgKaW5kZXggNGE2ZDdjNDY5NWRjNGNhYzgyOTA1NGU0MDU1
NTc4NzY1MTc1Zjg2My4uZDQzNmQ2ODljNzhlMDQwYzVmZGRjZTM5NjBmMzhmNDMwMTUwYjJiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QWRkcmVzc1NwYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQWRkcmVzc1NwYWNlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCiAjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDYgKzQzLDcwIEBAIGVudW0gY2xhc3MgQWRkcmVz
c1NwYWNlIDogdWludDhfdCB7CiAgICAgVGhyZWFkCiB9OwogCitzdHJ1Y3QgTGVmdFZhbHVlIHsK
KyAgICBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlOworfTsKKworc3RydWN0IEFic3RyYWN0TGVm
dFZhbHVlIHsKK307CisKK3N0cnVjdCBSaWdodFZhbHVlIHsKK307CisKKy8vIEZJWE1FOiBUaGlz
IHdyYXBwZXIgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeS4KK2NsYXNzIFR5cGVBbm5vdGF0aW9uIHsK
K3B1YmxpYzoKKyAgICBUeXBlQW5ub3RhdGlvbigpCisgICAgICAgIDogbV9lbXB0eSh0cnVlKQor
ICAgIHsKKyAgICB9CisKKyAgICBUeXBlQW5ub3RhdGlvbihMZWZ0VmFsdWUgdikKKyAgICAgICAg
OiBtX2lubmVyKHYpCisgICAgeworICAgIH0KKworICAgIFR5cGVBbm5vdGF0aW9uKEFic3RyYWN0
TGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBU
eXBlQW5ub3RhdGlvbihSaWdodFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsK
KyAgICB9CisKKyAgICBUeXBlQW5ub3RhdGlvbihjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVm
YXVsdDsKKyAgICBUeXBlQW5ub3RhdGlvbihUeXBlQW5ub3RhdGlvbiYmIG90aGVyKSA9IGRlZmF1
bHQ7CisKKyAgICBUeXBlQW5ub3RhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IFR5cGVBbm5vdGF0aW9u
JikgPSBkZWZhdWx0OworICAgIFR5cGVBbm5vdGF0aW9uJiBvcGVyYXRvcj0oVHlwZUFubm90YXRp
b24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiBsZWZ0
QWRkcmVzc1NwYWNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0eSk7Cisg
ICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPExlZnRWYWx1ZT4obV9pbm5lcikpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpnZXQ8TGVmdFZhbHVlPihtX2lubmVyKS5hZGRyZXNzU3Bh
Y2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgYm9vbCBpc1Jp
Z2h0VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2VtcHR5KTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmlnaHRWYWx1ZT4obV9pbm5lcik7Cisg
ICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3Qg
VmlzaXRvciYgdmlzaXRvcikgLT4gZGVjbHR5cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRl
Y2x2YWw8VmFyaWFudDxMZWZ0VmFsdWUsIEFic3RyYWN0TGVmdFZhbHVlLCBSaWdodFZhbHVlPiY+
KCkpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2VtcHR5KTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6dmlzaXQodmlzaXRvciwgbV9pbm5lcik7CisgICAgfQorCitwcml2YXRlOgorICAgIFZhcmlh
bnQ8TGVmdFZhbHVlLCBBYnN0cmFjdExlZnRWYWx1ZSwgUmlnaHRWYWx1ZT4gbV9pbm5lcjsKKyAg
ICBib29sIG1fZW1wdHkgeyBmYWxzZSB9OworfTsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgK
aW5kZXggYjdhYjIwY2VkMmM0NTNmOTVmMWMyZTNlZmMyODFmZGE0OGU1YzNhZC4uMzE4YTgxMDYx
NjNkYjg3ZTg1ZWY0ODFlYzg4N2Q5ZDZjNWMyOWNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaApAQCAt
NjUsMTIgKzY1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV90eXBlID0gV1RGTW92ZSh0eXBlKTsK
ICAgICB9CiAKLSAgICBjb25zdCBPcHRpb25hbDxBZGRyZXNzU3BhY2U+JiBhZGRyZXNzU3BhY2Uo
KSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3NTcGFjZTsgfQorICAgIGNvbnN0IFR5cGVBbm5vdGF0
aW9uKiB0eXBlQW5ub3RhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZUFubm90YXRpb24gPyAm
Km1fdHlwZUFubm90YXRpb24gOiBudWxscHRyOyB9CiAKLSAgICB2b2lkIHNldEFkZHJlc3NTcGFj
ZShPcHRpb25hbDxBZGRyZXNzU3BhY2U+JiBhZGRyZXNzU3BhY2UpCisgICAgdm9pZCBzZXRUeXBl
QW5ub3RhdGlvbihUeXBlQW5ub3RhdGlvbiYmIHR5cGVBbm5vdGF0aW9uKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2FkZHJlc3NTcGFjZSk7Ci0gICAgICAgIG1fYWRkcmVzc1NwYWNlID0gYWRk
cmVzc1NwYWNlOworICAgICAgICBBU1NFUlQoIW1fdHlwZUFubm90YXRpb24pOworICAgICAgICBt
X3R5cGVBbm5vdGF0aW9uID0gV1RGTW92ZSh0eXBlQW5ub3RhdGlvbik7CiAgICAgfQogCiAgICAg
dmlydHVhbCBib29sIGlzQXNzaWdubWVudEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIExleGVyOjpUb2tl
biBtX29yaWdpbjsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8VW5uYW1lZFR5cGU+PiBtX3R5cGU7
Ci0gICAgT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiBtX2FkZHJlc3NTcGFjZTsKKyAgICBPcHRpb25h
bDxUeXBlQW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5o
CmluZGV4IDYzMTZmNTRlMTYzMjZiNGE0ODNmYTg3MmUxZjQ3YmIwNDhlZGY4OGUuLjc3MGNmOGJh
OWYyNTI3MjZmNjljMWFlNmRlNWVhNGE1YjEyYmY3N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKQEAgLTM5LDkgKzM5LDkgQEAgbmFtZXNw
YWNlIEFTVCB7CiAKIGNsYXNzIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24gOiBwdWJsaWMg
RXhwcmVzc2lvbiB7CiBwdWJsaWM6Ci0gICAgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbihM
ZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxWYWx1ZSkKKyAg
ICBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5p
cXVlUmVmPEV4cHJlc3Npb24+JiYgbGVmdFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oV1RG
TW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKKyAgICAg
ICAgLCBtX2xlZnRWYWx1ZShXVEZNb3ZlKGxlZnRWYWx1ZSkpCiAgICAgewogICAgIH0KIApAQCAt
NTIsMTAgKzUyLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVz
c2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9sVmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0
VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogCiBwcml2YXRlOgotICAgIFVuaXF1ZVJl
ZjxFeHByZXNzaW9uPiBtX2xWYWx1ZTsKKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sZWZ0
VmFsdWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50
ZXJFeHByZXNzaW9uLmgKaW5kZXggN2IwNTJiNmQ1ZjI4ODdmNTkyZGY0NGZkOTQwOWM0ZmE5NTIw
M2FhOC4uMzQ2MDRkNTZhZWNjNGI2MzBkN2E3ZTZmNzk2YjljODUzNDdjZTFmYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50
ZXJFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgKQEAgLTM5LDkgKzM5LDkgQEAgbmFtZXNw
YWNlIEFTVCB7CiAKIGNsYXNzIE1ha2VQb2ludGVyRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNz
aW9uIHsKIHB1YmxpYzoKLSAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsVmFsdWUpCisgICAgTWFrZVBvaW50ZXJF
eHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYg
bGVmdFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQotICAgICAg
ICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKKyAgICAgICAgLCBtX2xlZnRWYWx1ZShXVEZN
b3ZlKGxlZnRWYWx1ZSkpCiAgICAgewogICAgIH0KIApAQCAtNTIsMTAgKzUyLDEwIEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNNYWtlUG9pbnRlckV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xW
YWx1ZTsgfQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVl
OyB9CiAKIHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAg
IFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAppbmRleCAy
ZWMzNGUxNWQ4YTQwZTVhZDJlMmJmODk2ODBjMjFjMzM0NGM5OTg4Li5kMjBlZDM0YzI0NmZmYzY0
NjFhZDczMDllYzkzOTMxZGU3YWZlMGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24uaApAQCAtNTksNiArNTksOSBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUdl
dE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9zc2libGVHZXRPdmVybG9hZHM7IH0KICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3Np
YmxlU2V0T3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsgfQogICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYg
cG9zc2libGVBbmRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzOyB9
CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb24oKSB7IHJldHVybiBtX2dldEZ1
bmN0aW9uOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb24oKSB7IHJldHVy
biBtX2FuZEZ1bmN0aW9uOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0RnVuY3Rpb24o
KSB7IHJldHVybiBtX3NldEZ1bmN0aW9uOyB9CiAKICAgICB2b2lkIHNldFBvc3NpYmxlR2V0T3Zl
cmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFy
YXRpb24+LCAxPiYgb3ZlcmxvYWRzKQogICAgIHsKQEAgLTczLDYgKzc2LDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKICAgICB9CiAKKyAg
ICB2b2lkIHNldEdldEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1bmN0aW9uKQor
ICAgIHsKKyAgICAgICAgbV9nZXRGdW5jdGlvbiA9IGdldEZ1bmN0aW9uOworICAgIH0KKworICAg
IHZvaWQgc2V0QW5kRnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb24pCisg
ICAgeworICAgICAgICBtX2FuZEZ1bmN0aW9uID0gYW5kRnVuY3Rpb247CisgICAgfQorCisgICAg
dm9pZCBzZXRTZXRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5jdGlvbikKKyAg
ICB7CisgICAgICAgIG1fc2V0RnVuY3Rpb24gPSBzZXRGdW5jdGlvbjsKKyAgICB9CisKICAgICBF
eHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gbV9iYXNlOyB9CiAKIHByaXZhdGU6CkBAIC04MCw2
ICs5OCw5IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVu
Y3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVHZXRPdmVybG9hZHM7CiAgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2li
bGVTZXRPdmVybG9hZHM7CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVBbmRPdmVybG9hZHM7CisgICAgRnVuY3Rpb25E
ZWNsYXJhdGlvbiogbV9nZXRGdW5jdGlvbiB7IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xh
cmF0aW9uKiBtX2FuZEZ1bmN0aW9uIHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRp
b24qIG1fc2V0RnVuY3Rpb24geyBudWxscHRyIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAppbmRleCA3OWQ4
ZDBmNzA4ZThkMDU3ODMxMmM4MTc5NGU4OGVkYWYzNDg3Y2Y5Li4zODFkZTllNDNhNzgxMTE2YzZl
ZTc3OTgwN2Y0ODc1Yjk1ZjM1NWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5oCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5h
bWVzcGFjZSBBU1QgewogCiAvKgotICogIDEuIEV2YWx1YXRlIG1fbFZhbHVlCisgKiAgMS4gRXZh
bHVhdGUgbV9sZWZ0VmFsdWUKICAqICAyLiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX29sZFZhbHVl
CiAgKiAgMy4gRXZhbHVhdGUgbV9uZXdWYWx1ZUV4cHJlc3Npb24KICAqICA0LiBBc3NpZ24gdGhl
IHJlc3VsdCB0byBtX25ld1ZhbHVlCi0gKiAgNS4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9sVmFs
dWUKKyAqICA1LiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX2xlZnRWYWx1ZQogICogIDYuIEV2YWx1
YXRlIG1fcmVzdWx0RXhwcmVzc2lvbgogICogIDcuIFJldHVybiB0aGUgcmVzdWx0CiAgKi8KQEAg
LTg1LDcgKzg1LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1JlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9u
JiBsVmFsdWUoKSB7IHJldHVybiBtX2xWYWx1ZTsgfQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1
ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiYgb2xk
VmFsdWUoKSB7IHJldHVybiBtX29sZFZhbHVlOyB9CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiYg
bmV3VmFsdWUoKSB7IHJldHVybiBtX25ld1ZhbHVlOyB9CiAgICAgRXhwcmVzc2lvbiogbmV3VmFs
dWVFeHByZXNzaW9uKCkgeyByZXR1cm4gbV9uZXdWYWx1ZUV4cHJlc3Npb24gPyAmKm1fbmV3VmFs
dWVFeHByZXNzaW9uIDogbnVsbHB0cjsgfQpAQCAtOTQsMTUgKzk0LDE1IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4gZnJpZW5kIFVuaXF1
ZVJlZjxVPiBXVEY6Om1ha2VVbmlxdWVSZWYoQXJncyYmLi4uKTsKIAotICAgIFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lv
bj4gbFZhbHVlKQorICAgIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbGVmdFZhbHVlKQogICAgICAgICA6IEV4cHJl
c3Npb24oTGV4ZXI6OlRva2VuKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShs
VmFsdWUpKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVlKSkKICAgICAg
ICAgLCBtX29sZFZhbHVlKExleGVyOjpUb2tlbihvcmlnaW4pLCBRdWFsaWZpZXJzKCksIFdURjo6
bnVsbG9wdCwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KQogICAgICAgICAs
IG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pLCBRdWFsaWZpZXJzKCksIFdURjo6bnVsbG9wdCwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KQogICAgIHsKICAgICB9CiAKLSAg
ICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Np
b24+IG1fbGVmdFZhbHVlOwogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9vbGRWYWx1ZTsKICAg
ICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fbmV3VmFsdWU7CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVm
PEV4cHJlc3Npb24+PiBtX25ld1ZhbHVlRXhwcmVzc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlv
bldyaXRlci5jcHAKaW5kZXggMmZjMTQ2NTg2MTZjOTg5Y2EyMTdjNjkyODJhZTg2ZGM0ODcxOWYw
OC4uZjA2M2NlZGI4NzA3NTg5ODFhZThjYWNmN2NjOGJhODUyZDYxY2U4NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldy
aXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xGdW5jdGlvbldyaXRlci5jcHAKQEAgLTU3MCw3ICs1NzAsNyBAQCB2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNh
bE5vdEV4cHJlcwogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
KQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAgICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0
KCk7CiAgICAgQVNTRVJUKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBl
KCkpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7
CkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmEKIAogdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBt
YWtlUG9pbnRlckV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAgICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRh
a2VMYXN0KCk7CiAgICAgQVNTRVJUKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUo
KSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hl
Y2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNr
ZXIuY3BwCmluZGV4IDEzNjVmMjZkMTIzNDgyMDAwZWU3NDA0N2NiMzIxZTgwMmIyYzYwODMuLmMz
Yzc5YjI0MDJiYWVmOWJjZmM4ZWMyMjRkNWE3NzIzZjg3M2I2NmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApAQCAtMjAz
LDggKzIwMyw4IEBAIHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24+IHJlc29sdmVCeUluc3RhbnRpYXRpb24oQVNUOjpDYWxsCiAgICAgICAgIGF1dG8gcmlnaHRB
Y2NlcHRhYmlsaXR5ID0gYWNjZXB0YWJpbGl0eSh0eXBlc1sxXS5nZXQoKSk7CiAgICAgICAgIGJv
b2wgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgICBpZiAobGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNj
ZXB0YWJpbGl0eTo6WWVzICYmIHJpZ2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZ
ZXMpIHsKLSAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlMSA9IHR5cGVzWzBdLmdldCgpLmdl
dFVubmFtZWRUeXBlKCk7Ci0gICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTIgPSB0eXBlc1sx
XS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgpOworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUx
ID0gKnR5cGVzWzBdLmdldCgpLmdldFVubmFtZWRUeXBlKCk7CisgICAgICAgICAgICBhdXRvJiB1
bm5hbWVkVHlwZTIgPSAqdHlwZXNbMV0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKICAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBtYXRjaGVzKHVubmFtZWRUeXBlMSwgdW5uYW1lZFR5cGUyKTsKICAgICAg
ICAgfSBlbHNlIGlmICgobGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6TWF5YmUg
JiYgcmlnaHRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcykKICAgICAgICAgICAg
IHx8IChsZWZ0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMgJiYgcmlnaHRBY2Nl
cHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6Ok1heWJlKSkKQEAgLTQ0NywxOSArNDQ3LDE4IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBib29sIGNoZWNrU2hhZGVyVHlwZShjb25zdCBBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOwotICAgIHZvaWQgZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFj
Y2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYsIEFTVDo6VW5uYW1lZFR5cGUmIHdy
YXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVkVHlwZSogZXh0cmFBcmd1bWVudFR5cGUgPSBudWxs
cHRyKTsKICAgICBib29sIGlzQm9vbFR5cGUoUmVzb2x2aW5nVHlwZSYpOwogICAgIHN0cnVjdCBS
ZWN1cnNlSW5mbyB7CiAgICAgICAgIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGU7Ci0gICAg
ICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiYgYWRkcmVzc1NwYWNlOworICAgICAgICBB
U1Q6OlR5cGVBbm5vdGF0aW9uJiB0eXBlQW5ub3RhdGlvbjsKICAgICB9OwotICAgIE9wdGlvbmFs
PFJlY3Vyc2VJbmZvPiByZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJl
cXVpcmVzTFZhbHVlID0gZmFsc2UpOwotICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZv
KEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMVmFsdWUgPSBmYWxzZSk7CisgICAgT3B0
aW9uYWw8UmVjdXJzZUluZm8+IHJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJv
b2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CisgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+
IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSA9IGZhbHNl
KTsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHJlY3Vyc2VBbmRX
cmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKICAgICBib29sIHJl
Y3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoQVNUOjpFeHByZXNzaW9uJik7Ci0gICAgdm9pZCBhc3Np
Z25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmLCBP
cHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBXVEY6Om51bGxvcHQpOwotICAgIHZvaWQgYXNz
aWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+
JiYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9p
ZCBmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZXNvbHZpbmdUeXBlJiwgT3B0aW9uYWw8
QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIGFzc2lnblR5cGUo
QVNUOjpFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYsIEFTVDo6VHlw
ZUFubm90YXRpb24pOworICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWZQ
dHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOworICAg
IHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVzb2x2aW5nVHlwZSYsIEFTVDo6
VHlwZUFubm90YXRpb24pOwogCiAgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24m
KSBvdmVycmlkZTsKQEAgLTQ5NCw3ICs0OTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdmlzaXQo
QVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogCiAgICAgSGFzaE1hcDxBU1Q6OkV4cHJl
c3Npb24qLCBSZXNvbHZpbmdUeXBlPiBtX3R5cGVNYXA7Ci0gICAgSGFzaE1hcDxBU1Q6OkV4cHJl
c3Npb24qLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4+IG1fYWRkcmVzc1NwYWNlTWFwOwor
ICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgQVNUOjpUeXBlQW5ub3RhdGlvbj4gbV90eXBl
QW5ub3RhdGlvbnM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fdmVydGV4RW50cnlQb2ludHM7CiAg
ICAgSGFzaFNldDxTdHJpbmc+IG1fZnJhZ21lbnRFbnRyeVBvaW50czsKICAgICBIYXNoU2V0PFN0
cmluZz4gbV9jb21wdXRlRW50cnlQb2ludHM7CkBAIC01MzgsOCArNTM3LDggQEAgYm9vbCBDaGVj
a2VyOjphc3NpZ25UeXBlcygpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX2FkZHJlc3NTcGFjZU1hcCkKLSAgICAgICAg
a2V5VmFsdWVQYWlyLmtleS0+c2V0QWRkcmVzc1NwYWNlKGtleVZhbHVlUGFpci52YWx1ZSk7Cisg
ICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX3R5cGVBbm5vdGF0aW9ucykKKyAgICAgICAg
a2V5VmFsdWVQYWlyLmtleS0+c2V0VHlwZUFubm90YXRpb24oV1RGTW92ZShrZXlWYWx1ZVBhaXIu
dmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjIxLDYgKzYyMCwxNyBAQCBzdGF0
aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChS
ZXNvbHZpbmdUeXBlJiByZXNvbAogICAgIH0pKTsKIH0KIAorc3RhdGljIE9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gY29tbWl0KFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5
cGUpCit7CisgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgIHJldHVybiB1bm5hbWVkVHlw
ZS0+Y2xvbmUoKTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYg
cmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPj4geworICAgICAgICBpZiAoIXJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZh
YmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbW1pdChyZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgIHJldHVybiBy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKS0+
Y2xvbmUoKTsKKyAgICB9KSk7Cit9CisKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKIHsKICAgICBhdXRvKiBiYXNl
VHlwZSA9IChbJl0oKSAtPiBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogewpAQCAtNzI4LDI2
ICs3MzgsMjYgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVS
ZWZlcmVuY2UpCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOwogfQog
Ci1hdXRvIENoZWNrZXI6OnJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVz
c2lvbiwgYm9vbCByZXF1aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CithdXRv
IENoZWNrZXI6OnJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwg
Ym9vbCByZXF1aXJlc0xlZnRWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CiB7CiAgICAg
VmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lvbik7CiAgICAgaWYgKGVycm9yKCkpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGdldEluZm8oZXhwcmVzc2lvbiwgcmVxdWly
ZXNMVmFsdWUpOworICAgIHJldHVybiBnZXRJbmZvKGV4cHJlc3Npb24sIHJlcXVpcmVzTGVmdFZh
bHVlKTsKIH0KIAotYXV0byBDaGVja2VyOjpnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVz
c2lvbiwgYm9vbCByZXF1aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CithdXRv
IENoZWNrZXI6OmdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVp
cmVzTGVmdFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4KIHsKICAgICBhdXRvIHR5cGVJ
dGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZleHByZXNzaW9uKTsKICAgICBBU1NFUlQodHlwZUl0
ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CiAKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUl0ZXJh
dG9yID0gbV9hZGRyZXNzU3BhY2VNYXAuZmluZCgmZXhwcmVzc2lvbik7Ci0gICAgQVNTRVJUKGFk
ZHJlc3NTcGFjZUl0ZXJhdG9yICE9IG1fYWRkcmVzc1NwYWNlTWFwLmVuZCgpKTsKLSAgICBpZiAo
cmVxdWlyZXNMVmFsdWUgJiYgIWFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSkgeworICAgIGF1
dG8gdHlwZUFubm90YXRpb25JdGVyYXRvciA9IG1fdHlwZUFubm90YXRpb25zLmZpbmQoJmV4cHJl
c3Npb24pOworICAgIEFTU0VSVCh0eXBlQW5ub3RhdGlvbkl0ZXJhdG9yICE9IG1fdHlwZUFubm90
YXRpb25zLmVuZCgpKTsKKyAgICBpZiAocmVxdWlyZXNMZWZ0VmFsdWUgJiYgdHlwZUFubm90YXRp
b25JdGVyYXRvci0+dmFsdWUuaXNSaWdodFZhbHVlKCkpIHsKICAgICAgICAgc2V0RXJyb3IoKTsK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIHt7IHR5cGVJ
dGVyYXRvci0+dmFsdWUsIGFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSB9fTsKKyAgICByZXR1
cm4ge3sgdHlwZUl0ZXJhdG9yLT52YWx1ZSwgdHlwZUFubm90YXRpb25JdGVyYXRvci0+dmFsdWUg
fX07CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2
YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtNzY3LDE5ICs3NzcsMzIgQEAgdm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAg
fQogfQogCi12b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNz
aW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVkVHlwZSwgT3B0aW9uYWw8
QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKK3ZvaWQgQ2hlY2tlcjo6YXNzaWduVHlw
ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNU
OjpSaWdodFZhbHVlKCkpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZl
eHByZXNzaW9uLCBXVEZNb3ZlKHVubmFtZWRUeXBlKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJl
c3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsK
KyAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgm
ZXhwcmVzc2lvbiwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwogICAgIEFTU0VSVF9VTlVTRUQo
YWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Np
b24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKK3ZvaWQgQ2hl
Y2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgQVNUOjpUeXBl
QW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewogICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZShyZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZSkpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1
bHQuaXNOZXdFbnRyeSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJl
c3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7CisgICAgYXV0byBhZGRy
ZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdU
Rk1vdmUodHlwZUFubm90YXRpb24pKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFk
ZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIENo
ZWNrZXI6OmZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVzb2x2aW5n
VHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9
IEFTVDo6UmlnaHRWYWx1ZSgpKQoreworICAgIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKKyAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNs
b25lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1
bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9u
LCByZXN1bHQuY29weVJlZigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9KSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRS
ZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFu
bm90YXRpb24pKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRk
cmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCkBAIC03ODksNiArODEyLDExIEBA
IHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVu
dEV4cHJlc3Npb24pCiAgICAgaWYgKCFsZWZ0SW5mbykKICAgICAgICAgcmV0dXJuOwogCisgICAg
aWYgKGxlZnRJbmZvLT50eXBlQW5ub3RhdGlvbi5pc1JpZ2h0VmFsdWUoKSkgeworICAgICAgICBz
ZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYXV0byByaWdodEluZm8g
PSByZWN1cnNlQW5kR2V0SW5mbyhhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKICAgICBp
ZiAoIXJpZ2h0SW5mbykKICAgICAgICAgcmV0dXJuOwpAQCAtODAyLDIzICs4MzAsMTAgQEAgdm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhw
cmVzc2lvbikKICAgICBhc3NpZ25UeXBlKGFzc2lnbm1lbnRFeHByZXNzaW9uLCBXVEZNb3ZlKCpy
ZXN1bHRUeXBlKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6Zm9yd2FyZFR5cGUoQVNUOjpFeHByZXNz
aW9uJiBleHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlLCBPcHRpb25hbDxB
U1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlKQotewotICAgIHJlc29sdmluZ1R5cGUudmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1
bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9u
LCByZXN1bHQtPmNsb25lKCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRk
UmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2U+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRk
KCZleHByZXNzaW9uLCByZXN1bHQuY29weVJlZigpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChh
ZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9KSk7Ci0gICAgYXV0byBhZGRy
ZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFk
ZHJlc3NTcGFjZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFk
ZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLX0KLQogdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSwgdHJ1ZSk7Ci0gICAgaWYgKCFsVmFsdWVJbmZvKQor
ICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCksIHRydWUpOworICAgIGlmICghbGVmdFZhbHVlSW5mbykK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3
aXRoIHRoZSBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJ3MgQW5vbnltb3VzVmFyaWFibGVzLgpA
QCAtODI3LDcgKzg0Miw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQogICAgIGlmICghbmV3VmFs
dWVJbmZvKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KGxWYWx1
ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSkpIHsKKyAg
ICBpZiAoIW1hdGNoQW5kQ29tbWl0KGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1Zh
bHVlSW5mby0+cmVzb2x2aW5nVHlwZSkpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTg3MywzNyArODg4LDQzIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9u
LCBwb2ludGVyVHlwZS0+Y2xvbmUoKSwgcG9pbnRlclR5cGUtPmFkZHJlc3NTcGFjZSgpKTsKKyAg
ICBhc3NpZ25UeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmNsb25lKCks
IEFTVDo6TGVmdFZhbHVlIHsgcG9pbnRlclR5cGUtPmFkZHJlc3NTcGFjZSgpIH0pOwogfQogCiB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRl
ckV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8o
bWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpLCB0cnVlKTsKLSAgICBpZiAoIWxWYWx1ZUlu
Zm8pCisgICAgYXV0byBsZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZVBvaW50
ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLCB0cnVlKTsKKyAgICBpZiAoIWxlZnRWYWx1ZUluZm8p
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIGxWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlw
ZShsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWxWYWx1ZVR5cGUpIHsKKyAg
ICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBsZWZ0VmFsdWVJbmZvLT50eXBlQW5ub3RhdGlvbi5s
ZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAgaWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7CiAgICAgICAg
IHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKG1h
a2VQb2ludGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhl
cjo6VG9rZW4obWFrZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUluZm8tPmFk
ZHJlc3NTcGFjZSwgbFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAgIGF1dG8qIGxlZnRWYWx1ZVR5
cGUgPSBnZXRVbm5hbWVkVHlwZShsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBp
ZiAoIWxlZnRWYWx1ZVR5cGUpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGFzc2lnblR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9uLCBtYWtlVW5p
cXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihtYWtlUG9pbnRlckV4cHJlc3Np
b24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgbGVmdFZhbHVlVHlwZS0+Y2xvbmUoKSkp
OwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsKLSAgICBhdXRvIGxWYWx1ZUlu
Zm8gPSByZWN1cnNlQW5kR2V0SW5mbyhtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1
ZSgpKTsKLSAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgYXV0byBsZWZ0VmFsdWVJbmZvID0gcmVj
dXJzZUFuZEdldEluZm8obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7
CisgICAgaWYgKCFsZWZ0VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBs
VmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0g
ICAgaWYgKCFsVmFsdWVUeXBlKSB7CisgICAgYXV0byogbGVmdFZhbHVlVHlwZSA9IGdldFVubmFt
ZWRUeXBlKGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGlmICghbGVmdFZhbHVl
VHlwZSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgYXV0byYgdW5pZnlOb2RlID0gbFZhbHVlVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgYXV0byYg
dW5pZnlOb2RlID0gbGVmdFZhbHVlVHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgaWYgKGlzPEFTVDo6
VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBk
b3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAgICBpZiAoaXM8QVNU
OjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7CkBAIC05MTMsNyArOTM0LDggQEAgdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3MKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlKSB7CisgICAgICAgIGF1dG8gbGVmdEFk
ZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3Bh
Y2UoKTsKKyAgICAgICAgaWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7CiAgICAgICAgICAgICBzZXRF
cnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC05MjEsMTgzICs5NDMs
ODUgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3MKICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlU
eXBlPih1bm5hbWVkVHlwZSkpIHsKICAgICAgICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25j
YXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7CiAgICAgICAgICAgICAvLyBGSVhNRTog
U2F2ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgotICAgICAgICAgICAgYXNzaWduVHlwZShtYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4o
KSksICpsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50eXBlKCkuY2xvbmUoKSkp
OworICAgICAgICAgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBt
YWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBhcnJh
eVR5cGUudHlwZSgpLmNsb25lKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmICghbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlKSB7CisgICAgYXV0byBs
ZWZ0QWRkcmVzc1NwYWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJl
c3NTcGFjZSgpOworICAgIGlmICghbGVmdEFkZHJlc3NTcGFjZSkgewogICAgICAgICBzZXRFcnJv
cigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlwZShtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICps
VmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25lKCkpKTsKKyAgICBhc3Np
Z25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGxlZnRWYWx1ZVR5cGUtPmNsb25lKCkp
KTsKIH0KIAotdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIEFTVDo6
VW5uYW1lZFR5cGUmIHdyYXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVkVHlwZSogZXh0cmFBcmd1
bWVudFR5cGUpCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhw
cmVzc2lvbikKIHsKLSAgICB1c2luZyBPdmVybG9hZFJlc29sdXRpb24gPSBzdGQ6OnR1cGxlPEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIEFTVDo6VW5uYW1lZFR5cGUqPjsKLQotICAgIEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb247Ci0gICAgQVNUOjpVbm5hbWVkVHlwZSog
Z2V0UmV0dXJuVHlwZTsKLSAgICBzdGQ6OnRpZShnZXRGdW5jdGlvbiwgZ2V0UmV0dXJuVHlwZSkg
PSAoWyZdKCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsKLSAgICAgICAgUmVzb2x2aW5nVHlwZSBn
ZXRBcmd1bWVudFR5cGUxKHdyYXBwZWRCYXNlVHlwZS5jbG9uZSgpKTsKLSAgICAgICAgT3B0aW9u
YWw8UmVzb2x2aW5nVHlwZT4gZ2V0QXJndW1lbnRUeXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJn
dW1lbnRUeXBlKQotICAgICAgICAgICAgZ2V0QXJndW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUo
ZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOworICAgIGF1dG8gYmFzZUluZm8gPSByZWN1cnNl
QW5kR2V0SW5mbyhkb3RFeHByZXNzaW9uLmJhc2UoKSk7CisgICAgaWYgKCFiYXNlSW5mbykKKyAg
ICAgICAgcmV0dXJuOworICAgIGF1dG8gYmFzZVVubmFtZWRUeXBlID0gY29tbWl0KGJhc2VJbmZv
LT5yZXNvbHZpbmdUeXBlKTsKKyAgICBpZiAoIWJhc2VVbm5hbWVkVHlwZSkKKyAgICAgICAgcmV0
dXJuOwogCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBnZXRGdW5jdGlvbiA9IG51bGxw
dHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0UmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAg
ewogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4g
Z2V0QXJndW1lbnRUeXBlczsKLSAgICAgICAgZ2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoZ2V0QXJn
dW1lbnRUeXBlMSk7Ci0gICAgICAgIGlmIChnZXRBcmd1bWVudFR5cGUyKQotICAgICAgICAgICAg
Z2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoKmdldEFyZ3VtZW50VHlwZTIpOwotCi0gICAgICAgIGF1
dG8qIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5wb3NzaWJsZUdldE92ZXJsb2FkcygpLCBnZXRBcmd1bWVudFR5cGVzLCBu
dWxscHRyKTsKLSAgICAgICAgaWYgKCFnZXRGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKGdldEZ1bmN0aW9uLCAmZ2V0RnVuY3Rpb24tPnR5cGUoKSk7Ci0gICAgfSkoKTsKLQot
ICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb247Ci0gICAgQVNUOjpVbm5h
bWVkVHlwZSogYW5kUmV0dXJuVHlwZTsKLSAgICBzdGQ6OnRpZShhbmRGdW5jdGlvbiwgYW5kUmV0
dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsKLSAgICAgICAgYXV0byBj
b21wdXRlQW5kQXJndW1lbnRUeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBl
KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
eyB1bm5hbWVkVHlwZS5jbG9uZSgpIH07Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5
cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4geyBSZXNvbHZpbmdUeXBl
KG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFk
LCBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5jbG9uZSgpKSkg
fTsKLSAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiB7
IFJlc29sdmluZ1R5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9r
ZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6
OlRocmVhZCwgZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkuY2xvbmUo
KSkpIH07Ci0gICAgICAgIH07Ci0gICAgICAgIGF1dG8gY29tcHV0ZUFuZFJldHVyblR5cGUgPSBb
Jl0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsK
LSAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlw
ZSkuZWxlbWVudFR5cGUoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9
OwotCi0gICAgICAgIGF1dG8gYW5kQXJndW1lbnRUeXBlMSA9IGNvbXB1dGVBbmRBcmd1bWVudFR5
cGUod3JhcHBlZEJhc2VUeXBlKTsKLSAgICAgICAgaWYgKCFhbmRBcmd1bWVudFR5cGUxKQotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOwotICAgICAg
ICBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiBhbmRBcmd1bWVudFR5cGUyOwotICAgICAgICBpZiAo
ZXh0cmFBcmd1bWVudFR5cGUpCi0gICAgICAgICAgICBhbmRBcmd1bWVudFR5cGUyID0gUmVzb2x2
aW5nVHlwZShleHRyYUFyZ3VtZW50VHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIGdldEFyZ3VtZW50
VHlwZXMuYXBwZW5kKGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgZ2V0RnVuY3Rp
b24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUdl
dE92ZXJsb2FkcygpLCBnZXRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGdl
dEZ1bmN0aW9uKQorICAgICAgICAgICAgZ2V0UmV0dXJuVHlwZSA9ICZnZXRGdW5jdGlvbi0+dHlw
ZSgpOworICAgIH0KIAorICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb24g
PSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVyblR5cGUgPSBudWxscHRy
OworICAgIGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5mby0+dHlwZUFubm90YXRp
b24ubGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5v
cmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBiYXNlVW5uYW1lZFR5cGUtPmdldCgpLmNsb25l
KCkpOwogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4gYW5kQXJndW1lbnRUeXBlczsKLSAgICAgICAgYW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoKmFu
ZEFyZ3VtZW50VHlwZTEpOwotICAgICAgICBpZiAoYW5kQXJndW1lbnRUeXBlMikKLSAgICAgICAg
ICAgIGFuZEFyZ3VtZW50VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5cGUyKTsKLQotICAgICAg
ICBhdXRvKiBhbmRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVBbmRPdmVybG9hZHMoKSwgYW5kQXJndW1lbnRUeXBl
cywgbnVsbHB0cik7Ci0gICAgICAgIGlmICghYW5kRnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihhbmRGdW5jdGlvbiwgY29tcHV0ZUFuZFJldHVyblR5cGUoYW5kRnVuY3Rpb24t
PnR5cGUoKSkpOwotICAgIH0pKCk7CisgICAgICAgIGFuZEFyZ3VtZW50VHlwZXMuYXBwZW5kKGJh
c2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgYW5kRnVuY3Rpb24gPSByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFuZE92ZXJsb2FkcygpLCBh
bmRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGFuZEZ1bmN0aW9uKQorICAg
ICAgICAgICAgYW5kUmV0dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRG
dW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpOyAvLyBGSVhNRTogRW5mb3JjZSB0aGUgcmV0
dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKKyAgICB9CiAKLSAgICBpZiAo
IWdldFJldHVyblR5cGUgJiYgIWFuZFJldHVyblR5cGUpIHsKKyAgICBpZiAoIWdldEZ1bmN0aW9u
ICYmICFhbmRGdW5jdGlvbikgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotCi0gICAgaWYgKGdldFJldHVyblR5cGUgJiYgYW5kUmV0dXJuVHlwZSAmJiAhbWF0
Y2hlcygqZ2V0UmV0dXJuVHlwZSwgKmFuZFJldHVyblR5cGUpKSB7CisgICAgaWYgKGdldEZ1bmN0
aW9uICYmIGFuZEZ1bmN0aW9uKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHNldEZ1bmN0aW9uOwot
ICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNldFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUoc2V0RnVu
Y3Rpb24sIHNldFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlvbiB7Ci0g
ICAgICAgIFJlc29sdmluZ1R5cGUgc2V0QXJndW1lbnQxVHlwZSh3cmFwcGVkQmFzZVR5cGUuY2xv
bmUoKSk7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IHNldEFyZ3VtZW50VHlwZTI7
Ci0gICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAgICAgICAgICAgIHNldEFyZ3VtZW50
VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgpKTsKLSAgICAg
ICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDNUeXBlKGdldFJldHVyblR5cGUgPyBnZXRSZXR1
cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlwZS0+Y2xvbmUoKSk7CisgICAgQVNUOjpVbm5h
bWVkVHlwZSogZmllbGRUeXBlID0gZ2V0UmV0dXJuVHlwZSA/IGdldFJldHVyblR5cGUgOiBhbmRS
ZXR1cm5UeXBlOwogCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5jdGlvbiA9
IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogc2V0UmV0dXJuVHlwZSA9IG51bGxwdHI7
CisgICAgewogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdU
eXBlPj4gc2V0QXJndW1lbnRUeXBlczsKLSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQo
c2V0QXJndW1lbnQxVHlwZSk7Ci0gICAgICAgIGlmIChzZXRBcmd1bWVudFR5cGUyKQotICAgICAg
ICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoKnNldEFyZ3VtZW50VHlwZTIpOwotICAgICAg
ICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChzZXRBcmd1bWVudDNUeXBlKTsKLQotICAgICAgICBh
dXRvKiBzZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24ucG9zc2libGVTZXRPdmVybG9hZHMoKSwgc2V0QXJndW1lbnRUeXBlcywg
bnVsbHB0cik7Ci0gICAgICAgIGlmICghc2V0RnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihzZXRGdW5jdGlvbiwgJnNldEZ1bmN0aW9uLT50eXBlKCkpOwotICAgIH0pKCk7Ci0K
LSAgICBpZiAoc2V0RnVuY3Rpb24pIHsKLSAgICAgICAgaWYgKCFtYXRjaGVzKHNldEZ1bmN0aW9u
LT50eXBlKCksIHdyYXBwZWRCYXNlVHlwZSkpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBPcHRpb25hbDxBU1Q6
OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOwotICAgIGlmIChnZXRSZXR1cm5UeXBlIHx8IGFu
ZFJldHVyblR5cGUpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoZSByZWZlcmVuY2UgY29tcGlsZXIg
aGFzICJlbHNlIGlmICghbm9kZS5iYXNlLmlzTFZhbHVlICYmICFiYXNlVHlwZS5pc0FycmF5UmVm
KSIsCi0gICAgICAgIC8vIGJ1dCBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IGl0IGV4aXN0cy4gSSBo
YXZlbid0IHdyaXR0ZW4gaXQgaGVyZSwgYW5kIEknbGwgaW52ZXN0aWdhdGUKLSAgICAgICAgLy8g
aWYgd2UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZSByZWZlcmVuY2UgY29tcGlsZXIuCi0gICAgICAg
IGlmIChpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHdyYXBwZWRCYXNlVHlwZSkpCi0gICAgICAgICAg
ICBhZGRyZXNzU3BhY2UgPSBkb3duY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGU+KHdyYXBwZWRCYXNl
VHlwZSkuYWRkcmVzc1NwYWNlKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBh
ZGRyZXNzU3BhY2VJdGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFwLmZpbmQoJnByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAgICAgICAgICAgQVNTRVJUKGFkZHJlc3NTcGFjZUl0
ZXJhdG9yICE9IG1fYWRkcmVzc1NwYWNlTWFwLmVuZCgpKTsKLSAgICAgICAgICAgIGlmIChhZGRy
ZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUpCi0gICAgICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0g
KmFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CisgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGJhc2VJbmZv
LT5yZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoZmllbGRU
eXBlLT5jbG9uZSgpKTsKKyAgICAgICAgc2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVy
bG9hZEltcGwoZG90RXhwcmVzc2lvbi5wb3NzaWJsZVNldE92ZXJsb2FkcygpLCBzZXRBcmd1bWVu
dFR5cGVzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKHNldEZ1bmN0aW9uKQorICAgICAgICAgICAg
c2V0UmV0dXJuVHlwZSA9ICZzZXRGdW5jdGlvbi0+dHlwZSgpOwogICAgIH0KIAotICAgIC8vIEZJ
WE1FOiBHZW5lcmF0ZSB0aGUgY2FsbCBleHByZXNzaW9ucwotCi0gICAgYXNzaWduVHlwZShwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5UeXBlLT5jbG9u
ZSgpIDogYW5kUmV0dXJuVHlwZS0+Y2xvbmUoKSwgYWRkcmVzc1NwYWNlKTsKLX0KLQotT3B0aW9u
YWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBDaGVja2VyOjpyZWN1cnNlQW5kV3JhcEJh
c2VUeXBlKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24pCi17Ci0gICAgYXV0byBiYXNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAgIGlmICghYmFzZUluZm8pCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBhdXRvKiBiYXNlVHlwZSA9IGdldFVubmFtZWRUeXBl
KGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWJhc2VUeXBlKSB7CisgICAgaWYg
KHNldEZ1bmN0aW9uICYmIGFuZEZ1bmN0aW9uKSB7CiAgICAgICAgIHNldEVycm9yKCk7Ci0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfQotICAgIGF1dG8mIGJhc2VVbmlmeU5vZGUg
PSBiYXNlVHlwZS0+dW5pZnlOb2RlKCk7Ci0gICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGJh
c2VVbmlmeU5vZGUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4o
YmFzZVVuaWZ5Tm9kZSkuY2xvbmUoKTsKLSAgICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KGJh
c2VVbmlmeU5vZGUpKTsKLSAgICByZXR1cm4geyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4
ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIGRvd25jYXN0PEFT
VDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSkgfTsKLX0KLQotdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCi17Ci0gICAgYXV0byBiYXNlVHlw
ZSA9IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoZG90RXhwcmVzc2lvbik7Ci0gICAgaWYgKCFiYXNl
VHlwZSkKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGZpbmlzaFZpc2l0aW5nUHJvcGVy
dHlBY2Nlc3MoZG90RXhwcmVzc2lvbiwgKmJhc2VUeXBlKTsKKyAgICBkb3RFeHByZXNzaW9uLnNl
dEdldEZ1bmN0aW9uKGdldEZ1bmN0aW9uKTsKKyAgICBkb3RFeHByZXNzaW9uLnNldEFuZEZ1bmN0
aW9uKGFuZEZ1bmN0aW9uKTsKKyAgICBkb3RFeHByZXNzaW9uLnNldFNldEZ1bmN0aW9uKHNldEZ1
bmN0aW9uKTsKIH0KIAotdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYg
aW5kZXhFeHByZXNzaW9uKQordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lv
biYpCiB7Ci0gICAgYXV0byBiYXNlVHlwZSA9IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoaW5kZXhF
eHByZXNzaW9uKTsKLSAgICBpZiAoIWJhc2VUeXBlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIGluZGV4SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGluZGV4RXhwcmVzc2lvbi5pbmRleEV4
cHJlc3Npb24oKSk7Ci0gICAgaWYgKCFpbmRleEluZm8pCi0gICAgICAgIHJldHVybjsKLSAgICBh
dXRvIGluZGV4RXhwcmVzc2lvblR5cGUgPSBnZXRVbm5hbWVkVHlwZShpbmRleEluZm8tPnJlc29s
dmluZ1R5cGUpOwotICAgIGlmICghaW5kZXhFeHByZXNzaW9uVHlwZSkgewotICAgICAgICBzZXRF
cnJvcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2VzcyhpbmRleEV4cHJlc3Npb24sIFdURk1vdmUoKmJhc2VUeXBlKSwgaW5kZXhFeHBy
ZXNzaW9uVHlwZSk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCiB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQpA
QCAtMTEwNSwxMCArMTAyOSwxMCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5j
ZS52YXJpYWJsZSgpKTsKICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+
dHlwZSgpKTsKICAgICAKLSAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1Nw
YWNlOworICAgIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0
VmFsdWUoKTsKICAgICBpZiAoIXZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPmlzQW5vbnlt
b3VzKCkpCi0gICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQ7
Ci0gICAgYXNzaWduVHlwZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFy
aWFibGUoKS0+dHlwZSgpLT5jbG9uZSgpLCBhZGRyZXNzU3BhY2UpOworICAgICAgICB0eXBlQW5u
b3RhdGlvbiA9IEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9Owor
ICAgIGFzc2lnblR5cGUodmFyaWFibGVSZWZlcmVuY2UsIHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlh
YmxlKCktPnR5cGUoKS0+Y2xvbmUoKSwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwogfQogCiB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCkBAIC0xNDA3
LDcgKzEzMzEsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBj
b21tYUV4cHJlc3Npb24pCiAgICAgaWYgKGVycm9yKCkpCiAgICAgICAgIHJldHVybjsKICAgICBh
dXRvIGxhc3RJbmZvID0gZ2V0SW5mbyhjb21tYUV4cHJlc3Npb24ubGlzdCgpLmxhc3QoKSk7Ci0g
ICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBsYXN0SW5mby0+cmVzb2x2aW5nVHlwZSk7
CisgICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBsYXN0SW5mby0+cmVzb2x2aW5nVHlw
ZSwgbGFzdEluZm8tPnR5cGVBbm5vdGF0aW9uKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgK
aW5kZXggY2E1Y2JiNTkyOWNmOWUxODE4YzJjZDc0MWU3OWQ5MzZjYWFjNjhlZS4uNTBlNTMyYjZh
NmU4MmYxZTAyYTA0Njc5MWI4ZTY2OTZkNWIxMWUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKQEAgLTcy
LDYgKzcyLDcgQEAgcHJpdmF0ZToKIAogLy8gVGhpcyBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQg
YSBWYXJpYW50LgogLy8gSXQgZXhpc3RzIHNvIHdlIGNhbiBtYWtlIHN1cmUgdGhhdCB0aGUgZGVm
YXVsdCBjb25zdHJ1Y3RvciBkb2VzIHRoZSByaWdodCB0aGluZy4KKy8vIEZJWE1FOiBUaGlzIHdy
YXBwZXIgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeS4KIGNsYXNzIFJlc29sdmluZ1R5cGUgewogcHVi
bGljOgogICAgIFJlc29sdmluZ1R5cGUoKQpAQCAtMTAyLDEwICsxMDMsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgQVNUOjpVbm5hbWVkVHlwZSYgZ2V0
VW5uYW1lZFR5cGUoKQorICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFVubmFtZWRUeXBlKCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPj4obV9pbm5lcikpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKTsKKyAgICAgICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKSkKKyAgICAg
ICAgICAgIHJldHVybiAmV1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lu
bmVyKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlzaXRvciYgdmlzaXRvcikgLT4gZGVj
bHR5cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFyaWFudDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+Jj4oKSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZp
c2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNp
dG9yLmNwcAppbmRleCBlZDJlOGMwMDUyZDZkZmU5YmQwN2JhZjc2NDlkOGNlNDhjOWIwOWJiLi45
ODUxOTAyZDcwMjNlNmQ2MTk5MzdmZmQ5N2Q0Njg5ZGY0NTAzYWNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKQEAgLTU4
OSwxNyArNTg5LDE3IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVz
c2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
KQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpNYWtl
UG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKIH0KIAogdm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsKICAgICBjaGVja0Vycm9yQW5k
VmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsKICAgICBpZiAocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365275</attachid>
            <date>2019-03-19 17:58:29 -0700</date>
            <delta_ts>2019-03-19 19:35:07 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190319175828.patch</filename>
            <type>text/plain</type>
            <size>41582</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ2NDA4ZmE1M2M1ODg1
ZjBkYThkZTc3OTNiZDRhNDQ3N2Q4ZmE2Ny4uYTRmNTg0NTMxNWI3YzQzNDdmZTMyY2YxNWNiYzdm
MDYzYThhNTNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTAzLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDMt
MTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwYXJlbnRp
bmcgZHVyaW5nIGEgbXV0YXRpb24gZXZlbnQgaW5zaWRlIGFwcGVuZENoaWxkIGNvdWxkIHJlc3Vs
dCBpbiBhIGNpcmN1bGFyIERPTSB0cmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCmluZGV4IDRhNmQ3
YzQ2OTVkYzRjYWM4MjkwNTRlNDA1NTU3ODc2NTE3NWY4NjMuLmQ0MzZkNjg5Yzc4ZTA0MGM1ZmRk
Y2UzOTYwZjM4ZjQzMDE1MGIyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICs0Myw3
MCBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAogfTsK
IAorc3RydWN0IExlZnRWYWx1ZSB7CisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKK307
CisKK3N0cnVjdCBBYnN0cmFjdExlZnRWYWx1ZSB7Cit9OworCitzdHJ1Y3QgUmlnaHRWYWx1ZSB7
Cit9OworCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCitj
bGFzcyBUeXBlQW5ub3RhdGlvbiB7CitwdWJsaWM6CisgICAgVHlwZUFubm90YXRpb24oKQorICAg
ICAgICA6IG1fZW1wdHkodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24o
TGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBU
eXBlQW5ub3RhdGlvbihBYnN0cmFjdExlZnRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIodikK
KyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oUmlnaHRWYWx1ZSB2KQorICAgICAg
ICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oY29uc3Qg
VHlwZUFubm90YXRpb24mKSA9IGRlZmF1bHQ7CisgICAgVHlwZUFubm90YXRpb24oVHlwZUFubm90
YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgVHlwZUFubm90YXRpb24mIG9wZXJhdG9y
PShjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBlQW5ub3RhdGlvbiYg
b3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9uJiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIE9wdGlv
bmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFkZHJlc3NTcGFjZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIW1fZW1wdHkpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxM
ZWZ0VmFsdWU+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PExlZnRWYWx1
ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIH0KKworICAgIGJvb2wgaXNSaWdodFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJp
Z2h0VmFsdWU+KG1faW5uZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNp
dG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6
dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0cmFjdExl
ZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigpKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0
eSk7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW5uZXIpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWYXJpYW50PExlZnRWYWx1ZSwgQWJzdHJhY3RMZWZ0VmFsdWUsIFJp
Z2h0VmFsdWU+IG1faW5uZXI7CisgICAgYm9vbCBtX2VtcHR5IHsgZmFsc2UgfTsKK307CisKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRXhwcmVzc2lvbi5oCmluZGV4IGI3YWIyMGNlZDJjNDUzZjk1ZjFjMmUzZWZjMjgx
ZmRhNDhlNWMzYWQuLjMxOGE4MTA2MTYzZGI4N2U4NWVmNDgxZWM4ODdkOWQ2YzVjMjljYzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4
cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFeHByZXNzaW9uLmgKQEAgLTY1LDEyICs2NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1f
dHlwZSA9IFdURk1vdmUodHlwZSk7CiAgICAgfQogCi0gICAgY29uc3QgT3B0aW9uYWw8QWRkcmVz
c1NwYWNlPiYgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0K
KyAgICBjb25zdCBUeXBlQW5ub3RhdGlvbiogdHlwZUFubm90YXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3R5cGVBbm5vdGF0aW9uID8gJiptX3R5cGVBbm5vdGF0aW9uIDogbnVsbHB0cjsgfQogCi0g
ICAgdm9pZCBzZXRBZGRyZXNzU3BhY2UoT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiYgYWRkcmVzc1Nw
YWNlKQorICAgIHZvaWQgc2V0VHlwZUFubm90YXRpb24oVHlwZUFubm90YXRpb24mJiB0eXBlQW5u
b3RhdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9hZGRyZXNzU3BhY2UpOwotICAgICAg
ICBtX2FkZHJlc3NTcGFjZSA9IGFkZHJlc3NTcGFjZTsKKyAgICAgICAgQVNTRVJUKCFtX3R5cGVB
bm5vdGF0aW9uKTsKKyAgICAgICAgbV90eXBlQW5ub3RhdGlvbiA9IFdURk1vdmUodHlwZUFubm90
YXRpb24pOwogICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0Fzc2lnbm1lbnRFeHByZXNzaW9u
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVm
PFVubmFtZWRUeXBlPj4gbV90eXBlOwotICAgIE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4gbV9hZGRy
ZXNzU3BhY2U7CisgICAgT3B0aW9uYWw8VHlwZUFubm90YXRpb24+IG1fdHlwZUFubm90YXRpb247
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24u
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24uaAppbmRleCA2MzE2ZjU0ZTE2MzI2YjRhNDgzZmE4NzJlMWY0
N2JiMDQ4ZWRmODhlLi43NzBjZjhiYTlmMjUyNzI2ZjY5YzFhZTZkZTVlYTRhNWIxMmJmNzdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCkBA
IC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBNYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIE1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhw
cmVzc2lvbj4mJiBsVmFsdWUpCisgICAgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbihMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxlZnRWYWx1ZSkKICAg
ICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShX
VEZNb3ZlKGxWYWx1ZSkpCisgICAgICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUp
KQogICAgIHsKICAgICB9CiAKQEAgLTUyLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9
CisgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVlKCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KIAog
cHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVl
UmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xN
YWtlUG9pbnRlckV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCmluZGV4IDdiMDUyYjZkNWYyODg3
ZjU5MmRmNDRmZDk0MDljNGZhOTUyMDNhYTguLjM0NjA0ZDU2YWVjYzRiNjMwZDdhN2U2Zjc5NmI5
Yzg1MzQ3Y2UxZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCkBA
IC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBNYWtlUG9pbnRlckV4cHJl
c3Npb24gOiBwdWJsaWMgRXhwcmVzc2lvbiB7CiBwdWJsaWM6Ci0gICAgTWFrZVBvaW50ZXJFeHBy
ZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgbFZh
bHVlKQorICAgIE1ha2VQb2ludGVyRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKFdU
Rk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShXVEZNb3ZlKGxWYWx1ZSkpCisgICAg
ICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUpKQogICAgIHsKICAgICB9CiAKQEAg
LTUyLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTWFrZVBvaW50ZXJFeHByZXNz
aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYg
bFZhbHVlKCkgeyByZXR1cm4gbV9sVmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUo
KSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogCiBwcml2YXRlOgotICAgIFVuaXF1ZVJlZjxFeHBy
ZXNzaW9uPiBtX2xWYWx1ZTsKKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sZWZ0VmFsdWU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLmgKaW5kZXggMmVjMzRlMTVkOGE0MGU1YWQyZTJiZjg5NjgwYzIxYzMzNDRj
OTk4OC4uZDIwZWQzNGMyNDZmZmM2NDYxYWQ3MzA5ZWM5MzkzMWRlN2FmZTBjYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKQEAgLTU5LDYgKzU5LDkgQEAg
cHVibGljOgogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFy
YXRpb24+LCAxPiYgcG9zc2libGVHZXRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxlR2V0
T3ZlcmxvYWRzOyB9CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZVNldE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9zc2li
bGVTZXRPdmVybG9hZHM7IH0KICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5j
dGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlQW5kT3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9w
b3NzaWJsZUFuZE92ZXJsb2FkczsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1bmN0
aW9uKCkgeyByZXR1cm4gbV9nZXRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24q
IGFuZEZ1bmN0aW9uKCkgeyByZXR1cm4gbV9hbmRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9uRGVj
bGFyYXRpb24qIHNldEZ1bmN0aW9uKCkgeyByZXR1cm4gbV9zZXRGdW5jdGlvbjsgfQogCiAgICAg
dm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKICAgICB7CkBAIC03
Myw2ICs3NiwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fcG9zc2libGVBbmRPdmVybG9hZHMgPSBv
dmVybG9hZHM7CiAgICAgfQogCisgICAgdm9pZCBzZXRHZXRGdW5jdGlvbihGdW5jdGlvbkRlY2xh
cmF0aW9uKiBnZXRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIG1fZ2V0RnVuY3Rpb24gPSBnZXRG
dW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldEFuZEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFy
YXRpb24qIGFuZEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgbV9hbmRGdW5jdGlvbiA9IGFuZEZ1
bmN0aW9uOworICAgIH0KKworICAgIHZvaWQgc2V0U2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJh
dGlvbiogc2V0RnVuY3Rpb24pCisgICAgeworICAgICAgICBtX3NldEZ1bmN0aW9uID0gc2V0RnVu
Y3Rpb247CisgICAgfQorCiAgICAgRXhwcmVzc2lvbiYgYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsg
fQogCiBwcml2YXRlOgpAQCAtODAsNiArOTgsOSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlR2V0
T3ZlcmxvYWRzOwogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzOwogICAgIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlQW5kT3Zl
cmxvYWRzOworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fZ2V0RnVuY3Rpb24geyBudWxscHRy
IH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9hbmRGdW5jdGlvbiB7IG51bGxwdHIgfTsK
KyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX3NldEZ1bmN0aW9uIHsgbnVsbHB0ciB9OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLmgKaW5kZXggNzlkOGQwZjcwOGU4ZDA1NzgzMTJjODE3OTRlODhlZGFmMzQ4N2Nm
OS4uMzgxZGU5ZTQzYTc4MTExNmM2ZWU3Nzk4MDdmNDg3NWI5NWYzNTVhYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaApAQCAtNDEsMTEgKzQxLDExIEBA
IG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogLyoKLSAqICAxLiBFdmFsdWF0
ZSBtX2xWYWx1ZQorICogIDEuIEV2YWx1YXRlIG1fbGVmdFZhbHVlCiAgKiAgMi4gQXNzaWduIHRo
ZSByZXN1bHQgdG8gbV9vbGRWYWx1ZQogICogIDMuIEV2YWx1YXRlIG1fbmV3VmFsdWVFeHByZXNz
aW9uCiAgKiAgNC4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9uZXdWYWx1ZQotICogIDUuIEFzc2ln
biB0aGUgcmVzdWx0IHRvIG1fbFZhbHVlCisgKiAgNS4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9s
ZWZ0VmFsdWUKICAqICA2LiBFdmFsdWF0ZSBtX3Jlc3VsdEV4cHJlc3Npb24KICAqICA3LiBSZXR1
cm4gdGhlIHJlc3VsdAogICovCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9sVmFsdWU7IH0KKyAg
ICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogICAgIFZh
cmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQogICAg
IFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9uZXdWYWx1ZTsgfQog
ICAgIEV4cHJlc3Npb24qIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJuIG1fbmV3VmFsdWVF
eHByZXNzaW9uID8gJiptX25ld1ZhbHVlRXhwcmVzc2lvbiA6IG51bGxwdHI7IH0KQEAgLTk0LDE1
ICs5NCwxNSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFUsIGNsYXNz
Li4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gV1RGOjptYWtlVW5pcXVlUmVmKEFyZ3MmJi4u
Lik7CiAKLSAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdp
biwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxWYWx1ZSkKKyAgICBSZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxlZnRW
YWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQotICAgICAg
ICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKKyAgICAgICAgLCBtX2xlZnRWYWx1ZShXVEZN
b3ZlKGxlZnRWYWx1ZSkpCiAgICAgICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9rZW4ob3JpZ2lu
KSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCkKICAgICAgICAgLCBtX25ld1ZhbHVlKFdURk1vdmUob3JpZ2luKSwgUXVhbGlm
aWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCkKICAgICB7CiAgICAgfQogCi0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOwor
ICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKICAgICBWYXJpYWJsZURlY2xh
cmF0aW9uIG1fb2xkVmFsdWU7CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOwog
ICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9uZXdWYWx1ZUV4cHJlc3Npb247
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEZ1bmN0aW9uV3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCmluZGV4IDJmYzE0NjU4NjE2Yzk4OWNh
MjE3YzY5MjgyYWU4NmRjNDg3MTlmMDguLmYwNjNjZWRiODcwNzU4OTgxYWU4Y2FjZjdjYzhiYTg1
MmQ2MWNlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCkBAIC01NzAsNyAr
NTcwLDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TG9naWNh
bE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXMKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogICAgIGF1dG8gbFZh
bHVlID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAgIEFTU0VSVChtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpOwpAQCAtNTg3LDcgKzU4Nyw3IEBAIHZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24m
IG1ha2VBcnJhCiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1h
a2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewotICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogICAgIGF1
dG8gbFZhbHVlID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAgIEFTU0VSVChtYWtlUG9pbnRlckV4
cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAppbmRleCAxMzY1ZjI2ZDEyMzQ4MjAwMGVlNzQw
NDdjYjMyMWU4MDJiMmM2MDgzLi4wYTA0M2MyZGMwOGYzY2JjYzY2YWQ5NDUzMzc4NjY2YzRkYTVm
NWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMQ2hlY2tlci5jcHAKQEAgLTIwMyw4ICsyMDMsOCBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlQnlJbnN0YW50aWF0aW9uKEFTVDo6Q2Fs
bAogICAgICAgICBhdXRvIHJpZ2h0QWNjZXB0YWJpbGl0eSA9IGFjY2VwdGFiaWxpdHkodHlwZXNb
MV0uZ2V0KCkpOwogICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgaWYgKGxl
ZnRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcyAmJiByaWdodEFjY2VwdGFiaWxp
dHkgPT0gQWNjZXB0YWJpbGl0eTo6WWVzKSB7Ci0gICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlw
ZTEgPSB0eXBlc1swXS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgpOwotICAgICAgICAgICAgYXV0byYg
dW5uYW1lZFR5cGUyID0gdHlwZXNbMV0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKKyAgICAgICAg
ICAgIGF1dG8mIHVubmFtZWRUeXBlMSA9ICp0eXBlc1swXS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgp
OworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUyID0gKnR5cGVzWzFdLmdldCgpLmdldFVu
bmFtZWRUeXBlKCk7CiAgICAgICAgICAgICBzdWNjZXNzID0gbWF0Y2hlcyh1bm5hbWVkVHlwZTEs
IHVubmFtZWRUeXBlMik7CiAgICAgICAgIH0gZWxzZSBpZiAoKGxlZnRBY2NlcHRhYmlsaXR5ID09
IEFjY2VwdGFiaWxpdHk6Ok1heWJlICYmIHJpZ2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmls
aXR5OjpZZXMpCiAgICAgICAgICAgICB8fCAobGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJp
bGl0eTo6WWVzICYmIHJpZ2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXliZSkp
CkBAIC00NDcsMTkgKzQ0NywxOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjaGVj
a1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKLSAgICB2b2lkIGZp
bmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24m
LCBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5cGUsIEFTVDo6VW5uYW1lZFR5cGUqIGV4
dHJhQXJndW1lbnRUeXBlID0gbnVsbHB0cik7CiAgICAgYm9vbCBpc0Jvb2xUeXBlKFJlc29sdmlu
Z1R5cGUmKTsKICAgICBzdHJ1Y3QgUmVjdXJzZUluZm8gewogICAgICAgICBSZXNvbHZpbmdUeXBl
JiByZXNvbHZpbmdUeXBlOwotICAgICAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4mIGFk
ZHJlc3NTcGFjZTsKKyAgICAgICAgQVNUOjpUeXBlQW5ub3RhdGlvbiYgdHlwZUFubm90YXRpb247
CiAgICAgfTsKLSAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4gcmVjdXJzZUFuZEdldEluZm8oQVNU
OjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xWYWx1ZSA9IGZhbHNlKTsKLSAgICBPcHRpb25h
bDxSZWN1cnNlSW5mbz4gZ2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTFZh
bHVlID0gZmFsc2UpOworICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiByZWN1cnNlQW5kR2V0SW5m
byhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlID0gZmFsc2UpOworICAg
IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVx
dWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+PiByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uJik7CiAgICAgYm9vbCByZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKEFTVDo6RXhwcmVz
c2lvbiYpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpu
dWxsb3B0KTsKLSAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVmUHRyPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBX
VEY6Om51bGxvcHQpOwotICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVz
b2x2aW5nVHlwZSYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVsbG9wdCk7
CisgICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiYmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKKyAgICB2b2lkIGFzc2lnblR5cGUo
QVNUOjpFeHByZXNzaW9uJiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmLCBBU1Q6
OlR5cGVBbm5vdGF0aW9uKTsKKyAgICB2b2lkIGZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYs
IFJlc29sdmluZ1R5cGUmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKIAogICAgIHZvaWQgdmlzaXQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CkBAIC00OTQsNyArNDkzLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mKSBvdmVycmlkZTsKIAog
ICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgUmVzb2x2aW5nVHlwZT4gbV90eXBlTWFwOwot
ICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+
PiBtX2FkZHJlc3NTcGFjZU1hcDsKKyAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIEFTVDo6
VHlwZUFubm90YXRpb24+IG1fdHlwZUFubm90YXRpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBt
X3ZlcnRleEVudHJ5UG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQ
b2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzOwpAQCAtNTM4
LDggKzUzNyw4IEBAIGJvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMoKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV9hZGRy
ZXNzU3BhY2VNYXApCi0gICAgICAgIGtleVZhbHVlUGFpci5rZXktPnNldEFkZHJlc3NTcGFjZShr
ZXlWYWx1ZVBhaXIudmFsdWUpOworICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV90eXBl
QW5ub3RhdGlvbnMpCisgICAgICAgIGtleVZhbHVlUGFpci5rZXktPnNldFR5cGVBbm5vdGF0aW9u
KFdURk1vdmUoa2V5VmFsdWVQYWlyLnZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTYyMSw2ICs2MjAsMTcgQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPj4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5nVHlwZSYgcmVzb2wKICAgICB9KSk7CiB9CiAK
K3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChSZXNv
bHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQoreworICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5u
YW1lZFR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAg
ICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBPcHRpb25h
bDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgaWYgKCFyZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBjb21taXQocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBl
KCkpOworICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVU
eXBlKCkucmVzb2x2ZWRUeXBlKCktPmNsb25lKCk7CisgICAgfSkpOworfQorCiB2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRp
b24pCiB7CiAgICAgYXV0byogYmFzZVR5cGUgPSAoWyZdKCkgLT4gQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24qIHsKQEAgLTcyOCwyNiArNzM4LDI2IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQogICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQodHlwZUFyZ3VtZW50KTsKIH0KIAotYXV0byBDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5mbyhB
U1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMVmFsdWUpIC0+IE9wdGlv
bmFsPFJlY3Vyc2VJbmZvPgorYXV0byBDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4
cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUpIC0+IE9wdGlvbmFs
PFJlY3Vyc2VJbmZvPgogewogICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOwogICAgIGlm
IChlcnJvcigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBnZXRJ
bmZvKGV4cHJlc3Npb24sIHJlcXVpcmVzTFZhbHVlKTsKKyAgICByZXR1cm4gZ2V0SW5mbyhleHBy
ZXNzaW9uLCByZXF1aXJlc0xlZnRWYWx1ZSk7CiB9CiAKLWF1dG8gQ2hlY2tlcjo6Z2V0SW5mbyhB
U1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMVmFsdWUpIC0+IE9wdGlv
bmFsPFJlY3Vyc2VJbmZvPgorYXV0byBDaGVja2VyOjpnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYg
ZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUlu
Zm8+CiB7CiAgICAgYXV0byB0eXBlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmZXhwcmVzc2lv
bik7CiAgICAgQVNTRVJUKHR5cGVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOwogCi0gICAg
YXV0byBhZGRyZXNzU3BhY2VJdGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFwLmZpbmQoJmV4cHJl
c3Npb24pOwotICAgIEFTU0VSVChhZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFj
ZU1hcC5lbmQoKSk7Ci0gICAgaWYgKHJlcXVpcmVzTFZhbHVlICYmICFhZGRyZXNzU3BhY2VJdGVy
YXRvci0+dmFsdWUpIHsKKyAgICBhdXRvIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3IgPSBtX3R5cGVB
bm5vdGF0aW9ucy5maW5kKCZleHByZXNzaW9uKTsKKyAgICBBU1NFUlQodHlwZUFubm90YXRpb25J
dGVyYXRvciAhPSBtX3R5cGVBbm5vdGF0aW9ucy5lbmQoKSk7CisgICAgaWYgKHJlcXVpcmVzTGVm
dFZhbHVlICYmIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3ItPnZhbHVlLmlzUmlnaHRWYWx1ZSgpKSB7
CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQotICAgIHJldHVybiB7eyB0eXBlSXRlcmF0b3ItPnZhbHVlLCBhZGRyZXNzU3BhY2VJdGVyYXRv
ci0+dmFsdWUgfX07CisgICAgcmV0dXJuIHt7IHR5cGVJdGVyYXRvci0+dmFsdWUsIHR5cGVBbm5v
dGF0aW9uSXRlcmF0b3ItPnZhbHVlIH19OwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKQEAgLTc2NywxOSArNzc3
LDMyIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJp
YWJsZURlY2xhcmF0aW9uKQogICAgIH0KIH0KIAotdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFT
VDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYg
dW5uYW1lZFR5cGUsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2UpCit2
b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVkVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlv
biB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewogICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh1bm5hbWVkVHlwZSkpOwog
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAg
YXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJl
c3Npb24sIGFkZHJlc3NTcGFjZSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBt
X3R5cGVBbm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRpb24p
KTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNl
QWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCi12b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNU
OjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+
JiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBh
ZGRyZXNzU3BhY2UpCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBl
eHByZXNzaW9uLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJp
Z2h0VmFsdWUoKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJl
c3Npb24sIFdURk1vdmUocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpKTsKICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIGF1dG8gYWRkcmVzc1Nw
YWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZleHByZXNzaW9uLCBhZGRyZXNz
U3BhY2UpOworICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV90eXBlQW5ub3RhdGlv
bnMuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CisgICAgQVNTRVJU
X1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05l
d0VudHJ5KTsKK30KKwordm9pZCBDaGVja2VyOjpmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24m
IGV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFTVDo6VHlwZUFubm90
YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKK3sKKyAgICByZXNvbHZp
bmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiYgcmVzdWx0KSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgm
ZXhwcmVzc2lvbiwgcmVzdWx0LT5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYgcmVzdWx0KSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90
eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0LmNvcHlSZWYoKSk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfSkpOworICAg
IGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV90eXBlQW5ub3RhdGlvbnMuYWRkKCZleHBy
ZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRy
ZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0K
IApAQCAtNzg5LDYgKzgxMiwxMSBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVu
dEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQogICAgIGlmICghbGVmdEluZm8pCiAg
ICAgICAgIHJldHVybjsKIAorICAgIGlmIChsZWZ0SW5mby0+dHlwZUFubm90YXRpb24uaXNSaWdo
dFZhbHVlKCkpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIGF1dG8gcmlnaHRJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oYXNzaWdubWVudEV4cHJl
c3Npb24ucmlnaHQoKSk7CiAgICAgaWYgKCFyaWdodEluZm8pCiAgICAgICAgIHJldHVybjsKQEAg
LTgwMiwyMyArODMwLDEwIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhw
cmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCiAgICAgYXNzaWduVHlwZShhc3NpZ25tZW50
RXhwcmVzc2lvbiwgV1RGTW92ZSgqcmVzdWx0VHlwZSkpOwogfQogCi12b2lkIENoZWNrZXI6OmZv
cndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgcmVz
b2x2aW5nVHlwZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKLXsK
LSAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90
eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0LT5jbG9uZSgpKTsKLSAgICAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9LCBbJl0oUmVm
UHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzdWx0KSB7Ci0gICAgICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0LmNvcHlSZWYoKSk7Ci0g
ICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0g
ICAgfSkpOwotICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VN
YXAuYWRkKCZleHByZXNzaW9uLCBhZGRyZXNzU3BhY2UpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRk
cmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci19
Ci0KIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiBy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQogewotICAgIGF1dG8gbFZhbHVlSW5mbyA9IHJlY3Vy
c2VBbmRHZXRJbmZvKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCksIHRydWUpOwot
ICAgIGlmICghbFZhbHVlSW5mbykKKyAgICBhdXRvIGxlZnRWYWx1ZUluZm8gPSByZWN1cnNlQW5k
R2V0SW5mbyhyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLCB0cnVlKTsKKyAg
ICBpZiAoIWxlZnRWYWx1ZUluZm8pCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBG
aWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCB0aGUgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbidz
IEFub255bW91c1ZhcmlhYmxlcy4KQEAgLTgyNyw3ICs4NDIsNyBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbikKICAgICBpZiAoIW5ld1ZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFtYXRjaEFuZENvbW1pdChsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8t
PnJlc29sdmluZ1R5cGUpKSB7CisgICAgaWYgKCFtYXRjaEFuZENvbW1pdChsZWZ0VmFsdWVJbmZv
LT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpKSB7CiAgICAgICAg
IHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04NzMsMzcgKzg4OCw0MyBA
QCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVy
ZW5jZUV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBl
KGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmNsb25lKCksIHBvaW50ZXJUeXBl
LT5hZGRyZXNzU3BhY2UoKSk7CisgICAgYXNzaWduVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Npb24s
IHBvaW50ZXJUeXBlLT5jbG9uZSgpLCBBU1Q6OkxlZnRWYWx1ZSB7IHBvaW50ZXJUeXBlLT5hZGRy
ZXNzU3BhY2UoKSB9KTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVy
RXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewotICAgIGF1dG8gbFZhbHVlSW5m
byA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSwgdHJ1
ZSk7Ci0gICAgaWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJlY3Vy
c2VBbmRHZXRJbmZvKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSwgdHJ1ZSk7Cisg
ICAgaWYgKCFsZWZ0VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBsVmFs
dWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0gICAg
aWYgKCFsVmFsdWVUeXBlKSB7CisgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gbGVmdFZhbHVl
SW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOworICAgIGlmICghbGVmdEFk
ZHJlc3NTcGFjZSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXNzaWduVHlwZShtYWtlUG9pbnRlckV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8
QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5vcmln
aW4oKSksICpsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25lKCkpKTsK
KyAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobGVmdFZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVUeXBlKSB7CisgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhc3NpZ25UeXBlKG1ha2VQb2lu
dGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9r
ZW4obWFrZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGxl
ZnRWYWx1ZVR5cGUtPmNsb25lKCkpKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24p
CiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgaWYgKCFsVmFsdWVJbmZvKQorICAgIGF1
dG8gbGVmdFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24ubGVmdFZhbHVlKCkpOworICAgIGlmICghbGVmdFZhbHVlSW5mbykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYXV0byogbFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxWYWx1ZUlu
Zm8tPnJlc29sdmluZ1R5cGUpOwotICAgIGlmICghbFZhbHVlVHlwZSkgeworICAgIGF1dG8qIGxl
ZnRWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBl
KTsKKyAgICBpZiAoIWxlZnRWYWx1ZVR5cGUpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGxWYWx1ZVR5cGUtPnVu
aWZ5Tm9kZSgpOworICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGxlZnRWYWx1ZVR5cGUtPnVuaWZ5Tm9k
ZSgpOwogICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CiAgICAgICAg
IGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2Rl
KTsKICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkgewpAQCAt
OTEzLDcgKzkzNCw4IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSkg
eworICAgICAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBsZWZ0VmFsdWVJbmZvLT50eXBlQW5u
b3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAgICAgIGlmICghbGVmdEFkZHJlc3NTcGFj
ZSkgewogICAgICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtOTIxLDE4MyArOTQzLDk2IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzCiAgICAg
ICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKSB7CiAgICAgICAgICAgICBh
dXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpOwog
ICAgICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KLSAgICAg
ICAgICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1
ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBhcnJh
eVR5cGUudHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAgIGFzc2lnblR5cGUobWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAq
bGVmdEFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIWxWYWx1ZUluZm8tPmFkZHJl
c3NTcGFjZSkgeworICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5
cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3Bh
Y2UpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBsVmFsdWVUeXBl
LT5jbG9uZSgpKSk7CisgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBs
ZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRp
bmdQcm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5cGUsIEFTVDo6
VW5uYW1lZFR5cGUqIGV4dHJhQXJndW1lbnRUeXBlKQordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7Ci0gICAgdXNpbmcgT3ZlcmxvYWRSZXNv
bHV0aW9uID0gc3RkOjp0dXBsZTxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBBU1Q6OlVubmFt
ZWRUeXBlKj47Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1bmN0aW9uOwot
ICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUoZ2V0RnVu
Y3Rpb24sIGdldFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlvbiB7Ci0g
ICAgICAgIFJlc29sdmluZ1R5cGUgZ2V0QXJndW1lbnRUeXBlMSh3cmFwcGVkQmFzZVR5cGUuY2xv
bmUoKSk7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IGdldEFyZ3VtZW50VHlwZTI7
Ci0gICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAgICAgICAgICAgIGdldEFyZ3VtZW50
VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgpKTsKKyAgICBh
dXRvIGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oZG90RXhwcmVzc2lvbi5iYXNlKCkpOwor
ICAgIGlmICghYmFzZUluZm8pCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGJhc2VVbm5hbWVk
VHlwZSA9IGNvbW1pdChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFiYXNlVW5u
YW1lZFR5cGUpCisgICAgICAgIHJldHVybjsKIAorICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogZ2V0RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVy
blR5cGUgPSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8UmVzb2x2aW5nVHlwZT4+IGdldEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGdldEFyZ3Vt
ZW50VHlwZXMuYXBwZW5kKGdldEFyZ3VtZW50VHlwZTEpOwotICAgICAgICBpZiAoZ2V0QXJndW1l
bnRUeXBlMikKLSAgICAgICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpnZXRBcmd1bWVu
dFR5cGUyKTsKLQotICAgICAgICBhdXRvKiBnZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92
ZXJsb2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMo
KSwgZ2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAgICAgIGlmICghZ2V0RnVuY3Rpb24p
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0g
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihnZXRGdW5jdGlvbiwgJmdldEZ1bmN0aW9uLT50
eXBlKCkpOwotICAgIH0pKCk7Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1
bmN0aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVyblR5cGU7Ci0gICAgc3RkOjp0
aWUoYW5kRnVuY3Rpb24sIGFuZFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1
dGlvbiB7Ci0gICAgICAgIGF1dG8gY29tcHV0ZUFuZEFyZ3VtZW50VHlwZSA9IFsmXShBU1Q6OlVu
bmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gewotICAg
ICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHsgdW5uYW1lZFR5cGUuY2xvbmUoKSB9OwotICAgICAgICAg
ICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHsgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNU
OjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRU
eXBlKS50eXBlKCkuY2xvbmUoKSkpIH07Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVy
VHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgICAgICAgICByZXR1cm4geyBSZXNvbHZpbmdUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQ
b2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4o
KSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5j
ZT4odW5uYW1lZFR5cGUpLmNsb25lKCkpKSB9OwotICAgICAgICB9OwotICAgICAgICBhdXRvIGNv
bXB1dGVBbmRSZXR1cm5UeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAt
PiBBU1Q6OlVubmFtZWRUeXBlKiB7Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCk7Ci0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgfTsKLQotICAgICAgICBhdXRvIGFuZEFyZ3VtZW50VHlwZTEg
PSBjb21wdXRlQW5kQXJndW1lbnRUeXBlKHdyYXBwZWRCYXNlVHlwZSk7Ci0gICAgICAgIGlmICgh
YW5kQXJndW1lbnRUeXBlMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxs
cHRyLCBudWxscHRyKTsKLSAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gYW5kQXJndW1l
bnRUeXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAgICAgICAgICAgYW5k
QXJndW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkp
OworICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlw
ZSk7CisgICAgICAgIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRv
dEV4cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwgZ2V0QXJndW1lbnRUeXBlcywgbnVs
bHB0cik7CisgICAgICAgIGlmIChnZXRGdW5jdGlvbikKKyAgICAgICAgICAgIGdldFJldHVyblR5
cGUgPSAmZ2V0RnVuY3Rpb24tPnR5cGUoKTsKKyAgICB9CiAKKyAgICBBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24qIGFuZEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBh
bmRSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0g
YmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAgICBh
dXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6
OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgYmFzZVVu
bmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFuZEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGFuZEFy
Z3VtZW50VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5cGUxKTsKLSAgICAgICAgaWYgKGFuZEFy
Z3VtZW50VHlwZTIpCi0gICAgICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZCgqYW5kQXJn
dW1lbnRUeXBlMik7Ci0KLSAgICAgICAgYXV0byogYW5kRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rp
b25PdmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlQW5kT3Zlcmxv
YWRzKCksIGFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIWFuZEZ1bmN0
aW9uKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIp
OwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYW5kRnVuY3Rpb24sIGNvbXB1dGVBbmRS
ZXR1cm5UeXBlKGFuZEZ1bmN0aW9uLT50eXBlKCkpKTsKLSAgICB9KSgpOworICAgICAgICBhbmRB
cmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIGFu
ZEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9z
c2libGVBbmRPdmVybG9hZHMoKSwgYW5kQXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAg
IGlmIChhbmRGdW5jdGlvbikKKyAgICAgICAgICAgIGFuZFJldHVyblR5cGUgPSAmZG93bmNhc3Q8
QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8g
RklYTUU6IEVuZm9yY2UgdGhlIHJldHVybiBvZiBhbmRlcnMgd2lsbCBhbHdheXMgYmUgYSBwb2lu
dGVyCisgICAgfQogCi0gICAgaWYgKCFnZXRSZXR1cm5UeXBlICYmICFhbmRSZXR1cm5UeXBlKSB7
CisgICAgaWYgKCFnZXRGdW5jdGlvbiAmJiAhYW5kRnVuY3Rpb24pIHsKICAgICAgICAgc2V0RXJy
b3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlmIChnZXRSZXR1cm5UeXBlICYm
IGFuZFJldHVyblR5cGUgJiYgIW1hdGNoZXMoKmdldFJldHVyblR5cGUsICphbmRSZXR1cm5UeXBl
KSkgeworICAgIGlmIChnZXRGdW5jdGlvbiAmJiBhbmRGdW5jdGlvbikgewogICAgICAgICBzZXRF
cnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiBzZXRGdW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBzZXRSZXR1cm5UeXBl
OwotICAgIHN0ZDo6dGllKHNldEZ1bmN0aW9uLCBzZXRSZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBP
dmVybG9hZFJlc29sdXRpb24gewotICAgICAgICBSZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50MVR5
cGUod3JhcHBlZEJhc2VUeXBlLmNsb25lKCkpOwotICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdU
eXBlPiBzZXRBcmd1bWVudFR5cGUyOwotICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCi0g
ICAgICAgICAgICBzZXRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50
VHlwZS0+Y2xvbmUoKSk7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgc2V0QXJndW1lbnQzVHlwZShn
ZXRSZXR1cm5UeXBlID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUtPmNs
b25lKCkpOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdldFJldHVyblR5cGUg
PyBnZXRSZXR1cm5UeXBlIDogYW5kUmV0dXJuVHlwZTsKIAorICAgIEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiogc2V0RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNl
dFJldHVyblR5cGUgPSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHNldEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIHNl
dEFyZ3VtZW50VHlwZXMuYXBwZW5kKHNldEFyZ3VtZW50MVR5cGUpOwotICAgICAgICBpZiAoc2V0
QXJndW1lbnRUeXBlMikKLSAgICAgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpzZXRB
cmd1bWVudFR5cGUyKTsKLSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoc2V0QXJndW1l
bnQzVHlwZSk7Ci0KLSAgICAgICAgYXV0byogc2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25P
dmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlU2V0T3ZlcmxvYWRz
KCksIHNldEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIXNldEZ1bmN0aW9u
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOwot
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc2V0RnVuY3Rpb24sICZzZXRGdW5jdGlvbi0+
dHlwZSgpKTsKLSAgICB9KSgpOwotCi0gICAgaWYgKHNldEZ1bmN0aW9uKSB7Ci0gICAgICAgIGlm
ICghbWF0Y2hlcyhzZXRGdW5jdGlvbi0+dHlwZSgpLCB3cmFwcGVkQmFzZVR5cGUpKSB7Ci0gICAg
ICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKLSAgICBp
ZiAoZ2V0UmV0dXJuVHlwZSB8fCBhbmRSZXR1cm5UeXBlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBU
aGUgcmVmZXJlbmNlIGNvbXBpbGVyIGhhcyAiZWxzZSBpZiAoIW5vZGUuYmFzZS5pc0xWYWx1ZSAm
JiAhYmFzZVR5cGUuaXNBcnJheVJlZikiLAotICAgICAgICAvLyBidXQgSSBkb24ndCB1bmRlcnN0
YW5kIHdoeSBpdCBleGlzdHMuIEkgaGF2ZW4ndCB3cml0dGVuIGl0IGhlcmUsIGFuZCBJJ2xsIGlu
dmVzdGlnYXRlCi0gICAgICAgIC8vIGlmIHdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGUgcmVmZXJl
bmNlIGNvbXBpbGVyLgotICAgICAgICBpZiAoaXM8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVk
QmFzZVR5cGUpKQotICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gZG93bmNhc3Q8QVNUOjpSZWZl
cmVuY2VUeXBlPih3cmFwcGVkQmFzZVR5cGUpLmFkZHJlc3NTcGFjZSgpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFj
ZU1hcC5maW5kKCZwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICAgICAgICAg
IEFTU0VSVChhZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7
Ci0gICAgICAgICAgICBpZiAoYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAg
ICAgICAgIGFkZHJlc3NTcGFjZSA9ICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWU7Ci0gICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBzZXRBcmd1bWVu
dFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIFJlc29sdmlu
Z1R5cGUgZmllbGRSZXNvbHZpbmdUeXBlKGZpZWxkVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIHNl
dEFyZ3VtZW50VHlwZXMuYXBwZW5kKGZpZWxkUmVzb2x2aW5nVHlwZSk7CisgICAgICAgIHNldEZ1
bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2li
bGVTZXRPdmVybG9hZHMoKSwgc2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlm
IChzZXRGdW5jdGlvbikKKyAgICAgICAgICAgIHNldFJldHVyblR5cGUgPSAmc2V0RnVuY3Rpb24t
PnR5cGUoKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogR2VuZXJhdGUgdGhlIGNhbGwgZXhwcmVz
c2lvbnMKLQotICAgIGFzc2lnblR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBnZXRSZXR1
cm5UeXBlID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUtPmNsb25lKCks
IGFkZHJlc3NTcGFjZSk7Ci19Ci0KLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
Pj4gQ2hlY2tlcjo6cmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQotewotICAgIGF1dG8gYmFzZUluZm8g
PSByZWN1cnNlQW5kR2V0SW5mbyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAg
ICBpZiAoIWJhc2VJbmZvKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0
byogYmFzZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0g
ICAgaWYgKCFiYXNlVHlwZSkgeworICAgIGlmIChzZXRGdW5jdGlvbiAmJiBhbmRGdW5jdGlvbikg
ewogICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAg
IH0KLSAgICBhdXRvJiBiYXNlVW5pZnlOb2RlID0gYmFzZVR5cGUtPnVuaWZ5Tm9kZSgpOwotICAg
IGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSkKLSAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpLmNsb25lKCk7Ci0gICAg
QVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSk7Ci0gICAgcmV0dXJuIHsg
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24ub3JpZ2luKCkpLCBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkp
IH07Ci19Ci0KLXZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHBy
ZXNzaW9uKQotewotICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGRv
dEV4cHJlc3Npb24pOwotICAgIGlmICghYmFzZVR5cGUpCiAgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICBmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKGRvdEV4cHJlc3Npb24sICpiYXNl
VHlwZSk7CisgICAgZG90RXhwcmVzc2lvbi5zZXRHZXRGdW5jdGlvbihnZXRGdW5jdGlvbik7Cisg
ICAgZG90RXhwcmVzc2lvbi5zZXRBbmRGdW5jdGlvbihhbmRGdW5jdGlvbik7CisgICAgZG90RXhw
cmVzc2lvbi5zZXRTZXRGdW5jdGlvbihzZXRGdW5jdGlvbik7CisKKyAgICBBU1Q6OlR5cGVBbm5v
dGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCk7CisgICAgaWYgKGF1dG8g
bGVmdEFkZHJlc3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1Nw
YWNlKCkpIHsKKyAgICAgICAgaWYgKGFuZEZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFubm90
YXRpb24gPSBBU1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRkcmVzc1NwYWNlIH07CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgp
OworICAgIH0gZWxzZSBpZiAoIWJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5pc1JpZ2h0VmFsdWUo
KSAmJiAoc2V0RnVuY3Rpb24gfHwgYW5kRnVuY3Rpb24pKQorICAgICAgICB0eXBlQW5ub3RhdGlv
biA9IEFTVDo6QWJzdHJhY3RMZWZ0VmFsdWUoKTsKKyAgICBhc3NpZ25UeXBlKGRvdEV4cHJlc3Np
b24sIGZpZWxkVHlwZS0+Y2xvbmUoKSwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwogfQogCi12
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24p
Cit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJikKIHsKLSAgICBhdXRv
IGJhc2VUeXBlID0gcmVjdXJzZUFuZFdyYXBCYXNlVHlwZShpbmRleEV4cHJlc3Npb24pOwotICAg
IGlmICghYmFzZVR5cGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaW5kZXhJbmZvID0g
cmVjdXJzZUFuZEdldEluZm8oaW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpKTsKLSAg
ICBpZiAoIWluZGV4SW5mbykKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gaW5kZXhFeHByZXNz
aW9uVHlwZSA9IGdldFVubmFtZWRUeXBlKGluZGV4SW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0gICAg
aWYgKCFpbmRleEV4cHJlc3Npb25UeXBlKSB7Ci0gICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKGluZGV4
RXhwcmVzc2lvbiwgV1RGTW92ZSgqYmFzZVR5cGUpLCBpbmRleEV4cHJlc3Npb25UeXBlKTsKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpCkBAIC0xMTA1LDEwICsxMDQw
LDEwIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFi
bGVSZWZlcmVuY2UpCiAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOwog
ICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCkpOwogICAgIAot
ICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2U7CisgICAgQVNUOjpU
eXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpOwogICAgIGlm
ICghdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+aXNBbm9ueW1vdXMoKSkKLSAgICAgICAg
YWRkcmVzc1NwYWNlID0gQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKLSAgICBhc3NpZ25UeXBl
KHZhcmlhYmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCkt
PmNsb25lKCksIGFkZHJlc3NTcGFjZSk7CisgICAgICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpM
ZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH07CisgICAgYXNzaWduVHlwZSh2
YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgpLT5j
bG9uZSgpLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKQEAgLTE0MDcsNyArMTM0Miw3IEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikK
ICAgICBpZiAoZXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gbGFzdEluZm8gPSBn
ZXRJbmZvKGNvbW1hRXhwcmVzc2lvbi5saXN0KCkubGFzdCgpKTsKLSAgICBmb3J3YXJkVHlwZShj
b21tYUV4cHJlc3Npb24sIGxhc3RJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBmb3J3YXJkVHlw
ZShjb21tYUV4cHJlc3Npb24sIGxhc3RJbmZvLT5yZXNvbHZpbmdUeXBlLCBsYXN0SW5mby0+dHlw
ZUFubm90YXRpb24pOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJl
c3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaAppbmRleCBjYTVjYmI1OTI5
Y2Y5ZTE4MThjMmNkNzQxZTc5ZDkzNmNhYWM2OGVlLi41MGU1MzJiNmE2ZTgyZjFlMDJhMDQ2Nzkx
YjhlNjY5NmQ1YjExZTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaApAQCAtNzIsNiArNzIsNyBAQCBwcml2
YXRlOgogCiAvLyBUaGlzIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhIFZhcmlhbnQuCiAvLyBJ
dCBleGlzdHMgc28gd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9y
IGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorLy8gRklYTUU6IFRoaXMgd3JhcHBlciBtaWdodCBub3Qg
YmUgbmVjZXNzYXJ5LgogY2xhc3MgUmVzb2x2aW5nVHlwZSB7CiBwdWJsaWM6CiAgICAgUmVzb2x2
aW5nVHlwZSgpCkBAIC0xMDIsMTAgKzEwMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAq
dGhpczsKICAgICB9CiAKLSAgICBBU1Q6OlVubmFtZWRUeXBlJiBnZXRVbm5hbWVkVHlwZSgpCisg
ICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0VW5uYW1lZFR5cGUoKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+Piht
X2lubmVyKSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+KG1faW5uZXIpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0dXJuICZX
VEY6OmdldDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvcj4g
YXV0byB2aXNpdChjb25zdCBWaXNpdG9yJiB2aXNpdG9yKSAtPiBkZWNsdHlwZShXVEY6OnZpc2l0
KHZpc2l0b3IsIHN0ZDo6ZGVjbHZhbDxWYXJpYW50PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPj4mPigpKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCmluZGV4IGVk
MmU4YzAwNTJkNmRmZTliZDA3YmFmNzY0OWQ4Y2U0OGM5YjA5YmIuLjk4NTE5MDJkNzAyM2U2ZDYx
OTkzN2ZmZDk3ZDQ2ODlkZjQ1MDNhY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtNTg5LDE3ICs1ODksMTcgQEAg
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90
RXhwcmVzc2lvbikKIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tF
cnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1
ZSgpKTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lv
biYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtl
UG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtl
UG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogfQogCiB2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5s
VmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24ubGVmdFZhbHVlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLm9sZFZhbHVlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkpOwogICAgIGlmIChyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365291</attachid>
            <date>2019-03-19 19:35:08 -0700</date>
            <delta_ts>2019-03-20 18:02:28 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190319193507.patch</filename>
            <type>text/plain</type>
            <size>43425</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ2NDA4ZmE1M2M1ODg1
ZjBkYThkZTc3OTNiZDRhNDQ3N2Q4ZmE2Ny4uYTRmNTg0NTMxNWI3YzQzNDdmZTMyY2YxNWNiYzdm
MDYzYThhNTNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTAzLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDMt
MTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwYXJlbnRp
bmcgZHVyaW5nIGEgbXV0YXRpb24gZXZlbnQgaW5zaWRlIGFwcGVuZENoaWxkIGNvdWxkIHJlc3Vs
dCBpbiBhIGNpcmN1bGFyIERPTSB0cmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCmluZGV4IDRhNmQ3
YzQ2OTVkYzRjYWM4MjkwNTRlNDA1NTU3ODc2NTE3NWY4NjMuLmQ0MzZkNjg5Yzc4ZTA0MGM1ZmRk
Y2UzOTYwZjM4ZjQzMDE1MGIyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICs0Myw3
MCBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAogfTsK
IAorc3RydWN0IExlZnRWYWx1ZSB7CisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKK307
CisKK3N0cnVjdCBBYnN0cmFjdExlZnRWYWx1ZSB7Cit9OworCitzdHJ1Y3QgUmlnaHRWYWx1ZSB7
Cit9OworCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCitj
bGFzcyBUeXBlQW5ub3RhdGlvbiB7CitwdWJsaWM6CisgICAgVHlwZUFubm90YXRpb24oKQorICAg
ICAgICA6IG1fZW1wdHkodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24o
TGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBU
eXBlQW5ub3RhdGlvbihBYnN0cmFjdExlZnRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIodikK
KyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oUmlnaHRWYWx1ZSB2KQorICAgICAg
ICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oY29uc3Qg
VHlwZUFubm90YXRpb24mKSA9IGRlZmF1bHQ7CisgICAgVHlwZUFubm90YXRpb24oVHlwZUFubm90
YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgVHlwZUFubm90YXRpb24mIG9wZXJhdG9y
PShjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBlQW5ub3RhdGlvbiYg
b3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9uJiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIE9wdGlv
bmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFkZHJlc3NTcGFjZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIW1fZW1wdHkpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxM
ZWZ0VmFsdWU+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PExlZnRWYWx1
ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIH0KKworICAgIGJvb2wgaXNSaWdodFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJp
Z2h0VmFsdWU+KG1faW5uZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNp
dG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6
dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0cmFjdExl
ZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigpKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0
eSk7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW5uZXIpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWYXJpYW50PExlZnRWYWx1ZSwgQWJzdHJhY3RMZWZ0VmFsdWUsIFJp
Z2h0VmFsdWU+IG1faW5uZXI7CisgICAgYm9vbCBtX2VtcHR5IHsgZmFsc2UgfTsKK307CisKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRXhwcmVzc2lvbi5oCmluZGV4IGI3YWIyMGNlZDJjNDUzZjk1ZjFjMmUzZWZjMjgx
ZmRhNDhlNWMzYWQuLjMxOGE4MTA2MTYzZGI4N2U4NWVmNDgxZWM4ODdkOWQ2YzVjMjljYzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4
cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFeHByZXNzaW9uLmgKQEAgLTY1LDEyICs2NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1f
dHlwZSA9IFdURk1vdmUodHlwZSk7CiAgICAgfQogCi0gICAgY29uc3QgT3B0aW9uYWw8QWRkcmVz
c1NwYWNlPiYgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0K
KyAgICBjb25zdCBUeXBlQW5ub3RhdGlvbiogdHlwZUFubm90YXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3R5cGVBbm5vdGF0aW9uID8gJiptX3R5cGVBbm5vdGF0aW9uIDogbnVsbHB0cjsgfQogCi0g
ICAgdm9pZCBzZXRBZGRyZXNzU3BhY2UoT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiYgYWRkcmVzc1Nw
YWNlKQorICAgIHZvaWQgc2V0VHlwZUFubm90YXRpb24oVHlwZUFubm90YXRpb24mJiB0eXBlQW5u
b3RhdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9hZGRyZXNzU3BhY2UpOwotICAgICAg
ICBtX2FkZHJlc3NTcGFjZSA9IGFkZHJlc3NTcGFjZTsKKyAgICAgICAgQVNTRVJUKCFtX3R5cGVB
bm5vdGF0aW9uKTsKKyAgICAgICAgbV90eXBlQW5ub3RhdGlvbiA9IFdURk1vdmUodHlwZUFubm90
YXRpb24pOwogICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0Fzc2lnbm1lbnRFeHByZXNzaW9u
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVm
PFVubmFtZWRUeXBlPj4gbV90eXBlOwotICAgIE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4gbV9hZGRy
ZXNzU3BhY2U7CisgICAgT3B0aW9uYWw8VHlwZUFubm90YXRpb24+IG1fdHlwZUFubm90YXRpb247
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24u
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24uaAppbmRleCA2MzE2ZjU0ZTE2MzI2YjRhNDgzZmE4NzJlMWY0
N2JiMDQ4ZWRmODhlLi43NzBjZjhiYTlmMjUyNzI2ZjY5YzFhZTZkZTVlYTRhNWIxMmJmNzdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCkBA
IC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBNYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIE1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhw
cmVzc2lvbj4mJiBsVmFsdWUpCisgICAgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbihMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxlZnRWYWx1ZSkKICAg
ICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShX
VEZNb3ZlKGxWYWx1ZSkpCisgICAgICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUp
KQogICAgIHsKICAgICB9CiAKQEAgLTUyLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9
CisgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVlKCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KIAog
cHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVl
UmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xN
YWtlUG9pbnRlckV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCmluZGV4IDdiMDUyYjZkNWYyODg3
ZjU5MmRmNDRmZDk0MDljNGZhOTUyMDNhYTguLjM0NjA0ZDU2YWVjYzRiNjMwZDdhN2U2Zjc5NmI5
Yzg1MzQ3Y2UxZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCkBA
IC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBNYWtlUG9pbnRlckV4cHJl
c3Npb24gOiBwdWJsaWMgRXhwcmVzc2lvbiB7CiBwdWJsaWM6Ci0gICAgTWFrZVBvaW50ZXJFeHBy
ZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgbFZh
bHVlKQorICAgIE1ha2VQb2ludGVyRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKFdU
Rk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShXVEZNb3ZlKGxWYWx1ZSkpCisgICAg
ICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUpKQogICAgIHsKICAgICB9CiAKQEAg
LTUyLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTWFrZVBvaW50ZXJFeHByZXNz
aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYg
bFZhbHVlKCkgeyByZXR1cm4gbV9sVmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUo
KSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogCiBwcml2YXRlOgotICAgIFVuaXF1ZVJlZjxFeHBy
ZXNzaW9uPiBtX2xWYWx1ZTsKKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sZWZ0VmFsdWU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLmgKaW5kZXggMmVjMzRlMTVkOGE0MGU1YWQyZTJiZjg5NjgwYzIxYzMzNDRj
OTk4OC4uZmUwNTQ1Y2U5NGU4ODhjNWUzMzcxZGYwMzhmODQzZTgxOTU4MTIxMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKQEAgLTU5LDE4ICs1OSw0MiBA
QCBwdWJsaWM6CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+JiBwb3NzaWJsZUdldE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9zc2libGVH
ZXRPdmVybG9hZHM7IH0KICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlU2V0T3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9wb3Nz
aWJsZVNldE92ZXJsb2FkczsgfQogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVBbmRPdmVybG9hZHMoKSB7IHJldHVybiBt
X3Bvc3NpYmxlQW5kT3ZlcmxvYWRzOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVu
Y3Rpb24oKSB7IHJldHVybiBtX2dldEZ1bmN0aW9uOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlv
biogYW5kRnVuY3Rpb24oKSB7IHJldHVybiBtX2FuZEZ1bmN0aW9uOyB9CisgICAgRnVuY3Rpb25E
ZWNsYXJhdGlvbiogdGhyZWFkQW5kRnVuY3Rpb24oKSB7IHJldHVybiBtX3RocmVhZEFuZEZ1bmN0
aW9uOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0RnVuY3Rpb24oKSB7IHJldHVybiBt
X3NldEZ1bmN0aW9uOyB9CiAKICAgICB2b2lkIHNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKGNvbnN0
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYg
b3ZlcmxvYWRzKQogICAgIHsKICAgICAgICAgbV9wb3NzaWJsZUdldE92ZXJsb2FkcyA9IG92ZXJs
b2FkczsKICAgICB9CisgICAgdm9pZCBzZXRQb3NzaWJsZUFuZE92ZXJsb2Fkcyhjb25zdCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJs
b2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVBbmRPdmVybG9hZHMgPSBvdmVybG9hZHM7
CisgICAgfQogICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMp
CiAgICAgewogICAgICAgICBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzID0gb3ZlcmxvYWRzOwogICAg
IH0KLSAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQorCisg
ICAgdm9pZCBzZXRHZXRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBnZXRGdW5jdGlvbikK
ICAgICB7Ci0gICAgICAgIG1fcG9zc2libGVBbmRPdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAg
ICAgIG1fZ2V0RnVuY3Rpb24gPSBnZXRGdW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldEFu
ZEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0aW9uKQorICAgIHsKKyAgICAg
ICAgbV9hbmRGdW5jdGlvbiA9IGFuZEZ1bmN0aW9uOworICAgIH0KKworICAgIHZvaWQgc2V0VGhy
ZWFkQW5kRnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogdGhyZWFkQW5kRnVuY3Rpb24pCisg
ICAgeworICAgICAgICBtX3RocmVhZEFuZEZ1bmN0aW9uID0gdGhyZWFkQW5kRnVuY3Rpb247Cisg
ICAgfQorCisgICAgdm9pZCBzZXRTZXRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRG
dW5jdGlvbikKKyAgICB7CisgICAgICAgIG1fc2V0RnVuY3Rpb24gPSBzZXRGdW5jdGlvbjsKICAg
ICB9CiAKICAgICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gbV9iYXNlOyB9CkBAIC04MCw2
ICsxMDQsMTAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUdldE92ZXJsb2FkczsKICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3Nz
aWJsZVNldE92ZXJsb2FkczsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5j
dGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUFuZE92ZXJsb2FkczsKKyAgICBGdW5jdGlv
bkRlY2xhcmF0aW9uKiBtX2dldEZ1bmN0aW9uIHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVj
bGFyYXRpb24qIG1fYW5kRnVuY3Rpb24geyBudWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJh
dGlvbiogbV90aHJlYWRBbmRGdW5jdGlvbiB7IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xh
cmF0aW9uKiBtX3NldEZ1bmN0aW9uIHsgbnVsbHB0ciB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
QVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKaW5kZXgg
NzlkOGQwZjcwOGU4ZDA1NzgzMTJjODE3OTRlODhlZGFmMzQ4N2NmOS4uMzgxZGU5ZTQzYTc4MTEx
NmM2ZWU3Nzk4MDdmNDg3NWI5NWYzNTVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24uaApAQCAtNDEsMTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXSExTTCB7
CiBuYW1lc3BhY2UgQVNUIHsKIAogLyoKLSAqICAxLiBFdmFsdWF0ZSBtX2xWYWx1ZQorICogIDEu
IEV2YWx1YXRlIG1fbGVmdFZhbHVlCiAgKiAgMi4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9vbGRW
YWx1ZQogICogIDMuIEV2YWx1YXRlIG1fbmV3VmFsdWVFeHByZXNzaW9uCiAgKiAgNC4gQXNzaWdu
IHRoZSByZXN1bHQgdG8gbV9uZXdWYWx1ZQotICogIDUuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1f
bFZhbHVlCisgKiAgNS4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9sZWZ0VmFsdWUKICAqICA2LiBF
dmFsdWF0ZSBtX3Jlc3VsdEV4cHJlc3Npb24KICAqICA3LiBSZXR1cm4gdGhlIHJlc3VsdAogICov
CkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVz
c2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9sVmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0
VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24m
IG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRp
b24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9uZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24qIG5l
d1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJuIG1fbmV3VmFsdWVFeHByZXNzaW9uID8gJiptX25l
d1ZhbHVlRXhwcmVzc2lvbiA6IG51bGxwdHI7IH0KQEAgLTk0LDE1ICs5NCwxNSBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBV
bmlxdWVSZWY8VT4gV1RGOjptYWtlVW5pcXVlUmVmKEFyZ3MmJi4uLik7CiAKLSAgICBSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJl
c3Npb24+IGxWYWx1ZSkKKyAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tl
biYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxlZnRWYWx1ZSkKICAgICAgICAgOiBF
eHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQotICAgICAgICAsIG1fbFZhbHVlKFdURk1v
dmUobFZhbHVlKSkKKyAgICAgICAgLCBtX2xlZnRWYWx1ZShXVEZNb3ZlKGxlZnRWYWx1ZSkpCiAg
ICAgICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBX
VEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKICAgICAg
ICAgLCBtX25ld1ZhbHVlKFdURk1vdmUob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxv
cHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKICAgICB7CiAgICAgfQog
Ci0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAgIFVuaXF1ZVJlZjxFeHBy
ZXNzaW9uPiBtX2xlZnRWYWx1ZTsKICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7
CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOwogICAgIE9wdGlvbmFsPFVuaXF1
ZVJlZjxFeHByZXNzaW9uPj4gbV9uZXdWYWx1ZUV4cHJlc3Npb247CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVu
Y3Rpb25Xcml0ZXIuY3BwCmluZGV4IDJmYzE0NjU4NjE2Yzk4OWNhMjE3YzY5MjgyYWU4NmRjNDg3
MTlmMDguLmYwNjNjZWRiODcwNzU4OTgxYWU4Y2FjZjdjYzhiYTg1MmQ2MWNlODYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rp
b25Xcml0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCkBAIC01NzAsNyArNTcwLDcgQEAgdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxv
Z2ljYWxOb3RFeHByZXMKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogICAgIGF1dG8gbFZhbHVlID0gbV9zdGFjay50YWtl
TGFzdCgpOwogICAgIEFTU0VSVChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVk
VHlwZSgpKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSgpOwpAQCAtNTg3LDcgKzU4Nyw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJhCiAKIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lv
biYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtl
UG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtl
UG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogICAgIGF1dG8gbFZhbHVlID0gbV9zdGFj
ay50YWtlTGFzdCgpOwogICAgIEFTU0VSVChtYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRU
eXBlKCkpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja2VyLmNwcAppbmRleCAxMzY1ZjI2ZDEyMzQ4MjAwMGVlNzQwNDdjYjMyMWU4MDJiMmM2MDgz
Li4xYTIyZDhjNDY0ZDM2NjIzNjIwNjI0NjMzZmRiOTA3Zjc0NDVjNjExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKQEAg
LTIwMyw4ICsyMDMsOCBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uPiByZXNvbHZlQnlJbnN0YW50aWF0aW9uKEFTVDo6Q2FsbAogICAgICAgICBhdXRvIHJp
Z2h0QWNjZXB0YWJpbGl0eSA9IGFjY2VwdGFiaWxpdHkodHlwZXNbMV0uZ2V0KCkpOwogICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgaWYgKGxlZnRBY2NlcHRhYmlsaXR5ID09
IEFjY2VwdGFiaWxpdHk6OlllcyAmJiByaWdodEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0
eTo6WWVzKSB7Ci0gICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTEgPSB0eXBlc1swXS5nZXQo
KS5nZXRVbm5hbWVkVHlwZSgpOwotICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUyID0gdHlw
ZXNbMV0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRU
eXBlMSA9ICp0eXBlc1swXS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgpOworICAgICAgICAgICAgYXV0
byYgdW5uYW1lZFR5cGUyID0gKnR5cGVzWzFdLmdldCgpLmdldFVubmFtZWRUeXBlKCk7CiAgICAg
ICAgICAgICBzdWNjZXNzID0gbWF0Y2hlcyh1bm5hbWVkVHlwZTEsIHVubmFtZWRUeXBlMik7CiAg
ICAgICAgIH0gZWxzZSBpZiAoKGxlZnRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6Ok1h
eWJlICYmIHJpZ2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMpCiAgICAgICAg
ICAgICB8fCAobGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6WWVzICYmIHJpZ2h0
QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXliZSkpCkBAIC00NDcsMTkgKzQ0Nywx
OCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjaGVja1NoYWRlclR5cGUoY29uc3Qg
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKLSAgICB2b2lkIGZpbmlzaFZpc2l0aW5nUHJvcGVy
dHlBY2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mLCBBU1Q6OlVubmFtZWRUeXBl
JiB3cmFwcGVkQmFzZVR5cGUsIEFTVDo6VW5uYW1lZFR5cGUqIGV4dHJhQXJndW1lbnRUeXBlID0g
bnVsbHB0cik7CiAgICAgYm9vbCBpc0Jvb2xUeXBlKFJlc29sdmluZ1R5cGUmKTsKICAgICBzdHJ1
Y3QgUmVjdXJzZUluZm8gewogICAgICAgICBSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlOwot
ICAgICAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4mIGFkZHJlc3NTcGFjZTsKKyAgICAg
ICAgQVNUOjpUeXBlQW5ub3RhdGlvbiYgdHlwZUFubm90YXRpb247CiAgICAgfTsKLSAgICBPcHRp
b25hbDxSZWN1cnNlSW5mbz4gcmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9v
bCByZXF1aXJlc0xWYWx1ZSA9IGZhbHNlKTsKLSAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4gZ2V0
SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTFZhbHVlID0gZmFsc2UpOworICAg
IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiByZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24m
LCBib29sIHJlcXVpcmVzTGVmdFZhbHVlID0gZmFsc2UpOworICAgIE9wdGlvbmFsPFJlY3Vyc2VJ
bmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBm
YWxzZSk7CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiByZWN1cnNl
QW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJik7CiAgICAgYm9v
bCByZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKEFTVDo6RXhwcmVzc2lvbiYpOwotICAgIHZvaWQg
YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
JiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lk
IGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBXVEY6Om51bGxvcHQpOwotICAg
IHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVzb2x2aW5nVHlwZSYsIE9wdGlv
bmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBhc3NpZ25U
eXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmLCBBU1Q6
OlR5cGVBbm5vdGF0aW9uKTsKKyAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwg
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsK
KyAgICB2b2lkIGZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlc29sdmluZ1R5cGUmLCBB
U1Q6OlR5cGVBbm5vdGF0aW9uKTsKIAogICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJikgb3ZlcnJpZGU7CkBAIC00OTQsNyArNDkzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZp
c2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mKSBvdmVycmlkZTsKIAogICAgIEhhc2hNYXA8QVNUOjpF
eHByZXNzaW9uKiwgUmVzb2x2aW5nVHlwZT4gbV90eXBlTWFwOwotICAgIEhhc2hNYXA8QVNUOjpF
eHByZXNzaW9uKiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+PiBtX2FkZHJlc3NTcGFjZU1h
cDsKKyAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIEFTVDo6VHlwZUFubm90YXRpb24+IG1f
dHlwZUFubm90YXRpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRz
OwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHM7CiAgICAgSGFzaFNl
dDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzOwpAQCAtNTM4LDggKzUzNyw4IEBAIGJvb2wg
Q2hlY2tlcjo6YXNzaWduVHlwZXMoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV9hZGRyZXNzU3BhY2VNYXApCi0gICAg
ICAgIGtleVZhbHVlUGFpci5rZXktPnNldEFkZHJlc3NTcGFjZShrZXlWYWx1ZVBhaXIudmFsdWUp
OworICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV90eXBlQW5ub3RhdGlvbnMpCisgICAg
ICAgIGtleVZhbHVlUGFpci5rZXktPnNldFR5cGVBbm5vdGF0aW9uKFdURk1vdmUoa2V5VmFsdWVQ
YWlyLnZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTYyMSw2ICs2MjAsMTcgQEAg
c3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21t
aXQoUmVzb2x2aW5nVHlwZSYgcmVzb2wKICAgICB9KSk7CiB9CiAKK3N0YXRpYyBPcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbHZp
bmdUeXBlKQoreworICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICByZXR1cm4gdW5uYW1l
ZFR5cGUtPmNsb25lKCk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4+IHsKKyAgICAgICAgaWYgKCFyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVz
b2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBjb21taXQo
cmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICByZXR1
cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBl
KCktPmNsb25lKCk7CisgICAgfSkpOworfQorCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCiB7CiAgICAgYXV0byog
YmFzZVR5cGUgPSAoWyZdKCkgLT4gQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHsKQEAgLTcy
OCwyNiArNzM4LDI2IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0
eXBlUmVmZXJlbmNlKQogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsK
IH0KIAotYXV0byBDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGV4
cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMVmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgor
YXV0byBDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Np
b24sIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgogewog
ICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOwogICAgIGlmIChlcnJvcigpKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBnZXRJbmZvKGV4cHJlc3Npb24sIHJl
cXVpcmVzTFZhbHVlKTsKKyAgICByZXR1cm4gZ2V0SW5mbyhleHByZXNzaW9uLCByZXF1aXJlc0xl
ZnRWYWx1ZSk7CiB9CiAKLWF1dG8gQ2hlY2tlcjo6Z2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGV4
cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMVmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgor
YXV0byBDaGVja2VyOjpnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCBy
ZXF1aXJlc0xlZnRWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CiB7CiAgICAgYXV0byB0
eXBlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmZXhwcmVzc2lvbik7CiAgICAgQVNTRVJUKHR5
cGVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOwogCi0gICAgYXV0byBhZGRyZXNzU3BhY2VJ
dGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFwLmZpbmQoJmV4cHJlc3Npb24pOwotICAgIEFTU0VS
VChhZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7Ci0gICAg
aWYgKHJlcXVpcmVzTFZhbHVlICYmICFhZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUpIHsKKyAg
ICBhdXRvIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3IgPSBtX3R5cGVBbm5vdGF0aW9ucy5maW5kKCZl
eHByZXNzaW9uKTsKKyAgICBBU1NFUlQodHlwZUFubm90YXRpb25JdGVyYXRvciAhPSBtX3R5cGVB
bm5vdGF0aW9ucy5lbmQoKSk7CisgICAgaWYgKHJlcXVpcmVzTGVmdFZhbHVlICYmIHR5cGVBbm5v
dGF0aW9uSXRlcmF0b3ItPnZhbHVlLmlzUmlnaHRWYWx1ZSgpKSB7CiAgICAgICAgIHNldEVycm9y
KCk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiB7eyB0
eXBlSXRlcmF0b3ItPnZhbHVlLCBhZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUgfX07CisgICAg
cmV0dXJuIHt7IHR5cGVJdGVyYXRvci0+dmFsdWUsIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3ItPnZh
bHVlIH19OwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biYgdmFyaWFibGVEZWNsYXJhdGlvbikKQEAgLTc2NywxOSArNzc3LDMyIEBAIHZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQog
ICAgIH0KIH0KIAotdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhw
cmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdW5uYW1lZFR5cGUsIE9wdGlv
bmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2UpCit2b2lkIENoZWNrZXI6OmFzc2ln
blR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mJiB1bm5hbWVkVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9
IEFTVDo6UmlnaHRWYWx1ZSgpKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFk
ZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh1bm5hbWVkVHlwZSkpOwogICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VB
ZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFj
ZSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5h
ZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKICAgICBBU1NFUlRfVU5V
U0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50
cnkpOwogfQogCi12b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHBy
ZXNzaW9uLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2UsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2UpCit2b2lk
IENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZWZQdHI8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UsIEFTVDo6
VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsKICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUocmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UpKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRk
UmVzdWx0LmlzTmV3RW50cnkpOwotICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9h
ZGRyZXNzU3BhY2VNYXAuYWRkKCZleHByZXNzaW9uLCBhZGRyZXNzU3BhY2UpOworICAgIGF1dG8g
YWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV90eXBlQW5ub3RhdGlvbnMuYWRkKCZleHByZXNzaW9u
LCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3Bh
Y2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKK30KKwordm9p
ZCBDaGVja2VyOjpmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlc29s
dmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRp
b24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKK3sKKyAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7Cisg
ICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0
LT5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYg
cmVzdWx0KSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVz
c2lvbiwgcmVzdWx0LmNvcHlSZWYoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfSkpOworICAgIGF1dG8gYWRkcmVzc1NwYWNl
QWRkUmVzdWx0ID0gbV90eXBlQW5ub3RhdGlvbnMuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHR5
cGVBbm5vdGF0aW9uKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQs
IGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0KIApAQCAtNzg5LDYgKzgxMiwx
MSBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2ln
bm1lbnRFeHByZXNzaW9uKQogICAgIGlmICghbGVmdEluZm8pCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGlmIChsZWZ0SW5mby0+dHlwZUFubm90YXRpb24uaXNSaWdodFZhbHVlKCkpIHsKKyAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGF1dG8gcmlnaHRJ
bmZvID0gcmVjdXJzZUFuZEdldEluZm8oYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7CiAg
ICAgaWYgKCFyaWdodEluZm8pCiAgICAgICAgIHJldHVybjsKQEAgLTgwMiwyMyArODMwLDEwIEBA
IHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVu
dEV4cHJlc3Npb24pCiAgICAgYXNzaWduVHlwZShhc3NpZ25tZW50RXhwcmVzc2lvbiwgV1RGTW92
ZSgqcmVzdWx0VHlwZSkpOwogfQogCi12b2lkIENoZWNrZXI6OmZvcndhcmRUeXBlKEFTVDo6RXhw
cmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgT3B0aW9u
YWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKLXsKLSAgICByZXNvbHZpbmdUeXBl
LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYg
cmVzdWx0KSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVz
c2lvbiwgcmVzdWx0LT5jbG9uZSgpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQs
IGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYgcmVzdWx0KSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFw
LmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0LmNvcHlSZWYoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgfSkpOwotICAgIGF1dG8g
YWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZleHByZXNzaW9u
LCBhZGRyZXNzU3BhY2UpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0
LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci19Ci0KIHZvaWQgQ2hlY2tlcjo6
dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uKQogewotICAgIGF1dG8gbFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCksIHRydWUpOwotICAgIGlmICghbFZhbHVlSW5m
bykKKyAgICBhdXRvIGxlZnRWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLCB0cnVlKTsKKyAgICBpZiAoIWxlZnRWYWx1ZUlu
Zm8pCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoYXQgdG8g
ZG8gd2l0aCB0aGUgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbidzIEFub255bW91c1ZhcmlhYmxl
cy4KQEAgLTgyNyw3ICs4NDIsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKICAgICBpZiAoIW5l
d1ZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtYXRjaEFuZENvbW1pdChs
VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpKSB7
CisgICAgaWYgKCFtYXRjaEFuZENvbW1pdChsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBu
ZXdWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC04NzMsMzcgKzg4OCw0MyBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKGRlcmVmZXJlbmNlRXhwcmVz
c2lvbiwgcG9pbnRlclR5cGUtPmNsb25lKCksIHBvaW50ZXJUeXBlLT5hZGRyZXNzU3BhY2UoKSk7
CisgICAgYXNzaWduVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Npb24sIHBvaW50ZXJUeXBlLT5jbG9u
ZSgpLCBBU1Q6OkxlZnRWYWx1ZSB7IHBvaW50ZXJUeXBlLT5hZGRyZXNzU3BhY2UoKSB9KTsKIH0K
IAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBv
aW50ZXJFeHByZXNzaW9uKQogewotICAgIGF1dG8gbFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJ
bmZvKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSwgdHJ1ZSk7Ci0gICAgaWYgKCFsVmFs
dWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSwgdHJ1ZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVJ
bmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBsZWZ0
VmFsdWVJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAgaWYgKCFs
ZWZ0QWRkcmVzc1NwYWNlKSB7CisgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLSAgICBhdXRvKiBsVmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobFZhbHVlSW5m
by0+cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFsVmFsdWVUeXBlKSB7CisgICAgYXV0byogbGVm
dFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUp
OworICAgIGlmICghbGVmdFZhbHVlVHlwZSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlwZShtYWtlUG9pbnRlckV4cHJlc3Npb24s
IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VQb2ludGVy
RXhwcmVzc2lvbi5vcmlnaW4oKSksICpsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UsIGxWYWx1ZVR5
cGUtPmNsb25lKCkpKTsKKyAgICBhc3NpZ25UeXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4obWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGxlZnRWYWx1ZVR5cGUtPmNsb25l
KCkpKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFs
dWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5s
VmFsdWUoKSk7Ci0gICAgaWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9
IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVl
KCkpOworICAgIGlmICghbGVmdFZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byogbFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUp
OwotICAgIGlmICghbFZhbHVlVHlwZSkgeworICAgIGF1dG8qIGxlZnRWYWx1ZVR5cGUgPSBnZXRV
bm5hbWVkVHlwZShsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBpZiAoIWxlZnRW
YWx1ZVR5cGUpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGxWYWx1ZVR5cGUtPnVuaWZ5Tm9kZSgpOworICAgIGF1
dG8mIHVuaWZ5Tm9kZSA9IGxlZnRWYWx1ZVR5cGUtPnVuaWZ5Tm9kZSgpOwogICAgIGlmIChpczxB
U1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CiAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBl
ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKICAgICAgICAgaWYgKGlz
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkgewpAQCAtOTEzLDcgKzkzNCw4IEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIWxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSkgeworICAgICAgICBhdXRvIGxl
ZnRBZGRyZXNzU3BhY2UgPSBsZWZ0VmFsdWVJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVz
c1NwYWNlKCk7CisgICAgICAgIGlmICghbGVmdEFkZHJlc3NTcGFjZSkgewogICAgICAgICAgICAg
c2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtOTIxLDE4MyAr
OTQzLDExNiBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzcwogICAgICAgICBpZiAoaXM8QVNUOjpB
cnJheVR5cGU+KHVubmFtZWRUeXBlKSkgewogICAgICAgICAgICAgYXV0byYgYXJyYXlUeXBlID0g
ZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBTYXZlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMuCi0gICAgICAgICAgICBhc3NpZ25UeXBl
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9y
aWdpbigpKSwgKmxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9u
ZSgpKSk7CisgICAgICAgICAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbiht
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2Us
IGFycmF5VHlwZS50eXBlKCkuY2xvbmUoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKCFsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UpIHsKKyAgICBh
dXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBsZWZ0VmFsdWVJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0
QWRkcmVzc1NwYWNlKCk7CisgICAgaWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7CiAgICAgICAgIHNl
dEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKG1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigp
KSwgKmxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSwgbFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAg
IGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgbGVmdFZhbHVlVHlwZS0+Y2xv
bmUoKSkpOwogfQogCi12b2lkIENoZWNrZXI6OmZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3Mo
QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwg
QVNUOjpVbm5hbWVkVHlwZSYgd3JhcHBlZEJhc2VUeXBlLCBBU1Q6OlVubmFtZWRUeXBlKiBleHRy
YUFyZ3VtZW50VHlwZSkKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBk
b3RFeHByZXNzaW9uKQogewotICAgIHVzaW5nIE92ZXJsb2FkUmVzb2x1dGlvbiA9IHN0ZDo6dHVw
bGU8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgQVNUOjpVbm5hbWVkVHlwZSo+OwotCi0gICAg
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBnZXRGdW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRU
eXBlKiBnZXRSZXR1cm5UeXBlOwotICAgIHN0ZDo6dGllKGdldEZ1bmN0aW9uLCBnZXRSZXR1cm5U
eXBlKSA9IChbJl0oKSAtPiBPdmVybG9hZFJlc29sdXRpb24gewotICAgICAgICBSZXNvbHZpbmdU
eXBlIGdldEFyZ3VtZW50VHlwZTEod3JhcHBlZEJhc2VUeXBlLmNsb25lKCkpOwotICAgICAgICBP
cHRpb25hbDxSZXNvbHZpbmdUeXBlPiBnZXRBcmd1bWVudFR5cGUyOwotICAgICAgICBpZiAoZXh0
cmFBcmd1bWVudFR5cGUpCi0gICAgICAgICAgICBnZXRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5n
VHlwZShleHRyYUFyZ3VtZW50VHlwZS0+Y2xvbmUoKSk7CisgICAgYXV0byBiYXNlSW5mbyA9IHJl
Y3Vyc2VBbmRHZXRJbmZvKGRvdEV4cHJlc3Npb24uYmFzZSgpKTsKKyAgICBpZiAoIWJhc2VJbmZv
KQorICAgICAgICByZXR1cm47CisgICAgYXV0byBiYXNlVW5uYW1lZFR5cGUgPSBjb21taXQoYmFz
ZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGlmICghYmFzZVVubmFtZWRUeXBlKQorICAgICAg
ICByZXR1cm47CiAKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1bmN0aW9uID0g
bnVsbHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBnZXRSZXR1cm5UeXBlID0gbnVsbHB0cjsK
KyAgICB7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5
cGU+PiBnZXRBcmd1bWVudFR5cGVzOwotICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChn
ZXRBcmd1bWVudFR5cGUxKTsKLSAgICAgICAgaWYgKGdldEFyZ3VtZW50VHlwZTIpCi0gICAgICAg
ICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZCgqZ2V0QXJndW1lbnRUeXBlMik7Ci0KLSAgICAg
ICAgYXV0byogZ2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlR2V0T3ZlcmxvYWRzKCksIGdldEFyZ3VtZW50VHlw
ZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIWdldEZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoZ2V0RnVuY3Rpb24sICZnZXRGdW5jdGlvbi0+dHlwZSgpKTsKLSAgICB9KSgp
OwotCi0gICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbjsKLSAgICBBU1Q6
OlVubmFtZWRUeXBlKiBhbmRSZXR1cm5UeXBlOwotICAgIHN0ZDo6dGllKGFuZEZ1bmN0aW9uLCBh
bmRSZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBPdmVybG9hZFJlc29sdXRpb24gewotICAgICAgICBh
dXRvIGNvbXB1dGVBbmRBcmd1bWVudFR5cGUgPSBbJl0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUpIC0+IE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IHsKLSAgICAgICAgICAgIGlmIChpczxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB7IHVubmFtZWRUeXBlLmNsb25lKCkgfTsKLSAgICAgICAgICAgIGlmIChpczxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IFJlc29sdmlu
Z1R5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2Vu
KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpU
aHJlYWQsIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpLmNsb25l
KCkpKSB9OwotICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBl
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0
dXJuIHsgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVy
OjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkLCBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKS5j
bG9uZSgpKSkgfTsKLSAgICAgICAgfTsKLSAgICAgICAgYXV0byBjb21wdXRlQW5kUmV0dXJuVHlw
ZSA9IFsmXShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlw
ZSogewotICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFt
ZWRUeXBlKS5lbGVtZW50VHlwZSgpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgYXV0byBhbmRBcmd1bWVudFR5cGUxID0gY29tcHV0ZUFuZEFyZ3Vt
ZW50VHlwZSh3cmFwcGVkQmFzZVR5cGUpOwotICAgICAgICBpZiAoIWFuZEFyZ3VtZW50VHlwZTEp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0g
ICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IGFuZEFyZ3VtZW50VHlwZTI7Ci0gICAgICAg
IGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAgICAgICAgICAgIGFuZEFyZ3VtZW50VHlwZTIgPSBS
ZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgZ2V0QXJn
dW1lbnRUeXBlcy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgICAgICBnZXRG
dW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3Np
YmxlR2V0T3ZlcmxvYWRzKCksIGdldEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAgICBp
ZiAoZ2V0RnVuY3Rpb24pCisgICAgICAgICAgICBnZXRSZXR1cm5UeXBlID0gJmdldEZ1bmN0aW9u
LT50eXBlKCk7CisgICAgfQogCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRGdW5j
dGlvbiA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogYW5kUmV0dXJuVHlwZSA9IG51
bGxwdHI7CisgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5u
b3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgYXV0byBhcmd1bWVudFR5cGUg
PSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihkb3RFeHByZXNz
aW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGJhc2VVbm5hbWVkVHlwZS0+Z2V0KCku
Y2xvbmUoKSk7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmlu
Z1R5cGU+PiBhbmRBcmd1bWVudFR5cGVzOwotICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVu
ZCgqYW5kQXJndW1lbnRUeXBlMSk7Ci0gICAgICAgIGlmIChhbmRBcmd1bWVudFR5cGUyKQotICAg
ICAgICAgICAgYW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoKmFuZEFyZ3VtZW50VHlwZTIpOwotCi0g
ICAgICAgIGF1dG8qIGFuZEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZUFuZE92ZXJsb2FkcygpLCBhbmRBcmd1bWVu
dFR5cGVzLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFhbmRGdW5jdGlvbikKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKGFuZEZ1bmN0aW9uLCBjb21wdXRlQW5kUmV0dXJuVHlwZShhbmRGdW5j
dGlvbi0+dHlwZSgpKSk7Ci0gICAgfSkoKTsKKyAgICAgICAgYW5kQXJndW1lbnRUeXBlcy5hcHBl
bmQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgICAgICBhbmRGdW5jdGlvbiA9IHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRz
KCksIGFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAgICBpZiAoYW5kRnVuY3Rpb24p
CisgICAgICAgICAgICBhbmRSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+
KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBFbmZvcmNlIHRo
ZSByZXR1cm4gb2YgYW5kZXJzIHdpbGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgIH0KKworICAg
IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogdGhyZWFkQW5kRnVuY3Rpb24gPSBudWxscHRyOwor
ICAgIEFTVDo6VW5uYW1lZFR5cGUqIHRocmVhZEFuZFJldHVyblR5cGUgPSBudWxscHRyOworICAg
IHsKKyAgICAgICAgYXV0byBhcmd1bWVudFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRl
clR5cGU+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCwgYmFzZVVubmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKKyAgICAgICAg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHRocmVhZEFuZEFy
Z3VtZW50VHlwZXM7CisgICAgICAgIHRocmVhZEFuZEFyZ3VtZW50VHlwZXMuYXBwZW5kKGJhc2VJ
bmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgdGhyZWFkQW5kRnVuY3Rpb24gPSByZXNvbHZl
RnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFuZE92ZXJsb2Fkcygp
LCB0aHJlYWRBbmRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKHRocmVhZEFu
ZEZ1bmN0aW9uKQorICAgICAgICAgICAgdGhyZWFkQW5kUmV0dXJuVHlwZSA9ICZkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPih0aHJlYWRBbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgp
OyAvLyBGSVhNRTogRW5mb3JjZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBh
IHBvaW50ZXIKKyAgICB9CiAKLSAgICBpZiAoIWdldFJldHVyblR5cGUgJiYgIWFuZFJldHVyblR5
cGUpIHsKKyAgICBpZiAoIWdldEZ1bmN0aW9uICYmICFhbmRGdW5jdGlvbikgewogICAgICAgICBz
ZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgaWYgKGdldFJldHVyblR5
cGUgJiYgYW5kUmV0dXJuVHlwZSAmJiAhbWF0Y2hlcygqZ2V0UmV0dXJuVHlwZSwgKmFuZFJldHVy
blR5cGUpKSB7CisgICAgaWYgKGdldEZ1bmN0aW9uICYmIGFuZEZ1bmN0aW9uKSB7CisgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGFuZEZ1bmN0aW9u
ICYmIHRocmVhZEFuZEZ1bmN0aW9uICYmICFtYXRjaGVzKCphbmRSZXR1cm5UeXBlLCAqdGhyZWFk
QW5kUmV0dXJuVHlwZSkpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0RnVuY3Rpb247Ci0gICAg
QVNUOjpVbm5hbWVkVHlwZSogc2V0UmV0dXJuVHlwZTsKLSAgICBzdGQ6OnRpZShzZXRGdW5jdGlv
biwgc2V0UmV0dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsKLSAgICAg
ICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDFUeXBlKHdyYXBwZWRCYXNlVHlwZS5jbG9uZSgp
KTsKLSAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gc2V0QXJndW1lbnRUeXBlMjsKLSAg
ICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAgICAgICAgICAgc2V0QXJndW1lbnRUeXBl
MiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOwotICAgICAgICBS
ZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50M1R5cGUoZ2V0UmV0dXJuVHlwZSA/IGdldFJldHVyblR5
cGUtPmNsb25lKCkgOiBhbmRSZXR1cm5UeXBlLT5jbG9uZSgpKTsKKyAgICBBU1Q6OlVubmFtZWRU
eXBlKiBmaWVsZFR5cGUgPSBnZXRSZXR1cm5UeXBlID8gZ2V0UmV0dXJuVHlwZSA6IGFuZFJldHVy
blR5cGU7CiAKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHNldEZ1bmN0aW9uID0gbnVs
bHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBzZXRSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAg
ICB7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+
PiBzZXRBcmd1bWVudFR5cGVzOwotICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChzZXRB
cmd1bWVudDFUeXBlKTsKLSAgICAgICAgaWYgKHNldEFyZ3VtZW50VHlwZTIpCi0gICAgICAgICAg
ICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZCgqc2V0QXJndW1lbnRUeXBlMik7Ci0gICAgICAgIHNl
dEFyZ3VtZW50VHlwZXMuYXBwZW5kKHNldEFyZ3VtZW50M1R5cGUpOwotCi0gICAgICAgIGF1dG8q
IHNldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5wb3NzaWJsZVNldE92ZXJsb2FkcygpLCBzZXRBcmd1bWVudFR5cGVzLCBudWxs
cHRyKTsKLSAgICAgICAgaWYgKCFzZXRGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKHNldEZ1bmN0aW9uLCAmc2V0RnVuY3Rpb24tPnR5cGUoKSk7Ci0gICAgfSkoKTsKLQotICAg
IGlmIChzZXRGdW5jdGlvbikgewotICAgICAgICBpZiAoIW1hdGNoZXMoc2V0RnVuY3Rpb24tPnR5
cGUoKSwgd3JhcHBlZEJhc2VUeXBlKSkgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE9wdGlvbmFsPEFTVDo6QWRk
cmVzc1NwYWNlPiBhZGRyZXNzU3BhY2U7Ci0gICAgaWYgKGdldFJldHVyblR5cGUgfHwgYW5kUmV0
dXJuVHlwZSkgewotICAgICAgICAvLyBGSVhNRTogVGhlIHJlZmVyZW5jZSBjb21waWxlciBoYXMg
ImVsc2UgaWYgKCFub2RlLmJhc2UuaXNMVmFsdWUgJiYgIWJhc2VUeXBlLmlzQXJyYXlSZWYpIiwK
LSAgICAgICAgLy8gYnV0IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgaXQgZXhpc3RzLiBJIGhhdmVu
J3Qgd3JpdHRlbiBpdCBoZXJlLCBhbmQgSSdsbCBpbnZlc3RpZ2F0ZQotICAgICAgICAvLyBpZiB3
ZSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlIHJlZmVyZW5jZSBjb21waWxlci4KLSAgICAgICAgaWYg
KGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4od3JhcHBlZEJhc2VUeXBlKSkKLSAgICAgICAgICAgIGFk
ZHJlc3NTcGFjZSA9IGRvd25jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZT4od3JhcHBlZEJhc2VUeXBl
KS5hZGRyZXNzU3BhY2UoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIGFkZHJl
c3NTcGFjZUl0ZXJhdG9yID0gbV9hZGRyZXNzU3BhY2VNYXAuZmluZCgmcHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmJhc2UoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoYWRkcmVzc1NwYWNlSXRlcmF0
b3IgIT0gbV9hZGRyZXNzU3BhY2VNYXAuZW5kKCkpOwotICAgICAgICAgICAgaWYgKGFkZHJlc3NT
cGFjZUl0ZXJhdG9yLT52YWx1ZSkKLSAgICAgICAgICAgICAgICBhZGRyZXNzU3BhY2UgPSAqYWRk
cmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoYmFzZUluZm8tPnJl
c29sdmluZ1R5cGUpOworICAgICAgICBSZXNvbHZpbmdUeXBlIGZpZWxkUmVzb2x2aW5nVHlwZShm
aWVsZFR5cGUtPmNsb25lKCkpOworICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChmaWVs
ZFJlc29sdmluZ1R5cGUpOworICAgICAgICBzZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92
ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3NpYmxlU2V0T3ZlcmxvYWRzKCksIHNldEFyZ3Vt
ZW50VHlwZXMsIG51bGxwdHIpOworICAgICAgICBpZiAoc2V0RnVuY3Rpb24pCisgICAgICAgICAg
ICBzZXRSZXR1cm5UeXBlID0gJnNldEZ1bmN0aW9uLT50eXBlKCk7CiAgICAgfQogCi0gICAgLy8g
RklYTUU6IEdlbmVyYXRlIHRoZSBjYWxsIGV4cHJlc3Npb25zCi0KLSAgICBhc3NpZ25UeXBlKHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgZ2V0UmV0dXJuVHlwZSA/IGdldFJldHVyblR5cGUtPmNs
b25lKCkgOiBhbmRSZXR1cm5UeXBlLT5jbG9uZSgpLCBhZGRyZXNzU3BhY2UpOwotfQotCi1PcHRp
b25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IENoZWNrZXI6OnJlY3Vyc2VBbmRXcmFw
QmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbikKLXsKLSAgICBhdXRvIGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLmJhc2UoKSk7Ci0gICAgaWYgKCFiYXNlSW5mbykKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGF1dG8qIGJhc2VUeXBlID0gZ2V0VW5uYW1lZFR5
cGUoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOwotICAgIGlmICghYmFzZVR5cGUpIHsKKyAgICBp
ZiAoc2V0RnVuY3Rpb24gJiYgYW5kRnVuY3Rpb24pIHsKICAgICAgICAgc2V0RXJyb3IoKTsKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9Ci0gICAgYXV0byYgYmFzZVVuaWZ5Tm9k
ZSA9IGJhc2VUeXBlLT51bmlmeU5vZGUoKTsKLSAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4o
YmFzZVVuaWZ5Tm9kZSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBl
PihiYXNlVW5pZnlOb2RlKS5jbG9uZSgpOwotICAgIEFTU0VSVChpczxBU1Q6Ok5hbWVkVHlwZT4o
YmFzZVVuaWZ5Tm9kZSkpOwotICAgIHJldHVybiB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgZG93bmNhc3Q8
QVNUOjpOYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpKSB9OwotfQotCi12b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKLXsKLSAgICBhdXRvIGJhc2VU
eXBlID0gcmVjdXJzZUFuZFdyYXBCYXNlVHlwZShkb3RFeHByZXNzaW9uKTsKLSAgICBpZiAoIWJh
c2VUeXBlKQogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyhkb3RFeHByZXNzaW9uLCAqYmFzZVR5cGUpOworICAgIGRvdEV4cHJlc3Npb24u
c2V0R2V0RnVuY3Rpb24oZ2V0RnVuY3Rpb24pOworICAgIGRvdEV4cHJlc3Npb24uc2V0QW5kRnVu
Y3Rpb24oYW5kRnVuY3Rpb24pOworICAgIGRvdEV4cHJlc3Npb24uc2V0VGhyZWFkQW5kRnVuY3Rp
b24odGhyZWFkQW5kRnVuY3Rpb24pOworICAgIGRvdEV4cHJlc3Npb24uc2V0U2V0RnVuY3Rpb24o
c2V0RnVuY3Rpb24pOworCisgICAgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9
IEFTVDo6UmlnaHRWYWx1ZSgpOworICAgIGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNl
SW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgIGlmIChh
bmRGdW5jdGlvbikKKyAgICAgICAgICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpMZWZ0VmFsdWUg
eyAqbGVmdEFkZHJlc3NTcGFjZSB9OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0eXBlQW5u
b3RhdGlvbiA9IEFTVDo6QWJzdHJhY3RMZWZ0VmFsdWUoKTsKKyAgICB9IGVsc2UgaWYgKCFiYXNl
SW5mby0+dHlwZUFubm90YXRpb24uaXNSaWdodFZhbHVlKCkpIHsKKyAgICAgICAgaWYgKCFzZXRG
dW5jdGlvbiAmJiAhdGhyZWFkQW5kRnVuY3Rpb24pCisgICAgICAgICAgICB0eXBlQW5ub3RhdGlv
biA9IEFTVDo6UmlnaHRWYWx1ZSgpOyAvLyBXZSBjYW4ndCBnZW5lcmF0ZSBhIHNldHRlci4KKyAg
ICAgICAgZWxzZSBpZiAoc2V0RnVuY3Rpb24gfHwgYW5kRnVuY3Rpb24pCisgICAgICAgICAgICB0
eXBlQW5ub3RhdGlvbiA9IEFTVDo6QWJzdHJhY3RMZWZ0VmFsdWUoKTsKKyAgICB9CisgICAgYXNz
aWduVHlwZShkb3RFeHByZXNzaW9uLCBmaWVsZFR5cGUtPmNsb25lKCksIFdURk1vdmUodHlwZUFu
bm90YXRpb24pKTsKIH0KIAotdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lv
biYgaW5kZXhFeHByZXNzaW9uKQordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVz
c2lvbiYpCiB7Ci0gICAgYXV0byBiYXNlVHlwZSA9IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoaW5k
ZXhFeHByZXNzaW9uKTsKLSAgICBpZiAoIWJhc2VUeXBlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIGluZGV4SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGluZGV4RXhwcmVzc2lvbi5pbmRl
eEV4cHJlc3Npb24oKSk7Ci0gICAgaWYgKCFpbmRleEluZm8pCi0gICAgICAgIHJldHVybjsKLSAg
ICBhdXRvIGluZGV4RXhwcmVzc2lvblR5cGUgPSBnZXRVbm5hbWVkVHlwZShpbmRleEluZm8tPnJl
c29sdmluZ1R5cGUpOwotICAgIGlmICghaW5kZXhFeHByZXNzaW9uVHlwZSkgewotICAgICAgICBz
ZXRFcnJvcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluaXNoVmlzaXRpbmdQ
cm9wZXJ0eUFjY2VzcyhpbmRleEV4cHJlc3Npb24sIFdURk1vdmUoKmJhc2VUeXBlKSwgaW5kZXhF
eHByZXNzaW9uVHlwZSk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCiB2b2lk
IENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNl
KQpAQCAtMTEwNSwxMCArMTA2MCwxMCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVy
ZW5jZS52YXJpYWJsZSgpKTsKICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUo
KS0+dHlwZSgpKTsKICAgICAKLSAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVz
c1NwYWNlOworICAgIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJp
Z2h0VmFsdWUoKTsKICAgICBpZiAoIXZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPmlzQW5v
bnltb3VzKCkpCi0gICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQ7Ci0gICAgYXNzaWduVHlwZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2Uu
dmFyaWFibGUoKS0+dHlwZSgpLT5jbG9uZSgpLCBhZGRyZXNzU3BhY2UpOworICAgICAgICB0eXBl
QW5ub3RhdGlvbiA9IEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9
OworICAgIGFzc2lnblR5cGUodmFyaWFibGVSZWZlcmVuY2UsIHZhcmlhYmxlUmVmZXJlbmNlLnZh
cmlhYmxlKCktPnR5cGUoKS0+Y2xvbmUoKSwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwogfQog
CiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCkBAIC0x
NDA3LDcgKzEzNjIsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9u
JiBjb21tYUV4cHJlc3Npb24pCiAgICAgaWYgKGVycm9yKCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBhdXRvIGxhc3RJbmZvID0gZ2V0SW5mbyhjb21tYUV4cHJlc3Npb24ubGlzdCgpLmxhc3QoKSk7
Ci0gICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBsYXN0SW5mby0+cmVzb2x2aW5nVHlw
ZSk7CisgICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBsYXN0SW5mby0+cmVzb2x2aW5n
VHlwZSwgbGFzdEluZm8tPnR5cGVBbm5vdGF0aW9uKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBl
LmgKaW5kZXggY2E1Y2JiNTkyOWNmOWUxODE4YzJjZDc0MWU3OWQ5MzZjYWFjNjhlZS4uNTBlNTMy
YjZhNmU4MmYxZTAyYTA0Njc5MWI4ZTY2OTZkNWIxMWUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKQEAg
LTcyLDYgKzcyLDcgQEAgcHJpdmF0ZToKIAogLy8gVGhpcyBpcyBhIHRoaW4gd3JhcHBlciBhcm91
bmQgYSBWYXJpYW50LgogLy8gSXQgZXhpc3RzIHNvIHdlIGNhbiBtYWtlIHN1cmUgdGhhdCB0aGUg
ZGVmYXVsdCBjb25zdHJ1Y3RvciBkb2VzIHRoZSByaWdodCB0aGluZy4KKy8vIEZJWE1FOiBUaGlz
IHdyYXBwZXIgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeS4KIGNsYXNzIFJlc29sdmluZ1R5cGUgewog
cHVibGljOgogICAgIFJlc29sdmluZ1R5cGUoKQpAQCAtMTAyLDEwICsxMDMsMTEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgQVNUOjpVbm5hbWVkVHlwZSYg
Z2V0VW5uYW1lZFR5cGUoKQorICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFVubmFtZWRUeXBlKCkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcikpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKTsKKyAgICAgICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKSkKKyAg
ICAgICAgICAgIHJldHVybiAmV1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+Piht
X2lubmVyKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlzaXRvciYgdmlzaXRvcikgLT4g
ZGVjbHR5cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFyaWFudDxVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+Jj4o
KSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFZpc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xW
aXNpdG9yLmNwcAppbmRleCBlZDJlOGMwMDUyZDZkZmU5YmQwN2JhZjc2NDlkOGNlNDhjOWIwOWJi
Li45ODUxOTAyZDcwMjNlNmQ2MTk5MzdmZmQ5N2Q0Njg5ZGY0NTAzYWNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKQEAg
LTU4OSwxNyArNTg5LDE3IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhw
cmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpN
YWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsKLSAgICBjaGVj
a0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKIH0KIAog
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICBjaGVja0Vycm9yQW5kVmlz
aXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsKICAgICBjaGVja0Vycm9y
QW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsKICAgICBpZiAo
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365455</attachid>
            <date>2019-03-20 18:02:30 -0700</date>
            <delta_ts>2019-03-21 16:58:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190320180229.patch</filename>
            <type>text/plain</type>
            <size>116732</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ2NDA4ZmE1M2M1ODg1
ZjBkYThkZTc3OTNiZDRhNDQ3N2Q4ZmE2Ny4uYTRmNTg0NTMxNWI3YzQzNDdmZTMyY2YxNWNiYzdm
MDYzYThhNTNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTAzLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDMt
MTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwYXJlbnRp
bmcgZHVyaW5nIGEgbXV0YXRpb24gZXZlbnQgaW5zaWRlIGFwcGVuZENoaWxkIGNvdWxkIHJlc3Vs
dCBpbiBhIGNpcmN1bGFyIERPTSB0cmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCmluZGV4IDRhNmQ3
YzQ2OTVkYzRjYWM4MjkwNTRlNDA1NTU3ODc2NTE3NWY4NjMuLmQ0MzZkNjg5Yzc4ZTA0MGM1ZmRk
Y2UzOTYwZjM4ZjQzMDE1MGIyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICs0Myw3
MCBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAogfTsK
IAorc3RydWN0IExlZnRWYWx1ZSB7CisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKK307
CisKK3N0cnVjdCBBYnN0cmFjdExlZnRWYWx1ZSB7Cit9OworCitzdHJ1Y3QgUmlnaHRWYWx1ZSB7
Cit9OworCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCitj
bGFzcyBUeXBlQW5ub3RhdGlvbiB7CitwdWJsaWM6CisgICAgVHlwZUFubm90YXRpb24oKQorICAg
ICAgICA6IG1fZW1wdHkodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24o
TGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBU
eXBlQW5ub3RhdGlvbihBYnN0cmFjdExlZnRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIodikK
KyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oUmlnaHRWYWx1ZSB2KQorICAgICAg
ICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oY29uc3Qg
VHlwZUFubm90YXRpb24mKSA9IGRlZmF1bHQ7CisgICAgVHlwZUFubm90YXRpb24oVHlwZUFubm90
YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgVHlwZUFubm90YXRpb24mIG9wZXJhdG9y
PShjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBlQW5ub3RhdGlvbiYg
b3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9uJiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIE9wdGlv
bmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFkZHJlc3NTcGFjZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIW1fZW1wdHkpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxM
ZWZ0VmFsdWU+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PExlZnRWYWx1
ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIH0KKworICAgIGJvb2wgaXNSaWdodFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJp
Z2h0VmFsdWU+KG1faW5uZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNp
dG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6
dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0cmFjdExl
ZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigpKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0
eSk7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW5uZXIpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWYXJpYW50PExlZnRWYWx1ZSwgQWJzdHJhY3RMZWZ0VmFsdWUsIFJp
Z2h0VmFsdWU+IG1faW5uZXI7CisgICAgYm9vbCBtX2VtcHR5IHsgZmFsc2UgfTsKK307CisKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgKaW5kZXggYjEyMWZiNmMx
ZTFkMTc5MjYxNWQ5YmIwMjc0ZmUyMzU4OGE3ZjJiNS4uNzk0MTVlMmZmMzAzMDI5MTA2YjViZjQx
OTc2N2ViNTk5OGYwZTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5o
CkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24mIGxlZnQoKSB7IHJl
dHVybiBtX2xlZnQ7IH0KICAgICBFeHByZXNzaW9uJiByaWdodCgpIHsgcmV0dXJuIG1fcmlnaHQ7
IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiB0YWtlUmlnaHQoKSB7IHJldHVybiBXVEZN
b3ZlKG1fcmlnaHQpOyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1f
bGVmdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBiN2FiMjBjZWQyYzQ1M2Y5NWYxYzJlM2VmYzI4
MWZkYTQ4ZTVjM2FkLi4zMThhODEwNjE2M2RiODdlODVlZjQ4MWVjODg3ZDlkNmM1YzI5Y2MxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xF
eHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRXhwcmVzc2lvbi5oCkBAIC02NSwxMiArNjUsMTIgQEAgcHVibGljOgogICAgICAgICBt
X3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAgIH0KIAotICAgIGNvbnN0IE9wdGlvbmFsPEFkZHJl
c3NTcGFjZT4mIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9
CisgICAgY29uc3QgVHlwZUFubm90YXRpb24qIHR5cGVBbm5vdGF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlQW5ub3RhdGlvbiA/ICYqbV90eXBlQW5ub3RhdGlvbiA6IG51bGxwdHI7IH0KIAot
ICAgIHZvaWQgc2V0QWRkcmVzc1NwYWNlKE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFkZHJlc3NT
cGFjZSkKKyAgICB2b2lkIHNldFR5cGVBbm5vdGF0aW9uKFR5cGVBbm5vdGF0aW9uJiYgdHlwZUFu
bm90YXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoIW1fYWRkcmVzc1NwYWNlKTsKLSAgICAg
ICAgbV9hZGRyZXNzU3BhY2UgPSBhZGRyZXNzU3BhY2U7CisgICAgICAgIEFTU0VSVCghbV90eXBl
QW5ub3RhdGlvbik7CisgICAgICAgIG1fdHlwZUFubm90YXRpb24gPSBXVEZNb3ZlKHR5cGVBbm5v
dGF0aW9uKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBc3NpZ25tZW50RXhwcmVzc2lv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJl
ZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsKLSAgICBPcHRpb25hbDxBZGRyZXNzU3BhY2U+IG1fYWRk
cmVzc1NwYWNlOworICAgIE9wdGlvbmFsPFR5cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5vdGF0aW9u
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKaW5kZXggNjMxNmY1NGUxNjMyNmI0YTQ4M2ZhODcyZTFm
NDdiYjA0OGVkZjg4ZS4uNzcwY2Y4YmE5ZjI1MjcyNmY2OWMxYWU2ZGU1ZWE0YTViMTJiZjc3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaApA
QCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4
cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAg
ICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUo
V1RGTW92ZShsVmFsdWUpKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVl
KSkKICAgICB7CiAgICAgfQogCkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc01ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xWYWx1ZTsg
fQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9CiAK
IHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAgIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TWFrZVBvaW50ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAppbmRleCA3YjA1MmI2ZDVmMjg4
N2Y1OTJkZjQ0ZmQ5NDA5YzRmYTk1MjAzYWE4Li4zNDYwNGQ1NmFlY2M0YjYzMGQ3YTdlNmY3OTZi
OWM4NTM0N2NlMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaApA
QCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZVBvaW50ZXJFeHBy
ZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIE1ha2VQb2ludGVyRXhw
cmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxW
YWx1ZSkKKyAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihX
VEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQorICAg
ICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVlKSkKICAgICB7CiAgICAgfQogCkBA
IC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01ha2VQb2ludGVyRXhwcmVz
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24m
IGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVl
KCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8RXhw
cmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5oCmluZGV4IDJlYzM0ZTE1ZDhhNDBlNWFkMmUyYmY4OTY4MGMyMWMzMzQ0
Yzk5ODguLjAzYWRkZGM3NjNiN2Y4MWRjNzRkY2VmNjk0ZjY0NmNmMjlkZWJkZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCkBAIC01OSwyNyArNTksNTYg
QEAgcHVibGljOgogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiYgcG9zc2libGVHZXRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxl
R2V0T3ZlcmxvYWRzOyB9CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZVNldE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9z
c2libGVTZXRPdmVybG9hZHM7IH0KICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlQW5kT3ZlcmxvYWRzKCkgeyByZXR1cm4g
bV9wb3NzaWJsZUFuZE92ZXJsb2FkczsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1
bmN0aW9uKCkgeyByZXR1cm4gbV9nZXRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRp
b24qIGFuZEZ1bmN0aW9uKCkgeyByZXR1cm4gbV9hbmRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9u
RGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uKCkgeyByZXR1cm4gbV90aHJlYWRBbmRGdW5j
dGlvbjsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIHNldEZ1bmN0aW9uKCkgeyByZXR1cm4g
bV9zZXRGdW5jdGlvbjsgfQogCiAgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fkcyhjb25z
dCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IG92ZXJsb2FkcykKICAgICB7CiAgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMgPSBvdmVy
bG9hZHM7CiAgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29uc3QgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVy
bG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRz
OworICAgIH0KICAgICB2b2lkIHNldFBvc3NpYmxlU2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRz
KQogICAgIHsKICAgICAgICAgbV9wb3NzaWJsZVNldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKICAg
ICB9Ci0gICAgdm9pZCBzZXRQb3NzaWJsZUFuZE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKKwor
ICAgIHZvaWQgc2V0R2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb24p
CiAgICAgewotICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAg
ICAgICBtX2dldEZ1bmN0aW9uID0gZ2V0RnVuY3Rpb247CisgICAgfQorCisgICAgdm9pZCBzZXRB
bmRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbikKKyAgICB7CisgICAg
ICAgIG1fYW5kRnVuY3Rpb24gPSBhbmRGdW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldFRo
cmVhZEFuZEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uKQor
ICAgIHsKKyAgICAgICAgbV90aHJlYWRBbmRGdW5jdGlvbiA9IHRocmVhZEFuZEZ1bmN0aW9uOwor
ICAgIH0KKworICAgIHZvaWQgc2V0U2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0
RnVuY3Rpb24pCisgICAgeworICAgICAgICBtX3NldEZ1bmN0aW9uID0gc2V0RnVuY3Rpb247CiAg
ICAgfQogCiAgICAgRXhwcmVzc2lvbiYgYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiYmIHRha2VCYXNlKCkgeyByZXR1cm4gV1RGTW92ZShtX2Jhc2Up
OyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fYmFzZTsKICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9w
b3NzaWJsZUdldE92ZXJsb2FkczsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsKICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3Nz
aWJsZUFuZE92ZXJsb2FkczsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX2dldEZ1bmN0aW9u
IHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fYW5kRnVuY3Rpb24geyBu
dWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV90aHJlYWRBbmRGdW5jdGlvbiB7
IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX3NldEZ1bmN0aW9uIHsgbnVs
bHB0ciB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKaW5kZXggNzlkOGQwZjcwOGU4ZDA1NzgzMTJjODE3OTRl
ODhlZGFmMzQ4N2NmOS4uMzgxZGU5ZTQzYTc4MTExNmM2ZWU3Nzk4MDdmNDg3NWI5NWYzNTVhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaApAQCAtNDEs
MTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogLyoKLSAq
ICAxLiBFdmFsdWF0ZSBtX2xWYWx1ZQorICogIDEuIEV2YWx1YXRlIG1fbGVmdFZhbHVlCiAgKiAg
Mi4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9vbGRWYWx1ZQogICogIDMuIEV2YWx1YXRlIG1fbmV3
VmFsdWVFeHByZXNzaW9uCiAgKiAgNC4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9uZXdWYWx1ZQot
ICogIDUuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1fbFZhbHVlCisgKiAgNS4gQXNzaWduIHRoZSBy
ZXN1bHQgdG8gbV9sZWZ0VmFsdWUKICAqICA2LiBFdmFsdWF0ZSBtX3Jlc3VsdEV4cHJlc3Npb24K
ICAqICA3LiBSZXR1cm4gdGhlIHJlc3VsdAogICovCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9s
VmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1
ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRW
YWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9u
ZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24qIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJu
IG1fbmV3VmFsdWVFeHByZXNzaW9uID8gJiptX25ld1ZhbHVlRXhwcmVzc2lvbiA6IG51bGxwdHI7
IH0KQEAgLTk0LDE1ICs5NCwxNSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNs
YXNzIFUsIGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gV1RGOjptYWtlVW5pcXVl
UmVmKEFyZ3MmJi4uLik7CiAKLSAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxWYWx1ZSkKKyAgICBSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJl
c3Npb24+IGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmln
aW4pKQotICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKKyAgICAgICAgLCBtX2xl
ZnRWYWx1ZShXVEZNb3ZlKGxlZnRWYWx1ZSkpCiAgICAgICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKICAgICAgICAgLCBtX25ld1ZhbHVlKFdURk1vdmUob3Jp
Z2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCkKICAgICB7CiAgICAgfQogCi0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+
IG1fbFZhbHVlOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKICAgICBW
YXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBt
X25ld1ZhbHVlOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9uZXdWYWx1
ZUV4cHJlc3Npb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKaW5kZXggMTk4
MjRmOTQwNTRlNGIzYjdkN2NmMjRmNjNjMDExOWI4YTYzZjRmYi4uZTUwYWFhZGRlNzg4ZjRlZDg5
ZTljMjZiZjQ0NjM5YzIxNDA0OWNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRp
b24uaApAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxF
eHByZXNzaW9uPj4gbV9pbml0aWFsaXplcjsKIH07CiAKLXVzaW5nIFZhcmlhYmxlRGVjbGFyYXRp
b25zID0gVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+OwordXNpbmcgVmFyaWFibGVEZWNsYXJh
dGlvbnMgPSBWZWN0b3I8VW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+PjsKIAogfSAvLyBu
YW1lc3BhY2UgQVNUCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudC5oCmluZGV4IGU4ZTFmYzdmNWIyMzhkYmIwNDAzZTlmNDAyNzgwNGE3MGE3ZTg4
MWMuLjA5YTAyZDAxZjQ5Njg0YWI5NjNlZjg3MjViMDQ1MmQ1YTM4ZWRmNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaApAQCAtNDAsNyAr
NDAsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50IHsKIHB1YmxpYzoKLSAgICBWYXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFZlY3RvcjxWYXJpYWJsZURlY2xh
cmF0aW9uPiYmIHZhcmlhYmxlRGVjbGFyYXRpb25zKQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiB2
YXJpYWJsZURlY2xhcmF0aW9ucykKICAgICAgICAgOiBTdGF0ZW1lbnQoV1RGTW92ZShvcmlnaW4p
KQogICAgICAgICAsIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMoV1RGTW92ZSh2YXJpYWJsZURlY2xh
cmF0aW9ucykpCiAgICAgewpAQCAtNTMsMTAgKzUzLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiYgdmFyaWFibGVEZWNs
YXJhdGlvbnMoKSB7IHJldHVybiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9y
PFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPj4mIHZhcmlhYmxlRGVjbGFyYXRpb25zKCkg
eyByZXR1cm4gbV92YXJpYWJsZURlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgotICAgIFZlY3Rv
cjxWYXJpYWJsZURlY2xhcmF0aW9uPiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOworICAgIFZhcmlh
YmxlRGVjbGFyYXRpb25zIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcApp
bmRleCA2MjRjNTYyZTUxY2E2MGM2ZWY4ZGUyOGFmZWJhYzUxNGYyYmUwZGJkLi4xYTAwNTNjOWM0
ZDRjNjY2ZmU1ODNjMTIxNjhlOTE3MmVkZjI2NjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xF
bnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCkBAIC0xODgsOSArMTg4LDkgQEAgU3RyaW5nIEVudHJ5
UG9pbnRTY2FmZm9sZGluZzo6bWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkK
ICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uKiBz
dHJ1Y3R1cmVEZWZpbml0aW9uID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAobV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLm5hbWUoKSA9PSBwYXRo
WzBdKSB7CisgICAgICAgIGlmIChtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0t
Pm5hbWUoKSA9PSBwYXRoWzBdKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
X3BhcmFtZXRlclZhcmlhYmxlc1tpXSk7Ci0gICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBt
X2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLT51bmlmeU5vZGUoKTsK
KyAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6
Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlw
ZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAgICAgICAgICAg
IGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCkBAIC0yNDksNyAr
MjQ5LDcgQEAgU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5k
TmFtZWRCdWlsdElucygpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
LnNpemUoKTsgKytpKQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1f
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpW2ldLnR5cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCptX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5
cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fbGF5b3V0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8g
dmFyaWFibGVOYW1lID0gbV9uYW1lZEJpbmRHcm91cHNbaV0udmFyaWFibGVOYW1lOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5j
dGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAppbmRleCAyZmMxNDY1ODYxNmM5ODljYTIxN2M2OTI4
MmFlODZkYzQ4NzE5ZjA4Li5kYWY1ODQ5OGFiZjliYWZiZjZmYmM1YzljZTljM2NlMDIwMGU1ZDU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEZ1bmN0aW9uV3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAo
aSkKICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKTsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpKTsKICAgICB9CiAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwogfQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uCiAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlck5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJp
YWJsZU1hcHBpbmcuYWRkKCZwYXJhbWV0ZXIsIHBhcmFtZXRlck5hbWUpOwogICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKnBhcmFtZXRlci50eXBlKCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKnBhcmFtZXRlci0+dHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJOYW1l
KSk7CiAgICAgICAgIH0KICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7XG4iKTsK
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsK
QEAgLTU3MCw3ICs1NzAsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlcwogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAg
ICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgdm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbiYgbWFrZUFycmEKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7
Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KSk7CiAgICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1h
a2VQb2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRp
dmVGdW5jdGlvbldyaXRlci5jcHAKaW5kZXggNjk3MmU5ODkwNTBhOWExYjdkYTgxMWE4N2MzM2Mz
M2QxZTRlZDI5Yy4uMzQwNjVlNThjMTczYTZjODEyNjRlYjdkZTM1ZDQ5ZjUxOTZmODYyMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xO
YXRpdmVGdW5jdGlvbldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAKQEAgLTExMSw4ICsx
MTEsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICB9CiAKICAgICAgICAgQVNT
RVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsK
LSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
OwotICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byYg
cGFyYW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHBh
cmFtZXRlclR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBwYXJhbWV0ZXJOYW1lZFR5cGUgPSBk
b3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgICAgICBpZiAo
aXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBhcmFtZXRlck5hbWVkVHlwZSkpIHsKQEAg
LTEzNCw3ICsxMzQsNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvci52YWx1ZSIpIHsKICAgICAg
ICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9
PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBv
dXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHgpIHtcbiIpKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBzdGF0
aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIikpOwpAQCAtMTQ1LDggKzE0NSw4
IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiKSB7CiAgICAgICAgIEFTU0VSVF9VTlVT
RUQoaW50cmluc2ljcywgbWF0Y2hlcyhuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSwg
aW50cmluc2ljcy51aW50VHlwZSgpKSk7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byYgcGFy
YW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5vZGUo
KTsKICAgICAgICAgQVNTRVJUKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHBhcmFtZXRlclR5cGUpKTsK
ICAgICAgICAgYXV0byYgdW5uYW1lZFBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPihwYXJhbWV0ZXJUeXBlKTsKICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1
bm5hbWVkUGFyYW1ldGVyVHlwZSkpIHsKQEAgLTE2Nyw4ICsxNjcsOCBAQCBTdHJpbmcgd3JpdGVO
YXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFy
dHNXaXRoKCJvcGVyYXRvci4iX3N0cikpIHsKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKICAgICAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwot
ICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlw
ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAg
ICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5zdWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0
aCgpIC0gMSk7CkBAIC0xODAsNyArMTgwLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24o
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAg
ICAgICAgfQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
dHlwZSgpKTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0
cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iKSk7CkBA
IC0xOTEsNyArMTkxLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIl9zdHIp
KSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgp
KTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1
bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIikpOwpAQCAtMjAy
LDggKzIwMiw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW10iKSB7CiAgICAgICAgIEFTU0VS
VChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0g
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7
Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUo
KSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50
eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywg
b3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwgbWV0
YWxQYXJhbWV0ZXIyTmFtZSwgIiBpKSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbVtpXTtcbiIpKTsKQEAgLTIxMyw4ICsyMTMsOCBA
QCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Cisg
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
OwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBhdXRvIGZp
ZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3Bl
cmF0b3ImW10uIl9zdHIubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtc
biIpKTsKQEAgLTIyNSw5ICsyMjUsOSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAg
aWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpIHsK
ICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNp
emUoKSA9PSAzKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMl0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
M05hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVy
bk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
ZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1l
dGVyMU5hbWUsICIgbSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFt
ZXRlcjNOYW1lLCAiIHYpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiICAgIG1baV0gPSB2O1xuIikpOwpAQCAtMjM5LDcgKzIzOSw3IEBAIFN0cmluZyB3
cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaXNPcGVy
YXRvcigpKSB7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVu
Z3RoKCkpOwotICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5
cGUoKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFs
UmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJO
YW1lLCAiIHgpIHtcbiIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoIiAgICByZXR1cm4gIiwgb3BlcmF0b3JOYW1lLCAieDtcbiIpKTsKQEAgLTI0OSw4ICsy
NDksOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CiAgICAgICAgIGF1
dG8gb3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3Ry
aW5nKCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
cjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRv
IG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtc
biIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVy
biB4ICIsIG9wZXJhdG9yTmFtZSwgIiB5O1xuIikpOwpAQCAtMjgzLDcgKzI4Myw3IEBAIFN0cmlu
ZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhc3VpbnQiCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhc2Zsb2F0IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0
YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRh
bFBhcmFtZXRlck5hbWUsICIgeCkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSksICIoeCk7XG4iKSk7CkBAIC0yOTMsOCArMjkzLDggQEAgU3Ry
aW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAicG93IiB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
YXRhbjIiKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIx
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJl
dHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFy
YW1ldGVyMU5hbWUsICIgeCwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iKSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksICIoeCwgeSk7XG4iKSk7CkBAIC0zMzYsMTQg
KzMzNiwxNCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJJbnRlcmxvY2tlZCJfc3RyKSkgewogICAg
ICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkludGVybG9ja2Vk
Q29tcGFyZUV4Y2hhbmdlIikgewogICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIEFTU0VSVChp
czxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKSk7Ci0gICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9
IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRl
clR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgp
KSk7CisgICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9
IGZpcnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAgYXV0byBm
aXJzdEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RB
cmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZEFy
Z3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gdGhpcmRB
cmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8
QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzNdLnR5cGUoKSkpOwotICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0g
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzNdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnQg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBv
aW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5
cGUoKSkpOworICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0gZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzNdLT50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1bWVudEFkZHJlc3NT
cGFjZSA9IGZvdXJ0aEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgICAg
IGF1dG8gZm91cnRoQXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZShmb3VydGhBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwg
JygnLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcs
IGZpcnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIGNv
bXBhcmUsICIsIHRoaXJkQXJndW1lbnQsICIgZGVzaXJlZCwgIiwgY29udmVydEFkZHJlc3NTcGFj
ZShmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZm91cnRoQXJndW1lbnRQb2ludGVl
LCAiKiBvdXQpIHtcbiIpKTsKQEAgLTM1NCwxMyArMzU0LDEzIEBAIFN0cmluZyB3cml0ZU5hdGl2
ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOwotICAgICAgICBBU1NFUlQoaXM8QVNUOjpQ
b2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKSkpOwotICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKTsKKyAgICAgICAgYXV0
byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAg
IGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1lbnRQb2ludGVyLmFk
ZHJlc3NTcGFjZSgpOwogICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgp
KTsKLSAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7
Ci0gICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgpKSk7Ci0gICAgICAgIGF1dG8mIHRoaXJkQXJn
dW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gc2Vjb25k
QXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzPEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsy
XS0+dHlwZSgpKSk7CisgICAgICAgIGF1dG8mIHRoaXJkQXJndW1lbnRQb2ludGVyID0gZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzJdLT50eXBlKCkpOwogICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnRBZGRyZXNzU3BhY2Ug
PSB0aGlyZEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgYXV0byB0aGly
ZEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodGhpcmRBcmd1
bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgIGF1dG8gbmFtZSA9IGF0b21pY05h
bWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJJbnRlcmxvY2tl
ZCJfc3RyLmxlbmd0aCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
CmluZGV4IDYxZDM0OGFmMTU5NjYyM2FmNGMzNzk4ZWE5OTgxZjk0YTQxNjk1NjUuLjI2M2U4Mjhi
ZjY1MWJmYTQ2ZTZlZWZjY2JhOTFiOWViNmUxNTNjOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBs
aWNhdGVGdW5jdGlvbnMuY3BwCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGJvb2wgc2FtZSA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2sp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKClba10udHlwZSgpLCAqZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50
eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpW2tdLT50eXBlKCksICpmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVy
cygpW2tdLT50eXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtODAsOCArODAs
OCBAQCBib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0p
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFt
ZSgpID09ICJvcGVyYXRvciZbXSIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMgotICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0
YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpKSkgewotICAgICAgICAgICAgYXV0byYgdHlwZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFt
ZXRlcnMoKVsxXS50eXBlKCkpOworICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5
cGUgPSBzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpU
eXBlUmVmZXJlbmNlPih0eXBlKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvbHZl
ZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlwZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4oKnJlc29sdmVkVHlwZSkpIHsKQEAgLTkyLDE0ICs5MiwxNCBAQCBib29sIGNoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1l
KCkgPT0gIm9wZXJhdG9yLmxlbmd0aCIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMQotICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkKLSAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlU
eXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkpKQorICAgICAgICAgICAgICAgICAgICYmIChp
czxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVk
VHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKQorICAg
ICAgICAgICAgICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlwZT4oc3RhdGljX2Nhc3Q8Y29u
c3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGVsc2UgaWYg
KGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCiAgICAgICAgICAgICAm
JiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCi0gICAgICAgICAg
ICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1l
ZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQotICAg
ICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6
OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgp
KSkKLSAgICAgICAgICAgICYmIG1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpLCAqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkp
KQorICAgICAgICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0
PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBl
PihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCisgICAgICAgICAgICAgICAgICYmIG1hdGNoZXMo
KmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSwgKmZ1bmN0aW9uc1tp
XS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKaW5kZXggMTM2NWYyNmQxMjM0ODIw
MDBlZTc0MDQ3Y2IzMjFlODAyYjJjNjA4My4uNDY5ZmFjNmY4ZmRiMzZmNWU3YzczMzQwOWViNWE0
Y2JhMWNkY2NkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC0xMjIsOCArMTIyLDggQEAgc3RhdGljIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKEFT
VDo6Q2FsbEUKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAgIGF1dG8gcmV0
dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGNh
bGxFeHByZXNzaW9uLm9yaWdpbigpKSwgZmlyc3RBcmd1bWVudC5hZGRyZXNzU3BhY2UoKSwgZmly
c3RBcmd1bWVudC5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIHsgZmlyc3RBcmd1bWVudC5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51
bGxvcHQsIFdURjo6bnVsbG9wdCkpOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNh
bGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSB9LCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZCht
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcGFyYW1l
dGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVy
OjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWludFR5cGUoKSkpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKICAgICByZXR1cm4gQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51
bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMTMyLDcgKzEzMiw3IEBAIHN0YXRpYyBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aChBU1Q6
OkNhbGxFeHByZXNzCiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBhdXRv
IHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUoKSB9LCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZCht
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CiAgICAgcmV0dXJu
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3Iu
bGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVy
cyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0xNTMsOCArMTUzLDggQEAg
c3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aFJlZmVyZW5j
ZUNvbXBhcmF0b3IoQVNUOjpDYWxsRXgKICAgICAgICAgfSkpOwogICAgIH0pKTsKICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQo
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGFyZ3VtZW50VHlwZS0+Y2xvbmUoKSB9LCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVu
ZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RGTW92ZShhcmd1bWVudFR5cGUpIH0sIFN0
cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4o
Y2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgYXJndW1lbnRUeXBl
LT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBw
YXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4o
TGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKICAgICByZXR1cm4gQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0yMDMsOCArMjAzLDggQEAgc3RhdGljIE9wdGlvbmFs
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihB
U1Q6OkNhbGwKICAgICAgICAgYXV0byByaWdodEFjY2VwdGFiaWxpdHkgPSBhY2NlcHRhYmlsaXR5
KHR5cGVzWzFdLmdldCgpKTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAg
IGlmIChsZWZ0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMgJiYgcmlnaHRBY2Nl
cHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcykgewotICAgICAgICAgICAgYXV0byYgdW5u
YW1lZFR5cGUxID0gdHlwZXNbMF0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKLSAgICAgICAgICAg
IGF1dG8mIHVubmFtZWRUeXBlMiA9IHR5cGVzWzFdLmdldCgpLmdldFVubmFtZWRUeXBlKCk7Cisg
ICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTEgPSAqdHlwZXNbMF0uZ2V0KCkuZ2V0VW5uYW1l
ZFR5cGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlMiA9ICp0eXBlc1sxXS5nZXQo
KS5nZXRVbm5hbWVkVHlwZSgpOwogICAgICAgICAgICAgc3VjY2VzcyA9IG1hdGNoZXModW5uYW1l
ZFR5cGUxLCB1bm5hbWVkVHlwZTIpOwogICAgICAgICB9IGVsc2UgaWYgKChsZWZ0QWNjZXB0YWJp
bGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXliZSAmJiByaWdodEFjY2VwdGFiaWxpdHkgPT0gQWNj
ZXB0YWJpbGl0eTo6WWVzKQogICAgICAgICAgICAgfHwgKGxlZnRBY2NlcHRhYmlsaXR5ID09IEFj
Y2VwdGFiaWxpdHk6OlllcyAmJiByaWdodEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6
TWF5YmUpKQpAQCAtMzA0LDE0ICszMDQsMTQgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92
ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAg
ICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJ
bmRleCA/IDIgOiAxOwogICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBhdXRvJiBmaXJzdFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAg
YXV0byYgZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpV
bm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUpKSB7CiAgICAgICAgICAgICBhdXRv
JiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0UGFyYW1ldGVy
VW5pZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxB
U1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2luZCA9PSBDaGVja0tpbmQ6OkluZGV4KSB7Ci0g
ICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVm
aW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAg
ICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFp
czxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKTsKQEAgLTMyOCwxNCAr
MzI4LDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgIHNpemVfdCBudW1FeHBl
Y3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAzIDogMjsKICAgICAg
ICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVj
dGVkUGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYg
Zmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVu
aWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+
dW5pZnlOb2RlKCk7CiAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3Vt
ZW50VW5pZnlOb2RlKSkgewogICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsKICAgICAgICAgICAg
IGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5
cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoa2luZCA9PSBDaGVja0tpbmQ6OkluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBzZWNvbmRQ
YXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0u
dHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJV
bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkt
PnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25k
UGFyYW1ldGVyVW5pZnlOb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25k
UGFyYW1ldGVyVW5pZnlOb2RlKTsKQEAgLTM0NSw5ICszNDUsOSBAQCBzdGF0aWMgYm9vbCBjaGVj
a09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9u
RGVmaW5pdAogICAgICAgICAgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNJbnQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFt
YXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksICpmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpWzBdLnR5cGUoKSkpCisgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbkRlZmlu
aXRpb24udHlwZSgpLCAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYgdmFsdWVUeXBlID0g
KmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0g
MV0udHlwZSgpOworICAgICAgICBhdXRvJiB2YWx1ZVR5cGUgPSAqZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKVtudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxXS0+dHlwZSgpOwogICAgICAg
ICBhdXRvIGdldHRlck5hbWUgPSBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLnN1YnN0cmluZygw
LCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLmxlbmd0aCgpIC0gMSk7CiAgICAgICAgIGF1dG8q
IGdldHRlckZ1bmNzID0gbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGdldHRlck5hbWUpOwogICAg
ICAgICBpZiAoIWdldHRlckZ1bmNzKQpAQCAtMzU1LDcgKzM1NSw3IEBAIHN0YXRpYyBib29sIGNo
ZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rp
b25EZWZpbml0CiAgICAgICAgIFZlY3RvcjxSZXNvbHZpbmdUeXBlPiBhcmd1bWVudFR5cGVzOwog
ICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYXJn
dW1lbnRUeXBlUmVmZXJlbmNlczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1F
eHBlY3RlZFBhcmFtZXRlcnMgLSAxOyArK2kpCi0gICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFw
cGVuZCgoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+Y2xvbmUo
KSk7CisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgoKmZ1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSktPmNsb25lKCkpOwogICAgICAgICBmb3IgKGF1dG8m
IGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50VHlwZXMpCiAgICAgICAgICAgICBhcmd1bWVudFR5cGVS
ZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5cGUpOwogICAgICAgICBhdXRvKiBvdmVybG9hZCA9
IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgqZ2V0dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJl
ZmVyZW5jZXMsIG51bGxwdHIpOwpAQCAtMzc4LDcgKzM3OCw3IEBAIHN0YXRpYyBib29sIGNoZWNr
T3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IHsKLSAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVu
aWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+
dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5
Tm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0byYg
dW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwpAQCAt
MzkyLDcgKzM5Miw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcisrIiB8
fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvci0tIikgewogICAgICAgICBy
ZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMQotICAgICAg
ICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBl
KCksIGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgICAgICAgICAgJiYgbWF0Y2hlcygq
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLCBmdW5jdGlvbkRlZmlu
aXRpb24udHlwZSgpKTsKICAgICB9CiAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkg
PT0gIm9wZXJhdG9yKyIgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3It
IikKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ID09IDEgfHwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMjsKQEAg
LTQ0NywxOSArNDQ3LDE4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBib29sIGNoZWNrU2hh
ZGVyVHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOwotICAgIHZvaWQgZmluaXNo
VmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYsIEFT
VDo6VW5uYW1lZFR5cGUmIHdyYXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVkVHlwZSogZXh0cmFB
cmd1bWVudFR5cGUgPSBudWxscHRyKTsKICAgICBib29sIGlzQm9vbFR5cGUoUmVzb2x2aW5nVHlw
ZSYpOwogICAgIHN0cnVjdCBSZWN1cnNlSW5mbyB7CiAgICAgICAgIFJlc29sdmluZ1R5cGUmIHJl
c29sdmluZ1R5cGU7Ci0gICAgICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiYgYWRkcmVz
c1NwYWNlOworICAgICAgICBBU1Q6OlR5cGVBbm5vdGF0aW9uJiB0eXBlQW5ub3RhdGlvbjsKICAg
ICB9OwotICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiByZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4
cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTFZhbHVlID0gZmFsc2UpOwotICAgIE9wdGlvbmFsPFJl
Y3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMVmFsdWUg
PSBmYWxzZSk7CisgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJlY3Vyc2VBbmRHZXRJbmZvKEFT
VDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CisgICAgT3B0
aW9uYWw8UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJl
c0xlZnRWYWx1ZSA9IGZhbHNlKTsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mKTsKICAgICBib29sIHJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoQVNUOjpFeHByZXNzaW9u
Jik7Ci0gICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBXVEY6Om51bGxv
cHQpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6
bnVsbG9wdCk7Ci0gICAgdm9pZCBmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZXNvbHZp
bmdUeXBlJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsKKyAg
ICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOworICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6
OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIEFTVDo6VHlw
ZUFubm90YXRpb24pOworICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVz
b2x2aW5nVHlwZSYsIEFTVDo6VHlwZUFubm90YXRpb24pOwogCiAgICAgdm9pZCB2aXNpdChBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKQEAgLTQ5NCw3ICs0OTMsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogCiAgICAg
SGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBSZXNvbHZpbmdUeXBlPiBtX3R5cGVNYXA7Ci0gICAg
SGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4+IG1f
YWRkcmVzc1NwYWNlTWFwOworICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgQVNUOjpUeXBl
QW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbnM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fdmVy
dGV4RW50cnlQb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZnJhZ21lbnRFbnRyeVBvaW50
czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9jb21wdXRlRW50cnlQb2ludHM7CkBAIC01MzgsOCAr
NTM3LDggQEAgYm9vbCBDaGVja2VyOjphc3NpZ25UeXBlcygpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX2FkZHJlc3NT
cGFjZU1hcCkKLSAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0QWRkcmVzc1NwYWNlKGtleVZh
bHVlUGFpci52YWx1ZSk7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX3R5cGVBbm5v
dGF0aW9ucykKKyAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0VHlwZUFubm90YXRpb24oV1RG
TW92ZShrZXlWYWx1ZVBhaXIudmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjIx
LDYgKzYyMCwxNyBAQCBzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
PiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbAogICAgIH0pKTsKIH0KIAorc3Rh
dGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gY29tbWl0KFJlc29sdmlu
Z1R5cGUmIHJlc29sdmluZ1R5cGUpCit7CisgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVk
VHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAg
IHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICBpZiAoIXJlc29sdmFibGVUeXBl
UmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGNvbW1pdChyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSk7
CisgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUo
KS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICB9KSk7Cit9CisKIHZvaWQgQ2hlY2tlcjo6
dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikK
IHsKICAgICBhdXRvKiBiYXNlVHlwZSA9IChbJl0oKSAtPiBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiogewpAQCAtNzI4LDI2ICs3MzgsMjYgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlR5
cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0
eXBlQXJndW1lbnQpOwogfQogCi1hdXRvIENoZWNrZXI6OnJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8
UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OnJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVz
c2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSkgLT4gT3B0aW9uYWw8UmVj
dXJzZUluZm8+CiB7CiAgICAgVmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lvbik7CiAgICAgaWYgKGVy
cm9yKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGdldEluZm8o
ZXhwcmVzc2lvbiwgcmVxdWlyZXNMVmFsdWUpOworICAgIHJldHVybiBnZXRJbmZvKGV4cHJlc3Np
b24sIHJlcXVpcmVzTGVmdFZhbHVlKTsKIH0KIAotYXV0byBDaGVja2VyOjpnZXRJbmZvKEFTVDo6
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8
UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OmdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBleHBy
ZXNzaW9uLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4K
IHsKICAgICBhdXRvIHR5cGVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZleHByZXNzaW9uKTsK
ICAgICBBU1NFUlQodHlwZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CiAKLSAgICBhdXRv
IGFkZHJlc3NTcGFjZUl0ZXJhdG9yID0gbV9hZGRyZXNzU3BhY2VNYXAuZmluZCgmZXhwcmVzc2lv
bik7Ci0gICAgQVNTRVJUKGFkZHJlc3NTcGFjZUl0ZXJhdG9yICE9IG1fYWRkcmVzc1NwYWNlTWFw
LmVuZCgpKTsKLSAgICBpZiAocmVxdWlyZXNMVmFsdWUgJiYgIWFkZHJlc3NTcGFjZUl0ZXJhdG9y
LT52YWx1ZSkgeworICAgIGF1dG8gdHlwZUFubm90YXRpb25JdGVyYXRvciA9IG1fdHlwZUFubm90
YXRpb25zLmZpbmQoJmV4cHJlc3Npb24pOworICAgIEFTU0VSVCh0eXBlQW5ub3RhdGlvbkl0ZXJh
dG9yICE9IG1fdHlwZUFubm90YXRpb25zLmVuZCgpKTsKKyAgICBpZiAocmVxdWlyZXNMZWZ0VmFs
dWUgJiYgdHlwZUFubm90YXRpb25JdGVyYXRvci0+dmFsdWUuaXNSaWdodFZhbHVlKCkpIHsKICAg
ICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9Ci0g
ICAgcmV0dXJuIHt7IHR5cGVJdGVyYXRvci0+dmFsdWUsIGFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52
YWx1ZSB9fTsKKyAgICByZXR1cm4ge3sgdHlwZUl0ZXJhdG9yLT52YWx1ZSwgdHlwZUFubm90YXRp
b25JdGVyYXRvci0+dmFsdWUgfX07CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtNzY3LDE5ICs3NzcsMzIg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxl
RGVjbGFyYXRpb24pCiAgICAgfQogfQogCi12b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpF
eHByZXNzaW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5h
bWVkVHlwZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKK3ZvaWQg
Q2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5
cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHVubmFtZWRUeXBlKSk7CiAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBhdXRv
IGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lv
biwgYWRkcmVzc1NwYWNlKTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fdHlw
ZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwog
ICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4
cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiBy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJl
c3NTcGFjZSkKK3ZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJl
c3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRW
YWx1ZSgpKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lv
biwgV1RGTW92ZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkpOwogICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VB
ZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFj
ZSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5h
ZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKKyAgICBBU1NFUlRfVU5V
U0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50
cnkpOworfQorCit2b2lkIENoZWNrZXI6OmZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhw
cmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlv
biB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQoreworICAgIHJlc29sdmluZ1R5
cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHBy
ZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVN
YXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJlZigpKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9KSk7CisgICAgYXV0
byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Np
b24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NT
cGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCkBA
IC03ODksNiArODEyLDExIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhw
cmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCiAgICAgaWYgKCFsZWZ0SW5mbykKICAgICAg
ICAgcmV0dXJuOwogCisgICAgaWYgKGxlZnRJbmZvLT50eXBlQW5ub3RhdGlvbi5pc1JpZ2h0VmFs
dWUoKSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgYXV0byByaWdodEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhhc3NpZ25tZW50RXhwcmVzc2lv
bi5yaWdodCgpKTsKICAgICBpZiAoIXJpZ2h0SW5mbykKICAgICAgICAgcmV0dXJuOwpAQCAtODAy
LDIzICs4MzAsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNz
aW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKICAgICBhc3NpZ25UeXBlKGFzc2lnbm1lbnRFeHBy
ZXNzaW9uLCBXVEZNb3ZlKCpyZXN1bHRUeXBlKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6Zm9yd2Fy
ZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlJiByZXNvbHZp
bmdUeXBlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlKQotewotICAg
IHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVN
YXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0sIFsmXShSZWZQdHI8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJlZigpKTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9
KSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5h
ZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRyZXNz
U3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLX0KLQog
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFu
ZEdldEluZm8ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSwgdHJ1ZSk7Ci0gICAg
aWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJ
bmZvKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCksIHRydWUpOworICAgIGlm
ICghbGVmdFZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IEZpZ3Vy
ZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJ3MgQW5v
bnltb3VzVmFyaWFibGVzLgpAQCAtODI3LDcgKzg0Miw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
KQogICAgIGlmICghbmV3VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1h
dGNoQW5kQ29tbWl0KGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+cmVz
b2x2aW5nVHlwZSkpIHsKKyAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KGxlZnRWYWx1ZUluZm8tPnJl
c29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSkpIHsKICAgICAgICAgc2V0
RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTg3MywzNyArODg4LDQzIEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUoZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+Y2xvbmUoKSwgcG9pbnRlclR5cGUtPmFk
ZHJlc3NTcGFjZSgpKTsKKyAgICBhc3NpZ25UeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9p
bnRlclR5cGUtPmNsb25lKCksIEFTVDo6TGVmdFZhbHVlIHsgcG9pbnRlclR5cGUtPmFkZHJlc3NT
cGFjZSgpIH0pOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHBy
ZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0g
cmVjdXJzZUFuZEdldEluZm8obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpLCB0cnVlKTsK
LSAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgYXV0byBsZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFu
ZEdldEluZm8obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLCB0cnVlKTsKKyAgICBp
ZiAoIWxlZnRWYWx1ZUluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbGVmdEFkZHJl
c3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2Uo
KTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKICAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGF1dG8qIGxWYWx1ZVR5cGUgPSBnZXRVbm5hbWVk
VHlwZShsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWxWYWx1ZVR5cGUpIHsK
KyAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobGVmdFZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVUeXBlKSB7CiAgICAgICAgIHNldEVy
cm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKG1ha2VQb2lu
dGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9r
ZW4obWFrZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUluZm8tPmFkZHJlc3NT
cGFjZSwgbFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAgIGFzc2lnblR5cGUobWFrZVBvaW50ZXJF
eHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbiht
YWtlUG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgbGVmdFZh
bHVlVHlwZS0+Y2xvbmUoKSkpOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsK
LSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhtYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgYXV0byBs
ZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbi5sZWZ0VmFsdWUoKSk7CisgICAgaWYgKCFsZWZ0VmFsdWVJbmZvKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvKiBsVmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobFZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFsVmFsdWVUeXBlKSB7CisgICAgYXV0byogbGVmdFZh
bHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOwor
ICAgIGlmICghbGVmdFZhbHVlVHlwZSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgYXV0byYgdW5pZnlOb2RlID0gbFZhbHVlVHlwZS0+dW5pZnlO
b2RlKCk7CisgICAgYXV0byYgdW5pZnlOb2RlID0gbGVmdFZhbHVlVHlwZS0+dW5pZnlOb2RlKCk7
CiAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKICAgICAgICAgYXV0
byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwog
ICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7CkBAIC05MTMs
NyArOTM0LDggQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3MKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmICghbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlKSB7Cisg
ICAgICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0
aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgaWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7
CiAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC05MjEsMTgzICs5NDMsMTEyIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzCiAgICAgICAg
IGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKSB7CiAgICAgICAgICAgICBhdXRv
JiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpOwogICAg
ICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KLSAgICAgICAg
ICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBhcnJheVR5
cGUudHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
TGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVm
dEFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIWxWYWx1ZUluZm8tPmFkZHJlc3NT
cGFjZSkgeworICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVB
bm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2Up
IHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFz
c2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBsVmFsdWVUeXBlLT5j
bG9uZSgpKSk7CisgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBt
YWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0
VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQ
cm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5cGUsIEFTVDo6VW5u
YW1lZFR5cGUqIGV4dHJhQXJndW1lbnRUeXBlKQordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRv
dEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7Ci0gICAgdXNpbmcgT3ZlcmxvYWRSZXNvbHV0
aW9uID0gc3RkOjp0dXBsZTxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBBU1Q6OlVubmFtZWRU
eXBlKj47Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1bmN0aW9uOwotICAg
IEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUoZ2V0RnVuY3Rp
b24sIGdldFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlvbiB7Ci0gICAg
ICAgIFJlc29sdmluZ1R5cGUgZ2V0QXJndW1lbnRUeXBlMSh3cmFwcGVkQmFzZVR5cGUuY2xvbmUo
KSk7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IGdldEFyZ3VtZW50VHlwZTI7Ci0g
ICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAgICAgICAgICAgIGdldEFyZ3VtZW50VHlw
ZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgpKTsKKyAgICBhdXRv
IGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oZG90RXhwcmVzc2lvbi5iYXNlKCkpOworICAg
IGlmICghYmFzZUluZm8pCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGJhc2VVbm5hbWVkVHlw
ZSA9IGNvbW1pdChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFiYXNlVW5uYW1l
ZFR5cGUpCisgICAgICAgIHJldHVybjsKIAorICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiog
Z2V0RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVyblR5
cGUgPSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+IGdldEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGdldEFyZ3VtZW50
VHlwZXMuYXBwZW5kKGdldEFyZ3VtZW50VHlwZTEpOwotICAgICAgICBpZiAoZ2V0QXJndW1lbnRU
eXBlMikKLSAgICAgICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpnZXRBcmd1bWVudFR5
cGUyKTsKLQotICAgICAgICBhdXRvKiBnZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwg
Z2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAgICAgIGlmICghZ2V0RnVuY3Rpb24pCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihnZXRGdW5jdGlvbiwgJmdldEZ1bmN0aW9uLT50eXBl
KCkpOwotICAgIH0pKCk7Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0
aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUo
YW5kRnVuY3Rpb24sIGFuZFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlv
biB7Ci0gICAgICAgIGF1dG8gY29tcHV0ZUFuZEFyZ3VtZW50VHlwZSA9IFsmXShBU1Q6OlVubmFt
ZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gewotICAgICAg
ICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHsgdW5uYW1lZFR5cGUuY2xvbmUoKSB9OwotICAgICAgICAgICAg
aWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHsgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBl
KS50eXBlKCkuY2xvbmUoKSkpIH07Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgICAgICAgICByZXR1cm4geyBSZXNvbHZpbmdUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2lu
dGVyVHlwZT4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSks
IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4o
dW5uYW1lZFR5cGUpLmNsb25lKCkpKSB9OwotICAgICAgICB9OwotICAgICAgICBhdXRvIGNvbXB1
dGVBbmRSZXR1cm5UeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBB
U1Q6OlVubmFtZWRUeXBlKiB7Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCk7Ci0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgfTsKLQotICAgICAgICBhdXRvIGFuZEFyZ3VtZW50VHlwZTEgPSBj
b21wdXRlQW5kQXJndW1lbnRUeXBlKHdyYXBwZWRCYXNlVHlwZSk7Ci0gICAgICAgIGlmICghYW5k
QXJndW1lbnRUeXBlMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRy
LCBudWxscHRyKTsKLSAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gYW5kQXJndW1lbnRU
eXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAgICAgICAgICAgYW5kQXJn
dW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOwor
ICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7
CisgICAgICAgIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4
cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwgZ2V0QXJndW1lbnRUeXBlcywgbnVsbHB0
cik7CisgICAgICAgIGlmIChnZXRGdW5jdGlvbikKKyAgICAgICAgICAgIGdldFJldHVyblR5cGUg
PSAmZ2V0RnVuY3Rpb24tPnR5cGUoKTsKKyAgICB9CiAKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIGFuZEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBhbmRS
ZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gYmFz
ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAgICBhdXRv
IGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRv
a2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgYmFzZVVubmFt
ZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFuZEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGFuZEFyZ3Vt
ZW50VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5cGUxKTsKLSAgICAgICAgaWYgKGFuZEFyZ3Vt
ZW50VHlwZTIpCi0gICAgICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZCgqYW5kQXJndW1l
bnRUeXBlMik7Ci0KLSAgICAgICAgYXV0byogYW5kRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25P
dmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRz
KCksIGFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIWFuZEZ1bmN0aW9u
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOwot
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYW5kRnVuY3Rpb24sIGNvbXB1dGVBbmRSZXR1
cm5UeXBlKGFuZEZ1bmN0aW9uLT50eXBlKCkpKTsKLSAgICB9KSgpOworICAgICAgICBhbmRBcmd1
bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIGFuZEZ1
bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2li
bGVBbmRPdmVybG9hZHMoKSwgYW5kQXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlm
IChhbmRGdW5jdGlvbikKKyAgICAgICAgICAgIGFuZFJldHVyblR5cGUgPSAmZG93bmNhc3Q8QVNU
OjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8gRklY
TUU6IEVuZm9yY2UgdGhlIHJldHVybiBvZiBhbmRlcnMgd2lsbCBhbHdheXMgYmUgYSBwb2ludGVy
CisgICAgfQorCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRGdW5jdGlv
biA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogdGhyZWFkQW5kUmV0dXJuVHlwZSA9
IG51bGxwdHI7CisgICAgeworICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkp
LCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlVW5uYW1lZFR5cGUtPmdldCgpLmNsb25l
KCkpOworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4gdGhyZWFkQW5kQXJndW1lbnRUeXBlczsKKyAgICAgICAgdGhyZWFkQW5kQXJndW1lbnRUeXBl
cy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgICAgICB0aHJlYWRBbmRGdW5j
dGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3NpYmxl
QW5kT3ZlcmxvYWRzKCksIHRocmVhZEFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAg
ICBpZiAodGhyZWFkQW5kRnVuY3Rpb24pCisgICAgICAgICAgICB0aHJlYWRBbmRSZXR1cm5UeXBl
ID0gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHRocmVhZEFuZEZ1bmN0aW9uLT50eXBlKCkp
LmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJzIHdp
bGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgIH0KIAotICAgIGlmICghZ2V0UmV0dXJuVHlwZSAm
JiAhYW5kUmV0dXJuVHlwZSkgeworICAgIGlmICghZ2V0RnVuY3Rpb24gJiYgIWFuZEZ1bmN0aW9u
KSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBp
ZiAoZ2V0UmV0dXJuVHlwZSAmJiBhbmRSZXR1cm5UeXBlICYmICFtYXRjaGVzKCpnZXRSZXR1cm5U
eXBlLCAqYW5kUmV0dXJuVHlwZSkpIHsKKyAgICBpZiAoZ2V0RnVuY3Rpb24gJiYgYW5kRnVuY3Rp
b24pIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoYW5kRnVuY3Rpb24gJiYgdGhyZWFkQW5kRnVuY3Rpb24gJiYgIW1hdGNoZXMoKmFuZFJldHVy
blR5cGUsICp0aHJlYWRBbmRSZXR1cm5UeXBlKSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRG
dW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBzZXRSZXR1cm5UeXBlOwotICAgIHN0ZDo6
dGllKHNldEZ1bmN0aW9uLCBzZXRSZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBPdmVybG9hZFJlc29s
dXRpb24gewotICAgICAgICBSZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50MVR5cGUod3JhcHBlZEJh
c2VUeXBlLmNsb25lKCkpOwotICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiBzZXRBcmd1
bWVudFR5cGUyOwotICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCi0gICAgICAgICAgICBz
ZXRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50VHlwZS0+Y2xvbmUo
KSk7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgc2V0QXJndW1lbnQzVHlwZShnZXRSZXR1cm5UeXBl
ID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUtPmNsb25lKCkpOworICAg
IEFTVDo6VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5U
eXBlIDogYW5kUmV0dXJuVHlwZTsKIAorICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0
RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNldFJldHVyblR5cGUg
PSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
UmVzb2x2aW5nVHlwZT4+IHNldEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIHNldEFyZ3VtZW50VHlw
ZXMuYXBwZW5kKHNldEFyZ3VtZW50MVR5cGUpOwotICAgICAgICBpZiAoc2V0QXJndW1lbnRUeXBl
MikKLSAgICAgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpzZXRBcmd1bWVudFR5cGUy
KTsKLSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoc2V0QXJndW1lbnQzVHlwZSk7Ci0K
LSAgICAgICAgYXV0byogc2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwo
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlU2V0T3ZlcmxvYWRzKCksIHNldEFyZ3Vt
ZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIXNldEZ1bmN0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIoc2V0RnVuY3Rpb24sICZzZXRGdW5jdGlvbi0+dHlwZSgpKTsKLSAg
ICB9KSgpOwotCi0gICAgaWYgKHNldEZ1bmN0aW9uKSB7Ci0gICAgICAgIGlmICghbWF0Y2hlcyhz
ZXRGdW5jdGlvbi0+dHlwZSgpLCB3cmFwcGVkQmFzZVR5cGUpKSB7Ci0gICAgICAgICAgICBzZXRF
cnJvcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT3B0
aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKLSAgICBpZiAoZ2V0UmV0dXJu
VHlwZSB8fCBhbmRSZXR1cm5UeXBlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGUgcmVmZXJlbmNl
IGNvbXBpbGVyIGhhcyAiZWxzZSBpZiAoIW5vZGUuYmFzZS5pc0xWYWx1ZSAmJiAhYmFzZVR5cGUu
aXNBcnJheVJlZikiLAotICAgICAgICAvLyBidXQgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSBpdCBl
eGlzdHMuIEkgaGF2ZW4ndCB3cml0dGVuIGl0IGhlcmUsIGFuZCBJJ2xsIGludmVzdGlnYXRlCi0g
ICAgICAgIC8vIGlmIHdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGUgcmVmZXJlbmNlIGNvbXBpbGVy
LgotICAgICAgICBpZiAoaXM8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVkQmFzZVR5cGUpKQot
ICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gZG93bmNhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlPih3
cmFwcGVkQmFzZVR5cGUpLmFkZHJlc3NTcGFjZSgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFjZU1hcC5maW5kKCZw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChhZGRy
ZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7Ci0gICAgICAgICAg
ICBpZiAoYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAgICAgICAgIGFkZHJl
c3NTcGFjZSA9ICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVu
ZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIFJlc29sdmluZ1R5cGUgZmllbGRS
ZXNvbHZpbmdUeXBlKGZpZWxkVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIHNldEFyZ3VtZW50VHlw
ZXMuYXBwZW5kKGZpZWxkUmVzb2x2aW5nVHlwZSk7CisgICAgICAgIHNldEZ1bmN0aW9uID0gcmVz
b2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVTZXRPdmVybG9h
ZHMoKSwgc2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlmIChzZXRGdW5jdGlv
bikKKyAgICAgICAgICAgIHNldFJldHVyblR5cGUgPSAmc2V0RnVuY3Rpb24tPnR5cGUoKTsKICAg
ICB9CiAKLSAgICAvLyBGSVhNRTogR2VuZXJhdGUgdGhlIGNhbGwgZXhwcmVzc2lvbnMKLQotICAg
IGFzc2lnblR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBnZXRSZXR1cm5UeXBlID8gZ2V0
UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUtPmNsb25lKCksIGFkZHJlc3NTcGFj
ZSk7Ci19Ci0KLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gQ2hlY2tlcjo6
cmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKQotewotICAgIGF1dG8gYmFzZUluZm8gPSByZWN1cnNlQW5k
R2V0SW5mbyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICBpZiAoIWJhc2VJ
bmZvKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0byogYmFzZVR5cGUg
PSBnZXRVbm5hbWVkVHlwZShiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFiYXNl
VHlwZSkgeworICAgIGlmIChzZXRGdW5jdGlvbiAmJiBhbmRGdW5jdGlvbikgewogICAgICAgICBz
ZXRFcnJvcigpOwotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0KLSAgICBhdXRv
JiBiYXNlVW5pZnlOb2RlID0gYmFzZVR5cGUtPnVuaWZ5Tm9kZSgpOwotICAgIGlmIChpczxBU1Q6
OlVubmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFT
VDo6VW5uYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpLmNsb25lKCk7Ci0gICAgQVNTRVJUKGlzPEFT
VDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSk7Ci0gICAgcmV0dXJuIHsgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2lu
KCkpLCBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkpIH07Ci19Ci0KLXZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQotewot
ICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGRvdEV4cHJlc3Npb24p
OwotICAgIGlmICghYmFzZVR5cGUpCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBmaW5p
c2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKGRvdEV4cHJlc3Npb24sICpiYXNlVHlwZSk7CisgICAg
ZG90RXhwcmVzc2lvbi5zZXRHZXRGdW5jdGlvbihnZXRGdW5jdGlvbik7CisgICAgZG90RXhwcmVz
c2lvbi5zZXRBbmRGdW5jdGlvbihhbmRGdW5jdGlvbik7CisgICAgZG90RXhwcmVzc2lvbi5zZXRU
aHJlYWRBbmRGdW5jdGlvbih0aHJlYWRBbmRGdW5jdGlvbik7CisgICAgZG90RXhwcmVzc2lvbi5z
ZXRTZXRGdW5jdGlvbihzZXRGdW5jdGlvbik7CisKKyAgICBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5
cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCk7CisgICAgaWYgKGF1dG8gbGVmdEFkZHJl
c3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsK
KyAgICAgICAgaWYgKGFuZEZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFubm90YXRpb24gPSBB
U1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRkcmVzc1NwYWNlIH07CisgICAgICAgIGVsc2UgaWYgKHNl
dEZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkFic3RyYWN0TGVm
dFZhbHVlKCk7CisgICAgfSBlbHNlIGlmICghYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmlzUmln
aHRWYWx1ZSgpICYmIChzZXRGdW5jdGlvbiB8fCBhbmRGdW5jdGlvbikpCisgICAgICAgIHR5cGVB
bm5vdGF0aW9uID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgpOworICAgIGFzc2lnblR5cGUoZG90
RXhwcmVzc2lvbiwgZmllbGRUeXBlLT5jbG9uZSgpLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7
CiB9CiAKLXZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhw
cmVzc2lvbikKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKQogewot
ICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGluZGV4RXhwcmVzc2lv
bik7Ci0gICAgaWYgKCFiYXNlVHlwZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpbmRl
eEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9u
KCkpOwotICAgIGlmICghaW5kZXhJbmZvKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byBpbmRl
eEV4cHJlc3Npb25UeXBlID0gZ2V0VW5uYW1lZFR5cGUoaW5kZXhJbmZvLT5yZXNvbHZpbmdUeXBl
KTsKLSAgICBpZiAoIWluZGV4RXhwcmVzc2lvblR5cGUpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nl
c3MoaW5kZXhFeHByZXNzaW9uLCBXVEZNb3ZlKCpiYXNlVHlwZSksIGluZGV4RXhwcmVzc2lvblR5
cGUpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAogdm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKQEAgLTExMDUs
MTAgKzEwNTYsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
JiB2YXJpYWJsZVJlZmVyZW5jZSkKICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFi
bGUoKSk7CiAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKSk7
CiAgICAgCi0gICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKLSAg
ICBpZiAoIXZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPmlzQW5vbnltb3VzKCkpCi0gICAg
ICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQ7Ci0gICAgYXNzaWdu
VHlwZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlw
ZSgpLT5jbG9uZSgpLCBhZGRyZXNzU3BhY2UpOworICAgIEFTVDo6VHlwZUFubm90YXRpb24gdHlw
ZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKTsKKyAgICBpZiAoIXZhcmlhYmxlUmVmZXJl
bmNlLnZhcmlhYmxlKCktPmlzQW5vbnltb3VzKCkpIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgc2Vl
bSByaWdodC4KKyAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQgfTsKKyAgICBhc3NpZ25UeXBlKHZhcmlhYmxlUmVmZXJlbmNl
LCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCktPmNsb25lKCksIFdURk1vdmUo
dHlwZUFubm90YXRpb24pKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJldHVybiYg
cmV0dXJuU3RhdGVtZW50KQpAQCAtMTQwNyw3ICsxMzU4LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQogICAgIGlmIChlcnJvcigp
KQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBsYXN0SW5mbyA9IGdldEluZm8oY29tbWFFeHBy
ZXNzaW9uLmxpc3QoKS5sYXN0KCkpOwotICAgIGZvcndhcmRUeXBlKGNvbW1hRXhwcmVzc2lvbiwg
bGFzdEluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGZvcndhcmRUeXBlKGNvbW1hRXhwcmVzc2lv
biwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUsIGxhc3RJbmZvLT50eXBlQW5ub3RhdGlvbik7CiB9
CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4
cHJlc3Npb24pCkBAIC0xNDU2LDcgKzE0MDcsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6
Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZnVuY3Rpb24tPnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAoIW1hdGNoQW5kQ29tbWl0KHR5cGVzW2ldLmdldCgpLCAqZnVuY3Rpb24tPnBhcmFtZXRl
cnMoKVtpXS50eXBlKCkpKSB7CisgICAgICAgIGlmICghbWF0Y2hBbmRDb21taXQodHlwZXNbaV0u
Z2V0KCksICpmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLT50eXBlKCkpKSB7CiAgICAgICAgICAg
ICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNw
cAppbmRleCAyZmNjNmYxMzlkZTg0YTMyYzRjNzA3Y2EwNjBiOWJlMWI0MmZkM2UwLi4xNThlMjNi
NDcyZGU0OTkzMWViNzg0MmM5N2I4NGFhMjNkMDk3MGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKQEAgLTIy
Nyw5ICsyMjcsOSBAQCBib29sIGluZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiYgcG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBhcmd1bWVudFR5cGVz
W2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIG1hdGNo
ZXMoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSwgdW5uYW1lZFR5cGUp
OworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVy
cygpW2ldLT50eXBlKCksIHVubmFtZWRUeXBlKTsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsK
LSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5
cGUoKS5jYW5SZXNvbHZlKHBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKS0+
dW5pZnlOb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJz
KClbaV0tPnR5cGUoKS0+dW5pZnlOb2RlKCkpOwogICAgICAgICB9KSk7CiAgICAgICAgIGlmICgh
c3VjY2VzcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAppbmRl
eCAwNTM1MGUwZGM5ODVlY2IzOTBmNTg2ZjBhMzRkMmE2ZWNmZWRjYTMyLi4zY2JlZGQ5YzI1Nzg4
ZmU1ZGUwNTYxMmZmMGRkMjZkNGM4NTRmN2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC0xOTcs
OSArMTk3LDEwIEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNz
aW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOwogICAg
ICAgICAgICAgICAgICAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5vcmln
aW4oKTsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBlcmhhcHMgZG8gdGhpcyB3aXRo
IHZhcmlhbnRzIG9yIGEgUmV3cml0ZXIgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgdm9p
ZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKICAgICAgICAgICAgICAgICAgICAgZG90RXhw
cmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOwogICAgICAgICAgICAgICAgICAgICBhdXRvIGVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbCA9IEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsOjp3cmFw
KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShiYXNlTmFtZSksIFdURk1vdmUobWVtYmVyTmFtZSks
IGVudW1lcmF0aW9uRGVmaW5pdGlvbiwgKm1lbWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIG5l
dyAoJmRvdEV4cHJlc3Npb24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUo
ZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSk7CisgICAgICAgICAgICAgICAgICAgIG5ldyAobG9j
YXRpb24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUoZW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAppbmRleCA1MzMyNTY3NjY0
OWQ3MzMzMDkwYjAxNWE3YjY3MjU3ZmMzNjBiOGQ0Li44MDVhNDYyNDc5N2MxMzRhNDM4N2RjMTk2
NjZmNmVmYTY3NTFkOWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkBAIC0xMDgyLDEzICsxMDgyLDEzIEBAIGF1dG8gUGFy
c2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zLCBFcnJvcj4KICAgICBhdXRvIGZpcnN0UGFyYW1ldGVyID0gcGFyc2VQYXJhbWV0ZXIoKTsK
ICAgICBpZiAoIWZpcnN0UGFyYW1ldGVyKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oZmlyc3RQYXJhbWV0ZXIuZXJyb3IoKSk7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92
ZSgqZmlyc3RQYXJhbWV0ZXIpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqZmlyc3RQYXJhbWV0ZXIpKSk7CiAK
ICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAg
ICBhdXRvIHBhcmFtZXRlciA9IHBhcnNlUGFyYW1ldGVyKCk7CiAgICAgICAgIGlmICghcGFyYW1l
dGVyKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcmFtZXRlci5lcnJv
cigpKTsKLSAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSgqcGFyYW1ldGVyKSk7Cisg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihXVEZNb3ZlKCpwYXJhbWV0ZXIpKSk7CiAgICAgfQogCiAgICAgYXV0byByaWdodFBh
cmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBhcmVudGhl
c2lzKTsKQEAgLTE1NjcsMTQgKzE1NjcsMTQgQEAgYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3QKICAg
ICBpZiAoIWZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKIAotICAgIFZlY3Rv
cjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgIFZlY3RvcjxVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQobWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUoKmZpcnN0VmFyaWFi
bGVEZWNsYXJhdGlvbikpKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlw
ZTo6Q29tbWEpKSB7CiAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFy
aWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICAgICAgaWYgKCF2YXJpYWJs
ZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhcmlh
YmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgq
dmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCp2YXJpYWJsZURlY2xhcmF0aW9u
KSkpOwogICAgIH0KIAogICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocmVzdWx0KSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAppbmRleCA5YTEw
MzVhNGI4Y2FkMzNhMjFlNjcwZjIyMDA1OTFjYzE0OGQ2YjEzLi44NjliN2MzOGNkYjRhOWRjYzFi
Mjk0MTk2NGJlOWQ2ODFhZDhlMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgogI2luY2x1ZGUgIldITFNMUGFyc2VyLmgiCiAjaW5j
bHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmgi
CiAjaW5jbHVkZSAiV0hMU0xSZWN1cnNpb25DaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xSZWN1
cnNpdmVUeXBlQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWNNYXRjaGVyLmgiCkBA
IC04Miw3ICs4Myw3IEBAIHN0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVwYXJlU2hhcmVkKFN0
cmluZyYgd2hsc2xTb3VyY2UpCiAgICAgaWYgKCFjaGVjayhwcm9ncmFtKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFtKTsKLSAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc4OCBS
ZXNvbHZlIHByb3BlcnRpZXMgaGVyZQorICAgIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pOwog
ICAgIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKICAgICBpZiAoIWNoZWNrU3RhdGVtZW50QmVo
YXZpb3IocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0
eVJlc29sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjFhMDA1NmRlOGU5NGVlODM0MmY0YjAxODkzYWI1
NjgyOWJjYWNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcApAQCAtMCwwICsxLDI0MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5UmVz
b2x2ZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFZpc2l0b3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQ
cm9wZXJ0eVJlc29sdmVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorcHJpdmF0ZToKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6QXNzaWdubWVudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKworICAgIGJvb2wgc2ltcGxpZnlS
aWdodFZhbHVlKEFTVDo6RG90RXhwcmVzc2lvbiYpOworICAgIGJvb2wgc2ltcGxpZnlBYnN0cmFj
dExlZnRWYWx1ZShBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiwgQVNUOjpEb3RFeHByZXNzaW9u
JiwgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiByaWdodCk7CisgICAgdm9pZCBzaW1wbGlm
eUxlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mKTsKKworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnMgbV92YXJpYWJsZURlY2xhcmF0aW9uczsKK307CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZl
cjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIC8vIFVu
bGVzcyB3ZSdyZSBpbnNpZGUgYW4gQXNzaWdubWVudEV4cHJlc3Npb24gb3IgYSBSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLCB3ZSdyZSBhIHJpZ2h0IHZhbHVlLgorICAgIGlmICghc2ltcGxpZnlS
aWdodFZhbHVlKGRvdEV4cHJlc3Npb24pKQorICAgICAgICBzZXRFcnJvcigpOworfQorCit2b2lk
IFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXRpb24pCit7CisgICAgVmlzaXRvcjo6dmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsK
KyAgICBpZiAoIW1fdmFyaWFibGVEZWNsYXJhdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICBmdW5j
dGlvbkRlZmluaXRpb24uYmxvY2soKS5zdGF0ZW1lbnRzKCkuaW5zZXJ0KDAsIG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oTGV4ZXI6OlRva2VuKG1fdmFy
aWFibGVEZWNsYXJhdGlvbnNbMF0tPm9yaWdpbigpKSwgV1RGTW92ZShtX3ZhcmlhYmxlRGVjbGFy
YXRpb25zKSkpOworfQorCit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQoreworICAgIEFTU0VSVChhc3Np
Z25tZW50RXhwcmVzc2lvbi5sZWZ0KCkudHlwZUFubm90YXRpb24oKSk7CisgICAgaWYgKGFzc2ln
bm1lbnRFeHByZXNzaW9uLmxlZnQoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNl
KCkpIHsKKyAgICAgICAgc2ltcGxpZnlMZWZ0VmFsdWUoYXNzaWdubWVudEV4cHJlc3Npb24ubGVm
dCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoIWFzc2lnbm1lbnRFeHBy
ZXNzaW9uLmxlZnQoKS50eXBlQW5ub3RhdGlvbigpLT5pc1JpZ2h0VmFsdWUoKSk7CisgICAgaWYg
KCFpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSkpIHsK
KyAgICAgICAgc2V0RXJyb3IoKTsgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIHdpdGggaW5kZXgg
ZXhwcmVzc2lvbnMuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFzaW1wbGlmeUFi
c3RyYWN0TGVmdFZhbHVlKGFzc2lnbm1lbnRFeHByZXNzaW9uLCBkb3duY2FzdDxBU1Q6OkRvdEV4
cHJlc3Npb24+KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSksIGFzc2lnbm1lbnRFeHByZXNz
aW9uLnRha2VSaWdodCgpKSkKKyAgICAgICAgc2V0RXJyb3IoKTsKK30KKworYm9vbCBQcm9wZXJ0
eVJlc29sdmVyOjpzaW1wbGlmeVJpZ2h0VmFsdWUoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHBy
ZXNzaW9uKQoreworICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RFeHByZXNzaW9uLm9yaWdp
bigpOworCisgICAgaWYgKGF1dG8qIGFuZEZ1bmN0aW9uID0gZG90RXhwcmVzc2lvbi5hbmRGdW5j
dGlvbigpKSB7CisgICAgICAgIGF1dG8mIGJhc2UgPSBkb3RFeHByZXNzaW9uLmJhc2UoKTsKKyAg
ICAgICAgQVNTRVJUKGJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBBU1NFUlQoYmFzZS50
eXBlQW5ub3RhdGlvbigpKTsKKyAgICAgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJh
c2UudHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgICAgICBh
dXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBkb3RFeHByZXNzaW9uLnRha2VCYXNl
KCkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlx
dWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbiksICpsZWZ0QWRkcmVz
c1NwYWNlLCBiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKSk7CisgICAgICAgICAgICBtYWtl
UG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsK
KworICAgICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVu
dHM7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUobWFrZVBvaW50ZXJFeHBy
ZXNzaW9uKSk7CisgICAgICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgU3RyaW5nKGFuZEZ1
bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgICAgICAgICAgY2FsbEV4
cHJlc3Npb24tPnNldFR5cGUoYW5kRnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAg
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7
CisgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZEZ1bmN0aW9uKTsK
KworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpEZXJlZmVyZW5jZUV4cHJl
c3Npb24pIDwgc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVl
ZCB0byBiZSBhYmxlIHRvIGJlY29tZSBkZXJlZmVyZW5jZSBleHByZXNzaW9ucyB3aXRob3V0IHVw
ZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgICAgICAgICB2b2lkKiBsb2NhdGlvbiA9ICZk
b3RFeHByZXNzaW9uOworICAgICAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigp
OworICAgICAgICAgICAgYXV0byogZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbmV3IChsb2NhdGlv
bikgQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNh
bGxFeHByZXNzaW9uKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5
cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVu
dFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBl
PihhbmRGdW5jdGlvbi0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgaGF2ZSBhbiBhbmRlciwgYnV0
IG5vIGxlZnQgdmFsdWUgdG8gY2FsbCBpdCBvbi4gTGV0J3Mgc2F2ZSB0aGUgdmFsdWUgaW50byBh
IHRlbXBvcmFyeSB2YXJpYWJsZSB0byBjcmVhdGUgYSBsZWZ0IHZhbHVlLgorICAgICAgICAvLyBU
aGlzIGlzIGVmZmVjdGl2ZWx5IGlubGluaW5nIHRoZSBmdW5jdGlvbnMgdGhlIHNwZWMgc2F5cyBh
cmUgZ2VuZXJhdGVkLgorICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rp
b24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIHZhcmlhYmxl
RGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4
ZXI6OlRva2VuKG9yaWdpbiksIEFTVDo6UXVhbGlmaWVycygpLCBiYXNlLnJlc29sdmVkVHlwZSgp
LT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworCisgICAg
ICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRp
b24pKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRU
eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKwor
ICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFz
c2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgV1RGTW92ZSh2YXJpYWJs
ZVJlZmVyZW5jZTEpLCBkb3RFeHByZXNzaW9uLnRha2VCYXNlKCkpOworICAgICAgICBhc3NpZ25t
ZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAg
ICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRW
YWx1ZSgpKTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2
YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlw
ZShiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVu
Y2UyLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7CisKKyAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2lu
KSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTIpKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRv
a2VuKG9yaWdpbiksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGJhc2UucmVzb2x2ZWRUeXBl
KCktPmNsb25lKCkpKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RG
TW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdp
biksIFN0cmluZyhhbmRGdW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAg
ICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoYW5kRnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgp
KTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRW
YWx1ZSgpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCphbmRGdW5jdGlv
bik7CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2Fs
bEV4cHJlc3Npb24pKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBl
KCkuY2xvbmUoKSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworCisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHByZXNzaW9uKSA8IHNpemVv
ZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0
byBiZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNl
cyIpOworICAgICAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOworICAgICAgICBk
b3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CisgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVu
ZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIGV4cHJlc3Npb25zLmFw
cGVuZChXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbikpOworICAgICAgICBhdXRvKiBjb21t
YUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVzc2lvbihXVEZNb3Zl
KG9yaWdpbiksIFdURk1vdmUoZXhwcmVzc2lvbnMpKTsKKyAgICAgICAgY29tbWFFeHByZXNzaW9u
LT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkp
LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0p
OworCisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUodmFyaWFi
bGVEZWNsYXJhdGlvbikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkNhbGxFeHByZXNzaW9uKSA8IHNpemVvZihBU1Q6OkRvdEV4
cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgY2Fs
bCBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgQVNT
RVJUKGRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKSk7CisgICAgYXV0byYgZ2V0RnVuY3Rpb24g
PSAqZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpOworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQoZG90RXhwcmVz
c2lvbi50YWtlQmFzZSgpKTsKKyAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOwor
ICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsKKyAgICBhdXRvKiBjYWxsRXhwcmVz
c2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q2FsbEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4p
LCBTdHJpbmcoZ2V0RnVuY3Rpb24ubmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICBj
YWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oZ2V0RnVuY3Rpb24pOworICAgIGNhbGxFeHByZXNz
aW9uLT5zZXRUeXBlKGdldEZ1bmN0aW9uLnR5cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxsRXhwcmVz
c2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb3BlcnR5UmVzb2x2ZXI6OnNpbXBsaWZ5QWJzdHJhY3RMZWZ0VmFs
dWUoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYsIEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhw
cmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiByaWdodCkKK3sKKyAgICBpZiAo
YXV0byogYW5kRnVuY3Rpb24gPSBkb3RFeHByZXNzaW9uLmFuZEZ1bmN0aW9uKCkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgCit9CisKK2NsYXNzIExlZnRWYWx1ZVNpbXBsaWZpZXIgOiBwdWJsaWMgVmlzaXRv
cgoreworcHVibGljOgorICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworCitwcml2YXRlOgorfTsKKwordm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVyOjp2aXNpdChBU1Q6
OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgVmlzaXRvcjo6dmlzaXQoZG90
RXhwcmVzc2lvbik7CisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uYmFzZSgpLnR5cGVBbm5vdGF0
aW9uKCkpOworICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmJhc2UoKS50eXBlQW5ub3RhdGlvbigp
LT5sZWZ0QWRkcmVzc1NwYWNlKCkpOworICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmFuZEZ1bmN0
aW9uKCkpOworCisgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2lu
KCk7CisgICAgYXV0byogYW5kRnVuY3Rpb24gPSBkb3RFeHByZXNzaW9uLmFuZEZ1bmN0aW9uKCk7
CisgICAgYXV0byYgYmFzZSA9IGRvdEV4cHJlc3Npb24uYmFzZSgpOworICAgIGF1dG8gbGVmdEFk
ZHJlc3NTcGFjZSA9ICpkb3RFeHByZXNzaW9uLmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0
QWRkcmVzc1NwYWNlKCk7CisgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwg
ZG90RXhwcmVzc2lvbi50YWtlQmFzZSgpKTsKKyAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNl
dFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2lu
KSwgbGVmdEFkZHJlc3NTcGFjZSwgYmFzZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSkpOworICAg
IG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVl
KCkpOworCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7
CisgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOwor
ICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Np
b24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBTdHJpbmcoYW5kRnVuY3Rpb24tPm5hbWUoKSksIFdU
Rk1vdmUoYXJndW1lbnRzKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoYW5kRnVuY3Rp
b24tPnR5cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigq
YW5kRnVuY3Rpb24pOworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpEZXJlZmVyZW5j
ZUV4cHJlc3Npb24pIDwgc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lv
bnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBkZXJlZmVyZW5jZSBleHByZXNzaW9ucyB3aXRo
b3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgdm9pZCogbG9jYXRpb24gPSAmZG90
RXhwcmVzc2lvbjsKKyAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CisgICAgYXV0
byogZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpEZXJlZmVyZW5j
ZUV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7Cisg
ICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFj
ZSgpIH0pOworfQorCit2b2lkIExlZnRWYWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFTVDo6RGVyZWZl
cmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgLy8gRGVyZWZl
cmVuY2UgZXhwcmVzc2lvbnMgYXJlIHRoZSBvbmx5IGV4cHJlc3Npb25zIHdoZXJlIHRoZSBjaGls
ZHJlbiBtaWdodCBiZSBtb3JlLXJpZ2h0IHRoYW4gd2UgYXJlLgorICAgIC8vIEZvciBleGFtcGxl
LCBhIGRlcmVmZXJlbmNlIGV4cHJlc3Npb24gbWF5IGJlIGEgbGVmdCB2YWx1ZSBidXQgaXRzIGNo
aWxkIG1heSBiZSBhIGNhbGwgZXhwcmVzc2lvbiB3aGljaCBpcyBhIHJpZ2h0IHZhbHVlLgorICAg
IC8vIExlZnRWYWx1ZVNpbXBsaWZpZXIgZG9lc24ndCBoYW5kbGUgcmlnaHQgdmFsdWVzLCBzbyB3
ZSBpbnN0ZWFkIG5lZWQgdG8gdXNlIFByb3BlcnR5UmVzb2x2ZXIuCisgICAgUHJvcGVydHlSZXNv
bHZlcigpLlZpc2l0b3I6OnZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQg
UHJvcGVydHlSZXNvbHZlcjo6c2ltcGxpZnlMZWZ0VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBleHBy
ZXNzaW9uKQoreworICAgIExlZnRWYWx1ZVNpbXBsaWZpZXIoKS5WaXNpdG9yOjp2aXNpdChleHBy
ZXNzaW9uKTsKK30KKwordm9pZCByZXNvbHZlUHJvcGVydGllcyhQcm9ncmFtJiBwcm9ncmFtKQor
eworICAgIFByb3BlcnR5UmVzb2x2ZXIoKS5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIyMDVm
OTAyYmNjOTRlY2E5ZWYzM2I1OGRhMWM3MDFhYjcyYjM0NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5o
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
Y2xhc3MgUHJvZ3JhbTsKKwordm9pZCByZXNvbHZlUHJvcGVydGllcyhQcm9ncmFtJik7CisKK30K
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCmluZGV4IGU3ODM4
Y2UzZjcyNWFlMDlhYmExZWRiNTBhNjU5MmMzNDYzMTNlZTUuLmRjOTM0ZGJmNzI2YTgxNGEwODA0
YjRjY2I1NzUyZGJlY2I4MWYzOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApA
QCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uJiBjYW5kaWRhdGUsIGNvbnN0IFZlY3RvcgogICAgICAgICBjb252ZXJz
aW9uQ29zdCArPSBhcmd1bWVudFR5cGVzW2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IHVuc2lnbmVkIHsKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IHVuc2lnbmVkIHsKLSAgICAgICAgICAg
IHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jb252ZXJz
aW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpOworICAgICAgICAgICAg
cmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNvbnZlcnNp
b25Db3N0KCpjYW5kaWRhdGUucGFyYW1ldGVycygpW2ldLT50eXBlKCkpOwogICAgICAgICB9KSk7
CiAgICAgfQogICAgIC8vIFRoZSByZXR1cm4gdHlwZSBjYW4gbmV2ZXIgYmUgYSBsaXRlcmFsIHR5
cGUsIHNvIGl0cyBjb252ZXJzaW9uIGNvc3QgaXMgYWx3YXlzIDAuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCmlu
ZGV4IGNhNWNiYjU5MjljZjllMTgxOGMyY2Q3NDFlNzlkOTM2Y2FhYzY4ZWUuLjUwZTUzMmI2YTZl
ODJmMWUwMmEwNDY3OTFiOGU2Njk2ZDViMTFlMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCkBAIC03Miw2
ICs3Miw3IEBAIHByaXZhdGU6CiAKIC8vIFRoaXMgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGEg
VmFyaWFudC4KIC8vIEl0IGV4aXN0cyBzbyB3ZSBjYW4gbWFrZSBzdXJlIHRoYXQgdGhlIGRlZmF1
bHQgY29uc3RydWN0b3IgZG9lcyB0aGUgcmlnaHQgdGhpbmcuCisvLyBGSVhNRTogVGhpcyB3cmFw
cGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCiBjbGFzcyBSZXNvbHZpbmdUeXBlIHsKIHB1Ymxp
YzoKICAgICBSZXNvbHZpbmdUeXBlKCkKQEAgLTEwMiwxMCArMTAzLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIEFTVDo6VW5uYW1lZFR5cGUmIGdldFVu
bmFtZWRUeXBlKCkKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBnZXRVbm5hbWVkVHlwZSgpCiAgICAg
ewotICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4+KG1faW5uZXIpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcik7CisgICAgICAgIGlmIChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcikpCisgICAgICAg
ICAgICByZXR1cm4gJldURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5l
cik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBWaXNpdG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0
eXBlKFdURjo6dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8VW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+LCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+PiY+KCkpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAppbmRleCBh
ZTNjYTY0MjM5ZTNiNTlkMzZhYWFhZWVjN2JhNDcxYmNiNjdjZWI5Li42NWVkN2FjZjQzZjIwMDQw
MjUwZjkwNjZhMTRiNjQwYjU3YmJmMGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoLmNwcApAQCAtNjUsNyArNjUsNyBAQCBib29sIHN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mIHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJhdG9y
ID0gdHJ1ZTsKIAogICAgIGZvciAoYXV0byYgYXJyYXlUeXBlIDogYXJyYXlUeXBlcykgewotICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgYXJy
YXlUeXBlLmdldCgpLmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgYXJyYXlUeXBlLmdldCgpLmNsb25lKCksIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92
ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9r
ZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudWludFR5
cGUoKSksICJvcGVyYXRvci5sZW5ndGgiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpu
dWxsb3B0LCBpc09wZXJhdG9yKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNw
cAppbmRleCBjZDdjMzcwMmFkYmVhMjlhYzE4YzVjYmU2ZGI2MDg3YjllMDJlZDhhLi43NGNjOGYx
ODRlODM1YjNjZTFjNDliNWNlNmVjOGQ2YTRhODY4YzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCBib29sIHN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwog
CiAgICAgZm9yIChhdXRvJiB1bm5hbWVkVHlwZSA6IHVubmFtZWRUeXBlcykgewotICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
dW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyB1bm5hbWVk
VHlwZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZN
b3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksICJvcGVyYXRvciBjYXN0
Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpA
QCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBw
cm9ncmFtKQogICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHN0YXRp
Y19jYXN0PEFTVDo6TmFtZWRUeXBlJj4obmFtZWRUeXBlKSkgJiYgZG93bmNhc3Q8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KHN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4obmFtZWRUeXBl
KSkuaXNBdG9taWMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5
cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlw
ZS5nZXQoKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAg
ICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVy
ZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRU
eXBlLmdldCgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1l
dGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCAi
b3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlz
T3BlcmF0b3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rp
b25zLmNwcAppbmRleCAxNzk3ZmU1Mzk0YzgxZWFjZDM5NTRhYmM2YThhNjVhNmM4ZmM5NmUyLi5k
NzRhZjMzYTFmMDVhNjkyMjE5YzhjY2U0YWZkY2M5Mjk1MTA5NzFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlv
bkZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCkBAIC00MSw4ICs0MSw4IEBA
IGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAg
ICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVm
aW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIHsK
LSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9u
MShMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKLSAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmln
aW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwg
V1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEgPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikp
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgYXV0
byB2YXJpYWJsZURlY2xhcmF0aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigp
KSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRl
cnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFy
YXRpb24xKSk7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxl
RGVjbGFyYXRpb24yKSk7CkBAIC01Miw3ICs1Miw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0
aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0KIAogICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRp
b25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5n
KCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVy
YXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7
CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAg
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsK
ICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpu
dWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3Iu
dmFsdWUiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9y
KSk7CkBAIC02MSw3ICs2MSw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25z
KFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9u
LT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0
aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAg
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKQEAgLTcwLDEw
ICs3MCwxMCBAQCBib29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBw
cm9ncmFtKQogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZp
bml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBlbnVtZXJhdGlvbkRlZmluaXRp
b24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
OwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
Ci0gICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0
aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sICJvcGVy
YXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVy
YXRvcikpOworICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZl
cmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkp
LCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAo
IXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNj
ZXNzb3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKaW5kZXggODI2NzIyMTM3ZTRjM2UzODIyNzc4
MGRhZTEyYjI5YWFiYTFiNzJlZS4uOTQ1ZDBjZWVmYWEzOWNlNTA3NDYwN2QyYzQ0OTNjZjM5N2U5
ODNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3Bw
CkBAIC00Niw3ICs0Niw3IEBAIGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9n
cmFtJiBwcm9ncmFtKQogICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1
Y3R1cmVEZWZpbml0aW9uLT5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQKLSAgICAgICAgICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmln
aW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1
Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVj
dHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSksIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICAgICAgICAgIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBzdHJ1Y3R1cmVFbGVtZW50
LnR5cGUoKS5jbG9uZSgpLCBtYWtlU3RyaW5nKCJvcGVyYXRvci4iLCBzdHJ1Y3R1cmVFbGVtZW50
Lm5hbWUoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikp
OwpAQCAtNTYsOCArNTYsOCBAQCBib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJv
Z3JhbSYgcHJvZ3JhbSkKIAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIFRoZSBz
ZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQotICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVu
dC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmlu
aXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Ci0gICAgICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24yKExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IHsgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJh
dGlvbjEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRv
a2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9r
ZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAgICBhdXRv
IHZhcmlhYmxlRGVjbGFyYXRpb24yID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CkBAIC02OSw3ICs2OSw3
IEBAIGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQog
ICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQKICAgICAgICAgICAgIGF1
dG8gY3JlYXRlQW5kZXIgPSBbJl0oQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAtPiBB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gewogICAgICAgICAgICAgICAgIGF1dG8gYXJn
dW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4o
c3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RydWN0
dXJlRGVmaW5pdGlvbikpOwotICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdp
bigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RGTW92ZShhcmd1bWVudFR5cGUpIH0sIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgYXV0byB2
YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkp
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAg
ICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+
KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRkcmVzc1NwYWNlLCBz
dHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCmluZGV4IGVkMmU4YzAwNTJk
NmRmZTliZDA3YmFmNzY0OWQ4Y2U0OGM5YjA5YmIuLjJmMjAxNTJjYWI3YWQxYzc4MjZiYTNkMjE1
MTdhNGVjMDllYWVlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMVmlzaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpUcmFwJikKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCiB7CiAg
ICAgZm9yIChhdXRvJiB2YXJpYWJsZURlY2xhcmF0aW9uIDogdmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQudmFyaWFibGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KHZhcmlhYmxlRGVjbGFyYXRpb24pOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFy
aWFibGVEZWNsYXJhdGlvbi5nZXQoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpX
aGlsZUxvb3AmIHdoaWxlTG9vcCkKQEAgLTU4OSwxNyArNTg5LDE3IEBAIHZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCiAK
IHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBt
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdCht
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiB9CiAKIHZv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVy
RXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNz
aW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNz
aW9uLmxlZnRWYWx1ZSgpKTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgp
KTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRW
YWx1ZSgpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5uZXdWYWx1ZSgpKTsKICAgICBpZiAocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1
ZUV4cHJlc3Npb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNzFjZmYxYjExYjI3MGE1NTM5YWMyNDRm
NWU1ZDMxZWMyNmQ1YjA4Mi4uYjFlNzNhMjBhNDJmNDI1ZmNhMDQyOTE0NjIwNTU4NTQ2ZDdjOTlm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKQEAgLTM0OSw2ICszNDksNyBAQCBNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMSW50ZWdlckxpdGVyYWwuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNp
Z25lZEludGVnZXJMaXRlcmFsLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJl
LmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAogTW9k
dWxlcy93ZWJncHUvV2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3VwLmNw
cAogTW9kdWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvci5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyZTUy
OWRjNDI0OTYxNDJjOTE5NTEzNGE3YjY1N2QzY2I4MTA4OTY0Li42MjE5NWY3YWNmOTRiYWViZTU3
ZDcwMTNkMjU3Yjg0OTE5NzQyYWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDc5LDYgKzY0NzksOCBAQAogCQkxQ0EwQzJF
QzIxRUVENkY2MDBBMTE4NjAgLyogV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQ0ExOUUwMzBEQzI1NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRXZlbnRMb29wTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUxNTBEQzI1NUNBMDA2NUE5OTQg
LyogRXZlbnRMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50TG9v
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0FBODJGNjIyNDJBRTA1MDBFODRC
QkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNM
UHJvcGVydHlSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQUE4
MkY3MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDQUYzNDdFMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDdGMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRP
YmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3Jp
cHRPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDgwMEE2QzQw
NTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI1ODE1LDYgKzI1ODE3LDggQEAKIAkJCQlDMjRBNTdCQTIxRkVBRkVB
MDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmNwcCAqLywKIAkJCQlDMjRBNTdCQjIxRkVBRkVBMDA0
QzZERDEgLyogV0hMU0xQcmVwYXJlLmggKi8sCiAJCQkJQzIxQkY3M0EyMUNEOEQ3MDAwMjI3OTc5
IC8qIFdITFNMUHJvZ3JhbS5oICovLAorCQkJCTFDQUE4MkY2MjI0MkFFMDUwMEU4NEJCQiAvKiBX
SExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwICovLAorCQkJCTFDQUE4MkY3MjI0MkFFMDUwMEU4NEJC
QiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCAqLywKIAkJCQkxQ0EwQzJFMDIxRUVCNUY1MDBB
MTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2VyLmNwcCAqLywKIAkJCQkxQ0EwQzJERTIxRUVC
NUY0MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2VyLmggKi8sCiAJCQkJQzIzNEE5QUQy
MUU5MkMxOTAwM0M5ODREIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365648</attachid>
            <date>2019-03-21 16:58:43 -0700</date>
            <delta_ts>2019-03-21 17:18:25 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190321165842.patch</filename>
            <type>text/plain</type>
            <size>120334</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ2NDA4ZmE1M2M1ODg1
ZjBkYThkZTc3OTNiZDRhNDQ3N2Q4ZmE2Ny4uYTRmNTg0NTMxNWI3YzQzNDdmZTMyY2YxNWNiYzdm
MDYzYThhNTNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTAzLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDMt
MTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwYXJlbnRp
bmcgZHVyaW5nIGEgbXV0YXRpb24gZXZlbnQgaW5zaWRlIGFwcGVuZENoaWxkIGNvdWxkIHJlc3Vs
dCBpbiBhIGNpcmN1bGFyIERPTSB0cmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCmluZGV4IDRhNmQ3
YzQ2OTVkYzRjYWM4MjkwNTRlNDA1NTU3ODc2NTE3NWY4NjMuLmQ0MzZkNjg5Yzc4ZTA0MGM1ZmRk
Y2UzOTYwZjM4ZjQzMDE1MGIyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICs0Myw3
MCBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAogfTsK
IAorc3RydWN0IExlZnRWYWx1ZSB7CisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKK307
CisKK3N0cnVjdCBBYnN0cmFjdExlZnRWYWx1ZSB7Cit9OworCitzdHJ1Y3QgUmlnaHRWYWx1ZSB7
Cit9OworCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCitj
bGFzcyBUeXBlQW5ub3RhdGlvbiB7CitwdWJsaWM6CisgICAgVHlwZUFubm90YXRpb24oKQorICAg
ICAgICA6IG1fZW1wdHkodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24o
TGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBU
eXBlQW5ub3RhdGlvbihBYnN0cmFjdExlZnRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIodikK
KyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oUmlnaHRWYWx1ZSB2KQorICAgICAg
ICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oY29uc3Qg
VHlwZUFubm90YXRpb24mKSA9IGRlZmF1bHQ7CisgICAgVHlwZUFubm90YXRpb24oVHlwZUFubm90
YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgVHlwZUFubm90YXRpb24mIG9wZXJhdG9y
PShjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBlQW5ub3RhdGlvbiYg
b3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9uJiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIE9wdGlv
bmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFkZHJlc3NTcGFjZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIW1fZW1wdHkpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxM
ZWZ0VmFsdWU+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PExlZnRWYWx1
ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIH0KKworICAgIGJvb2wgaXNSaWdodFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJp
Z2h0VmFsdWU+KG1faW5uZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNp
dG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6
dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0cmFjdExl
ZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigpKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0
eSk7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW5uZXIpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWYXJpYW50PExlZnRWYWx1ZSwgQWJzdHJhY3RMZWZ0VmFsdWUsIFJp
Z2h0VmFsdWU+IG1faW5uZXI7CisgICAgYm9vbCBtX2VtcHR5IHsgZmFsc2UgfTsKK307CisKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgKaW5kZXggYjEyMWZiNmMx
ZTFkMTc5MjYxNWQ5YmIwMjc0ZmUyMzU4OGE3ZjJiNS4uNzk0MTVlMmZmMzAzMDI5MTA2YjViZjQx
OTc2N2ViNTk5OGYwZTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5o
CkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24mIGxlZnQoKSB7IHJl
dHVybiBtX2xlZnQ7IH0KICAgICBFeHByZXNzaW9uJiByaWdodCgpIHsgcmV0dXJuIG1fcmlnaHQ7
IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiB0YWtlUmlnaHQoKSB7IHJldHVybiBXVEZN
b3ZlKG1fcmlnaHQpOyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1f
bGVmdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBiN2FiMjBjZWQyYzQ1M2Y5NWYxYzJlM2VmYzI4
MWZkYTQ4ZTVjM2FkLi4zMThhODEwNjE2M2RiODdlODVlZjQ4MWVjODg3ZDlkNmM1YzI5Y2MxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xF
eHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRXhwcmVzc2lvbi5oCkBAIC02NSwxMiArNjUsMTIgQEAgcHVibGljOgogICAgICAgICBt
X3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAgIH0KIAotICAgIGNvbnN0IE9wdGlvbmFsPEFkZHJl
c3NTcGFjZT4mIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9
CisgICAgY29uc3QgVHlwZUFubm90YXRpb24qIHR5cGVBbm5vdGF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlQW5ub3RhdGlvbiA/ICYqbV90eXBlQW5ub3RhdGlvbiA6IG51bGxwdHI7IH0KIAot
ICAgIHZvaWQgc2V0QWRkcmVzc1NwYWNlKE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFkZHJlc3NT
cGFjZSkKKyAgICB2b2lkIHNldFR5cGVBbm5vdGF0aW9uKFR5cGVBbm5vdGF0aW9uJiYgdHlwZUFu
bm90YXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoIW1fYWRkcmVzc1NwYWNlKTsKLSAgICAg
ICAgbV9hZGRyZXNzU3BhY2UgPSBhZGRyZXNzU3BhY2U7CisgICAgICAgIEFTU0VSVCghbV90eXBl
QW5ub3RhdGlvbik7CisgICAgICAgIG1fdHlwZUFubm90YXRpb24gPSBXVEZNb3ZlKHR5cGVBbm5v
dGF0aW9uKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBc3NpZ25tZW50RXhwcmVzc2lv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJl
ZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsKLSAgICBPcHRpb25hbDxBZGRyZXNzU3BhY2U+IG1fYWRk
cmVzc1NwYWNlOworICAgIE9wdGlvbmFsPFR5cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5vdGF0aW9u
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKaW5kZXggNjMxNmY1NGUxNjMyNmI0YTQ4M2ZhODcyZTFm
NDdiYjA0OGVkZjg4ZS4uNzcwY2Y4YmE5ZjI1MjcyNmY2OWMxYWU2ZGU1ZWE0YTViMTJiZjc3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaApA
QCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4
cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAg
ICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUo
V1RGTW92ZShsVmFsdWUpKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVl
KSkKICAgICB7CiAgICAgfQogCkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc01ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xWYWx1ZTsg
fQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9CiAK
IHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAgIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TWFrZVBvaW50ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAppbmRleCA3YjA1MmI2ZDVmMjg4
N2Y1OTJkZjQ0ZmQ5NDA5YzRmYTk1MjAzYWE4Li4zNDYwNGQ1NmFlY2M0YjYzMGQ3YTdlNmY3OTZi
OWM4NTM0N2NlMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaApA
QCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZVBvaW50ZXJFeHBy
ZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIE1ha2VQb2ludGVyRXhw
cmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxW
YWx1ZSkKKyAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihX
VEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQorICAg
ICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVlKSkKICAgICB7CiAgICAgfQogCkBA
IC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01ha2VQb2ludGVyRXhwcmVz
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24m
IGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVl
KCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8RXhw
cmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5oCmluZGV4IDJlYzM0ZTE1ZDhhNDBlNWFkMmUyYmY4OTY4MGMyMWMzMzQ0
Yzk5ODguLjAzYWRkZGM3NjNiN2Y4MWRjNzRkY2VmNjk0ZjY0NmNmMjlkZWJkZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCkBAIC01OSwyNyArNTksNTYg
QEAgcHVibGljOgogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiYgcG9zc2libGVHZXRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxl
R2V0T3ZlcmxvYWRzOyB9CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZVNldE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9z
c2libGVTZXRPdmVybG9hZHM7IH0KICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlQW5kT3ZlcmxvYWRzKCkgeyByZXR1cm4g
bV9wb3NzaWJsZUFuZE92ZXJsb2FkczsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1
bmN0aW9uKCkgeyByZXR1cm4gbV9nZXRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRp
b24qIGFuZEZ1bmN0aW9uKCkgeyByZXR1cm4gbV9hbmRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9u
RGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uKCkgeyByZXR1cm4gbV90aHJlYWRBbmRGdW5j
dGlvbjsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIHNldEZ1bmN0aW9uKCkgeyByZXR1cm4g
bV9zZXRGdW5jdGlvbjsgfQogCiAgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fkcyhjb25z
dCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IG92ZXJsb2FkcykKICAgICB7CiAgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMgPSBvdmVy
bG9hZHM7CiAgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29uc3QgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVy
bG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRz
OworICAgIH0KICAgICB2b2lkIHNldFBvc3NpYmxlU2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRz
KQogICAgIHsKICAgICAgICAgbV9wb3NzaWJsZVNldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKICAg
ICB9Ci0gICAgdm9pZCBzZXRQb3NzaWJsZUFuZE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKKwor
ICAgIHZvaWQgc2V0R2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb24p
CiAgICAgewotICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAg
ICAgICBtX2dldEZ1bmN0aW9uID0gZ2V0RnVuY3Rpb247CisgICAgfQorCisgICAgdm9pZCBzZXRB
bmRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbikKKyAgICB7CisgICAg
ICAgIG1fYW5kRnVuY3Rpb24gPSBhbmRGdW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldFRo
cmVhZEFuZEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uKQor
ICAgIHsKKyAgICAgICAgbV90aHJlYWRBbmRGdW5jdGlvbiA9IHRocmVhZEFuZEZ1bmN0aW9uOwor
ICAgIH0KKworICAgIHZvaWQgc2V0U2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0
RnVuY3Rpb24pCisgICAgeworICAgICAgICBtX3NldEZ1bmN0aW9uID0gc2V0RnVuY3Rpb247CiAg
ICAgfQogCiAgICAgRXhwcmVzc2lvbiYgYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiYmIHRha2VCYXNlKCkgeyByZXR1cm4gV1RGTW92ZShtX2Jhc2Up
OyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fYmFzZTsKICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9w
b3NzaWJsZUdldE92ZXJsb2FkczsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsKICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3Nz
aWJsZUFuZE92ZXJsb2FkczsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX2dldEZ1bmN0aW9u
IHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fYW5kRnVuY3Rpb24geyBu
dWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV90aHJlYWRBbmRGdW5jdGlvbiB7
IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX3NldEZ1bmN0aW9uIHsgbnVs
bHB0ciB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKaW5kZXggNzlkOGQwZjcwOGU4ZDA1NzgzMTJjODE3OTRl
ODhlZGFmMzQ4N2NmOS4uMzgxZGU5ZTQzYTc4MTExNmM2ZWU3Nzk4MDdmNDg3NWI5NWYzNTVhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaApAQCAtNDEs
MTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogLyoKLSAq
ICAxLiBFdmFsdWF0ZSBtX2xWYWx1ZQorICogIDEuIEV2YWx1YXRlIG1fbGVmdFZhbHVlCiAgKiAg
Mi4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9vbGRWYWx1ZQogICogIDMuIEV2YWx1YXRlIG1fbmV3
VmFsdWVFeHByZXNzaW9uCiAgKiAgNC4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9uZXdWYWx1ZQot
ICogIDUuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1fbFZhbHVlCisgKiAgNS4gQXNzaWduIHRoZSBy
ZXN1bHQgdG8gbV9sZWZ0VmFsdWUKICAqICA2LiBFdmFsdWF0ZSBtX3Jlc3VsdEV4cHJlc3Npb24K
ICAqICA3LiBSZXR1cm4gdGhlIHJlc3VsdAogICovCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9s
VmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1
ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRW
YWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9u
ZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24qIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJu
IG1fbmV3VmFsdWVFeHByZXNzaW9uID8gJiptX25ld1ZhbHVlRXhwcmVzc2lvbiA6IG51bGxwdHI7
IH0KQEAgLTk0LDE1ICs5NCwxNSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNs
YXNzIFUsIGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gV1RGOjptYWtlVW5pcXVl
UmVmKEFyZ3MmJi4uLik7CiAKLSAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxWYWx1ZSkKKyAgICBSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJl
c3Npb24+IGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmln
aW4pKQotICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKKyAgICAgICAgLCBtX2xl
ZnRWYWx1ZShXVEZNb3ZlKGxlZnRWYWx1ZSkpCiAgICAgICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKICAgICAgICAgLCBtX25ld1ZhbHVlKFdURk1vdmUob3Jp
Z2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCkKICAgICB7CiAgICAgfQogCi0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+
IG1fbFZhbHVlOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKICAgICBW
YXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBt
X25ld1ZhbHVlOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9uZXdWYWx1
ZUV4cHJlc3Npb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKaW5kZXggMTk4
MjRmOTQwNTRlNGIzYjdkN2NmMjRmNjNjMDExOWI4YTYzZjRmYi4uZTUwYWFhZGRlNzg4ZjRlZDg5
ZTljMjZiZjQ0NjM5YzIxNDA0OWNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRp
b24uaApAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxF
eHByZXNzaW9uPj4gbV9pbml0aWFsaXplcjsKIH07CiAKLXVzaW5nIFZhcmlhYmxlRGVjbGFyYXRp
b25zID0gVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+OwordXNpbmcgVmFyaWFibGVEZWNsYXJh
dGlvbnMgPSBWZWN0b3I8VW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+PjsKIAogfSAvLyBu
YW1lc3BhY2UgQVNUCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudC5oCmluZGV4IGU4ZTFmYzdmNWIyMzhkYmIwNDAzZTlmNDAyNzgwNGE3MGE3ZTg4
MWMuLjA5YTAyZDAxZjQ5Njg0YWI5NjNlZjg3MjViMDQ1MmQ1YTM4ZWRmNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaApAQCAtNDAsNyAr
NDAsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50IHsKIHB1YmxpYzoKLSAgICBWYXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFZlY3RvcjxWYXJpYWJsZURlY2xh
cmF0aW9uPiYmIHZhcmlhYmxlRGVjbGFyYXRpb25zKQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiB2
YXJpYWJsZURlY2xhcmF0aW9ucykKICAgICAgICAgOiBTdGF0ZW1lbnQoV1RGTW92ZShvcmlnaW4p
KQogICAgICAgICAsIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMoV1RGTW92ZSh2YXJpYWJsZURlY2xh
cmF0aW9ucykpCiAgICAgewpAQCAtNTMsMTAgKzUzLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiYgdmFyaWFibGVEZWNs
YXJhdGlvbnMoKSB7IHJldHVybiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9y
PFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPj4mIHZhcmlhYmxlRGVjbGFyYXRpb25zKCkg
eyByZXR1cm4gbV92YXJpYWJsZURlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgotICAgIFZlY3Rv
cjxWYXJpYWJsZURlY2xhcmF0aW9uPiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOworICAgIFZhcmlh
YmxlRGVjbGFyYXRpb25zIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcApp
bmRleCA2MjRjNTYyZTUxY2E2MGM2ZWY4ZGUyOGFmZWJhYzUxNGYyYmUwZGJkLi4xYTAwNTNjOWM0
ZDRjNjY2ZmU1ODNjMTIxNjhlOTE3MmVkZjI2NjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xF
bnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCkBAIC0xODgsOSArMTg4LDkgQEAgU3RyaW5nIEVudHJ5
UG9pbnRTY2FmZm9sZGluZzo6bWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkK
ICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uKiBz
dHJ1Y3R1cmVEZWZpbml0aW9uID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAobV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLm5hbWUoKSA9PSBwYXRo
WzBdKSB7CisgICAgICAgIGlmIChtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0t
Pm5hbWUoKSA9PSBwYXRoWzBdKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
X3BhcmFtZXRlclZhcmlhYmxlc1tpXSk7Ci0gICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBt
X2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLT51bmlmeU5vZGUoKTsK
KyAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6
Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlw
ZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAgICAgICAgICAg
IGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCkBAIC0yNDksNyAr
MjQ5LDcgQEAgU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5k
TmFtZWRCdWlsdElucygpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
LnNpemUoKTsgKytpKQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1f
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpW2ldLnR5cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCptX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5
cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fbGF5b3V0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8g
dmFyaWFibGVOYW1lID0gbV9uYW1lZEJpbmRHcm91cHNbaV0udmFyaWFibGVOYW1lOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5j
dGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAppbmRleCAyZmMxNDY1ODYxNmM5ODljYTIxN2M2OTI4
MmFlODZkYzQ4NzE5ZjA4Li5kYWY1ODQ5OGFiZjliYWZiZjZmYmM1YzljZTljM2NlMDIwMGU1ZDU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEZ1bmN0aW9uV3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAo
aSkKICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKTsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpKTsKICAgICB9CiAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwogfQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uCiAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlck5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJp
YWJsZU1hcHBpbmcuYWRkKCZwYXJhbWV0ZXIsIHBhcmFtZXRlck5hbWUpOwogICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKnBhcmFtZXRlci50eXBlKCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKnBhcmFtZXRlci0+dHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJOYW1l
KSk7CiAgICAgICAgIH0KICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7XG4iKTsK
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsK
QEAgLTU3MCw3ICs1NzAsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlcwogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAg
ICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgdm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbiYgbWFrZUFycmEKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7
Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KSk7CiAgICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1h
a2VQb2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRp
dmVGdW5jdGlvbldyaXRlci5jcHAKaW5kZXggNjk3MmU5ODkwNTBhOWExYjdkYTgxMWE4N2MzM2Mz
M2QxZTRlZDI5Yy4uMzQwNjVlNThjMTczYTZjODEyNjRlYjdkZTM1ZDQ5ZjUxOTZmODYyMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xO
YXRpdmVGdW5jdGlvbldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAKQEAgLTExMSw4ICsx
MTEsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICB9CiAKICAgICAgICAgQVNT
RVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsK
LSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
OwotICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byYg
cGFyYW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHBh
cmFtZXRlclR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBwYXJhbWV0ZXJOYW1lZFR5cGUgPSBk
b3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgICAgICBpZiAo
aXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBhcmFtZXRlck5hbWVkVHlwZSkpIHsKQEAg
LTEzNCw3ICsxMzQsNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvci52YWx1ZSIpIHsKICAgICAg
ICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9
PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBv
dXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHgpIHtcbiIpKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBzdGF0
aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIikpOwpAQCAtMTQ1LDggKzE0NSw4
IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiKSB7CiAgICAgICAgIEFTU0VSVF9VTlVT
RUQoaW50cmluc2ljcywgbWF0Y2hlcyhuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSwg
aW50cmluc2ljcy51aW50VHlwZSgpKSk7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byYgcGFy
YW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5vZGUo
KTsKICAgICAgICAgQVNTRVJUKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHBhcmFtZXRlclR5cGUpKTsK
ICAgICAgICAgYXV0byYgdW5uYW1lZFBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPihwYXJhbWV0ZXJUeXBlKTsKICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1
bm5hbWVkUGFyYW1ldGVyVHlwZSkpIHsKQEAgLTE2Nyw4ICsxNjcsOCBAQCBTdHJpbmcgd3JpdGVO
YXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFy
dHNXaXRoKCJvcGVyYXRvci4iX3N0cikpIHsKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKICAgICAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwot
ICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlw
ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAg
ICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5zdWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0
aCgpIC0gMSk7CkBAIC0xODAsNyArMTgwLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24o
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAg
ICAgICAgfQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
dHlwZSgpKTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0
cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iKSk7CkBA
IC0xOTEsNyArMTkxLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIl9zdHIp
KSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgp
KTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1
bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIikpOwpAQCAtMjAy
LDggKzIwMiw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW10iKSB7CiAgICAgICAgIEFTU0VS
VChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0g
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7
Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUo
KSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50
eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywg
b3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwgbWV0
YWxQYXJhbWV0ZXIyTmFtZSwgIiBpKSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbVtpXTtcbiIpKTsKQEAgLTIxMyw4ICsyMTMsOCBA
QCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Cisg
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
OwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBhdXRvIGZp
ZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3Bl
cmF0b3ImW10uIl9zdHIubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtc
biIpKTsKQEAgLTIyNSw5ICsyMjUsOSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAg
aWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpIHsK
ICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNp
emUoKSA9PSAzKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMl0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
M05hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVy
bk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
ZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1l
dGVyMU5hbWUsICIgbSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFt
ZXRlcjNOYW1lLCAiIHYpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiICAgIG1baV0gPSB2O1xuIikpOwpAQCAtMjM5LDcgKzIzOSw3IEBAIFN0cmluZyB3
cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaXNPcGVy
YXRvcigpKSB7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVu
Z3RoKCkpOwotICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5
cGUoKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFs
UmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJO
YW1lLCAiIHgpIHtcbiIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoIiAgICByZXR1cm4gIiwgb3BlcmF0b3JOYW1lLCAieDtcbiIpKTsKQEAgLTI0OSw4ICsy
NDksOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CiAgICAgICAgIGF1
dG8gb3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3Ry
aW5nKCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
cjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRv
IG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtc
biIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVy
biB4ICIsIG9wZXJhdG9yTmFtZSwgIiB5O1xuIikpOwpAQCAtMjgzLDcgKzI4Myw3IEBAIFN0cmlu
ZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhc3VpbnQiCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhc2Zsb2F0IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0
YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRh
bFBhcmFtZXRlck5hbWUsICIgeCkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSksICIoeCk7XG4iKSk7CkBAIC0yOTMsOCArMjkzLDggQEAgU3Ry
aW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAicG93IiB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
YXRhbjIiKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIx
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJl
dHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFy
YW1ldGVyMU5hbWUsICIgeCwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iKSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksICIoeCwgeSk7XG4iKSk7CkBAIC0zMzYsMTQg
KzMzNiwxNCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJJbnRlcmxvY2tlZCJfc3RyKSkgewogICAg
ICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkludGVybG9ja2Vk
Q29tcGFyZUV4Y2hhbmdlIikgewogICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIEFTU0VSVChp
czxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKSk7Ci0gICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9
IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRl
clR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgp
KSk7CisgICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9
IGZpcnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAgYXV0byBm
aXJzdEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RB
cmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZEFy
Z3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gdGhpcmRB
cmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8
QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzNdLnR5cGUoKSkpOwotICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0g
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzNdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnQg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBv
aW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5
cGUoKSkpOworICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0gZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzNdLT50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1bWVudEFkZHJlc3NT
cGFjZSA9IGZvdXJ0aEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgICAg
IGF1dG8gZm91cnRoQXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZShmb3VydGhBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwg
JygnLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcs
IGZpcnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIGNv
bXBhcmUsICIsIHRoaXJkQXJndW1lbnQsICIgZGVzaXJlZCwgIiwgY29udmVydEFkZHJlc3NTcGFj
ZShmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZm91cnRoQXJndW1lbnRQb2ludGVl
LCAiKiBvdXQpIHtcbiIpKTsKQEAgLTM1NCwxMyArMzU0LDEzIEBAIFN0cmluZyB3cml0ZU5hdGl2
ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOwotICAgICAgICBBU1NFUlQoaXM8QVNUOjpQ
b2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKSkpOwotICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKTsKKyAgICAgICAgYXV0
byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAg
IGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1lbnRQb2ludGVyLmFk
ZHJlc3NTcGFjZSgpOwogICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgp
KTsKLSAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7
Ci0gICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgpKSk7Ci0gICAgICAgIGF1dG8mIHRoaXJkQXJn
dW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gc2Vjb25k
QXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzPEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsy
XS0+dHlwZSgpKSk7CisgICAgICAgIGF1dG8mIHRoaXJkQXJndW1lbnRQb2ludGVyID0gZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzJdLT50eXBlKCkpOwogICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnRBZGRyZXNzU3BhY2Ug
PSB0aGlyZEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgYXV0byB0aGly
ZEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodGhpcmRBcmd1
bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgIGF1dG8gbmFtZSA9IGF0b21pY05h
bWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJJbnRlcmxvY2tl
ZCJfc3RyLmxlbmd0aCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
CmluZGV4IDYxZDM0OGFmMTU5NjYyM2FmNGMzNzk4ZWE5OTgxZjk0YTQxNjk1NjUuLjI2M2U4Mjhi
ZjY1MWJmYTQ2ZTZlZWZjY2JhOTFiOWViNmUxNTNjOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBs
aWNhdGVGdW5jdGlvbnMuY3BwCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGJvb2wgc2FtZSA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2sp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKClba10udHlwZSgpLCAqZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50
eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpW2tdLT50eXBlKCksICpmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVy
cygpW2tdLT50eXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtODAsOCArODAs
OCBAQCBib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0p
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFt
ZSgpID09ICJvcGVyYXRvciZbXSIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMgotICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0
YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpKSkgewotICAgICAgICAgICAgYXV0byYgdHlwZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFt
ZXRlcnMoKVsxXS50eXBlKCkpOworICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5
cGUgPSBzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpU
eXBlUmVmZXJlbmNlPih0eXBlKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvbHZl
ZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlwZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4oKnJlc29sdmVkVHlwZSkpIHsKQEAgLTkyLDE0ICs5MiwxNCBAQCBib29sIGNoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1l
KCkgPT0gIm9wZXJhdG9yLmxlbmd0aCIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMQotICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkKLSAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlU
eXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkpKQorICAgICAgICAgICAgICAgICAgICYmIChp
czxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVk
VHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKQorICAg
ICAgICAgICAgICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlwZT4oc3RhdGljX2Nhc3Q8Y29u
c3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGVsc2UgaWYg
KGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCiAgICAgICAgICAgICAm
JiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCi0gICAgICAgICAg
ICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1l
ZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQotICAg
ICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6
OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgp
KSkKLSAgICAgICAgICAgICYmIG1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpLCAqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkp
KQorICAgICAgICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0
PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBl
PihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCisgICAgICAgICAgICAgICAgICYmIG1hdGNoZXMo
KmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSwgKmZ1bmN0aW9uc1tp
XS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKaW5kZXggMTM2NWYyNmQxMjM0ODIw
MDBlZTc0MDQ3Y2IzMjFlODAyYjJjNjA4My4uNDY5ZmFjNmY4ZmRiMzZmNWU3YzczMzQwOWViNWE0
Y2JhMWNkY2NkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC0xMjIsOCArMTIyLDggQEAgc3RhdGljIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKEFT
VDo6Q2FsbEUKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAgIGF1dG8gcmV0
dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGNh
bGxFeHByZXNzaW9uLm9yaWdpbigpKSwgZmlyc3RBcmd1bWVudC5hZGRyZXNzU3BhY2UoKSwgZmly
c3RBcmd1bWVudC5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIHsgZmlyc3RBcmd1bWVudC5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51
bGxvcHQsIFdURjo6bnVsbG9wdCkpOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNh
bGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSB9LCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZCht
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcGFyYW1l
dGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVy
OjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWludFR5cGUoKSkpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKICAgICByZXR1cm4gQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51
bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMTMyLDcgKzEzMiw3IEBAIHN0YXRpYyBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aChBU1Q6
OkNhbGxFeHByZXNzCiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBhdXRv
IHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUoKSB9LCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZCht
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CiAgICAgcmV0dXJu
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3Iu
bGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVy
cyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0xNTMsOCArMTUzLDggQEAg
c3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aFJlZmVyZW5j
ZUNvbXBhcmF0b3IoQVNUOjpDYWxsRXgKICAgICAgICAgfSkpOwogICAgIH0pKTsKICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQo
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGFyZ3VtZW50VHlwZS0+Y2xvbmUoKSB9LCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVu
ZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RGTW92ZShhcmd1bWVudFR5cGUpIH0sIFN0
cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4o
Y2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgYXJndW1lbnRUeXBl
LT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBw
YXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4o
TGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKICAgICByZXR1cm4gQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0yMDMsOCArMjAzLDggQEAgc3RhdGljIE9wdGlvbmFs
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihB
U1Q6OkNhbGwKICAgICAgICAgYXV0byByaWdodEFjY2VwdGFiaWxpdHkgPSBhY2NlcHRhYmlsaXR5
KHR5cGVzWzFdLmdldCgpKTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAg
IGlmIChsZWZ0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMgJiYgcmlnaHRBY2Nl
cHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcykgewotICAgICAgICAgICAgYXV0byYgdW5u
YW1lZFR5cGUxID0gdHlwZXNbMF0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKLSAgICAgICAgICAg
IGF1dG8mIHVubmFtZWRUeXBlMiA9IHR5cGVzWzFdLmdldCgpLmdldFVubmFtZWRUeXBlKCk7Cisg
ICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTEgPSAqdHlwZXNbMF0uZ2V0KCkuZ2V0VW5uYW1l
ZFR5cGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlMiA9ICp0eXBlc1sxXS5nZXQo
KS5nZXRVbm5hbWVkVHlwZSgpOwogICAgICAgICAgICAgc3VjY2VzcyA9IG1hdGNoZXModW5uYW1l
ZFR5cGUxLCB1bm5hbWVkVHlwZTIpOwogICAgICAgICB9IGVsc2UgaWYgKChsZWZ0QWNjZXB0YWJp
bGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXliZSAmJiByaWdodEFjY2VwdGFiaWxpdHkgPT0gQWNj
ZXB0YWJpbGl0eTo6WWVzKQogICAgICAgICAgICAgfHwgKGxlZnRBY2NlcHRhYmlsaXR5ID09IEFj
Y2VwdGFiaWxpdHk6OlllcyAmJiByaWdodEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6
TWF5YmUpKQpAQCAtMzA0LDE0ICszMDQsMTQgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92
ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAg
ICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJ
bmRleCA/IDIgOiAxOwogICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBhdXRvJiBmaXJzdFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAg
YXV0byYgZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpV
bm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUpKSB7CiAgICAgICAgICAgICBhdXRv
JiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0UGFyYW1ldGVy
VW5pZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxB
U1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2luZCA9PSBDaGVja0tpbmQ6OkluZGV4KSB7Ci0g
ICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVm
aW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAg
ICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFp
czxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKTsKQEAgLTMyOCwxNCAr
MzI4LDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgIHNpemVfdCBudW1FeHBl
Y3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAzIDogMjsKICAgICAg
ICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVj
dGVkUGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYg
Zmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVu
aWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+
dW5pZnlOb2RlKCk7CiAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3Vt
ZW50VW5pZnlOb2RlKSkgewogICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsKICAgICAgICAgICAg
IGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5
cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoa2luZCA9PSBDaGVja0tpbmQ6OkluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBzZWNvbmRQ
YXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0u
dHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJV
bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkt
PnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25k
UGFyYW1ldGVyVW5pZnlOb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25k
UGFyYW1ldGVyVW5pZnlOb2RlKTsKQEAgLTM0NSw5ICszNDUsOSBAQCBzdGF0aWMgYm9vbCBjaGVj
a09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9u
RGVmaW5pdAogICAgICAgICAgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNJbnQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFt
YXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksICpmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpWzBdLnR5cGUoKSkpCisgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbkRlZmlu
aXRpb24udHlwZSgpLCAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYgdmFsdWVUeXBlID0g
KmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0g
MV0udHlwZSgpOworICAgICAgICBhdXRvJiB2YWx1ZVR5cGUgPSAqZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKVtudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxXS0+dHlwZSgpOwogICAgICAg
ICBhdXRvIGdldHRlck5hbWUgPSBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLnN1YnN0cmluZygw
LCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLmxlbmd0aCgpIC0gMSk7CiAgICAgICAgIGF1dG8q
IGdldHRlckZ1bmNzID0gbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGdldHRlck5hbWUpOwogICAg
ICAgICBpZiAoIWdldHRlckZ1bmNzKQpAQCAtMzU1LDcgKzM1NSw3IEBAIHN0YXRpYyBib29sIGNo
ZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rp
b25EZWZpbml0CiAgICAgICAgIFZlY3RvcjxSZXNvbHZpbmdUeXBlPiBhcmd1bWVudFR5cGVzOwog
ICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYXJn
dW1lbnRUeXBlUmVmZXJlbmNlczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1F
eHBlY3RlZFBhcmFtZXRlcnMgLSAxOyArK2kpCi0gICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFw
cGVuZCgoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+Y2xvbmUo
KSk7CisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgoKmZ1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSktPmNsb25lKCkpOwogICAgICAgICBmb3IgKGF1dG8m
IGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50VHlwZXMpCiAgICAgICAgICAgICBhcmd1bWVudFR5cGVS
ZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5cGUpOwogICAgICAgICBhdXRvKiBvdmVybG9hZCA9
IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgqZ2V0dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJl
ZmVyZW5jZXMsIG51bGxwdHIpOwpAQCAtMzc4LDcgKzM3OCw3IEBAIHN0YXRpYyBib29sIGNoZWNr
T3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IHsKLSAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVu
aWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+
dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5
Tm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0byYg
dW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwpAQCAt
MzkyLDcgKzM5Miw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcisrIiB8
fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvci0tIikgewogICAgICAgICBy
ZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMQotICAgICAg
ICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBl
KCksIGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgICAgICAgICAgJiYgbWF0Y2hlcygq
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLCBmdW5jdGlvbkRlZmlu
aXRpb24udHlwZSgpKTsKICAgICB9CiAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkg
PT0gIm9wZXJhdG9yKyIgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3It
IikKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ID09IDEgfHwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMjsKQEAg
LTQ0NywxOSArNDQ3LDE4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBib29sIGNoZWNrU2hh
ZGVyVHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOwotICAgIHZvaWQgZmluaXNo
VmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYsIEFT
VDo6VW5uYW1lZFR5cGUmIHdyYXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVkVHlwZSogZXh0cmFB
cmd1bWVudFR5cGUgPSBudWxscHRyKTsKICAgICBib29sIGlzQm9vbFR5cGUoUmVzb2x2aW5nVHlw
ZSYpOwogICAgIHN0cnVjdCBSZWN1cnNlSW5mbyB7CiAgICAgICAgIFJlc29sdmluZ1R5cGUmIHJl
c29sdmluZ1R5cGU7Ci0gICAgICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiYgYWRkcmVz
c1NwYWNlOworICAgICAgICBBU1Q6OlR5cGVBbm5vdGF0aW9uJiB0eXBlQW5ub3RhdGlvbjsKICAg
ICB9OwotICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiByZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4
cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTFZhbHVlID0gZmFsc2UpOwotICAgIE9wdGlvbmFsPFJl
Y3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMVmFsdWUg
PSBmYWxzZSk7CisgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJlY3Vyc2VBbmRHZXRJbmZvKEFT
VDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CisgICAgT3B0
aW9uYWw8UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJl
c0xlZnRWYWx1ZSA9IGZhbHNlKTsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mKTsKICAgICBib29sIHJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoQVNUOjpFeHByZXNzaW9u
Jik7Ci0gICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBXVEY6Om51bGxv
cHQpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6
bnVsbG9wdCk7Ci0gICAgdm9pZCBmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZXNvbHZp
bmdUeXBlJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsKKyAg
ICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOworICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6
OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIEFTVDo6VHlw
ZUFubm90YXRpb24pOworICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVz
b2x2aW5nVHlwZSYsIEFTVDo6VHlwZUFubm90YXRpb24pOwogCiAgICAgdm9pZCB2aXNpdChBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKQEAgLTQ5NCw3ICs0OTMsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogCiAgICAg
SGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBSZXNvbHZpbmdUeXBlPiBtX3R5cGVNYXA7Ci0gICAg
SGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4+IG1f
YWRkcmVzc1NwYWNlTWFwOworICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgQVNUOjpUeXBl
QW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbnM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fdmVy
dGV4RW50cnlQb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZnJhZ21lbnRFbnRyeVBvaW50
czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9jb21wdXRlRW50cnlQb2ludHM7CkBAIC01MzgsOCAr
NTM3LDggQEAgYm9vbCBDaGVja2VyOjphc3NpZ25UeXBlcygpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX2FkZHJlc3NT
cGFjZU1hcCkKLSAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0QWRkcmVzc1NwYWNlKGtleVZh
bHVlUGFpci52YWx1ZSk7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX3R5cGVBbm5v
dGF0aW9ucykKKyAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0VHlwZUFubm90YXRpb24oV1RG
TW92ZShrZXlWYWx1ZVBhaXIudmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjIx
LDYgKzYyMCwxNyBAQCBzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
PiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbAogICAgIH0pKTsKIH0KIAorc3Rh
dGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gY29tbWl0KFJlc29sdmlu
Z1R5cGUmIHJlc29sdmluZ1R5cGUpCit7CisgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVk
VHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAg
IHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICBpZiAoIXJlc29sdmFibGVUeXBl
UmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGNvbW1pdChyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSk7
CisgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUo
KS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICB9KSk7Cit9CisKIHZvaWQgQ2hlY2tlcjo6
dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikK
IHsKICAgICBhdXRvKiBiYXNlVHlwZSA9IChbJl0oKSAtPiBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiogewpAQCAtNzI4LDI2ICs3MzgsMjYgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlR5
cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0
eXBlQXJndW1lbnQpOwogfQogCi1hdXRvIENoZWNrZXI6OnJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8
UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OnJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVz
c2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSkgLT4gT3B0aW9uYWw8UmVj
dXJzZUluZm8+CiB7CiAgICAgVmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lvbik7CiAgICAgaWYgKGVy
cm9yKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGdldEluZm8o
ZXhwcmVzc2lvbiwgcmVxdWlyZXNMVmFsdWUpOworICAgIHJldHVybiBnZXRJbmZvKGV4cHJlc3Np
b24sIHJlcXVpcmVzTGVmdFZhbHVlKTsKIH0KIAotYXV0byBDaGVja2VyOjpnZXRJbmZvKEFTVDo6
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8
UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OmdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBleHBy
ZXNzaW9uLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4K
IHsKICAgICBhdXRvIHR5cGVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZleHByZXNzaW9uKTsK
ICAgICBBU1NFUlQodHlwZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CiAKLSAgICBhdXRv
IGFkZHJlc3NTcGFjZUl0ZXJhdG9yID0gbV9hZGRyZXNzU3BhY2VNYXAuZmluZCgmZXhwcmVzc2lv
bik7Ci0gICAgQVNTRVJUKGFkZHJlc3NTcGFjZUl0ZXJhdG9yICE9IG1fYWRkcmVzc1NwYWNlTWFw
LmVuZCgpKTsKLSAgICBpZiAocmVxdWlyZXNMVmFsdWUgJiYgIWFkZHJlc3NTcGFjZUl0ZXJhdG9y
LT52YWx1ZSkgeworICAgIGF1dG8gdHlwZUFubm90YXRpb25JdGVyYXRvciA9IG1fdHlwZUFubm90
YXRpb25zLmZpbmQoJmV4cHJlc3Npb24pOworICAgIEFTU0VSVCh0eXBlQW5ub3RhdGlvbkl0ZXJh
dG9yICE9IG1fdHlwZUFubm90YXRpb25zLmVuZCgpKTsKKyAgICBpZiAocmVxdWlyZXNMZWZ0VmFs
dWUgJiYgdHlwZUFubm90YXRpb25JdGVyYXRvci0+dmFsdWUuaXNSaWdodFZhbHVlKCkpIHsKICAg
ICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9Ci0g
ICAgcmV0dXJuIHt7IHR5cGVJdGVyYXRvci0+dmFsdWUsIGFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52
YWx1ZSB9fTsKKyAgICByZXR1cm4ge3sgdHlwZUl0ZXJhdG9yLT52YWx1ZSwgdHlwZUFubm90YXRp
b25JdGVyYXRvci0+dmFsdWUgfX07CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtNzY3LDE5ICs3NzcsMzIg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxl
RGVjbGFyYXRpb24pCiAgICAgfQogfQogCi12b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpF
eHByZXNzaW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5h
bWVkVHlwZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKK3ZvaWQg
Q2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5
cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHVubmFtZWRUeXBlKSk7CiAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBhdXRv
IGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lv
biwgYWRkcmVzc1NwYWNlKTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fdHlw
ZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwog
ICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4
cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiBy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJl
c3NTcGFjZSkKK3ZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJl
c3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRW
YWx1ZSgpKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lv
biwgV1RGTW92ZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkpOwogICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VB
ZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFj
ZSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5h
ZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKKyAgICBBU1NFUlRfVU5V
U0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50
cnkpOworfQorCit2b2lkIENoZWNrZXI6OmZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhw
cmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlv
biB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQoreworICAgIHJlc29sdmluZ1R5
cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHBy
ZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVN
YXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJlZigpKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9KSk7CisgICAgYXV0
byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Np
b24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NT
cGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCkBA
IC03ODksNiArODEyLDExIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhw
cmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCiAgICAgaWYgKCFsZWZ0SW5mbykKICAgICAg
ICAgcmV0dXJuOwogCisgICAgaWYgKGxlZnRJbmZvLT50eXBlQW5ub3RhdGlvbi5pc1JpZ2h0VmFs
dWUoKSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgYXV0byByaWdodEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhhc3NpZ25tZW50RXhwcmVzc2lv
bi5yaWdodCgpKTsKICAgICBpZiAoIXJpZ2h0SW5mbykKICAgICAgICAgcmV0dXJuOwpAQCAtODAy
LDIzICs4MzAsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNz
aW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKICAgICBhc3NpZ25UeXBlKGFzc2lnbm1lbnRFeHBy
ZXNzaW9uLCBXVEZNb3ZlKCpyZXN1bHRUeXBlKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6Zm9yd2Fy
ZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlJiByZXNvbHZp
bmdUeXBlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlKQotewotICAg
IHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVN
YXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0sIFsmXShSZWZQdHI8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJlZigpKTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9
KSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5h
ZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRyZXNz
U3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLX0KLQog
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFu
ZEdldEluZm8ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSwgdHJ1ZSk7Ci0gICAg
aWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJ
bmZvKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCksIHRydWUpOworICAgIGlm
ICghbGVmdFZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IEZpZ3Vy
ZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJ3MgQW5v
bnltb3VzVmFyaWFibGVzLgpAQCAtODI3LDcgKzg0Miw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
KQogICAgIGlmICghbmV3VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1h
dGNoQW5kQ29tbWl0KGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+cmVz
b2x2aW5nVHlwZSkpIHsKKyAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KGxlZnRWYWx1ZUluZm8tPnJl
c29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSkpIHsKICAgICAgICAgc2V0
RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTg3MywzNyArODg4LDQzIEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUoZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+Y2xvbmUoKSwgcG9pbnRlclR5cGUtPmFk
ZHJlc3NTcGFjZSgpKTsKKyAgICBhc3NpZ25UeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9p
bnRlclR5cGUtPmNsb25lKCksIEFTVDo6TGVmdFZhbHVlIHsgcG9pbnRlclR5cGUtPmFkZHJlc3NT
cGFjZSgpIH0pOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHBy
ZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0g
cmVjdXJzZUFuZEdldEluZm8obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpLCB0cnVlKTsK
LSAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgYXV0byBsZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFu
ZEdldEluZm8obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLCB0cnVlKTsKKyAgICBp
ZiAoIWxlZnRWYWx1ZUluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbGVmdEFkZHJl
c3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2Uo
KTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKICAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGF1dG8qIGxWYWx1ZVR5cGUgPSBnZXRVbm5hbWVk
VHlwZShsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWxWYWx1ZVR5cGUpIHsK
KyAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobGVmdFZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVUeXBlKSB7CiAgICAgICAgIHNldEVy
cm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKG1ha2VQb2lu
dGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9r
ZW4obWFrZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUluZm8tPmFkZHJlc3NT
cGFjZSwgbFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAgIGFzc2lnblR5cGUobWFrZVBvaW50ZXJF
eHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbiht
YWtlUG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgbGVmdFZh
bHVlVHlwZS0+Y2xvbmUoKSkpOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsK
LSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhtYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgYXV0byBs
ZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbi5sZWZ0VmFsdWUoKSk7CisgICAgaWYgKCFsZWZ0VmFsdWVJbmZvKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvKiBsVmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobFZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFsVmFsdWVUeXBlKSB7CisgICAgYXV0byogbGVmdFZh
bHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOwor
ICAgIGlmICghbGVmdFZhbHVlVHlwZSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgYXV0byYgdW5pZnlOb2RlID0gbFZhbHVlVHlwZS0+dW5pZnlO
b2RlKCk7CisgICAgYXV0byYgdW5pZnlOb2RlID0gbGVmdFZhbHVlVHlwZS0+dW5pZnlOb2RlKCk7
CiAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKICAgICAgICAgYXV0
byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwog
ICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7CkBAIC05MTMs
NyArOTM0LDggQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3MKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmICghbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlKSB7Cisg
ICAgICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0
aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgaWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7
CiAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC05MjEsMTgzICs5NDMsMTEyIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzCiAgICAgICAg
IGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKSB7CiAgICAgICAgICAgICBhdXRv
JiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpOwogICAg
ICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KLSAgICAgICAg
ICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBhcnJheVR5
cGUudHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
TGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVm
dEFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIWxWYWx1ZUluZm8tPmFkZHJlc3NT
cGFjZSkgeworICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVB
bm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2Up
IHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFz
c2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBsVmFsdWVUeXBlLT5j
bG9uZSgpKSk7CisgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBt
YWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0
VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQ
cm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5cGUsIEFTVDo6VW5u
YW1lZFR5cGUqIGV4dHJhQXJndW1lbnRUeXBlKQordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRv
dEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7Ci0gICAgdXNpbmcgT3ZlcmxvYWRSZXNvbHV0
aW9uID0gc3RkOjp0dXBsZTxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBBU1Q6OlVubmFtZWRU
eXBlKj47Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1bmN0aW9uOwotICAg
IEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUoZ2V0RnVuY3Rp
b24sIGdldFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlvbiB7Ci0gICAg
ICAgIFJlc29sdmluZ1R5cGUgZ2V0QXJndW1lbnRUeXBlMSh3cmFwcGVkQmFzZVR5cGUuY2xvbmUo
KSk7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IGdldEFyZ3VtZW50VHlwZTI7Ci0g
ICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAgICAgICAgICAgIGdldEFyZ3VtZW50VHlw
ZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgpKTsKKyAgICBhdXRv
IGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oZG90RXhwcmVzc2lvbi5iYXNlKCkpOworICAg
IGlmICghYmFzZUluZm8pCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGJhc2VVbm5hbWVkVHlw
ZSA9IGNvbW1pdChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFiYXNlVW5uYW1l
ZFR5cGUpCisgICAgICAgIHJldHVybjsKIAorICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiog
Z2V0RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVyblR5
cGUgPSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+IGdldEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGdldEFyZ3VtZW50
VHlwZXMuYXBwZW5kKGdldEFyZ3VtZW50VHlwZTEpOwotICAgICAgICBpZiAoZ2V0QXJndW1lbnRU
eXBlMikKLSAgICAgICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpnZXRBcmd1bWVudFR5
cGUyKTsKLQotICAgICAgICBhdXRvKiBnZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwg
Z2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAgICAgIGlmICghZ2V0RnVuY3Rpb24pCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihnZXRGdW5jdGlvbiwgJmdldEZ1bmN0aW9uLT50eXBl
KCkpOwotICAgIH0pKCk7Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0
aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUo
YW5kRnVuY3Rpb24sIGFuZFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlv
biB7Ci0gICAgICAgIGF1dG8gY29tcHV0ZUFuZEFyZ3VtZW50VHlwZSA9IFsmXShBU1Q6OlVubmFt
ZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gewotICAgICAg
ICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHsgdW5uYW1lZFR5cGUuY2xvbmUoKSB9OwotICAgICAgICAgICAg
aWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHsgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBl
KS50eXBlKCkuY2xvbmUoKSkpIH07Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgICAgICAgICByZXR1cm4geyBSZXNvbHZpbmdUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2lu
dGVyVHlwZT4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSks
IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4o
dW5uYW1lZFR5cGUpLmNsb25lKCkpKSB9OwotICAgICAgICB9OwotICAgICAgICBhdXRvIGNvbXB1
dGVBbmRSZXR1cm5UeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBB
U1Q6OlVubmFtZWRUeXBlKiB7Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCk7Ci0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgfTsKLQotICAgICAgICBhdXRvIGFuZEFyZ3VtZW50VHlwZTEgPSBj
b21wdXRlQW5kQXJndW1lbnRUeXBlKHdyYXBwZWRCYXNlVHlwZSk7Ci0gICAgICAgIGlmICghYW5k
QXJndW1lbnRUeXBlMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRy
LCBudWxscHRyKTsKLSAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gYW5kQXJndW1lbnRU
eXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAgICAgICAgICAgYW5kQXJn
dW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOwor
ICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7
CisgICAgICAgIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4
cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwgZ2V0QXJndW1lbnRUeXBlcywgbnVsbHB0
cik7CisgICAgICAgIGlmIChnZXRGdW5jdGlvbikKKyAgICAgICAgICAgIGdldFJldHVyblR5cGUg
PSAmZ2V0RnVuY3Rpb24tPnR5cGUoKTsKKyAgICB9CiAKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIGFuZEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBhbmRS
ZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gYmFz
ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAgICBhdXRv
IGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRv
a2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgYmFzZVVubmFt
ZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFuZEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGFuZEFyZ3Vt
ZW50VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5cGUxKTsKLSAgICAgICAgaWYgKGFuZEFyZ3Vt
ZW50VHlwZTIpCi0gICAgICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZCgqYW5kQXJndW1l
bnRUeXBlMik7Ci0KLSAgICAgICAgYXV0byogYW5kRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25P
dmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRz
KCksIGFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIWFuZEZ1bmN0aW9u
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOwot
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYW5kRnVuY3Rpb24sIGNvbXB1dGVBbmRSZXR1
cm5UeXBlKGFuZEZ1bmN0aW9uLT50eXBlKCkpKTsKLSAgICB9KSgpOworICAgICAgICBhbmRBcmd1
bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIGFuZEZ1
bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2li
bGVBbmRPdmVybG9hZHMoKSwgYW5kQXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlm
IChhbmRGdW5jdGlvbikKKyAgICAgICAgICAgIGFuZFJldHVyblR5cGUgPSAmZG93bmNhc3Q8QVNU
OjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8gRklY
TUU6IEVuZm9yY2UgdGhlIHJldHVybiBvZiBhbmRlcnMgd2lsbCBhbHdheXMgYmUgYSBwb2ludGVy
CisgICAgfQorCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRGdW5jdGlv
biA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogdGhyZWFkQW5kUmV0dXJuVHlwZSA9
IG51bGxwdHI7CisgICAgeworICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkp
LCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlVW5uYW1lZFR5cGUtPmdldCgpLmNsb25l
KCkpOworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4gdGhyZWFkQW5kQXJndW1lbnRUeXBlczsKKyAgICAgICAgdGhyZWFkQW5kQXJndW1lbnRUeXBl
cy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgICAgICB0aHJlYWRBbmRGdW5j
dGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3NpYmxl
QW5kT3ZlcmxvYWRzKCksIHRocmVhZEFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAg
ICBpZiAodGhyZWFkQW5kRnVuY3Rpb24pCisgICAgICAgICAgICB0aHJlYWRBbmRSZXR1cm5UeXBl
ID0gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHRocmVhZEFuZEZ1bmN0aW9uLT50eXBlKCkp
LmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJzIHdp
bGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgIH0KIAotICAgIGlmICghZ2V0UmV0dXJuVHlwZSAm
JiAhYW5kUmV0dXJuVHlwZSkgeworICAgIGlmICghZ2V0RnVuY3Rpb24gJiYgIWFuZEZ1bmN0aW9u
KSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBp
ZiAoZ2V0UmV0dXJuVHlwZSAmJiBhbmRSZXR1cm5UeXBlICYmICFtYXRjaGVzKCpnZXRSZXR1cm5U
eXBlLCAqYW5kUmV0dXJuVHlwZSkpIHsKKyAgICBpZiAoZ2V0RnVuY3Rpb24gJiYgYW5kRnVuY3Rp
b24pIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoYW5kRnVuY3Rpb24gJiYgdGhyZWFkQW5kRnVuY3Rpb24gJiYgIW1hdGNoZXMoKmFuZFJldHVy
blR5cGUsICp0aHJlYWRBbmRSZXR1cm5UeXBlKSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRG
dW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBzZXRSZXR1cm5UeXBlOwotICAgIHN0ZDo6
dGllKHNldEZ1bmN0aW9uLCBzZXRSZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBPdmVybG9hZFJlc29s
dXRpb24gewotICAgICAgICBSZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50MVR5cGUod3JhcHBlZEJh
c2VUeXBlLmNsb25lKCkpOwotICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiBzZXRBcmd1
bWVudFR5cGUyOwotICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCi0gICAgICAgICAgICBz
ZXRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50VHlwZS0+Y2xvbmUo
KSk7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgc2V0QXJndW1lbnQzVHlwZShnZXRSZXR1cm5UeXBl
ID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUtPmNsb25lKCkpOworICAg
IEFTVDo6VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5U
eXBlIDogYW5kUmV0dXJuVHlwZTsKIAorICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0
RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNldFJldHVyblR5cGUg
PSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
UmVzb2x2aW5nVHlwZT4+IHNldEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIHNldEFyZ3VtZW50VHlw
ZXMuYXBwZW5kKHNldEFyZ3VtZW50MVR5cGUpOwotICAgICAgICBpZiAoc2V0QXJndW1lbnRUeXBl
MikKLSAgICAgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpzZXRBcmd1bWVudFR5cGUy
KTsKLSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoc2V0QXJndW1lbnQzVHlwZSk7Ci0K
LSAgICAgICAgYXV0byogc2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwo
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlU2V0T3ZlcmxvYWRzKCksIHNldEFyZ3Vt
ZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIXNldEZ1bmN0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIoc2V0RnVuY3Rpb24sICZzZXRGdW5jdGlvbi0+dHlwZSgpKTsKLSAg
ICB9KSgpOwotCi0gICAgaWYgKHNldEZ1bmN0aW9uKSB7Ci0gICAgICAgIGlmICghbWF0Y2hlcyhz
ZXRGdW5jdGlvbi0+dHlwZSgpLCB3cmFwcGVkQmFzZVR5cGUpKSB7Ci0gICAgICAgICAgICBzZXRF
cnJvcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT3B0
aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKLSAgICBpZiAoZ2V0UmV0dXJu
VHlwZSB8fCBhbmRSZXR1cm5UeXBlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGUgcmVmZXJlbmNl
IGNvbXBpbGVyIGhhcyAiZWxzZSBpZiAoIW5vZGUuYmFzZS5pc0xWYWx1ZSAmJiAhYmFzZVR5cGUu
aXNBcnJheVJlZikiLAotICAgICAgICAvLyBidXQgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSBpdCBl
eGlzdHMuIEkgaGF2ZW4ndCB3cml0dGVuIGl0IGhlcmUsIGFuZCBJJ2xsIGludmVzdGlnYXRlCi0g
ICAgICAgIC8vIGlmIHdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGUgcmVmZXJlbmNlIGNvbXBpbGVy
LgotICAgICAgICBpZiAoaXM8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVkQmFzZVR5cGUpKQot
ICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gZG93bmNhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlPih3
cmFwcGVkQmFzZVR5cGUpLmFkZHJlc3NTcGFjZSgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFjZU1hcC5maW5kKCZw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChhZGRy
ZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7Ci0gICAgICAgICAg
ICBpZiAoYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAgICAgICAgIGFkZHJl
c3NTcGFjZSA9ICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVu
ZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIFJlc29sdmluZ1R5cGUgZmllbGRS
ZXNvbHZpbmdUeXBlKGZpZWxkVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIHNldEFyZ3VtZW50VHlw
ZXMuYXBwZW5kKGZpZWxkUmVzb2x2aW5nVHlwZSk7CisgICAgICAgIHNldEZ1bmN0aW9uID0gcmVz
b2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVTZXRPdmVybG9h
ZHMoKSwgc2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlmIChzZXRGdW5jdGlv
bikKKyAgICAgICAgICAgIHNldFJldHVyblR5cGUgPSAmc2V0RnVuY3Rpb24tPnR5cGUoKTsKICAg
ICB9CiAKLSAgICAvLyBGSVhNRTogR2VuZXJhdGUgdGhlIGNhbGwgZXhwcmVzc2lvbnMKLQotICAg
IGFzc2lnblR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBnZXRSZXR1cm5UeXBlID8gZ2V0
UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUtPmNsb25lKCksIGFkZHJlc3NTcGFj
ZSk7Ci19Ci0KLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gQ2hlY2tlcjo6
cmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKQotewotICAgIGF1dG8gYmFzZUluZm8gPSByZWN1cnNlQW5k
R2V0SW5mbyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICBpZiAoIWJhc2VJ
bmZvKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0byogYmFzZVR5cGUg
PSBnZXRVbm5hbWVkVHlwZShiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFiYXNl
VHlwZSkgeworICAgIGlmIChzZXRGdW5jdGlvbiAmJiBhbmRGdW5jdGlvbikgewogICAgICAgICBz
ZXRFcnJvcigpOwotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0KLSAgICBhdXRv
JiBiYXNlVW5pZnlOb2RlID0gYmFzZVR5cGUtPnVuaWZ5Tm9kZSgpOwotICAgIGlmIChpczxBU1Q6
OlVubmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFT
VDo6VW5uYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpLmNsb25lKCk7Ci0gICAgQVNTRVJUKGlzPEFT
VDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSk7Ci0gICAgcmV0dXJuIHsgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2lu
KCkpLCBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkpIH07Ci19Ci0KLXZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQotewot
ICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGRvdEV4cHJlc3Npb24p
OwotICAgIGlmICghYmFzZVR5cGUpCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBmaW5p
c2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKGRvdEV4cHJlc3Npb24sICpiYXNlVHlwZSk7CisgICAg
ZG90RXhwcmVzc2lvbi5zZXRHZXRGdW5jdGlvbihnZXRGdW5jdGlvbik7CisgICAgZG90RXhwcmVz
c2lvbi5zZXRBbmRGdW5jdGlvbihhbmRGdW5jdGlvbik7CisgICAgZG90RXhwcmVzc2lvbi5zZXRU
aHJlYWRBbmRGdW5jdGlvbih0aHJlYWRBbmRGdW5jdGlvbik7CisgICAgZG90RXhwcmVzc2lvbi5z
ZXRTZXRGdW5jdGlvbihzZXRGdW5jdGlvbik7CisKKyAgICBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5
cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCk7CisgICAgaWYgKGF1dG8gbGVmdEFkZHJl
c3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsK
KyAgICAgICAgaWYgKGFuZEZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFubm90YXRpb24gPSBB
U1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRkcmVzc1NwYWNlIH07CisgICAgICAgIGVsc2UgaWYgKHNl
dEZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkFic3RyYWN0TGVm
dFZhbHVlKCk7CisgICAgfSBlbHNlIGlmICghYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmlzUmln
aHRWYWx1ZSgpICYmIChzZXRGdW5jdGlvbiB8fCBhbmRGdW5jdGlvbikpCisgICAgICAgIHR5cGVB
bm5vdGF0aW9uID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgpOworICAgIGFzc2lnblR5cGUoZG90
RXhwcmVzc2lvbiwgZmllbGRUeXBlLT5jbG9uZSgpLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7
CiB9CiAKLXZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhw
cmVzc2lvbikKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKQogewot
ICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGluZGV4RXhwcmVzc2lv
bik7Ci0gICAgaWYgKCFiYXNlVHlwZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpbmRl
eEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9u
KCkpOwotICAgIGlmICghaW5kZXhJbmZvKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byBpbmRl
eEV4cHJlc3Npb25UeXBlID0gZ2V0VW5uYW1lZFR5cGUoaW5kZXhJbmZvLT5yZXNvbHZpbmdUeXBl
KTsKLSAgICBpZiAoIWluZGV4RXhwcmVzc2lvblR5cGUpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nl
c3MoaW5kZXhFeHByZXNzaW9uLCBXVEZNb3ZlKCpiYXNlVHlwZSksIGluZGV4RXhwcmVzc2lvblR5
cGUpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAogdm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKQEAgLTExMDUs
MTAgKzEwNTYsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
JiB2YXJpYWJsZVJlZmVyZW5jZSkKICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFi
bGUoKSk7CiAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKSk7
CiAgICAgCi0gICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKLSAg
ICBpZiAoIXZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPmlzQW5vbnltb3VzKCkpCi0gICAg
ICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQ7Ci0gICAgYXNzaWdu
VHlwZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlw
ZSgpLT5jbG9uZSgpLCBhZGRyZXNzU3BhY2UpOworICAgIEFTVDo6VHlwZUFubm90YXRpb24gdHlw
ZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKTsKKyAgICBpZiAoIXZhcmlhYmxlUmVmZXJl
bmNlLnZhcmlhYmxlKCktPmlzQW5vbnltb3VzKCkpIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgc2Vl
bSByaWdodC4KKyAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQgfTsKKyAgICBhc3NpZ25UeXBlKHZhcmlhYmxlUmVmZXJlbmNl
LCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCktPmNsb25lKCksIFdURk1vdmUo
dHlwZUFubm90YXRpb24pKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJldHVybiYg
cmV0dXJuU3RhdGVtZW50KQpAQCAtMTQwNyw3ICsxMzU4LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQogICAgIGlmIChlcnJvcigp
KQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBsYXN0SW5mbyA9IGdldEluZm8oY29tbWFFeHBy
ZXNzaW9uLmxpc3QoKS5sYXN0KCkpOwotICAgIGZvcndhcmRUeXBlKGNvbW1hRXhwcmVzc2lvbiwg
bGFzdEluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGZvcndhcmRUeXBlKGNvbW1hRXhwcmVzc2lv
biwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUsIGxhc3RJbmZvLT50eXBlQW5ub3RhdGlvbik7CiB9
CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4
cHJlc3Npb24pCkBAIC0xNDU2LDcgKzE0MDcsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6
Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZnVuY3Rpb24tPnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAoIW1hdGNoQW5kQ29tbWl0KHR5cGVzW2ldLmdldCgpLCAqZnVuY3Rpb24tPnBhcmFtZXRl
cnMoKVtpXS50eXBlKCkpKSB7CisgICAgICAgIGlmICghbWF0Y2hBbmRDb21taXQodHlwZXNbaV0u
Z2V0KCksICpmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLT50eXBlKCkpKSB7CiAgICAgICAgICAg
ICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNw
cAppbmRleCAyZmNjNmYxMzlkZTg0YTMyYzRjNzA3Y2EwNjBiOWJlMWI0MmZkM2UwLi4xNThlMjNi
NDcyZGU0OTkzMWViNzg0MmM5N2I4NGFhMjNkMDk3MGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKQEAgLTIy
Nyw5ICsyMjcsOSBAQCBib29sIGluZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiYgcG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBhcmd1bWVudFR5cGVz
W2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIG1hdGNo
ZXMoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSwgdW5uYW1lZFR5cGUp
OworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVy
cygpW2ldLT50eXBlKCksIHVubmFtZWRUeXBlKTsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsK
LSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5
cGUoKS5jYW5SZXNvbHZlKHBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKS0+
dW5pZnlOb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJz
KClbaV0tPnR5cGUoKS0+dW5pZnlOb2RlKCkpOwogICAgICAgICB9KSk7CiAgICAgICAgIGlmICgh
c3VjY2VzcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAppbmRl
eCAwNTM1MGUwZGM5ODVlY2IzOTBmNTg2ZjBhMzRkMmE2ZWNmZWRjYTMyLi4zY2JlZGQ5YzI1Nzg4
ZmU1ZGUwNTYxMmZmMGRkMjZkNGM4NTRmN2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC0xOTcs
OSArMTk3LDEwIEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNz
aW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOwogICAg
ICAgICAgICAgICAgICAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5vcmln
aW4oKTsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBlcmhhcHMgZG8gdGhpcyB3aXRo
IHZhcmlhbnRzIG9yIGEgUmV3cml0ZXIgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgdm9p
ZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKICAgICAgICAgICAgICAgICAgICAgZG90RXhw
cmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOwogICAgICAgICAgICAgICAgICAgICBhdXRvIGVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbCA9IEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsOjp3cmFw
KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShiYXNlTmFtZSksIFdURk1vdmUobWVtYmVyTmFtZSks
IGVudW1lcmF0aW9uRGVmaW5pdGlvbiwgKm1lbWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIG5l
dyAoJmRvdEV4cHJlc3Npb24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUo
ZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSk7CisgICAgICAgICAgICAgICAgICAgIG5ldyAobG9j
YXRpb24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUoZW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAppbmRleCA1MzMyNTY3NjY0
OWQ3MzMzMDkwYjAxNWE3YjY3MjU3ZmMzNjBiOGQ0Li44MDVhNDYyNDc5N2MxMzRhNDM4N2RjMTk2
NjZmNmVmYTY3NTFkOWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkBAIC0xMDgyLDEzICsxMDgyLDEzIEBAIGF1dG8gUGFy
c2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zLCBFcnJvcj4KICAgICBhdXRvIGZpcnN0UGFyYW1ldGVyID0gcGFyc2VQYXJhbWV0ZXIoKTsK
ICAgICBpZiAoIWZpcnN0UGFyYW1ldGVyKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oZmlyc3RQYXJhbWV0ZXIuZXJyb3IoKSk7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92
ZSgqZmlyc3RQYXJhbWV0ZXIpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqZmlyc3RQYXJhbWV0ZXIpKSk7CiAK
ICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAg
ICBhdXRvIHBhcmFtZXRlciA9IHBhcnNlUGFyYW1ldGVyKCk7CiAgICAgICAgIGlmICghcGFyYW1l
dGVyKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcmFtZXRlci5lcnJv
cigpKTsKLSAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSgqcGFyYW1ldGVyKSk7Cisg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihXVEZNb3ZlKCpwYXJhbWV0ZXIpKSk7CiAgICAgfQogCiAgICAgYXV0byByaWdodFBh
cmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBhcmVudGhl
c2lzKTsKQEAgLTE1NjcsMTQgKzE1NjcsMTQgQEAgYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3QKICAg
ICBpZiAoIWZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKIAotICAgIFZlY3Rv
cjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgIFZlY3RvcjxVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQobWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUoKmZpcnN0VmFyaWFi
bGVEZWNsYXJhdGlvbikpKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlw
ZTo6Q29tbWEpKSB7CiAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFy
aWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICAgICAgaWYgKCF2YXJpYWJs
ZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhcmlh
YmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgq
dmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCp2YXJpYWJsZURlY2xhcmF0aW9u
KSkpOwogICAgIH0KIAogICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocmVzdWx0KSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAppbmRleCA5YTEw
MzVhNGI4Y2FkMzNhMjFlNjcwZjIyMDA1OTFjYzE0OGQ2YjEzLi44NjliN2MzOGNkYjRhOWRjYzFi
Mjk0MTk2NGJlOWQ2ODFhZDhlMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgogI2luY2x1ZGUgIldITFNMUGFyc2VyLmgiCiAjaW5j
bHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmgi
CiAjaW5jbHVkZSAiV0hMU0xSZWN1cnNpb25DaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xSZWN1
cnNpdmVUeXBlQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWNNYXRjaGVyLmgiCkBA
IC04Miw3ICs4Myw3IEBAIHN0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVwYXJlU2hhcmVkKFN0
cmluZyYgd2hsc2xTb3VyY2UpCiAgICAgaWYgKCFjaGVjayhwcm9ncmFtKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFtKTsKLSAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc4OCBS
ZXNvbHZlIHByb3BlcnRpZXMgaGVyZQorICAgIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pOwog
ICAgIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKICAgICBpZiAoIWNoZWNrU3RhdGVtZW50QmVo
YXZpb3IocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0
eVJlc29sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmFlY2NiMDEyNDVlYTA2MmM1YWRiYWQ0ZDE2Njky
YmE0YjhlNDE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcApAQCAtMCwwICsxLDMxMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5UmVz
b2x2ZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFZpc2l0b3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQ
cm9wZXJ0eVJlc29sdmVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorcHJpdmF0ZToKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6QXNzaWdubWVudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKworICAgIGJvb2wgc2ltcGxpZnlS
aWdodFZhbHVlKEFTVDo6RG90RXhwcmVzc2lvbiYpOworICAgIGJvb2wgc2ltcGxpZnlBYnN0cmFj
dExlZnRWYWx1ZShBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiwgQVNUOjpEb3RFeHByZXNzaW9u
JiwgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiByaWdodCk7CisgICAgdm9pZCBzaW1wbGlm
eUxlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mKTsKKworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnMgbV92YXJpYWJsZURlY2xhcmF0aW9uczsKK307CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZl
cjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIC8vIFVu
bGVzcyB3ZSdyZSBpbnNpZGUgYW4gQXNzaWdubWVudEV4cHJlc3Npb24gb3IgYSBSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLCB3ZSdyZSBhIHJpZ2h0IHZhbHVlLgorICAgIGlmICghc2ltcGxpZnlS
aWdodFZhbHVlKGRvdEV4cHJlc3Npb24pKQorICAgICAgICBzZXRFcnJvcigpOworfQorCit2b2lk
IFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXRpb24pCit7CisgICAgVmlzaXRvcjo6dmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsK
KyAgICBpZiAoIW1fdmFyaWFibGVEZWNsYXJhdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICBmdW5j
dGlvbkRlZmluaXRpb24uYmxvY2soKS5zdGF0ZW1lbnRzKCkuaW5zZXJ0KDAsIG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oTGV4ZXI6OlRva2VuKG1fdmFy
aWFibGVEZWNsYXJhdGlvbnNbMF0tPm9yaWdpbigpKSwgV1RGTW92ZShtX3ZhcmlhYmxlRGVjbGFy
YXRpb25zKSkpOworfQorCit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQoreworICAgIEFTU0VSVChhc3Np
Z25tZW50RXhwcmVzc2lvbi5sZWZ0KCkudHlwZUFubm90YXRpb24oKSk7CisgICAgaWYgKGFzc2ln
bm1lbnRFeHByZXNzaW9uLmxlZnQoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNl
KCkpIHsKKyAgICAgICAgc2ltcGxpZnlMZWZ0VmFsdWUoYXNzaWdubWVudEV4cHJlc3Npb24ubGVm
dCgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJp
Z2h0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCghYXNzaWdubWVudEV4
cHJlc3Npb24ubGVmdCgpLnR5cGVBbm5vdGF0aW9uKCktPmlzUmlnaHRWYWx1ZSgpKTsKKyAgICBp
ZiAoIWlzPEFTVDo6RG90RXhwcmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKSkg
eworICAgICAgICBzZXRFcnJvcigpOyAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgd2l0aCBpbmRl
eCBleHByZXNzaW9ucy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXNpbXBsaWZ5
QWJzdHJhY3RMZWZ0VmFsdWUoYXNzaWdubWVudEV4cHJlc3Npb24sIGRvd25jYXN0PEFTVDo6RG90
RXhwcmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKSwgYXNzaWdubWVudEV4cHJl
c3Npb24udGFrZVJpZ2h0KCkpKQorICAgICAgICBzZXRFcnJvcigpOworfQorCitib29sIFByb3Bl
cnR5UmVzb2x2ZXI6OnNpbXBsaWZ5UmlnaHRWYWx1ZShBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4
cHJlc3Npb24pCit7CisgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3Jp
Z2luKCk7CisKKyAgICBpZiAoYXV0byogYW5kRnVuY3Rpb24gPSBkb3RFeHByZXNzaW9uLmFuZEZ1
bmN0aW9uKCkpIHsKKyAgICAgICAgYXV0byYgYmFzZSA9IGRvdEV4cHJlc3Npb24uYmFzZSgpOwor
ICAgICAgICBBU1NFUlQoYmFzZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VSVChiYXNl
LnR5cGVBbm5vdGF0aW9uKCkpOworICAgICAgICBpZiAoYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0g
YmFzZS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgICAg
IGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIGRvdEV4cHJlc3Npb24udGFrZUJh
c2UoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVu
aXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgKmxlZnRBZGRy
ZXNzU3BhY2UsIGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgICAgIG1h
a2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkp
OworCisgICAgICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3Vt
ZW50czsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9pbnRlckV4
cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBTdHJpbmcoYW5k
RnVuY3Rpb24tPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgICAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0VHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOworICAgICAg
ICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgp
KTsKKyAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kRnVuY3Rpb24p
OworCisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkRlcmVmZXJlbmNlRXhw
cmVzc2lvbikgPCBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBu
ZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGRlcmVmZXJlbmNlIGV4cHJlc3Npb25zIHdpdGhvdXQg
dXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgICAgIHZvaWQqIGxvY2F0aW9uID0g
JmRvdEV4cHJlc3Npb247CisgICAgICAgICAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9u
KCk7CisgICAgICAgICAgICBhdXRvKiBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0
aW9uKSBBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUo
Y2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0
VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVt
ZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBoYXZlIGFuIGFuZGVyLCBi
dXQgbm8gbGVmdCB2YWx1ZSB0byBjYWxsIGl0IG9uLiBMZXQncyBzYXZlIHRoZSB2YWx1ZSBpbnRv
IGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIGNyZWF0ZSBhIGxlZnQgdmFsdWUuCisgICAgICAgIC8v
IFRoaXMgaXMgZWZmZWN0aXZlbHkgaW5saW5pbmcgdGhlIGZ1bmN0aW9ucyB0aGUgc3BlYyBzYXlz
IGFyZSBnZW5lcmF0ZWQuCisgICAgICAgIGlmICghZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5j
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihM
ZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJzKCksIGJhc2UucmVzb2x2ZWRUeXBl
KCktPmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisKKyAg
ICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJh
dGlvbikpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGUoYmFzZS5yZXNvbHZl
ZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwor
CisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBXVEZNb3ZlKHZhcmlh
YmxlUmVmZXJlbmNlMSksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7CisgICAgICAgIGFzc2ln
bm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOwor
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFw
KHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRU
eXBlKGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVy
ZW5jZTItPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZCB9KTsKKworICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmln
aW4pLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMikpOworICAgICAgICBtYWtlUG9pbnRlckV4
cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgYmFzZS5yZXNvbHZlZFR5
cGUoKS0+Y2xvbmUoKSkpOworICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBWZWN0b3I8VW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChX
VEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOworICAgICAgICBhdXRvIGNhbGxFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3Jp
Z2luKSwgU3RyaW5nKGFuZEZ1bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwor
ICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpLmNsb25l
KCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZEZ1bmN0
aW9uKTsKKworICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShj
YWxsRXhwcmVzc2lvbikpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUo
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5
cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpDb21tYUV4cHJlc3Npb24pIDwgc2l6
ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxl
IHRvIGJlY29tZSBjb21tYSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVu
Y2VzIik7CisgICAgICAgIHZvaWQqIGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247CisgICAgICAg
IGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBw
ZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgZXhwcmVzc2lvbnMu
YXBwZW5kKFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSk7CisgICAgICAgIGF1dG8qIGNv
bW1hRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q29tbWFFeHByZXNzaW9uKFdURk1v
dmUob3JpZ2luKSwgV1RGTW92ZShleHByZXNzaW9ucykpOworICAgICAgICBjb21tYUV4cHJlc3Np
b24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUo
KSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY29tbWFFeHByZXNzaW9uLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQg
fSk7CisKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZSh2YXJp
YWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q2FsbEV4cHJlc3Npb24pIDwgc2l6ZW9mKEFTVDo6RG90
RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBj
YWxsIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICBB
U1NFUlQoZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpKTsKKyAgICBhdXRvJiBnZXRGdW5jdGlv
biA9ICpkb3RFeHByZXNzaW9uLmdldEZ1bmN0aW9uKCk7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChkb3RFeHBy
ZXNzaW9uLnRha2VCYXNlKCkpOworICAgIHZvaWQqIGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247
CisgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgIGF1dG8qIGNhbGxFeHBy
ZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpDYWxsRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdp
biksIFN0cmluZyhnZXRGdW5jdGlvbi5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAg
IGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbihnZXRGdW5jdGlvbik7CisgICAgY2FsbEV4cHJl
c3Npb24tPnNldFR5cGUoZ2V0RnVuY3Rpb24udHlwZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHBy
ZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlSZXNvbHZlcjo6c2ltcGxpZnlBYnN0cmFjdExlZnRW
YWx1ZShBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiwgQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RF
eHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIHJpZ2h0KQoreworICAgIC8v
IENvbnNpZGVyIGEuYi5jLmQgPSBlOworICAgIC8vIFRoaXMgd291bGQgZ2V0IHRyYW5zZm9ybWVk
IGludG86CisgICAgLy8KKyAgICAvLyBTdGVwIDE6CisgICAgLy8gcCA9ICZhOworICAgIC8vCisg
ICAgLy8gU3RlcCAyOgorICAgIC8vIHEgPSBvcGVyYXRvci5iKCpwKTsKKyAgICAvLyByID0gb3Bl
cmF0b3IuYyhxKTsKKyAgICAvLworICAgIC8vIFN0ZXAgMzoKKyAgICAvLyByID0gb3BlcmF0b3Iu
ZD0ociwgZSk7CisgICAgLy8gcSA9IG9wZXJhdG9yLmM9KHEsIHIpOworICAgIC8vCisgICAgLy8g
U3RlcCA0OgorICAgIC8vICpwID0gb3BlcmF0b3IuYigqcCwgcSk7CisKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQocmlnaHQpOworCisgICAgLy8gRmluZCB0aGUgIi5iIiAiLmMiIGFuZCAiLmQiIGV4
cHJlc3Npb25zLgorICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RG90RXhw
cmVzc2lvbj4+IGNoYWluOworICAgIEFTVDo6RG90RXhwcmVzc2lvbiogaXRlcmF0b3IgPSAmZG90
RXhwcmVzc2lvbjsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBBU1NFUlQoaXRlcmF0b3It
PmJhc2UoKS50eXBlQW5ub3RhdGlvbigpKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yLT5iYXNlKCku
dHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIEFTU0VSVCghaXRlcmF0b3ItPmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLT5pc1Jp
Z2h0VmFsdWUoKSk7CisgICAgICAgIGNoYWluLmFwcGVuZCgqaXRlcmF0b3IpOworICAgICAgICBB
U1NFUlQoaXM8QVNUOjpEb3RFeHByZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKSk7IC8vIEZJWE1F
OiBNYWtlIHRoaXMgd29yayB3aXRoIGluZGV4IGV4cHJlc3Npb25zCisgICAgICAgIGl0ZXJhdG9y
ID0gJmRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4oaXRlcmF0b3ItPmJhc2UoKSk7CisgICAg
fQorICAgIGF1dG8gbGVmdEV4cHJlc3Npb24gPSBpdGVyYXRvci0+dGFrZUJhc2UoKTsKKyAgICBB
U1Q6OkV4cHJlc3Npb24mIGlubmVyTGVmdEV4cHJlc3Npb24gPSBsZWZ0RXhwcmVzc2lvbjsKKyAg
ICBzaW1wbGlmeUxlZnRWYWx1ZShsZWZ0RXhwcmVzc2lvbik7CisKKyAgICAvLyBDcmVhdGUgInAi
IHZhcmlhYmxlLgorICAgIEFTU0VSVChsZWZ0RXhwcmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCkpOwor
ICAgIGF1dG8gcG9pbnRlclZhcmlhYmxlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KExleGVyOjpUb2tlbihsZWZ0RXhwcmVzc2lvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1
YWxpZmllcnMoKSwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4o
bGVmdEV4cHJlc3Npb24tPm9yaWdpbigpKSwgKmxlZnRFeHByZXNzaW9uLT50eXBlQW5ub3RhdGlv
bigpLT5sZWZ0QWRkcmVzc1NwYWNlKCksIGxlZnRFeHByZXNzaW9uLT5yZXNvbHZlZFR5cGUoKS0+
Y2xvbmUoKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisKKyAgICAv
LyBDcmVhdGUgInEiIGFuZCAiciIgdmFyaWFibGVzLgorICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gaW50ZXJtZWRpYXRlVmFyaWFibGVzOworICAgIGludGVy
bWVkaWF0ZVZhcmlhYmxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNoYWluLnNpemUoKSAtIDEp
OworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgY2hhaW4uc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgYXV0byYgZG90RXhwcmVzc2lvbiA9IHN0YXRpY19jYXN0PEFTVDo6RG90RXhwcmVzc2lvbiY+
KGNoYWluW2ldKTsKKyAgICAgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkp
OworICAgICAgICBpbnRlcm1lZGlhdGVWYXJpYWJsZXMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lv
bi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBkb3RFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpLT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAg
ICB9CisKKyAgICAvLyBTdGVwIDE6CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+PiBleHByZXNzaW9uczsKKyAgICB7CisgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRv
a2VuKGlubmVyTGVmdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGxlZnRFeHByZXNzaW9u
KSk7CisgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVm
PEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihpbm5lckxlZnRFeHByZXNzaW9uLm9yaWdp
bigpKSwgKmlubmVyTGVmdEV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NT
cGFjZSgpLCBpbm5lckxlZnRFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKSk7Cisg
ICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAo
cG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUo
KSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+
dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8g
RklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KGlubmVyTGVmdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNl
KSwgV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAgICAgYXNzaWdubWVudEV4
cHJlc3Npb24tPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAg
ICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZh
bHVlKCkpOworCisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRF
eHByZXNzaW9uKSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdGVwcyAyLTQu
CisKKyAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHBvaW50ZXJWYXJp
YWJsZSkpOworICAgIGZvciAoYXV0byYgaW50ZXJtZWRpYXRlVmFyaWFibGUgOiBpbnRlcm1lZGlh
dGVWYXJpYWJsZXMpCisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1v
dmUoaW50ZXJtZWRpYXRlVmFyaWFibGUpKTsKK30KKworY2xhc3MgTGVmdFZhbHVlU2ltcGxpZmll
ciA6IHB1YmxpYyBWaXNpdG9yCit7CitwdWJsaWM6CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4
cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHBy
ZXNzaW9uJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cit9OworCit2b2lkIExlZnRWYWx1ZVNpbXBs
aWZpZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBW
aXNpdG9yOjp2aXNpdChkb3RFeHByZXNzaW9uKTsKKyAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5i
YXNlKCkudHlwZUFubm90YXRpb24oKSk7CisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uYmFzZSgp
LnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSk7CisgICAgQVNTRVJUKGRvdEV4
cHJlc3Npb24uYW5kRnVuY3Rpb24oKSk7CisKKyAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90
RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICBhdXRvKiBhbmRGdW5jdGlvbiA9IGRvdEV4cHJlc3Np
b24uYW5kRnVuY3Rpb24oKTsKKyAgICBhdXRvJiBiYXNlID0gZG90RXhwcmVzc2lvbi5iYXNlKCk7
CisgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gKmRvdEV4cHJlc3Npb24uYmFzZSgpLnR5cGVB
bm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBhdXRvIG1ha2VQb2ludGVyRXhw
cmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVy
OjpUb2tlbihvcmlnaW4pLCBkb3RFeHByZXNzaW9uLnRha2VCYXNlKCkpOworICAgIG1ha2VQb2lu
dGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExl
eGVyOjpUb2tlbihvcmlnaW4pLCBsZWZ0QWRkcmVzc1NwYWNlLCBiYXNlLnJlc29sdmVkVHlwZSgp
LT5jbG9uZSgpKSk7CisgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4+IGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUobWFrZVBvaW50
ZXJFeHByZXNzaW9uKSk7CisgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFN0cmluZyhhbmRGdW5j
dGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+
c2V0VHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHByZXNzaW9u
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgY2FsbEV4cHJlc3Np
b24tPnNldEZ1bmN0aW9uKCphbmRGdW5jdGlvbik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbikgPCBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9u
KSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGRlcmVmZXJlbmNl
IGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICB2b2lk
KiBsb2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOworICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJl
c3Npb24oKTsKKyAgICBhdXRvKiBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9u
KSBBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2Fs
bEV4cHJlc3Npb24pKTsKKyAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5j
bG9uZSgpKTsKKyAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5
cGUoKSkuYWRkcmVzc1NwYWNlKCkgfSk7Cit9CisKK3ZvaWQgTGVmdFZhbHVlU2ltcGxpZmllcjo6
dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikK
K3sKKyAgICAvLyBEZXJlZmVyZW5jZSBleHByZXNzaW9ucyBhcmUgdGhlIG9ubHkgZXhwcmVzc2lv
bnMgd2hlcmUgdGhlIGNoaWxkcmVuIG1pZ2h0IGJlIG1vcmUtcmlnaHQgdGhhbiB3ZSBhcmUuCisg
ICAgLy8gRm9yIGV4YW1wbGUsIGEgZGVyZWZlcmVuY2UgZXhwcmVzc2lvbiBtYXkgYmUgYSBsZWZ0
IHZhbHVlIGJ1dCBpdHMgY2hpbGQgbWF5IGJlIGEgY2FsbCBleHByZXNzaW9uIHdoaWNoIGlzIGEg
cmlnaHQgdmFsdWUuCisgICAgLy8gTGVmdFZhbHVlU2ltcGxpZmllciBkb2Vzbid0IGhhbmRsZSBy
aWdodCB2YWx1ZXMsIHNvIHdlIGluc3RlYWQgbmVlZCB0byB1c2UgUHJvcGVydHlSZXNvbHZlci4K
KyAgICAvLyBGSVhNRTogV2hhdCBhYm91dCBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cz8KKyAgICBQ
cm9wZXJ0eVJlc29sdmVyKCkuVmlzaXRvcjo6dmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9uKTsK
K30KKwordm9pZCBQcm9wZXJ0eVJlc29sdmVyOjpzaW1wbGlmeUxlZnRWYWx1ZShBU1Q6OkV4cHJl
c3Npb24mIGV4cHJlc3Npb24pCit7CisgICAgTGVmdFZhbHVlU2ltcGxpZmllcigpLlZpc2l0b3I6
OnZpc2l0KGV4cHJlc3Npb24pOworfQorCit2b2lkIHJlc29sdmVQcm9wZXJ0aWVzKFByb2dyYW0m
IHByb2dyYW0pCit7CisgICAgUHJvcGVydHlSZXNvbHZlcigpLlZpc2l0b3I6OnZpc2l0KHByb2dy
YW0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMjIwNWY5MDJiY2M5NGVjYTllZjMzYjU4ZGExYzcwMWFiNzJiMzQ3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0
eVJlc29sdmVyLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHJlc29sdmVQcm9wZXJ0aWVzKFByb2dy
YW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAK
aW5kZXggZTc4MzhjZTNmNzI1YWUwOWFiYTFlZGI1MGE2NTkyYzM0NjMxM2VlNS4uZGM5MzRkYmY3
MjZhODE0YTA4MDRiNGNjYjU3NTJkYmVjYjgxZjM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9h
ZEltcGwuY3BwCkBAIC00NCw3ICs0NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjb252ZXJzaW9uQ29z
dChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGNhbmRpZGF0ZSwgY29uc3QgVmVjdG9yCiAgICAg
ICAgIGNvbnZlcnNpb25Db3N0ICs9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JikgLT4gdW5zaWduZWQg
ewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gdW5zaWduZWQgewot
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlw
ZSgpLmNvbnZlcnNpb25Db3N0KCpjYW5kaWRhdGUucGFyYW1ldGVycygpW2ldLnR5cGUoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBl
KCkuY29udmVyc2lvbkNvc3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSk7CiAg
ICAgICAgIH0pKTsKICAgICB9CiAgICAgLy8gVGhlIHJldHVybiB0eXBlIGNhbiBuZXZlciBiZSBh
IGxpdGVyYWwgdHlwZSwgc28gaXRzIGNvbnZlcnNpb24gY29zdCBpcyBhbHdheXMgMC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5n
VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmgKaW5kZXggY2E1Y2JiNTkyOWNmOWUxODE4YzJjZDc0MWU3OWQ5MzZjYWFjNjhlZS4u
NTBlNTMyYjZhNmU4MmYxZTAyYTA0Njc5MWI4ZTY2OTZkNWIxMWUxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBl
LmgKQEAgLTcyLDYgKzcyLDcgQEAgcHJpdmF0ZToKIAogLy8gVGhpcyBpcyBhIHRoaW4gd3JhcHBl
ciBhcm91bmQgYSBWYXJpYW50LgogLy8gSXQgZXhpc3RzIHNvIHdlIGNhbiBtYWtlIHN1cmUgdGhh
dCB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBkb2VzIHRoZSByaWdodCB0aGluZy4KKy8vIEZJWE1F
OiBUaGlzIHdyYXBwZXIgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeS4KIGNsYXNzIFJlc29sdmluZ1R5
cGUgewogcHVibGljOgogICAgIFJlc29sdmluZ1R5cGUoKQpAQCAtMTAyLDEwICsxMDMsMTEgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgQVNUOjpVbm5hbWVk
VHlwZSYgZ2V0VW5uYW1lZFR5cGUoKQorICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFVubmFtZWRU
eXBlKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcikpOwotICAgICAgICByZXR1cm4gV1RGOjpn
ZXQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKTsKKyAgICAgICAgaWYgKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVy
KSkKKyAgICAgICAgICAgIHJldHVybiAmV1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+PihtX2lubmVyKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlzaXRvciYgdmlzaXRv
cikgLT4gZGVjbHR5cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFyaWFudDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4+Jj4oKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgu
Y3BwCmluZGV4IGFlM2NhNjQyMzllM2I1OWQzNmFhYWFlZWM3YmE0NzFiY2I2N2NlYjkuLjY1ZWQ3
YWNmNDNmMjAwNDAyNTBmOTA2NmExNGI2NDBiNTdiYmYwY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JM
ZW5ndGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCkBAIC02NSw3ICs2NSw3IEBAIGJvb2wg
c3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICBib29s
IGlzT3BlcmF0b3IgPSB0cnVlOwogCiAgICAgZm9yIChhdXRvJiBhcnJheVR5cGUgOiBhcnJheVR5
cGVzKSB7Ci0gICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0
aW9uKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgeyBhcnJheVR5cGUuZ2V0KCkuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQpOworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGFycmF5VHlw
ZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBhcnJheVR5cGUuZ2V0KCkuY2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmFw
cGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6
OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBwcm9ncmFtLmludHJpbnNp
Y3MoKS51aW50VHlwZSgpKSwgIm9wZXJhdG9yLmxlbmd0aCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMuY3BwCmluZGV4IGNkN2MzNzAyYWRiZWEyOWFjMThjNWNiZTZkYjYwODdiOWUwMmVk
OGEuLjc0Y2M4ZjE4NGU4MzViM2NlMWM0OWI1Y2U2ZWM4ZDZhNGE4NjhjMWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0
cnVjdG9ycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIGJvb2wgc3lu
dGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAgIGJvb2wgaXNPcGVyYXRv
ciA9IHRydWU7CiAKICAgICBmb3IgKGF1dG8mIHVubmFtZWRUeXBlIDogdW5uYW1lZFR5cGVzKSB7
Ci0gICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExl
eGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCB7IHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwg
V1RGOjpudWxsb3B0KTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbih1bm5hbWVkVHlw
ZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB1bm5hbWVkVHlwZS5nZXQoKS5j
bG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJp
YnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgIm9w
ZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09w
ZXJhdG9yKSk7CkBAIC0xMjcsNyArMTI3LDcgQEAgYm9vbCBzeW50aGVzaXplQ29uc3RydWN0b3Jz
KFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4oc3RhdGljX2Nhc3Q8QVNUOjpOYW1lZFR5cGUmPihuYW1lZFR5cGUpKSAmJiBkb3duY2Fz
dDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oc3RhdGljX2Nhc3Q8QVNUOjpOYW1lZFR5cGUm
PihuYW1lZFR5cGUpKS5pc0F0b21pYygpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigp
KSwgbmFtZWRUeXBlLmdldCgpKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNU
OjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2lu
KCkpLCBuYW1lZFR5cGUuZ2V0KCkpKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4o
KSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlw
ZS5nZXQoKSksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6
bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVy
YXRpb25GdW5jdGlvbnMuY3BwCmluZGV4IDE3OTdmZTUzOTRjODFlYWNkMzk1NGFiYzZhOGE2NWE2
YzhmYzk2ZTIuLmQ3NGFmMzNhMWYwNWE2OTIyMTljOGNjZTRhZmRjYzkyOTUxMDk3MWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKQEAgLTQx
LDggKzQxLDggQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYg
cHJvZ3JhbSkKICAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAgIGZvciAoYXV0byYgZW51
bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpIHsK
ICAgICAgICAgewotICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxl
RGVjbGFyYXRpb24xKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0
aW9uKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwotICAgICAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24yKExleGVyOjpU
b2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSB9LCBTdHJpbmcoKSwgV1RG
OjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xh
cmF0aW9uMSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25E
ZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAg
ICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24yID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFy
aWFibGVEZWNsYXJhdGlvbjEpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1v
dmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKQEAgLTUyLDcgKzUyLDcgQEAgYm9vbCBzeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgfQogCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tl
bihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9u
KSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAg
YXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2lu
KCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0KTsKICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1l
dGVyczsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNs
YXJhdGlvbikpOwogICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCks
ICJvcGVyYXRvci52YWx1ZSJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQs
IGlzT3BlcmF0b3IpKTsKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRp
b25GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgfQogCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExl
eGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSB9LCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgYXV0byB2YXJpYWJs
ZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExl
eGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJh
dGlvbkRlZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsK
ICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwog
ICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJh
dGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51
bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksICJvcGVyYXRvciBj
YXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikp
OwpAQCAtNzAsMTAgKzcwLDEwIEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25z
KFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGVudW1lcmF0
aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFt
ZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKLSAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9r
ZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlv
bikgfSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxs
b3B0LCBpc09wZXJhdG9yKSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJp
YnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9u
LT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCAib3BlcmF0b3IgY2FzdCJfc3Ry
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKICAgICAg
ICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVT
dHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAppbmRleCA4MjY3MjIxMzdl
NGMzZTM4MjI3NzgwZGFlMTJiMjlhYWJhMWI3MmVlLi45NDVkMGNlZWZhYTM5Y2U1MDc0NjA3ZDJj
NDQ5M2NmMzk3ZTk4M2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFj
Y2Vzc29ycy5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBzeW50aGVzaXplU3RydWN0dXJlQWNj
ZXNzb3JzKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxl
bWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24tPnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAot
ICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0
aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVF
bGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVj
bGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6
OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pKSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICAgICAgcGFy
YW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVt
ZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHN0cnVj
dHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIG1ha2VTdHJpbmcoIm9wZXJhdG9yLiIsIHN0cnVj
dHVyZUVsZW1lbnQubmFtZSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBp
c09wZXJhdG9yKSk7CkBAIC01Niw4ICs1Niw4IEBAIGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFj
Y2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQogCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIHNldHRlcjogb3BlcmF0b3IuZmllbGQ9Ci0gICAgICAgICAgICAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24xKExleGVyOjpUb2tlbihzdHJ1
Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3Ry
dWN0dXJlRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KTsKLSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNs
YXJhdGlvbjIoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1
YWxpZmllcnMoKSwgeyBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpIH0sIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJp
YWJsZURlY2xhcmF0aW9uMSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
PihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVy
cygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5p
dGlvbikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAg
ICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjIgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICAgICAgcGFyYW1l
dGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkpOwogICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKQEAg
LTY5LDcgKzY5LDcgQEAgYm9vbCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0m
IHByb2dyYW0pCiAgICAgICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAogICAg
ICAgICAgICAgYXV0byBjcmVhdGVBbmRlciA9IFsmXShBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNz
U3BhY2UpIC0+IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiB7CiAgICAgICAgICAgICAg
ICAgYXV0byBhcmd1bWVudFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRkcmVzc1NwYWNlLCBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2lu
KCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7Ci0gICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVs
ZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBXVEZNb3ZlKGFyZ3VtZW50VHlw
ZSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBB
U1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KFdURk1vdmUoYXJn
dW1lbnRUeXBlKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAg
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikp
OwogICAgICAgICAgICAgICAgIGF1dG8gcmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQ
b2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBhZGRy
ZXNzU3BhY2UsIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKaW5kZXgg
ZWQyZThjMDA1MmQ2ZGZlOWJkMDdiYWY3NjQ5ZDhjZTQ4YzliMDliYi4uMmYyMDE1MmNhYjdhZDFj
NzgyNmJhM2QyMTUxN2E0ZWMwOWVhZWVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCkBAIC01MzIsNyArNTMyLDcgQEAg
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlRyYXAmKQogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudCkKIHsKICAgICBmb3IgKGF1dG8mIHZhcmlhYmxlRGVjbGFyYXRpb24gOiB2YXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudC52YXJpYWJsZURlY2xhcmF0aW9ucygpKQotICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uLmdldCgpKTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQpAQCAtNTg5LDE3ICs1ODksMTcgQEAgdm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhw
cmVzc2lvbikKIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tFcnJv
ckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgp
KTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYg
bWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9p
bnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9p
bnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogfQogCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikK
IHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFs
dWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
bGVmdFZhbHVlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLm9sZFZhbHVlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkpOwogICAgIGlmIChyZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA3MWNmZjFiMTFiMjcw
YTU1MzlhYzI0NGY1ZTVkMzFlYzI2ZDViMDgyLi5iMWU3M2EyMGE0MmY0MjVmY2EwNDI5MTQ2MjA1
NTg1NDZkN2M5OWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMzQ5LDYgKzM0OSw3IEBAIE1vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFByZXBhcmUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2
ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVC
aW5kR3JvdXAuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDJlNTI5ZGM0MjQ5NjE0MmM5MTk1MTM0YTdiNjU3ZDNjYjgxMDg5NjQuLjYyMTk1Zjdh
Y2Y5NGJhZWJlNTdkNzAxM2QyNTdiODQ5MTk3NDJhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0NzksNiArNjQ3OSw4IEBA
CiAJCTFDQTBDMkVDMjFFRUQ2RjYwMEExMTg2MCAvKiBXSExTTExpdGVyYWxUeXBlQ2hlY2tlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTExpdGVyYWxUeXBlQ2hlY2tlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQTE5RTAzMERDMjU1OTUwMDY1QTk5NCAvKiBFdmVu
dExvb3BNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBFdmVu
dExvb3BNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQTE5RTE1MERDMjU1
Q0EwMDY1QTk5NCAvKiBFdmVudExvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRXZlbnRMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQUE4MkY2MjI0
MkFFMDUwMEU4NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUNBQTgyRjcyMjQyQUUwNTAwRTg0QkJCIC8qIFdITFNMUHJvcGVydHlSZXNvbHZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTFByb3BlcnR5UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUNBRjM0N0UwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0N0YwQTZDNDA1MjAwQUJFMDZFIC8q
IFdlYlNjcmlwdE9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYlNjcmlwdE9iamVjdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNB
RjM0ODAwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU4MTUsNiArMjU4MTcsOCBAQAogCQkJCUMyNEE1
N0JBMjFGRUFGRUEwMDRDNkREMSAvKiBXSExTTFByZXBhcmUuY3BwICovLAogCQkJCUMyNEE1N0JC
MjFGRUFGRUEwMDRDNkREMSAvKiBXSExTTFByZXBhcmUuaCAqLywKIAkJCQlDMjFCRjczQTIxQ0Q4
RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCisJCQkJMUNBQTgyRjYyMjQyQUUwNTAw
RTg0QkJCIC8qIFdITFNMUHJvcGVydHlSZXNvbHZlci5jcHAgKi8sCisJCQkJMUNBQTgyRjcyMjQy
QUUwNTAwRTg0QkJCIC8qIFdITFNMUHJvcGVydHlSZXNvbHZlci5oICovLAogCQkJCTFDQTBDMkUw
MjFFRUI1RjUwMEExMTg2MCAvKiBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3BwICovLAogCQkJCTFD
QTBDMkRFMjFFRUI1RjQwMEExMTg2MCAvKiBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuaCAqLywKIAkJ
CQlDMjM0QTlBRDIxRTkyQzE5MDAzQzk4NEQgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5j
cHAgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365651</attachid>
            <date>2019-03-21 17:18:26 -0700</date>
            <delta_ts>2019-03-21 19:21:38 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190321171825.patch</filename>
            <type>text/plain</type>
            <size>123129</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ2NDA4ZmE1M2M1ODg1
ZjBkYThkZTc3OTNiZDRhNDQ3N2Q4ZmE2Ny4uYTRmNTg0NTMxNWI3YzQzNDdmZTMyY2YxNWNiYzdm
MDYzYThhNTNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTAzLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDMt
MTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwYXJlbnRp
bmcgZHVyaW5nIGEgbXV0YXRpb24gZXZlbnQgaW5zaWRlIGFwcGVuZENoaWxkIGNvdWxkIHJlc3Vs
dCBpbiBhIGNpcmN1bGFyIERPTSB0cmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCmluZGV4IDRhNmQ3
YzQ2OTVkYzRjYWM4MjkwNTRlNDA1NTU3ODc2NTE3NWY4NjMuLmQ0MzZkNjg5Yzc4ZTA0MGM1ZmRk
Y2UzOTYwZjM4ZjQzMDE1MGIyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICs0Myw3
MCBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAogfTsK
IAorc3RydWN0IExlZnRWYWx1ZSB7CisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKK307
CisKK3N0cnVjdCBBYnN0cmFjdExlZnRWYWx1ZSB7Cit9OworCitzdHJ1Y3QgUmlnaHRWYWx1ZSB7
Cit9OworCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCitj
bGFzcyBUeXBlQW5ub3RhdGlvbiB7CitwdWJsaWM6CisgICAgVHlwZUFubm90YXRpb24oKQorICAg
ICAgICA6IG1fZW1wdHkodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24o
TGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBU
eXBlQW5ub3RhdGlvbihBYnN0cmFjdExlZnRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIodikK
KyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oUmlnaHRWYWx1ZSB2KQorICAgICAg
ICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oY29uc3Qg
VHlwZUFubm90YXRpb24mKSA9IGRlZmF1bHQ7CisgICAgVHlwZUFubm90YXRpb24oVHlwZUFubm90
YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgVHlwZUFubm90YXRpb24mIG9wZXJhdG9y
PShjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBlQW5ub3RhdGlvbiYg
b3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9uJiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIE9wdGlv
bmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFkZHJlc3NTcGFjZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIW1fZW1wdHkpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxM
ZWZ0VmFsdWU+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PExlZnRWYWx1
ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIH0KKworICAgIGJvb2wgaXNSaWdodFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJp
Z2h0VmFsdWU+KG1faW5uZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNp
dG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6
dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0cmFjdExl
ZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigpKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0
eSk7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW5uZXIpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWYXJpYW50PExlZnRWYWx1ZSwgQWJzdHJhY3RMZWZ0VmFsdWUsIFJp
Z2h0VmFsdWU+IG1faW5uZXI7CisgICAgYm9vbCBtX2VtcHR5IHsgZmFsc2UgfTsKK307CisKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgKaW5kZXggYjEyMWZiNmMx
ZTFkMTc5MjYxNWQ5YmIwMjc0ZmUyMzU4OGE3ZjJiNS4uNzk0MTVlMmZmMzAzMDI5MTA2YjViZjQx
OTc2N2ViNTk5OGYwZTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5o
CkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24mIGxlZnQoKSB7IHJl
dHVybiBtX2xlZnQ7IH0KICAgICBFeHByZXNzaW9uJiByaWdodCgpIHsgcmV0dXJuIG1fcmlnaHQ7
IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiB0YWtlUmlnaHQoKSB7IHJldHVybiBXVEZN
b3ZlKG1fcmlnaHQpOyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1f
bGVmdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBiN2FiMjBjZWQyYzQ1M2Y5NWYxYzJlM2VmYzI4
MWZkYTQ4ZTVjM2FkLi4zMThhODEwNjE2M2RiODdlODVlZjQ4MWVjODg3ZDlkNmM1YzI5Y2MxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xF
eHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRXhwcmVzc2lvbi5oCkBAIC02NSwxMiArNjUsMTIgQEAgcHVibGljOgogICAgICAgICBt
X3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAgIH0KIAotICAgIGNvbnN0IE9wdGlvbmFsPEFkZHJl
c3NTcGFjZT4mIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9
CisgICAgY29uc3QgVHlwZUFubm90YXRpb24qIHR5cGVBbm5vdGF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlQW5ub3RhdGlvbiA/ICYqbV90eXBlQW5ub3RhdGlvbiA6IG51bGxwdHI7IH0KIAot
ICAgIHZvaWQgc2V0QWRkcmVzc1NwYWNlKE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFkZHJlc3NT
cGFjZSkKKyAgICB2b2lkIHNldFR5cGVBbm5vdGF0aW9uKFR5cGVBbm5vdGF0aW9uJiYgdHlwZUFu
bm90YXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoIW1fYWRkcmVzc1NwYWNlKTsKLSAgICAg
ICAgbV9hZGRyZXNzU3BhY2UgPSBhZGRyZXNzU3BhY2U7CisgICAgICAgIEFTU0VSVCghbV90eXBl
QW5ub3RhdGlvbik7CisgICAgICAgIG1fdHlwZUFubm90YXRpb24gPSBXVEZNb3ZlKHR5cGVBbm5v
dGF0aW9uKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBc3NpZ25tZW50RXhwcmVzc2lv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJl
ZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsKLSAgICBPcHRpb25hbDxBZGRyZXNzU3BhY2U+IG1fYWRk
cmVzc1NwYWNlOworICAgIE9wdGlvbmFsPFR5cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5vdGF0aW9u
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKaW5kZXggNjMxNmY1NGUxNjMyNmI0YTQ4M2ZhODcyZTFm
NDdiYjA0OGVkZjg4ZS4uNzcwY2Y4YmE5ZjI1MjcyNmY2OWMxYWU2ZGU1ZWE0YTViMTJiZjc3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaApA
QCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4
cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAg
ICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUo
V1RGTW92ZShsVmFsdWUpKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVl
KSkKICAgICB7CiAgICAgfQogCkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc01ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xWYWx1ZTsg
fQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9CiAK
IHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAgIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TWFrZVBvaW50ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAppbmRleCA3YjA1MmI2ZDVmMjg4
N2Y1OTJkZjQ0ZmQ5NDA5YzRmYTk1MjAzYWE4Li4zNDYwNGQ1NmFlY2M0YjYzMGQ3YTdlNmY3OTZi
OWM4NTM0N2NlMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaApA
QCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZVBvaW50ZXJFeHBy
ZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIE1ha2VQb2ludGVyRXhw
cmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxW
YWx1ZSkKKyAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihX
VEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQorICAg
ICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVlKSkKICAgICB7CiAgICAgfQogCkBA
IC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01ha2VQb2ludGVyRXhwcmVz
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24m
IGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVl
KCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8RXhw
cmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5oCmluZGV4IDJlYzM0ZTE1ZDhhNDBlNWFkMmUyYmY4OTY4MGMyMWMzMzQ0
Yzk5ODguLjAzYWRkZGM3NjNiN2Y4MWRjNzRkY2VmNjk0ZjY0NmNmMjlkZWJkZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCkBAIC01OSwyNyArNTksNTYg
QEAgcHVibGljOgogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiYgcG9zc2libGVHZXRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxl
R2V0T3ZlcmxvYWRzOyB9CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZVNldE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9z
c2libGVTZXRPdmVybG9hZHM7IH0KICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlQW5kT3ZlcmxvYWRzKCkgeyByZXR1cm4g
bV9wb3NzaWJsZUFuZE92ZXJsb2FkczsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1
bmN0aW9uKCkgeyByZXR1cm4gbV9nZXRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRp
b24qIGFuZEZ1bmN0aW9uKCkgeyByZXR1cm4gbV9hbmRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9u
RGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uKCkgeyByZXR1cm4gbV90aHJlYWRBbmRGdW5j
dGlvbjsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIHNldEZ1bmN0aW9uKCkgeyByZXR1cm4g
bV9zZXRGdW5jdGlvbjsgfQogCiAgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fkcyhjb25z
dCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IG92ZXJsb2FkcykKICAgICB7CiAgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMgPSBvdmVy
bG9hZHM7CiAgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29uc3QgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVy
bG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRz
OworICAgIH0KICAgICB2b2lkIHNldFBvc3NpYmxlU2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRz
KQogICAgIHsKICAgICAgICAgbV9wb3NzaWJsZVNldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKICAg
ICB9Ci0gICAgdm9pZCBzZXRQb3NzaWJsZUFuZE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKKwor
ICAgIHZvaWQgc2V0R2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb24p
CiAgICAgewotICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAg
ICAgICBtX2dldEZ1bmN0aW9uID0gZ2V0RnVuY3Rpb247CisgICAgfQorCisgICAgdm9pZCBzZXRB
bmRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbikKKyAgICB7CisgICAg
ICAgIG1fYW5kRnVuY3Rpb24gPSBhbmRGdW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldFRo
cmVhZEFuZEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uKQor
ICAgIHsKKyAgICAgICAgbV90aHJlYWRBbmRGdW5jdGlvbiA9IHRocmVhZEFuZEZ1bmN0aW9uOwor
ICAgIH0KKworICAgIHZvaWQgc2V0U2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0
RnVuY3Rpb24pCisgICAgeworICAgICAgICBtX3NldEZ1bmN0aW9uID0gc2V0RnVuY3Rpb247CiAg
ICAgfQogCiAgICAgRXhwcmVzc2lvbiYgYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiYmIHRha2VCYXNlKCkgeyByZXR1cm4gV1RGTW92ZShtX2Jhc2Up
OyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fYmFzZTsKICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9w
b3NzaWJsZUdldE92ZXJsb2FkczsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsKICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3Nz
aWJsZUFuZE92ZXJsb2FkczsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX2dldEZ1bmN0aW9u
IHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fYW5kRnVuY3Rpb24geyBu
dWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV90aHJlYWRBbmRGdW5jdGlvbiB7
IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX3NldEZ1bmN0aW9uIHsgbnVs
bHB0ciB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKaW5kZXggNzlkOGQwZjcwOGU4ZDA1NzgzMTJjODE3OTRl
ODhlZGFmMzQ4N2NmOS4uMzgxZGU5ZTQzYTc4MTExNmM2ZWU3Nzk4MDdmNDg3NWI5NWYzNTVhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaApAQCAtNDEs
MTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogLyoKLSAq
ICAxLiBFdmFsdWF0ZSBtX2xWYWx1ZQorICogIDEuIEV2YWx1YXRlIG1fbGVmdFZhbHVlCiAgKiAg
Mi4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9vbGRWYWx1ZQogICogIDMuIEV2YWx1YXRlIG1fbmV3
VmFsdWVFeHByZXNzaW9uCiAgKiAgNC4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9uZXdWYWx1ZQot
ICogIDUuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1fbFZhbHVlCisgKiAgNS4gQXNzaWduIHRoZSBy
ZXN1bHQgdG8gbV9sZWZ0VmFsdWUKICAqICA2LiBFdmFsdWF0ZSBtX3Jlc3VsdEV4cHJlc3Npb24K
ICAqICA3LiBSZXR1cm4gdGhlIHJlc3VsdAogICovCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9s
VmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1
ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRW
YWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9u
ZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24qIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJu
IG1fbmV3VmFsdWVFeHByZXNzaW9uID8gJiptX25ld1ZhbHVlRXhwcmVzc2lvbiA6IG51bGxwdHI7
IH0KQEAgLTk0LDE1ICs5NCwxNSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNs
YXNzIFUsIGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gV1RGOjptYWtlVW5pcXVl
UmVmKEFyZ3MmJi4uLik7CiAKLSAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxWYWx1ZSkKKyAgICBSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJl
c3Npb24+IGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmln
aW4pKQotICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKKyAgICAgICAgLCBtX2xl
ZnRWYWx1ZShXVEZNb3ZlKGxlZnRWYWx1ZSkpCiAgICAgICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKICAgICAgICAgLCBtX25ld1ZhbHVlKFdURk1vdmUob3Jp
Z2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCkKICAgICB7CiAgICAgfQogCi0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+
IG1fbFZhbHVlOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKICAgICBW
YXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBt
X25ld1ZhbHVlOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9uZXdWYWx1
ZUV4cHJlc3Npb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKaW5kZXggMTk4
MjRmOTQwNTRlNGIzYjdkN2NmMjRmNjNjMDExOWI4YTYzZjRmYi4uZTUwYWFhZGRlNzg4ZjRlZDg5
ZTljMjZiZjQ0NjM5YzIxNDA0OWNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRp
b24uaApAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxF
eHByZXNzaW9uPj4gbV9pbml0aWFsaXplcjsKIH07CiAKLXVzaW5nIFZhcmlhYmxlRGVjbGFyYXRp
b25zID0gVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+OwordXNpbmcgVmFyaWFibGVEZWNsYXJh
dGlvbnMgPSBWZWN0b3I8VW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+PjsKIAogfSAvLyBu
YW1lc3BhY2UgQVNUCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudC5oCmluZGV4IGU4ZTFmYzdmNWIyMzhkYmIwNDAzZTlmNDAyNzgwNGE3MGE3ZTg4
MWMuLjA5YTAyZDAxZjQ5Njg0YWI5NjNlZjg3MjViMDQ1MmQ1YTM4ZWRmNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaApAQCAtNDAsNyAr
NDAsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50IHsKIHB1YmxpYzoKLSAgICBWYXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFZlY3RvcjxWYXJpYWJsZURlY2xh
cmF0aW9uPiYmIHZhcmlhYmxlRGVjbGFyYXRpb25zKQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiB2
YXJpYWJsZURlY2xhcmF0aW9ucykKICAgICAgICAgOiBTdGF0ZW1lbnQoV1RGTW92ZShvcmlnaW4p
KQogICAgICAgICAsIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMoV1RGTW92ZSh2YXJpYWJsZURlY2xh
cmF0aW9ucykpCiAgICAgewpAQCAtNTMsMTAgKzUzLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiYgdmFyaWFibGVEZWNs
YXJhdGlvbnMoKSB7IHJldHVybiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9y
PFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPj4mIHZhcmlhYmxlRGVjbGFyYXRpb25zKCkg
eyByZXR1cm4gbV92YXJpYWJsZURlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgotICAgIFZlY3Rv
cjxWYXJpYWJsZURlY2xhcmF0aW9uPiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOworICAgIFZhcmlh
YmxlRGVjbGFyYXRpb25zIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcApp
bmRleCA2MjRjNTYyZTUxY2E2MGM2ZWY4ZGUyOGFmZWJhYzUxNGYyYmUwZGJkLi4xYTAwNTNjOWM0
ZDRjNjY2ZmU1ODNjMTIxNjhlOTE3MmVkZjI2NjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xF
bnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCkBAIC0xODgsOSArMTg4LDkgQEAgU3RyaW5nIEVudHJ5
UG9pbnRTY2FmZm9sZGluZzo6bWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkK
ICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uKiBz
dHJ1Y3R1cmVEZWZpbml0aW9uID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAobV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLm5hbWUoKSA9PSBwYXRo
WzBdKSB7CisgICAgICAgIGlmIChtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0t
Pm5hbWUoKSA9PSBwYXRoWzBdKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
X3BhcmFtZXRlclZhcmlhYmxlc1tpXSk7Ci0gICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBt
X2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLT51bmlmeU5vZGUoKTsK
KyAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6
Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlw
ZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAgICAgICAgICAg
IGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCkBAIC0yNDksNyAr
MjQ5LDcgQEAgU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5k
TmFtZWRCdWlsdElucygpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
LnNpemUoKTsgKytpKQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1f
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpW2ldLnR5cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCptX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5
cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fbGF5b3V0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8g
dmFyaWFibGVOYW1lID0gbV9uYW1lZEJpbmRHcm91cHNbaV0udmFyaWFibGVOYW1lOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5j
dGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAppbmRleCAyZmMxNDY1ODYxNmM5ODljYTIxN2M2OTI4
MmFlODZkYzQ4NzE5ZjA4Li5kYWY1ODQ5OGFiZjliYWZiZjZmYmM1YzljZTljM2NlMDIwMGU1ZDU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEZ1bmN0aW9uV3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAo
aSkKICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKTsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpKTsKICAgICB9CiAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwogfQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uCiAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlck5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJp
YWJsZU1hcHBpbmcuYWRkKCZwYXJhbWV0ZXIsIHBhcmFtZXRlck5hbWUpOwogICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKnBhcmFtZXRlci50eXBlKCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKnBhcmFtZXRlci0+dHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJOYW1l
KSk7CiAgICAgICAgIH0KICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7XG4iKTsK
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsK
QEAgLTU3MCw3ICs1NzAsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlcwogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAg
ICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgdm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbiYgbWFrZUFycmEKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7
Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KSk7CiAgICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1h
a2VQb2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRp
dmVGdW5jdGlvbldyaXRlci5jcHAKaW5kZXggNjk3MmU5ODkwNTBhOWExYjdkYTgxMWE4N2MzM2Mz
M2QxZTRlZDI5Yy4uMzQwNjVlNThjMTczYTZjODEyNjRlYjdkZTM1ZDQ5ZjUxOTZmODYyMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xO
YXRpdmVGdW5jdGlvbldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAKQEAgLTExMSw4ICsx
MTEsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICB9CiAKICAgICAgICAgQVNT
RVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsK
LSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
OwotICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byYg
cGFyYW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHBh
cmFtZXRlclR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBwYXJhbWV0ZXJOYW1lZFR5cGUgPSBk
b3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgICAgICBpZiAo
aXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBhcmFtZXRlck5hbWVkVHlwZSkpIHsKQEAg
LTEzNCw3ICsxMzQsNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvci52YWx1ZSIpIHsKICAgICAg
ICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9
PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBv
dXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHgpIHtcbiIpKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBzdGF0
aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIikpOwpAQCAtMTQ1LDggKzE0NSw4
IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiKSB7CiAgICAgICAgIEFTU0VSVF9VTlVT
RUQoaW50cmluc2ljcywgbWF0Y2hlcyhuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSwg
aW50cmluc2ljcy51aW50VHlwZSgpKSk7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byYgcGFy
YW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5vZGUo
KTsKICAgICAgICAgQVNTRVJUKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHBhcmFtZXRlclR5cGUpKTsK
ICAgICAgICAgYXV0byYgdW5uYW1lZFBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPihwYXJhbWV0ZXJUeXBlKTsKICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1
bm5hbWVkUGFyYW1ldGVyVHlwZSkpIHsKQEAgLTE2Nyw4ICsxNjcsOCBAQCBTdHJpbmcgd3JpdGVO
YXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFy
dHNXaXRoKCJvcGVyYXRvci4iX3N0cikpIHsKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKICAgICAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwot
ICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlw
ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAg
ICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5zdWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0
aCgpIC0gMSk7CkBAIC0xODAsNyArMTgwLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24o
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAg
ICAgICAgfQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
dHlwZSgpKTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0
cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iKSk7CkBA
IC0xOTEsNyArMTkxLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIl9zdHIp
KSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgp
KTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1
bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIikpOwpAQCAtMjAy
LDggKzIwMiw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW10iKSB7CiAgICAgICAgIEFTU0VS
VChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0g
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7
Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUo
KSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50
eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywg
b3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwgbWV0
YWxQYXJhbWV0ZXIyTmFtZSwgIiBpKSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbVtpXTtcbiIpKTsKQEAgLTIxMyw4ICsyMTMsOCBA
QCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Cisg
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
OwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBhdXRvIGZp
ZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3Bl
cmF0b3ImW10uIl9zdHIubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtc
biIpKTsKQEAgLTIyNSw5ICsyMjUsOSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAg
aWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpIHsK
ICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNp
emUoKSA9PSAzKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMl0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
M05hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVy
bk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
ZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1l
dGVyMU5hbWUsICIgbSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFt
ZXRlcjNOYW1lLCAiIHYpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiICAgIG1baV0gPSB2O1xuIikpOwpAQCAtMjM5LDcgKzIzOSw3IEBAIFN0cmluZyB3
cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaXNPcGVy
YXRvcigpKSB7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVu
Z3RoKCkpOwotICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5
cGUoKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFs
UmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJO
YW1lLCAiIHgpIHtcbiIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoIiAgICByZXR1cm4gIiwgb3BlcmF0b3JOYW1lLCAieDtcbiIpKTsKQEAgLTI0OSw4ICsy
NDksOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CiAgICAgICAgIGF1
dG8gb3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3Ry
aW5nKCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
cjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRv
IG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtc
biIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVy
biB4ICIsIG9wZXJhdG9yTmFtZSwgIiB5O1xuIikpOwpAQCAtMjgzLDcgKzI4Myw3IEBAIFN0cmlu
ZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhc3VpbnQiCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhc2Zsb2F0IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0
YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRh
bFBhcmFtZXRlck5hbWUsICIgeCkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSksICIoeCk7XG4iKSk7CkBAIC0yOTMsOCArMjkzLDggQEAgU3Ry
aW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAicG93IiB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
YXRhbjIiKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIx
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJl
dHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFy
YW1ldGVyMU5hbWUsICIgeCwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iKSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksICIoeCwgeSk7XG4iKSk7CkBAIC0zMzYsMTQg
KzMzNiwxNCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJJbnRlcmxvY2tlZCJfc3RyKSkgewogICAg
ICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkludGVybG9ja2Vk
Q29tcGFyZUV4Y2hhbmdlIikgewogICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIEFTU0VSVChp
czxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKSk7Ci0gICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9
IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRl
clR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgp
KSk7CisgICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9
IGZpcnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAgYXV0byBm
aXJzdEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RB
cmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZEFy
Z3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gdGhpcmRB
cmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8
QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzNdLnR5cGUoKSkpOwotICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0g
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzNdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnQg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBv
aW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5
cGUoKSkpOworICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0gZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzNdLT50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1bWVudEFkZHJlc3NT
cGFjZSA9IGZvdXJ0aEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgICAg
IGF1dG8gZm91cnRoQXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZShmb3VydGhBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwg
JygnLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcs
IGZpcnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIGNv
bXBhcmUsICIsIHRoaXJkQXJndW1lbnQsICIgZGVzaXJlZCwgIiwgY29udmVydEFkZHJlc3NTcGFj
ZShmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZm91cnRoQXJndW1lbnRQb2ludGVl
LCAiKiBvdXQpIHtcbiIpKTsKQEAgLTM1NCwxMyArMzU0LDEzIEBAIFN0cmluZyB3cml0ZU5hdGl2
ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOwotICAgICAgICBBU1NFUlQoaXM8QVNUOjpQ
b2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKSkpOwotICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKTsKKyAgICAgICAgYXV0
byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAg
IGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1lbnRQb2ludGVyLmFk
ZHJlc3NTcGFjZSgpOwogICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgp
KTsKLSAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7
Ci0gICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgpKSk7Ci0gICAgICAgIGF1dG8mIHRoaXJkQXJn
dW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gc2Vjb25k
QXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzPEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsy
XS0+dHlwZSgpKSk7CisgICAgICAgIGF1dG8mIHRoaXJkQXJndW1lbnRQb2ludGVyID0gZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzJdLT50eXBlKCkpOwogICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnRBZGRyZXNzU3BhY2Ug
PSB0aGlyZEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgYXV0byB0aGly
ZEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodGhpcmRBcmd1
bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgIGF1dG8gbmFtZSA9IGF0b21pY05h
bWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJJbnRlcmxvY2tl
ZCJfc3RyLmxlbmd0aCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
CmluZGV4IDYxZDM0OGFmMTU5NjYyM2FmNGMzNzk4ZWE5OTgxZjk0YTQxNjk1NjUuLjI2M2U4Mjhi
ZjY1MWJmYTQ2ZTZlZWZjY2JhOTFiOWViNmUxNTNjOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBs
aWNhdGVGdW5jdGlvbnMuY3BwCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGJvb2wgc2FtZSA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2sp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKClba10udHlwZSgpLCAqZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50
eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpW2tdLT50eXBlKCksICpmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVy
cygpW2tdLT50eXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtODAsOCArODAs
OCBAQCBib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0p
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFt
ZSgpID09ICJvcGVyYXRvciZbXSIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMgotICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0
YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpKSkgewotICAgICAgICAgICAgYXV0byYgdHlwZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFt
ZXRlcnMoKVsxXS50eXBlKCkpOworICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5
cGUgPSBzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpU
eXBlUmVmZXJlbmNlPih0eXBlKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvbHZl
ZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlwZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4oKnJlc29sdmVkVHlwZSkpIHsKQEAgLTkyLDE0ICs5MiwxNCBAQCBib29sIGNoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1l
KCkgPT0gIm9wZXJhdG9yLmxlbmd0aCIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMQotICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkKLSAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlU
eXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkpKQorICAgICAgICAgICAgICAgICAgICYmIChp
czxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVk
VHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKQorICAg
ICAgICAgICAgICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlwZT4oc3RhdGljX2Nhc3Q8Y29u
c3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGVsc2UgaWYg
KGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCiAgICAgICAgICAgICAm
JiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCi0gICAgICAgICAg
ICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1l
ZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQotICAg
ICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6
OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgp
KSkKLSAgICAgICAgICAgICYmIG1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpLCAqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkp
KQorICAgICAgICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0
PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBl
PihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCisgICAgICAgICAgICAgICAgICYmIG1hdGNoZXMo
KmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSwgKmZ1bmN0aW9uc1tp
XS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKaW5kZXggMTM2NWYyNmQxMjM0ODIw
MDBlZTc0MDQ3Y2IzMjFlODAyYjJjNjA4My4uNDY5ZmFjNmY4ZmRiMzZmNWU3YzczMzQwOWViNWE0
Y2JhMWNkY2NkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC0xMjIsOCArMTIyLDggQEAgc3RhdGljIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKEFT
VDo6Q2FsbEUKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAgIGF1dG8gcmV0
dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGNh
bGxFeHByZXNzaW9uLm9yaWdpbigpKSwgZmlyc3RBcmd1bWVudC5hZGRyZXNzU3BhY2UoKSwgZmly
c3RBcmd1bWVudC5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIHsgZmlyc3RBcmd1bWVudC5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51
bGxvcHQsIFdURjo6bnVsbG9wdCkpOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNh
bGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSB9LCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZCht
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcGFyYW1l
dGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVy
OjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWludFR5cGUoKSkpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKICAgICByZXR1cm4gQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51
bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMTMyLDcgKzEzMiw3IEBAIHN0YXRpYyBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aChBU1Q6
OkNhbGxFeHByZXNzCiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBhdXRv
IHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUoKSB9LCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZCht
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CiAgICAgcmV0dXJu
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3Iu
bGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVy
cyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0xNTMsOCArMTUzLDggQEAg
c3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aFJlZmVyZW5j
ZUNvbXBhcmF0b3IoQVNUOjpDYWxsRXgKICAgICAgICAgfSkpOwogICAgIH0pKTsKICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQo
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGFyZ3VtZW50VHlwZS0+Y2xvbmUoKSB9LCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVu
ZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RGTW92ZShhcmd1bWVudFR5cGUpIH0sIFN0
cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4o
Y2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgYXJndW1lbnRUeXBl
LT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBw
YXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4o
TGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKICAgICByZXR1cm4gQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0yMDMsOCArMjAzLDggQEAgc3RhdGljIE9wdGlvbmFs
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihB
U1Q6OkNhbGwKICAgICAgICAgYXV0byByaWdodEFjY2VwdGFiaWxpdHkgPSBhY2NlcHRhYmlsaXR5
KHR5cGVzWzFdLmdldCgpKTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAg
IGlmIChsZWZ0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMgJiYgcmlnaHRBY2Nl
cHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcykgewotICAgICAgICAgICAgYXV0byYgdW5u
YW1lZFR5cGUxID0gdHlwZXNbMF0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKLSAgICAgICAgICAg
IGF1dG8mIHVubmFtZWRUeXBlMiA9IHR5cGVzWzFdLmdldCgpLmdldFVubmFtZWRUeXBlKCk7Cisg
ICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTEgPSAqdHlwZXNbMF0uZ2V0KCkuZ2V0VW5uYW1l
ZFR5cGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlMiA9ICp0eXBlc1sxXS5nZXQo
KS5nZXRVbm5hbWVkVHlwZSgpOwogICAgICAgICAgICAgc3VjY2VzcyA9IG1hdGNoZXModW5uYW1l
ZFR5cGUxLCB1bm5hbWVkVHlwZTIpOwogICAgICAgICB9IGVsc2UgaWYgKChsZWZ0QWNjZXB0YWJp
bGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXliZSAmJiByaWdodEFjY2VwdGFiaWxpdHkgPT0gQWNj
ZXB0YWJpbGl0eTo6WWVzKQogICAgICAgICAgICAgfHwgKGxlZnRBY2NlcHRhYmlsaXR5ID09IEFj
Y2VwdGFiaWxpdHk6OlllcyAmJiByaWdodEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6
TWF5YmUpKQpAQCAtMzA0LDE0ICszMDQsMTQgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92
ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAg
ICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJ
bmRleCA/IDIgOiAxOwogICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBhdXRvJiBmaXJzdFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAg
YXV0byYgZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpV
bm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUpKSB7CiAgICAgICAgICAgICBhdXRv
JiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0UGFyYW1ldGVy
VW5pZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxB
U1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2luZCA9PSBDaGVja0tpbmQ6OkluZGV4KSB7Ci0g
ICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVm
aW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAg
ICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFp
czxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKTsKQEAgLTMyOCwxNCAr
MzI4LDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgIHNpemVfdCBudW1FeHBl
Y3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAzIDogMjsKICAgICAg
ICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVj
dGVkUGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYg
Zmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVu
aWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+
dW5pZnlOb2RlKCk7CiAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3Vt
ZW50VW5pZnlOb2RlKSkgewogICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsKICAgICAgICAgICAg
IGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5
cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoa2luZCA9PSBDaGVja0tpbmQ6OkluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBzZWNvbmRQ
YXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0u
dHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJV
bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkt
PnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25k
UGFyYW1ldGVyVW5pZnlOb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25k
UGFyYW1ldGVyVW5pZnlOb2RlKTsKQEAgLTM0NSw5ICszNDUsOSBAQCBzdGF0aWMgYm9vbCBjaGVj
a09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9u
RGVmaW5pdAogICAgICAgICAgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNJbnQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFt
YXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksICpmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpWzBdLnR5cGUoKSkpCisgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbkRlZmlu
aXRpb24udHlwZSgpLCAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYgdmFsdWVUeXBlID0g
KmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0g
MV0udHlwZSgpOworICAgICAgICBhdXRvJiB2YWx1ZVR5cGUgPSAqZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKVtudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxXS0+dHlwZSgpOwogICAgICAg
ICBhdXRvIGdldHRlck5hbWUgPSBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLnN1YnN0cmluZygw
LCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLmxlbmd0aCgpIC0gMSk7CiAgICAgICAgIGF1dG8q
IGdldHRlckZ1bmNzID0gbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGdldHRlck5hbWUpOwogICAg
ICAgICBpZiAoIWdldHRlckZ1bmNzKQpAQCAtMzU1LDcgKzM1NSw3IEBAIHN0YXRpYyBib29sIGNo
ZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rp
b25EZWZpbml0CiAgICAgICAgIFZlY3RvcjxSZXNvbHZpbmdUeXBlPiBhcmd1bWVudFR5cGVzOwog
ICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYXJn
dW1lbnRUeXBlUmVmZXJlbmNlczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1F
eHBlY3RlZFBhcmFtZXRlcnMgLSAxOyArK2kpCi0gICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFw
cGVuZCgoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+Y2xvbmUo
KSk7CisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgoKmZ1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSktPmNsb25lKCkpOwogICAgICAgICBmb3IgKGF1dG8m
IGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50VHlwZXMpCiAgICAgICAgICAgICBhcmd1bWVudFR5cGVS
ZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5cGUpOwogICAgICAgICBhdXRvKiBvdmVybG9hZCA9
IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgqZ2V0dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJl
ZmVyZW5jZXMsIG51bGxwdHIpOwpAQCAtMzc4LDcgKzM3OCw3IEBAIHN0YXRpYyBib29sIGNoZWNr
T3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IHsKLSAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVu
aWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+
dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5
Tm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0byYg
dW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwpAQCAt
MzkyLDcgKzM5Miw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcisrIiB8
fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvci0tIikgewogICAgICAgICBy
ZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMQotICAgICAg
ICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBl
KCksIGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgICAgICAgICAgJiYgbWF0Y2hlcygq
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLCBmdW5jdGlvbkRlZmlu
aXRpb24udHlwZSgpKTsKICAgICB9CiAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkg
PT0gIm9wZXJhdG9yKyIgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3It
IikKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ID09IDEgfHwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMjsKQEAg
LTQ0NywxOSArNDQ3LDE4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBib29sIGNoZWNrU2hh
ZGVyVHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOwotICAgIHZvaWQgZmluaXNo
VmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYsIEFT
VDo6VW5uYW1lZFR5cGUmIHdyYXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVkVHlwZSogZXh0cmFB
cmd1bWVudFR5cGUgPSBudWxscHRyKTsKICAgICBib29sIGlzQm9vbFR5cGUoUmVzb2x2aW5nVHlw
ZSYpOwogICAgIHN0cnVjdCBSZWN1cnNlSW5mbyB7CiAgICAgICAgIFJlc29sdmluZ1R5cGUmIHJl
c29sdmluZ1R5cGU7Ci0gICAgICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiYgYWRkcmVz
c1NwYWNlOworICAgICAgICBBU1Q6OlR5cGVBbm5vdGF0aW9uJiB0eXBlQW5ub3RhdGlvbjsKICAg
ICB9OwotICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiByZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4
cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTFZhbHVlID0gZmFsc2UpOwotICAgIE9wdGlvbmFsPFJl
Y3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMVmFsdWUg
PSBmYWxzZSk7CisgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJlY3Vyc2VBbmRHZXRJbmZvKEFT
VDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CisgICAgT3B0
aW9uYWw8UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJl
c0xlZnRWYWx1ZSA9IGZhbHNlKTsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mKTsKICAgICBib29sIHJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoQVNUOjpFeHByZXNzaW9u
Jik7Ci0gICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBXVEY6Om51bGxv
cHQpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6
bnVsbG9wdCk7Ci0gICAgdm9pZCBmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZXNvbHZp
bmdUeXBlJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsKKyAg
ICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOworICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6
OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIEFTVDo6VHlw
ZUFubm90YXRpb24pOworICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVz
b2x2aW5nVHlwZSYsIEFTVDo6VHlwZUFubm90YXRpb24pOwogCiAgICAgdm9pZCB2aXNpdChBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKQEAgLTQ5NCw3ICs0OTMsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogCiAgICAg
SGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBSZXNvbHZpbmdUeXBlPiBtX3R5cGVNYXA7Ci0gICAg
SGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4+IG1f
YWRkcmVzc1NwYWNlTWFwOworICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgQVNUOjpUeXBl
QW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbnM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fdmVy
dGV4RW50cnlQb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZnJhZ21lbnRFbnRyeVBvaW50
czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9jb21wdXRlRW50cnlQb2ludHM7CkBAIC01MzgsOCAr
NTM3LDggQEAgYm9vbCBDaGVja2VyOjphc3NpZ25UeXBlcygpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX2FkZHJlc3NT
cGFjZU1hcCkKLSAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0QWRkcmVzc1NwYWNlKGtleVZh
bHVlUGFpci52YWx1ZSk7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX3R5cGVBbm5v
dGF0aW9ucykKKyAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0VHlwZUFubm90YXRpb24oV1RG
TW92ZShrZXlWYWx1ZVBhaXIudmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjIx
LDYgKzYyMCwxNyBAQCBzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
PiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbAogICAgIH0pKTsKIH0KIAorc3Rh
dGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gY29tbWl0KFJlc29sdmlu
Z1R5cGUmIHJlc29sdmluZ1R5cGUpCit7CisgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVk
VHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAg
IHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICBpZiAoIXJlc29sdmFibGVUeXBl
UmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGNvbW1pdChyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSk7
CisgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUo
KS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICB9KSk7Cit9CisKIHZvaWQgQ2hlY2tlcjo6
dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikK
IHsKICAgICBhdXRvKiBiYXNlVHlwZSA9IChbJl0oKSAtPiBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiogewpAQCAtNzI4LDI2ICs3MzgsMjYgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlR5
cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0
eXBlQXJndW1lbnQpOwogfQogCi1hdXRvIENoZWNrZXI6OnJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8
UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OnJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVz
c2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSkgLT4gT3B0aW9uYWw8UmVj
dXJzZUluZm8+CiB7CiAgICAgVmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lvbik7CiAgICAgaWYgKGVy
cm9yKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGdldEluZm8o
ZXhwcmVzc2lvbiwgcmVxdWlyZXNMVmFsdWUpOworICAgIHJldHVybiBnZXRJbmZvKGV4cHJlc3Np
b24sIHJlcXVpcmVzTGVmdFZhbHVlKTsKIH0KIAotYXV0byBDaGVja2VyOjpnZXRJbmZvKEFTVDo6
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8
UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OmdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBleHBy
ZXNzaW9uLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4K
IHsKICAgICBhdXRvIHR5cGVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZleHByZXNzaW9uKTsK
ICAgICBBU1NFUlQodHlwZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CiAKLSAgICBhdXRv
IGFkZHJlc3NTcGFjZUl0ZXJhdG9yID0gbV9hZGRyZXNzU3BhY2VNYXAuZmluZCgmZXhwcmVzc2lv
bik7Ci0gICAgQVNTRVJUKGFkZHJlc3NTcGFjZUl0ZXJhdG9yICE9IG1fYWRkcmVzc1NwYWNlTWFw
LmVuZCgpKTsKLSAgICBpZiAocmVxdWlyZXNMVmFsdWUgJiYgIWFkZHJlc3NTcGFjZUl0ZXJhdG9y
LT52YWx1ZSkgeworICAgIGF1dG8gdHlwZUFubm90YXRpb25JdGVyYXRvciA9IG1fdHlwZUFubm90
YXRpb25zLmZpbmQoJmV4cHJlc3Npb24pOworICAgIEFTU0VSVCh0eXBlQW5ub3RhdGlvbkl0ZXJh
dG9yICE9IG1fdHlwZUFubm90YXRpb25zLmVuZCgpKTsKKyAgICBpZiAocmVxdWlyZXNMZWZ0VmFs
dWUgJiYgdHlwZUFubm90YXRpb25JdGVyYXRvci0+dmFsdWUuaXNSaWdodFZhbHVlKCkpIHsKICAg
ICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9Ci0g
ICAgcmV0dXJuIHt7IHR5cGVJdGVyYXRvci0+dmFsdWUsIGFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52
YWx1ZSB9fTsKKyAgICByZXR1cm4ge3sgdHlwZUl0ZXJhdG9yLT52YWx1ZSwgdHlwZUFubm90YXRp
b25JdGVyYXRvci0+dmFsdWUgfX07CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtNzY3LDE5ICs3NzcsMzIg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxl
RGVjbGFyYXRpb24pCiAgICAgfQogfQogCi12b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpF
eHByZXNzaW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5h
bWVkVHlwZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKK3ZvaWQg
Q2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5
cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHVubmFtZWRUeXBlKSk7CiAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBhdXRv
IGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lv
biwgYWRkcmVzc1NwYWNlKTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fdHlw
ZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwog
ICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4
cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiBy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJl
c3NTcGFjZSkKK3ZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJl
c3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRW
YWx1ZSgpKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lv
biwgV1RGTW92ZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkpOwogICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VB
ZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFj
ZSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5h
ZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKKyAgICBBU1NFUlRfVU5V
U0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50
cnkpOworfQorCit2b2lkIENoZWNrZXI6OmZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhw
cmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlv
biB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQoreworICAgIHJlc29sdmluZ1R5
cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHBy
ZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVN
YXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJlZigpKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9KSk7CisgICAgYXV0
byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Np
b24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NT
cGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCkBA
IC03ODksNiArODEyLDExIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhw
cmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCiAgICAgaWYgKCFsZWZ0SW5mbykKICAgICAg
ICAgcmV0dXJuOwogCisgICAgaWYgKGxlZnRJbmZvLT50eXBlQW5ub3RhdGlvbi5pc1JpZ2h0VmFs
dWUoKSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgYXV0byByaWdodEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhhc3NpZ25tZW50RXhwcmVzc2lv
bi5yaWdodCgpKTsKICAgICBpZiAoIXJpZ2h0SW5mbykKICAgICAgICAgcmV0dXJuOwpAQCAtODAy
LDIzICs4MzAsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNz
aW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKICAgICBhc3NpZ25UeXBlKGFzc2lnbm1lbnRFeHBy
ZXNzaW9uLCBXVEZNb3ZlKCpyZXN1bHRUeXBlKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6Zm9yd2Fy
ZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlJiByZXNvbHZp
bmdUeXBlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlKQotewotICAg
IHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVN
YXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0sIFsmXShSZWZQdHI8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJlZigpKTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9
KSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5h
ZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRyZXNz
U3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLX0KLQog
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFu
ZEdldEluZm8ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSwgdHJ1ZSk7Ci0gICAg
aWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJ
bmZvKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCksIHRydWUpOworICAgIGlm
ICghbGVmdFZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IEZpZ3Vy
ZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJ3MgQW5v
bnltb3VzVmFyaWFibGVzLgpAQCAtODI3LDcgKzg0Miw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
KQogICAgIGlmICghbmV3VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1h
dGNoQW5kQ29tbWl0KGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+cmVz
b2x2aW5nVHlwZSkpIHsKKyAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KGxlZnRWYWx1ZUluZm8tPnJl
c29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSkpIHsKICAgICAgICAgc2V0
RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTg3MywzNyArODg4LDQzIEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUoZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+Y2xvbmUoKSwgcG9pbnRlclR5cGUtPmFk
ZHJlc3NTcGFjZSgpKTsKKyAgICBhc3NpZ25UeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9p
bnRlclR5cGUtPmNsb25lKCksIEFTVDo6TGVmdFZhbHVlIHsgcG9pbnRlclR5cGUtPmFkZHJlc3NT
cGFjZSgpIH0pOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHBy
ZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0g
cmVjdXJzZUFuZEdldEluZm8obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpLCB0cnVlKTsK
LSAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgYXV0byBsZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFu
ZEdldEluZm8obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLCB0cnVlKTsKKyAgICBp
ZiAoIWxlZnRWYWx1ZUluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbGVmdEFkZHJl
c3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2Uo
KTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKICAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGF1dG8qIGxWYWx1ZVR5cGUgPSBnZXRVbm5hbWVk
VHlwZShsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWxWYWx1ZVR5cGUpIHsK
KyAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobGVmdFZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVUeXBlKSB7CiAgICAgICAgIHNldEVy
cm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKG1ha2VQb2lu
dGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9r
ZW4obWFrZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUluZm8tPmFkZHJlc3NT
cGFjZSwgbFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAgIGFzc2lnblR5cGUobWFrZVBvaW50ZXJF
eHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbiht
YWtlUG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgbGVmdFZh
bHVlVHlwZS0+Y2xvbmUoKSkpOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsK
LSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhtYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgYXV0byBs
ZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbi5sZWZ0VmFsdWUoKSk7CisgICAgaWYgKCFsZWZ0VmFsdWVJbmZvKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvKiBsVmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobFZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFsVmFsdWVUeXBlKSB7CisgICAgYXV0byogbGVmdFZh
bHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOwor
ICAgIGlmICghbGVmdFZhbHVlVHlwZSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgYXV0byYgdW5pZnlOb2RlID0gbFZhbHVlVHlwZS0+dW5pZnlO
b2RlKCk7CisgICAgYXV0byYgdW5pZnlOb2RlID0gbGVmdFZhbHVlVHlwZS0+dW5pZnlOb2RlKCk7
CiAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKICAgICAgICAgYXV0
byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwog
ICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7CkBAIC05MTMs
NyArOTM0LDggQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3MKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmICghbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlKSB7Cisg
ICAgICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0
aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgaWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7
CiAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC05MjEsMTgzICs5NDMsMTEyIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzCiAgICAgICAg
IGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKSB7CiAgICAgICAgICAgICBhdXRv
JiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpOwogICAg
ICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KLSAgICAgICAg
ICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBhcnJheVR5
cGUudHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
TGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVm
dEFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIWxWYWx1ZUluZm8tPmFkZHJlc3NT
cGFjZSkgeworICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVB
bm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2Up
IHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFz
c2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBsVmFsdWVUeXBlLT5j
bG9uZSgpKSk7CisgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBt
YWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0
VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQ
cm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5cGUsIEFTVDo6VW5u
YW1lZFR5cGUqIGV4dHJhQXJndW1lbnRUeXBlKQordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRv
dEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7Ci0gICAgdXNpbmcgT3ZlcmxvYWRSZXNvbHV0
aW9uID0gc3RkOjp0dXBsZTxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBBU1Q6OlVubmFtZWRU
eXBlKj47Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1bmN0aW9uOwotICAg
IEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUoZ2V0RnVuY3Rp
b24sIGdldFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlvbiB7Ci0gICAg
ICAgIFJlc29sdmluZ1R5cGUgZ2V0QXJndW1lbnRUeXBlMSh3cmFwcGVkQmFzZVR5cGUuY2xvbmUo
KSk7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IGdldEFyZ3VtZW50VHlwZTI7Ci0g
ICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAgICAgICAgICAgIGdldEFyZ3VtZW50VHlw
ZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgpKTsKKyAgICBhdXRv
IGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oZG90RXhwcmVzc2lvbi5iYXNlKCkpOworICAg
IGlmICghYmFzZUluZm8pCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGJhc2VVbm5hbWVkVHlw
ZSA9IGNvbW1pdChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFiYXNlVW5uYW1l
ZFR5cGUpCisgICAgICAgIHJldHVybjsKIAorICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiog
Z2V0RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVyblR5
cGUgPSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+IGdldEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGdldEFyZ3VtZW50
VHlwZXMuYXBwZW5kKGdldEFyZ3VtZW50VHlwZTEpOwotICAgICAgICBpZiAoZ2V0QXJndW1lbnRU
eXBlMikKLSAgICAgICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpnZXRBcmd1bWVudFR5
cGUyKTsKLQotICAgICAgICBhdXRvKiBnZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwg
Z2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAgICAgIGlmICghZ2V0RnVuY3Rpb24pCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihnZXRGdW5jdGlvbiwgJmdldEZ1bmN0aW9uLT50eXBl
KCkpOwotICAgIH0pKCk7Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0
aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUo
YW5kRnVuY3Rpb24sIGFuZFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlv
biB7Ci0gICAgICAgIGF1dG8gY29tcHV0ZUFuZEFyZ3VtZW50VHlwZSA9IFsmXShBU1Q6OlVubmFt
ZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gewotICAgICAg
ICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHsgdW5uYW1lZFR5cGUuY2xvbmUoKSB9OwotICAgICAgICAgICAg
aWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHsgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBl
KS50eXBlKCkuY2xvbmUoKSkpIH07Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgICAgICAgICByZXR1cm4geyBSZXNvbHZpbmdUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2lu
dGVyVHlwZT4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSks
IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4o
dW5uYW1lZFR5cGUpLmNsb25lKCkpKSB9OwotICAgICAgICB9OwotICAgICAgICBhdXRvIGNvbXB1
dGVBbmRSZXR1cm5UeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBB
U1Q6OlVubmFtZWRUeXBlKiB7Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCk7Ci0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgfTsKLQotICAgICAgICBhdXRvIGFuZEFyZ3VtZW50VHlwZTEgPSBj
b21wdXRlQW5kQXJndW1lbnRUeXBlKHdyYXBwZWRCYXNlVHlwZSk7Ci0gICAgICAgIGlmICghYW5k
QXJndW1lbnRUeXBlMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRy
LCBudWxscHRyKTsKLSAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gYW5kQXJndW1lbnRU
eXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAgICAgICAgICAgYW5kQXJn
dW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOwor
ICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7
CisgICAgICAgIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4
cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwgZ2V0QXJndW1lbnRUeXBlcywgbnVsbHB0
cik7CisgICAgICAgIGlmIChnZXRGdW5jdGlvbikKKyAgICAgICAgICAgIGdldFJldHVyblR5cGUg
PSAmZ2V0RnVuY3Rpb24tPnR5cGUoKTsKKyAgICB9CiAKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIGFuZEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBhbmRS
ZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gYmFz
ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAgICBhdXRv
IGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRv
a2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgYmFzZVVubmFt
ZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFuZEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGFuZEFyZ3Vt
ZW50VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5cGUxKTsKLSAgICAgICAgaWYgKGFuZEFyZ3Vt
ZW50VHlwZTIpCi0gICAgICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZCgqYW5kQXJndW1l
bnRUeXBlMik7Ci0KLSAgICAgICAgYXV0byogYW5kRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25P
dmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRz
KCksIGFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIWFuZEZ1bmN0aW9u
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOwot
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYW5kRnVuY3Rpb24sIGNvbXB1dGVBbmRSZXR1
cm5UeXBlKGFuZEZ1bmN0aW9uLT50eXBlKCkpKTsKLSAgICB9KSgpOworICAgICAgICBhbmRBcmd1
bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIGFuZEZ1
bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2li
bGVBbmRPdmVybG9hZHMoKSwgYW5kQXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlm
IChhbmRGdW5jdGlvbikKKyAgICAgICAgICAgIGFuZFJldHVyblR5cGUgPSAmZG93bmNhc3Q8QVNU
OjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8gRklY
TUU6IEVuZm9yY2UgdGhlIHJldHVybiBvZiBhbmRlcnMgd2lsbCBhbHdheXMgYmUgYSBwb2ludGVy
CisgICAgfQorCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRGdW5jdGlv
biA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogdGhyZWFkQW5kUmV0dXJuVHlwZSA9
IG51bGxwdHI7CisgICAgeworICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkp
LCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlVW5uYW1lZFR5cGUtPmdldCgpLmNsb25l
KCkpOworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4gdGhyZWFkQW5kQXJndW1lbnRUeXBlczsKKyAgICAgICAgdGhyZWFkQW5kQXJndW1lbnRUeXBl
cy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgICAgICB0aHJlYWRBbmRGdW5j
dGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3NpYmxl
QW5kT3ZlcmxvYWRzKCksIHRocmVhZEFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAg
ICBpZiAodGhyZWFkQW5kRnVuY3Rpb24pCisgICAgICAgICAgICB0aHJlYWRBbmRSZXR1cm5UeXBl
ID0gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHRocmVhZEFuZEZ1bmN0aW9uLT50eXBlKCkp
LmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJzIHdp
bGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgIH0KIAotICAgIGlmICghZ2V0UmV0dXJuVHlwZSAm
JiAhYW5kUmV0dXJuVHlwZSkgeworICAgIGlmICghZ2V0RnVuY3Rpb24gJiYgIWFuZEZ1bmN0aW9u
KSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBp
ZiAoZ2V0UmV0dXJuVHlwZSAmJiBhbmRSZXR1cm5UeXBlICYmICFtYXRjaGVzKCpnZXRSZXR1cm5U
eXBlLCAqYW5kUmV0dXJuVHlwZSkpIHsKKyAgICBpZiAoZ2V0RnVuY3Rpb24gJiYgYW5kRnVuY3Rp
b24pIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoYW5kRnVuY3Rpb24gJiYgdGhyZWFkQW5kRnVuY3Rpb24gJiYgIW1hdGNoZXMoKmFuZFJldHVy
blR5cGUsICp0aHJlYWRBbmRSZXR1cm5UeXBlKSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRG
dW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBzZXRSZXR1cm5UeXBlOwotICAgIHN0ZDo6
dGllKHNldEZ1bmN0aW9uLCBzZXRSZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBPdmVybG9hZFJlc29s
dXRpb24gewotICAgICAgICBSZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50MVR5cGUod3JhcHBlZEJh
c2VUeXBlLmNsb25lKCkpOwotICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiBzZXRBcmd1
bWVudFR5cGUyOwotICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCi0gICAgICAgICAgICBz
ZXRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50VHlwZS0+Y2xvbmUo
KSk7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgc2V0QXJndW1lbnQzVHlwZShnZXRSZXR1cm5UeXBl
ID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUtPmNsb25lKCkpOworICAg
IEFTVDo6VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5U
eXBlIDogYW5kUmV0dXJuVHlwZTsKIAorICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0
RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNldFJldHVyblR5cGUg
PSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
UmVzb2x2aW5nVHlwZT4+IHNldEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIHNldEFyZ3VtZW50VHlw
ZXMuYXBwZW5kKHNldEFyZ3VtZW50MVR5cGUpOwotICAgICAgICBpZiAoc2V0QXJndW1lbnRUeXBl
MikKLSAgICAgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpzZXRBcmd1bWVudFR5cGUy
KTsKLSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoc2V0QXJndW1lbnQzVHlwZSk7Ci0K
LSAgICAgICAgYXV0byogc2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwo
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlU2V0T3ZlcmxvYWRzKCksIHNldEFyZ3Vt
ZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIXNldEZ1bmN0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIoc2V0RnVuY3Rpb24sICZzZXRGdW5jdGlvbi0+dHlwZSgpKTsKLSAg
ICB9KSgpOwotCi0gICAgaWYgKHNldEZ1bmN0aW9uKSB7Ci0gICAgICAgIGlmICghbWF0Y2hlcyhz
ZXRGdW5jdGlvbi0+dHlwZSgpLCB3cmFwcGVkQmFzZVR5cGUpKSB7Ci0gICAgICAgICAgICBzZXRF
cnJvcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT3B0
aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKLSAgICBpZiAoZ2V0UmV0dXJu
VHlwZSB8fCBhbmRSZXR1cm5UeXBlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGUgcmVmZXJlbmNl
IGNvbXBpbGVyIGhhcyAiZWxzZSBpZiAoIW5vZGUuYmFzZS5pc0xWYWx1ZSAmJiAhYmFzZVR5cGUu
aXNBcnJheVJlZikiLAotICAgICAgICAvLyBidXQgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSBpdCBl
eGlzdHMuIEkgaGF2ZW4ndCB3cml0dGVuIGl0IGhlcmUsIGFuZCBJJ2xsIGludmVzdGlnYXRlCi0g
ICAgICAgIC8vIGlmIHdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGUgcmVmZXJlbmNlIGNvbXBpbGVy
LgotICAgICAgICBpZiAoaXM8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVkQmFzZVR5cGUpKQot
ICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gZG93bmNhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlPih3
cmFwcGVkQmFzZVR5cGUpLmFkZHJlc3NTcGFjZSgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFjZU1hcC5maW5kKCZw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChhZGRy
ZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7Ci0gICAgICAgICAg
ICBpZiAoYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAgICAgICAgIGFkZHJl
c3NTcGFjZSA9ICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVu
ZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIFJlc29sdmluZ1R5cGUgZmllbGRS
ZXNvbHZpbmdUeXBlKGZpZWxkVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIHNldEFyZ3VtZW50VHlw
ZXMuYXBwZW5kKGZpZWxkUmVzb2x2aW5nVHlwZSk7CisgICAgICAgIHNldEZ1bmN0aW9uID0gcmVz
b2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVTZXRPdmVybG9h
ZHMoKSwgc2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlmIChzZXRGdW5jdGlv
bikKKyAgICAgICAgICAgIHNldFJldHVyblR5cGUgPSAmc2V0RnVuY3Rpb24tPnR5cGUoKTsKICAg
ICB9CiAKLSAgICAvLyBGSVhNRTogR2VuZXJhdGUgdGhlIGNhbGwgZXhwcmVzc2lvbnMKLQotICAg
IGFzc2lnblR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBnZXRSZXR1cm5UeXBlID8gZ2V0
UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUtPmNsb25lKCksIGFkZHJlc3NTcGFj
ZSk7Ci19Ci0KLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gQ2hlY2tlcjo6
cmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKQotewotICAgIGF1dG8gYmFzZUluZm8gPSByZWN1cnNlQW5k
R2V0SW5mbyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICBpZiAoIWJhc2VJ
bmZvKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0byogYmFzZVR5cGUg
PSBnZXRVbm5hbWVkVHlwZShiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFiYXNl
VHlwZSkgeworICAgIGlmIChzZXRGdW5jdGlvbiAmJiBhbmRGdW5jdGlvbikgewogICAgICAgICBz
ZXRFcnJvcigpOwotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0KLSAgICBhdXRv
JiBiYXNlVW5pZnlOb2RlID0gYmFzZVR5cGUtPnVuaWZ5Tm9kZSgpOwotICAgIGlmIChpczxBU1Q6
OlVubmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFT
VDo6VW5uYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpLmNsb25lKCk7Ci0gICAgQVNTRVJUKGlzPEFT
VDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSk7Ci0gICAgcmV0dXJuIHsgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2lu
KCkpLCBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkpIH07Ci19Ci0KLXZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQotewot
ICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGRvdEV4cHJlc3Npb24p
OwotICAgIGlmICghYmFzZVR5cGUpCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBmaW5p
c2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKGRvdEV4cHJlc3Npb24sICpiYXNlVHlwZSk7CisgICAg
ZG90RXhwcmVzc2lvbi5zZXRHZXRGdW5jdGlvbihnZXRGdW5jdGlvbik7CisgICAgZG90RXhwcmVz
c2lvbi5zZXRBbmRGdW5jdGlvbihhbmRGdW5jdGlvbik7CisgICAgZG90RXhwcmVzc2lvbi5zZXRU
aHJlYWRBbmRGdW5jdGlvbih0aHJlYWRBbmRGdW5jdGlvbik7CisgICAgZG90RXhwcmVzc2lvbi5z
ZXRTZXRGdW5jdGlvbihzZXRGdW5jdGlvbik7CisKKyAgICBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5
cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCk7CisgICAgaWYgKGF1dG8gbGVmdEFkZHJl
c3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsK
KyAgICAgICAgaWYgKGFuZEZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFubm90YXRpb24gPSBB
U1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRkcmVzc1NwYWNlIH07CisgICAgICAgIGVsc2UgaWYgKHNl
dEZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkFic3RyYWN0TGVm
dFZhbHVlKCk7CisgICAgfSBlbHNlIGlmICghYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmlzUmln
aHRWYWx1ZSgpICYmIChzZXRGdW5jdGlvbiB8fCBhbmRGdW5jdGlvbikpCisgICAgICAgIHR5cGVB
bm5vdGF0aW9uID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgpOworICAgIGFzc2lnblR5cGUoZG90
RXhwcmVzc2lvbiwgZmllbGRUeXBlLT5jbG9uZSgpLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7
CiB9CiAKLXZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhw
cmVzc2lvbikKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKQogewot
ICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGluZGV4RXhwcmVzc2lv
bik7Ci0gICAgaWYgKCFiYXNlVHlwZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpbmRl
eEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9u
KCkpOwotICAgIGlmICghaW5kZXhJbmZvKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byBpbmRl
eEV4cHJlc3Npb25UeXBlID0gZ2V0VW5uYW1lZFR5cGUoaW5kZXhJbmZvLT5yZXNvbHZpbmdUeXBl
KTsKLSAgICBpZiAoIWluZGV4RXhwcmVzc2lvblR5cGUpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nl
c3MoaW5kZXhFeHByZXNzaW9uLCBXVEZNb3ZlKCpiYXNlVHlwZSksIGluZGV4RXhwcmVzc2lvblR5
cGUpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAogdm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKQEAgLTExMDUs
MTAgKzEwNTYsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
JiB2YXJpYWJsZVJlZmVyZW5jZSkKICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFi
bGUoKSk7CiAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKSk7
CiAgICAgCi0gICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKLSAg
ICBpZiAoIXZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPmlzQW5vbnltb3VzKCkpCi0gICAg
ICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQ7Ci0gICAgYXNzaWdu
VHlwZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlw
ZSgpLT5jbG9uZSgpLCBhZGRyZXNzU3BhY2UpOworICAgIEFTVDo6VHlwZUFubm90YXRpb24gdHlw
ZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKTsKKyAgICBpZiAoIXZhcmlhYmxlUmVmZXJl
bmNlLnZhcmlhYmxlKCktPmlzQW5vbnltb3VzKCkpIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgc2Vl
bSByaWdodC4KKyAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQgfTsKKyAgICBhc3NpZ25UeXBlKHZhcmlhYmxlUmVmZXJlbmNl
LCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCktPmNsb25lKCksIFdURk1vdmUo
dHlwZUFubm90YXRpb24pKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJldHVybiYg
cmV0dXJuU3RhdGVtZW50KQpAQCAtMTQwNyw3ICsxMzU4LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQogICAgIGlmIChlcnJvcigp
KQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBsYXN0SW5mbyA9IGdldEluZm8oY29tbWFFeHBy
ZXNzaW9uLmxpc3QoKS5sYXN0KCkpOwotICAgIGZvcndhcmRUeXBlKGNvbW1hRXhwcmVzc2lvbiwg
bGFzdEluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGZvcndhcmRUeXBlKGNvbW1hRXhwcmVzc2lv
biwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUsIGxhc3RJbmZvLT50eXBlQW5ub3RhdGlvbik7CiB9
CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4
cHJlc3Npb24pCkBAIC0xNDU2LDcgKzE0MDcsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6
Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZnVuY3Rpb24tPnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAoIW1hdGNoQW5kQ29tbWl0KHR5cGVzW2ldLmdldCgpLCAqZnVuY3Rpb24tPnBhcmFtZXRl
cnMoKVtpXS50eXBlKCkpKSB7CisgICAgICAgIGlmICghbWF0Y2hBbmRDb21taXQodHlwZXNbaV0u
Z2V0KCksICpmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLT50eXBlKCkpKSB7CiAgICAgICAgICAg
ICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNw
cAppbmRleCAyZmNjNmYxMzlkZTg0YTMyYzRjNzA3Y2EwNjBiOWJlMWI0MmZkM2UwLi4xNThlMjNi
NDcyZGU0OTkzMWViNzg0MmM5N2I4NGFhMjNkMDk3MGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKQEAgLTIy
Nyw5ICsyMjcsOSBAQCBib29sIGluZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiYgcG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBhcmd1bWVudFR5cGVz
W2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIG1hdGNo
ZXMoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSwgdW5uYW1lZFR5cGUp
OworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVy
cygpW2ldLT50eXBlKCksIHVubmFtZWRUeXBlKTsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsK
LSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5
cGUoKS5jYW5SZXNvbHZlKHBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKS0+
dW5pZnlOb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJz
KClbaV0tPnR5cGUoKS0+dW5pZnlOb2RlKCkpOwogICAgICAgICB9KSk7CiAgICAgICAgIGlmICgh
c3VjY2VzcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAppbmRl
eCAwNTM1MGUwZGM5ODVlY2IzOTBmNTg2ZjBhMzRkMmE2ZWNmZWRjYTMyLi4zY2JlZGQ5YzI1Nzg4
ZmU1ZGUwNTYxMmZmMGRkMjZkNGM4NTRmN2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC0xOTcs
OSArMTk3LDEwIEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNz
aW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOwogICAg
ICAgICAgICAgICAgICAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5vcmln
aW4oKTsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBlcmhhcHMgZG8gdGhpcyB3aXRo
IHZhcmlhbnRzIG9yIGEgUmV3cml0ZXIgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgdm9p
ZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKICAgICAgICAgICAgICAgICAgICAgZG90RXhw
cmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOwogICAgICAgICAgICAgICAgICAgICBhdXRvIGVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbCA9IEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsOjp3cmFw
KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShiYXNlTmFtZSksIFdURk1vdmUobWVtYmVyTmFtZSks
IGVudW1lcmF0aW9uRGVmaW5pdGlvbiwgKm1lbWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIG5l
dyAoJmRvdEV4cHJlc3Npb24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUo
ZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSk7CisgICAgICAgICAgICAgICAgICAgIG5ldyAobG9j
YXRpb24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUoZW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAppbmRleCA1MzMyNTY3NjY0
OWQ3MzMzMDkwYjAxNWE3YjY3MjU3ZmMzNjBiOGQ0Li44MDVhNDYyNDc5N2MxMzRhNDM4N2RjMTk2
NjZmNmVmYTY3NTFkOWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkBAIC0xMDgyLDEzICsxMDgyLDEzIEBAIGF1dG8gUGFy
c2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zLCBFcnJvcj4KICAgICBhdXRvIGZpcnN0UGFyYW1ldGVyID0gcGFyc2VQYXJhbWV0ZXIoKTsK
ICAgICBpZiAoIWZpcnN0UGFyYW1ldGVyKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oZmlyc3RQYXJhbWV0ZXIuZXJyb3IoKSk7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92
ZSgqZmlyc3RQYXJhbWV0ZXIpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqZmlyc3RQYXJhbWV0ZXIpKSk7CiAK
ICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAg
ICBhdXRvIHBhcmFtZXRlciA9IHBhcnNlUGFyYW1ldGVyKCk7CiAgICAgICAgIGlmICghcGFyYW1l
dGVyKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcmFtZXRlci5lcnJv
cigpKTsKLSAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSgqcGFyYW1ldGVyKSk7Cisg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihXVEZNb3ZlKCpwYXJhbWV0ZXIpKSk7CiAgICAgfQogCiAgICAgYXV0byByaWdodFBh
cmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBhcmVudGhl
c2lzKTsKQEAgLTE1NjcsMTQgKzE1NjcsMTQgQEAgYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3QKICAg
ICBpZiAoIWZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKIAotICAgIFZlY3Rv
cjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgIFZlY3RvcjxVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQobWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUoKmZpcnN0VmFyaWFi
bGVEZWNsYXJhdGlvbikpKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlw
ZTo6Q29tbWEpKSB7CiAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFy
aWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICAgICAgaWYgKCF2YXJpYWJs
ZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhcmlh
YmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgq
dmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCp2YXJpYWJsZURlY2xhcmF0aW9u
KSkpOwogICAgIH0KIAogICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocmVzdWx0KSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAppbmRleCA5YTEw
MzVhNGI4Y2FkMzNhMjFlNjcwZjIyMDA1OTFjYzE0OGQ2YjEzLi44NjliN2MzOGNkYjRhOWRjYzFi
Mjk0MTk2NGJlOWQ2ODFhZDhlMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgogI2luY2x1ZGUgIldITFNMUGFyc2VyLmgiCiAjaW5j
bHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmgi
CiAjaW5jbHVkZSAiV0hMU0xSZWN1cnNpb25DaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xSZWN1
cnNpdmVUeXBlQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWNNYXRjaGVyLmgiCkBA
IC04Miw3ICs4Myw3IEBAIHN0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVwYXJlU2hhcmVkKFN0
cmluZyYgd2hsc2xTb3VyY2UpCiAgICAgaWYgKCFjaGVjayhwcm9ncmFtKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFtKTsKLSAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc4OCBS
ZXNvbHZlIHByb3BlcnRpZXMgaGVyZQorICAgIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pOwog
ICAgIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKICAgICBpZiAoIWNoZWNrU3RhdGVtZW50QmVo
YXZpb3IocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0
eVJlc29sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Nzk3ZWE4NTZlMTU1YWZmYmI4NGQ3YmU4YjFmY2Rk
Y2VjMGUwMDgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcApAQCAtMCwwICsxLDM1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5UmVz
b2x2ZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFZpc2l0b3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQ
cm9wZXJ0eVJlc29sdmVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorcHJpdmF0ZToKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6QXNzaWdubWVudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKworICAgIGJvb2wgc2ltcGxpZnlS
aWdodFZhbHVlKEFTVDo6RG90RXhwcmVzc2lvbiYpOworICAgIGJvb2wgc2ltcGxpZnlBYnN0cmFj
dExlZnRWYWx1ZShBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiwgQVNUOjpEb3RFeHByZXNzaW9u
JiwgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiByaWdodCk7CisgICAgdm9pZCBzaW1wbGlm
eUxlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mKTsKKworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnMgbV92YXJpYWJsZURlY2xhcmF0aW9uczsKK307CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZl
cjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIC8vIFVu
bGVzcyB3ZSdyZSBpbnNpZGUgYW4gQXNzaWdubWVudEV4cHJlc3Npb24gb3IgYSBSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLCB3ZSdyZSBhIHJpZ2h0IHZhbHVlLgorICAgIGlmICghc2ltcGxpZnlS
aWdodFZhbHVlKGRvdEV4cHJlc3Npb24pKQorICAgICAgICBzZXRFcnJvcigpOworfQorCit2b2lk
IFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXRpb24pCit7CisgICAgVmlzaXRvcjo6dmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsK
KyAgICBpZiAoIW1fdmFyaWFibGVEZWNsYXJhdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICBmdW5j
dGlvbkRlZmluaXRpb24uYmxvY2soKS5zdGF0ZW1lbnRzKCkuaW5zZXJ0KDAsIG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oTGV4ZXI6OlRva2VuKG1fdmFy
aWFibGVEZWNsYXJhdGlvbnNbMF0tPm9yaWdpbigpKSwgV1RGTW92ZShtX3ZhcmlhYmxlRGVjbGFy
YXRpb25zKSkpOworfQorCit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQoreworICAgIEFTU0VSVChhc3Np
Z25tZW50RXhwcmVzc2lvbi5sZWZ0KCkudHlwZUFubm90YXRpb24oKSk7CisgICAgaWYgKGFzc2ln
bm1lbnRFeHByZXNzaW9uLmxlZnQoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNl
KCkpIHsKKyAgICAgICAgc2ltcGxpZnlMZWZ0VmFsdWUoYXNzaWdubWVudEV4cHJlc3Npb24ubGVm
dCgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJp
Z2h0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCghYXNzaWdubWVudEV4
cHJlc3Npb24ubGVmdCgpLnR5cGVBbm5vdGF0aW9uKCktPmlzUmlnaHRWYWx1ZSgpKTsKKyAgICBp
ZiAoIWlzPEFTVDo6RG90RXhwcmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKSkg
eworICAgICAgICBzZXRFcnJvcigpOyAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgd2l0aCBpbmRl
eCBleHByZXNzaW9ucy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXNpbXBsaWZ5
QWJzdHJhY3RMZWZ0VmFsdWUoYXNzaWdubWVudEV4cHJlc3Npb24sIGRvd25jYXN0PEFTVDo6RG90
RXhwcmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKSwgYXNzaWdubWVudEV4cHJl
c3Npb24udGFrZVJpZ2h0KCkpKQorICAgICAgICBzZXRFcnJvcigpOworfQorCitib29sIFByb3Bl
cnR5UmVzb2x2ZXI6OnNpbXBsaWZ5UmlnaHRWYWx1ZShBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4
cHJlc3Npb24pCit7CisgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3Jp
Z2luKCk7CisKKyAgICBpZiAoYXV0byogYW5kRnVuY3Rpb24gPSBkb3RFeHByZXNzaW9uLmFuZEZ1
bmN0aW9uKCkpIHsKKyAgICAgICAgYXV0byYgYmFzZSA9IGRvdEV4cHJlc3Npb24uYmFzZSgpOwor
ICAgICAgICBBU1NFUlQoYmFzZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VSVChiYXNl
LnR5cGVBbm5vdGF0aW9uKCkpOworICAgICAgICBpZiAoYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0g
YmFzZS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgICAg
IGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIGRvdEV4cHJlc3Npb24udGFrZUJh
c2UoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVu
aXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgKmxlZnRBZGRy
ZXNzU3BhY2UsIGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgICAgIG1h
a2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkp
OworCisgICAgICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3Vt
ZW50czsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9pbnRlckV4
cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBTdHJpbmcoYW5k
RnVuY3Rpb24tPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgICAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0VHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOworICAgICAg
ICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgp
KTsKKyAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kRnVuY3Rpb24p
OworCisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkRlcmVmZXJlbmNlRXhw
cmVzc2lvbikgPCBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBu
ZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGRlcmVmZXJlbmNlIGV4cHJlc3Npb25zIHdpdGhvdXQg
dXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgICAgIHZvaWQqIGxvY2F0aW9uID0g
JmRvdEV4cHJlc3Npb247CisgICAgICAgICAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9u
KCk7CisgICAgICAgICAgICBhdXRvKiBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0
aW9uKSBBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUo
Y2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0
VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVt
ZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBoYXZlIGFuIGFuZGVyLCBi
dXQgbm8gbGVmdCB2YWx1ZSB0byBjYWxsIGl0IG9uLiBMZXQncyBzYXZlIHRoZSB2YWx1ZSBpbnRv
IGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIGNyZWF0ZSBhIGxlZnQgdmFsdWUuCisgICAgICAgIC8v
IFRoaXMgaXMgZWZmZWN0aXZlbHkgaW5saW5pbmcgdGhlIGZ1bmN0aW9ucyB0aGUgc3BlYyBzYXlz
IGFyZSBnZW5lcmF0ZWQuCisgICAgICAgIGlmICghZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5j
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihM
ZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJzKCksIGJhc2UucmVzb2x2ZWRUeXBl
KCktPmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisKKyAg
ICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJh
dGlvbikpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGUoYmFzZS5yZXNvbHZl
ZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwor
CisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBXVEZNb3ZlKHZhcmlh
YmxlUmVmZXJlbmNlMSksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7CisgICAgICAgIGFzc2ln
bm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOwor
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFw
KHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRU
eXBlKGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVy
ZW5jZTItPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZCB9KTsKKworICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmln
aW4pLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMikpOworICAgICAgICBtYWtlUG9pbnRlckV4
cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgYmFzZS5yZXNvbHZlZFR5
cGUoKS0+Y2xvbmUoKSkpOworICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBWZWN0b3I8VW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChX
VEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOworICAgICAgICBhdXRvIGNhbGxFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3Jp
Z2luKSwgU3RyaW5nKGFuZEZ1bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwor
ICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpLmNsb25l
KCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZEZ1bmN0
aW9uKTsKKworICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShj
YWxsRXhwcmVzc2lvbikpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUo
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5
cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpDb21tYUV4cHJlc3Npb24pIDwgc2l6
ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxl
IHRvIGJlY29tZSBjb21tYSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVu
Y2VzIik7CisgICAgICAgIHZvaWQqIGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247CisgICAgICAg
IGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBw
ZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgZXhwcmVzc2lvbnMu
YXBwZW5kKFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSk7CisgICAgICAgIGF1dG8qIGNv
bW1hRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q29tbWFFeHByZXNzaW9uKFdURk1v
dmUob3JpZ2luKSwgV1RGTW92ZShleHByZXNzaW9ucykpOworICAgICAgICBjb21tYUV4cHJlc3Np
b24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUo
KSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY29tbWFFeHByZXNzaW9uLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQg
fSk7CisKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZSh2YXJp
YWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q2FsbEV4cHJlc3Npb24pIDwgc2l6ZW9mKEFTVDo6RG90
RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBj
YWxsIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICBB
U1NFUlQoZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpKTsKKyAgICBhdXRvJiBnZXRGdW5jdGlv
biA9ICpkb3RFeHByZXNzaW9uLmdldEZ1bmN0aW9uKCk7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChkb3RFeHBy
ZXNzaW9uLnRha2VCYXNlKCkpOworICAgIHZvaWQqIGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247
CisgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgIGF1dG8qIGNhbGxFeHBy
ZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpDYWxsRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdp
biksIFN0cmluZyhnZXRGdW5jdGlvbi5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAg
IGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbihnZXRGdW5jdGlvbik7CisgICAgY2FsbEV4cHJl
c3Npb24tPnNldFR5cGUoZ2V0RnVuY3Rpb24udHlwZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHBy
ZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4g
c2V0dGVyQ2FsbChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24sIFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+JiYgbmV3VmFsdWUsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4oKT4mIGxlZnRWYWx1ZUZhY3RvcnksIGNvbnN0IHN0ZDo6ZnVuY3Rp
b248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIHBvaW50ZXJUb0xlZnRWYWx1ZUZhY3Rv
cnkpCit7CisgICAgaWYgKGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rpb24oKSkgeworICAgICAgICAv
LyAqb3BlcmF0b3ImLmZvbygmdikgPSBuZXdWYWx1ZQorICAgICAgICBpZiAoIWRvdEV4cHJlc3Np
b24udGhyZWFkQW5kRnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFy
Z3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChwb2ludGVyVG9MZWZ0VmFsdWVGYWN0
b3J5KCkpOworICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0
cmluZyhkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUo
YXJndW1lbnRzKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Np
b24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgICAgICBjYWxsRXhw
cmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgICAgICBj
YWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rp
b24oKSk7CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lv
bi5vcmlnaW4oKSksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgZGVyZWZlcmVu
Y2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGRvdEV4cHJl
c3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkp
OworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKworICAgICAgICBhdXRv
IGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHBy
ZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUoZGVy
ZWZlcmVuY2VFeHByZXNzaW9uKSwgV1RGTW92ZShuZXdWYWx1ZSkpOworICAgICAgICBhc3NpZ25t
ZW50RXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihkb3RFeHBy
ZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgp
KTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICByZXR1cm4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4oV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgIH0KKworICAgIC8vIHYgPSBv
cGVyYXRvci5mb289KHYsIG5ld1ZhbHVlKQorICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLnNldEZ1
bmN0aW9uKCkpOworCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1
bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChsZWZ0VmFsdWVGYWN0b3J5KCkpOworICAgIGFy
Z3VtZW50cy5hcHBlbmQoV1RGTW92ZShuZXdWYWx1ZSkpOworICAgIGF1dG8gY2FsbEV4cHJlc3Np
b24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RF
eHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKGRvdEV4cHJlc3Npb24uc2V0RnVuY3Rpb24oKS0+
bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlw
ZShkb3RFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIGNh
bGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90RXhwcmVzc2lvbi5zZXRGdW5jdGlvbigpKTsK
KworICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNz
aWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwg
bGVmdFZhbHVlRmFjdG9yeSgpLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgYXNzaWdu
bWVudEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi5zZXRGdW5jdGlvbigpLT50eXBl
KCkuY2xvbmUoKSk7CisgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgIHJldHVybiBVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPihXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7Cit9CisKKy8vIEZJWE1FOiBNYWtl
IHRoZXNlIHN0YXRpYworYm9vbCBQcm9wZXJ0eVJlc29sdmVyOjpzaW1wbGlmeUFic3RyYWN0TGVm
dFZhbHVlKEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mLCBBU1Q6OkRvdEV4cHJlc3Npb24mIGRv
dEV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgcmlnaHQpCit7CisgICAg
Ly8gQ29uc2lkZXIgYS5iLmMuZCA9IGU7CisgICAgLy8gVGhpcyB3b3VsZCBnZXQgdHJhbnNmb3Jt
ZWQgaW50bzoKKyAgICAvLworICAgIC8vIFN0ZXAgMToKKyAgICAvLyBwID0gJmE7CisgICAgLy8K
KyAgICAvLyBTdGVwIDI6CisgICAgLy8gcSA9IG9wZXJhdG9yLmIoKnApOworICAgIC8vIHIgPSBv
cGVyYXRvci5jKHEpOworICAgIC8vCisgICAgLy8gU3RlcCAzOgorICAgIC8vIHIgPSBvcGVyYXRv
ci5kPShyLCBlKTsKKyAgICAvLyBxID0gb3BlcmF0b3IuYz0ocSwgcik7CisgICAgLy8KKyAgICAv
LyBTdGVwIDQ6CisgICAgLy8gKnAgPSBvcGVyYXRvci5iKCpwLCBxKTsKKworICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChyaWdodCk7CisKKyAgICAvLyBGaW5kIHRoZSAiLmIiICIuYyIgYW5kICIuZCIg
ZXhwcmVzc2lvbnMuCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpEb3RF
eHByZXNzaW9uPj4gY2hhaW47CisgICAgQVNUOjpEb3RFeHByZXNzaW9uKiBpdGVyYXRvciA9ICZk
b3RFeHByZXNzaW9uOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIEFTU0VSVChpdGVyYXRv
ci0+YmFzZSgpLnR5cGVBbm5vdGF0aW9uKCkpOworICAgICAgICBpZiAoaXRlcmF0b3ItPmJhc2Uo
KS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgQVNTRVJUKCFpdGVyYXRvci0+YmFzZSgpLnR5cGVBbm5vdGF0aW9uKCktPmlz
UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgY2hhaW4uYXBwZW5kKCppdGVyYXRvcik7CisgICAgICAg
IEFTU0VSVChpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGl0ZXJhdG9yLT5iYXNlKCkpKTsgLy8gRklY
TUU6IE1ha2UgdGhpcyB3b3JrIHdpdGggaW5kZXggZXhwcmVzc2lvbnMKKyAgICAgICAgaXRlcmF0
b3IgPSAmZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKTsKKyAg
ICB9CisgICAgYXV0byBsZWZ0RXhwcmVzc2lvbiA9IGl0ZXJhdG9yLT50YWtlQmFzZSgpOworICAg
IEFTVDo6RXhwcmVzc2lvbiYgaW5uZXJMZWZ0RXhwcmVzc2lvbiA9IGxlZnRFeHByZXNzaW9uOwor
ICAgIHNpbXBsaWZ5TGVmdFZhbHVlKGxlZnRFeHByZXNzaW9uKTsKKworICAgIC8vIENyZWF0ZSAi
cCIgdmFyaWFibGUuCisgICAgQVNTRVJUKGxlZnRFeHByZXNzaW9uLT5yZXNvbHZlZFR5cGUoKSk7
CisgICAgYXV0byBwb2ludGVyVmFyaWFibGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGxlZnRFeHByZXNzaW9uLT5vcmlnaW4oKSksIEFTVDo6
UXVhbGlmaWVycygpLCBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tl
bihsZWZ0RXhwcmVzc2lvbi0+b3JpZ2luKCkpLCAqbGVmdEV4cHJlc3Npb24tPnR5cGVBbm5vdGF0
aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSwgbGVmdEV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgp
LT5jbG9uZSgpKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKworICAg
IC8vIENyZWF0ZSAicSIgYW5kICJyIiB2YXJpYWJsZXMuCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+PiBpbnRlcm1lZGlhdGVWYXJpYWJsZXM7CisgICAgaW50
ZXJtZWRpYXRlVmFyaWFibGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2hhaW4uc2l6ZSgpIC0g
MSk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBjaGFpbi5zaXplKCk7ICsraSkgeworICAg
ICAgICBhdXRvJiBkb3RFeHByZXNzaW9uID0gc3RhdGljX2Nhc3Q8QVNUOjpEb3RFeHByZXNzaW9u
Jj4oY2hhaW5baV0pOworICAgICAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUo
KSk7CisgICAgICAgIGludGVybWVkaWF0ZVZhcmlhYmxlcy51bmNoZWNrZWRBcHBlbmQobWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNz
aW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGRvdEV4cHJlc3Npb24ucmVzb2x2ZWRU
eXBlKCktPmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwor
ICAgIH0KKworICAgIC8vIFN0ZXAgMToKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4+IGV4cHJlc3Npb25zOworICAgIHsKKyAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJl
c3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6
VG9rZW4oaW5uZXJMZWZ0RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUobGVmdEV4cHJlc3Np
b24pKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVS
ZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGlubmVyTGVmdEV4cHJlc3Npb24ub3Jp
Z2luKCkpLCAqaW5uZXJMZWZ0RXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVz
c1NwYWNlKCksIGlubmVyTGVmdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpKTsK
KyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlw
ZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclZhcmlhYmxl
LT50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAv
LyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4oaW5uZXJMZWZ0RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVu
Y2UpLCBXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOworICAgICAgICBhc3NpZ25tZW50
RXhwcmVzc2lvbi0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7Cisg
ICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0
VmFsdWUoKSk7CisKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVu
dEV4cHJlc3Npb24pKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHN0ZXBzIDIt
NC4KKworICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUocG9pbnRlclZh
cmlhYmxlKSk7CisgICAgZm9yIChhdXRvJiBpbnRlcm1lZGlhdGVWYXJpYWJsZSA6IGludGVybWVk
aWF0ZVZhcmlhYmxlcykKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RG
TW92ZShpbnRlcm1lZGlhdGVWYXJpYWJsZSkpOworfQorCitjbGFzcyBMZWZ0VmFsdWVTaW1wbGlm
aWVyIDogcHVibGljIFZpc2l0b3IKK3sKK3B1YmxpYzoKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90
RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24mKSBvdmVycmlkZTsKKworcHJpdmF0ZToKK307CisKK3ZvaWQgTGVmdFZhbHVlU2lt
cGxpZmllcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAg
IFZpc2l0b3I6OnZpc2l0KGRvdEV4cHJlc3Npb24pOworICAgIEFTU0VSVChkb3RFeHByZXNzaW9u
LmJhc2UoKS50eXBlQW5ub3RhdGlvbigpKTsKKyAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5iYXNl
KCkudHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpKTsKKyAgICBBU1NFUlQoZG90
RXhwcmVzc2lvbi5hbmRGdW5jdGlvbigpKTsKKworICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBk
b3RFeHByZXNzaW9uLm9yaWdpbigpOworICAgIGF1dG8qIGFuZEZ1bmN0aW9uID0gZG90RXhwcmVz
c2lvbi5hbmRGdW5jdGlvbigpOworICAgIGF1dG8mIGJhc2UgPSBkb3RFeHByZXNzaW9uLmJhc2Uo
KTsKKyAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSAqZG90RXhwcmVzc2lvbi5iYXNlKCkudHlw
ZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpOworICAgIGF1dG8gbWFrZVBvaW50ZXJF
eHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4
ZXI6OlRva2VuKG9yaWdpbiksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7CisgICAgbWFrZVBv
aW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4o
TGV4ZXI6OlRva2VuKG9yaWdpbiksIGxlZnRBZGRyZXNzU3BhY2UsIGJhc2UucmVzb2x2ZWRUeXBl
KCktPmNsb25lKCkpKTsKKyAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPj4gYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9p
bnRlckV4cHJlc3Npb24pKTsKKyAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgU3RyaW5nKGFuZEZ1
bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIGNhbGxFeHByZXNzaW9u
LT5zZXRUeXBlKGFuZEZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKSk7CisgICAgY2FsbEV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICBjYWxsRXhwcmVz
c2lvbi0+c2V0RnVuY3Rpb24oKmFuZEZ1bmN0aW9uKTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uKSA8IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Np
b24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgZGVyZWZlcmVu
Y2UgZXhwcmVzc2lvbnMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgIHZv
aWQqIGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247CisgICAgZG90RXhwcmVzc2lvbi5+RG90RXhw
cmVzc2lvbigpOworICAgIGF1dG8qIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRp
b24pIEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShj
YWxsRXhwcmVzc2lvbikpOworICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgp
LmNsb25lKCkpOworICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+
dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKK30KKwordm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVy
Ojp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9u
KQoreworICAgIC8vIERlcmVmZXJlbmNlIGV4cHJlc3Npb25zIGFyZSB0aGUgb25seSBleHByZXNz
aW9ucyB3aGVyZSB0aGUgY2hpbGRyZW4gbWlnaHQgYmUgbW9yZS1yaWdodCB0aGFuIHdlIGFyZS4K
KyAgICAvLyBGb3IgZXhhbXBsZSwgYSBkZXJlZmVyZW5jZSBleHByZXNzaW9uIG1heSBiZSBhIGxl
ZnQgdmFsdWUgYnV0IGl0cyBjaGlsZCBtYXkgYmUgYSBjYWxsIGV4cHJlc3Npb24gd2hpY2ggaXMg
YSByaWdodCB2YWx1ZS4KKyAgICAvLyBMZWZ0VmFsdWVTaW1wbGlmaWVyIGRvZXNuJ3QgaGFuZGxl
IHJpZ2h0IHZhbHVlcywgc28gd2UgaW5zdGVhZCBuZWVkIHRvIHVzZSBQcm9wZXJ0eVJlc29sdmVy
LgorICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzPworICAg
IFByb3BlcnR5UmVzb2x2ZXIoKS5WaXNpdG9yOjp2aXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24p
OworfQorCit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnNpbXBsaWZ5TGVmdFZhbHVlKEFTVDo6RXhw
cmVzc2lvbiYgZXhwcmVzc2lvbikKK3sKKyAgICBMZWZ0VmFsdWVTaW1wbGlmaWVyKCkuVmlzaXRv
cjo6dmlzaXQoZXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgcmVzb2x2ZVByb3BlcnRpZXMoUHJvZ3Jh
bSYgcHJvZ3JhbSkKK3sKKyAgICBQcm9wZXJ0eVJlc29sdmVyKCkuVmlzaXRvcjo6dmlzaXQocHJv
Z3JhbSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmUyMjA1ZjkwMmJjYzk0ZWNhOWVmMzNiNThkYTFjNzAxYWI3MmIzNDcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3Bl
cnR5UmVzb2x2ZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgcmVzb2x2ZVByb3BlcnRpZXMoUHJv
Z3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNw
cAppbmRleCBlNzgzOGNlM2Y3MjVhZTA5YWJhMWVkYjUwYTY1OTJjMzQ2MzEzZWU1Li5kYzkzNGRi
ZjcyNmE4MTRhMDgwNGI0Y2NiNTc1MmRiZWNiODFmMzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGNvbnZlcnNpb25D
b3N0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgY2FuZGlkYXRlLCBjb25zdCBWZWN0b3IKICAg
ICAgICAgY29udmVyc2lvbkNvc3QgKz0gYXJndW1lbnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mKSAtPiB1bnNpZ25l
ZCB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiB1bnNpZ25lZCB7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVU
eXBlKCkuY29udmVyc2lvbkNvc3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5
cGUoKS5jb252ZXJzaW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKTsK
ICAgICAgICAgfSkpOwogICAgIH0KICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgY2FuIG5ldmVyIGJl
IGEgbGl0ZXJhbCB0eXBlLCBzbyBpdHMgY29udmVyc2lvbiBjb3N0IGlzIGFsd2F5cyAwLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29s
dmluZ1R5cGUuaAppbmRleCBjYTVjYmI1OTI5Y2Y5ZTE4MThjMmNkNzQxZTc5ZDkzNmNhYWM2OGVl
Li41MGU1MzJiNmE2ZTgyZjFlMDJhMDQ2NzkxYjhlNjY5NmQ1YjExZTE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5
cGUuaApAQCAtNzIsNiArNzIsNyBAQCBwcml2YXRlOgogCiAvLyBUaGlzIGlzIGEgdGhpbiB3cmFw
cGVyIGFyb3VuZCBhIFZhcmlhbnQuCiAvLyBJdCBleGlzdHMgc28gd2UgY2FuIG1ha2Ugc3VyZSB0
aGF0IHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorLy8gRklY
TUU6IFRoaXMgd3JhcHBlciBtaWdodCBub3QgYmUgbmVjZXNzYXJ5LgogY2xhc3MgUmVzb2x2aW5n
VHlwZSB7CiBwdWJsaWM6CiAgICAgUmVzb2x2aW5nVHlwZSgpCkBAIC0xMDIsMTAgKzEwMywxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICBBU1Q6OlVubmFt
ZWRUeXBlJiBnZXRVbm5hbWVkVHlwZSgpCisgICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0VW5uYW1l
ZFR5cGUoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKSk7Ci0gICAgICAgIHJldHVybiBXVEY6
OmdldDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpOworICAgICAgICBpZiAo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5u
ZXIpKQorICAgICAgICAgICAgcmV0dXJuICZXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+KG1faW5uZXIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvcj4gYXV0byB2aXNpdChjb25zdCBWaXNpdG9yJiB2aXNp
dG9yKSAtPiBkZWNsdHlwZShXVEY6OnZpc2l0KHZpc2l0b3IsIHN0ZDo6ZGVjbHZhbDxWYXJpYW50
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPj4mPigpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0
aC5jcHAKaW5kZXggYWUzY2E2NDIzOWUzYjU5ZDM2YWFhYWVlYzdiYTQ3MWJjYjY3Y2ViOS4uNjVl
ZDdhY2Y0M2YyMDA0MDI1MGY5MDY2YTE0YjY0MGI1N2JiZjBjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRv
ckxlbmd0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgYm9v
bCBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9ncmFtJiBwcm9ncmFtKQogICAgIGJv
b2wgaXNPcGVyYXRvciA9IHRydWU7CiAKICAgICBmb3IgKGF1dG8mIGFycmF5VHlwZSA6IGFycmF5
VHlwZXMpIHsKLSAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCB7IGFycmF5VHlwZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oYXJyYXlU
eXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGFycmF5VHlwZS5nZXQoKS5j
bG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIHByb2dyYW0uaW50cmlu
c2ljcygpLnVpbnRUeXBlKCkpLCAib3BlcmF0b3IubGVuZ3RoIl9zdHIsIFdURk1vdmUocGFyYW1l
dGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNv
bnN0cnVjdG9ycy5jcHAKaW5kZXggY2Q3YzM3MDJhZGJlYTI5YWMxOGM1Y2JlNmRiNjA4N2I5ZTAy
ZWQ4YS4uNzRjYzhmMTg0ZTgzNWIzY2UxYzQ5YjVjZTZlYzhkNmE0YTg2OGMxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29u
c3RydWN0b3JzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBz
eW50aGVzaXplQ29uc3RydWN0b3JzKFByb2dyYW0mIHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJh
dG9yID0gdHJ1ZTsKIAogICAgIGZvciAoYXV0byYgdW5uYW1lZFR5cGUgOiB1bm5hbWVkVHlwZXMp
IHsKLSAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIHsgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQpOworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHVubmFtZWRU
eXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHVubmFtZWRUeXBlLmdldCgp
LmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpLCAi
b3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlz
T3BlcmF0b3IpKTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBib29sIHN5bnRoZXNpemVDb25zdHJ1Y3Rv
cnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSY+KG5hbWVkVHlwZSkpICYmIGRvd25j
YXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlw
ZSY+KG5hbWVkVHlwZSkpLmlzQXRvbWljKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNU
OjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2lu
KCkpLCBuYW1lZFR5cGUuZ2V0KCkpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmln
aW4oKSksIG5hbWVkVHlwZS5nZXQoKSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51
bGxvcHQpOwogICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwog
ICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdp
bigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVy
ZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRU
eXBlLmdldCgpKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RG
OjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVt
ZXJhdGlvbkZ1bmN0aW9ucy5jcHAKaW5kZXggMTc5N2ZlNTM5NGM4MWVhY2QzOTU0YWJjNmE4YTY1
YTZjOGZjOTZlMi4uZDc0YWYzM2ExZjA1YTY5MjIxOWM4Y2NlNGFmZGNjOTI5NTEwOTcxZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcApAQCAt
NDEsOCArNDEsOCBAQCBib29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFt
JiBwcm9ncmFtKQogICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAgICAgZm9yIChhdXRvJiBl
bnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkg
ewogICAgICAgICB7Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFi
bGVEZWNsYXJhdGlvbjEoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2lu
KCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmlu
aXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Ci0gICAgICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjIoTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMo
KSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVj
bGFyYXRpb24xID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVy
OjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAo
TGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlv
bkRlZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAg
ICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjIgPSBtYWtlVW5pcXVlUmVmPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2
YXJpYWJsZURlY2xhcmF0aW9uMSkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RG
TW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOwpAQCAtNTIsNyArNTIsNyBAQCBib29sIHN5bnRo
ZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICB9CiAK
ICAgICAgICAgewotICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxl
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRv
a2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRp
b24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAg
ICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmln
aW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBX
VEY6Om51bGxvcHQpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURl
Y2xhcmF0aW9uKSk7CiAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUo
KSwgIm9wZXJhdG9yLnZhbHVlIl9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgaXNPcGVyYXRvcikpOwpAQCAtNjEsNyArNjEsNyBAQCBib29sIHN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICB9CiAKICAgICAgICAgewot
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0
aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICBhdXRvIHZhcmlh
YmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4o
TGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1l
cmF0aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
OwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CiAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgIm9wZXJhdG9y
IGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9y
KSk7CkBAIC03MCwxMCArNzAsMTAgQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlv
bnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgfQogCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24g
PSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVy
YXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwg
V1RGOjpudWxsb3B0KTsKICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVE
ZWNsYXJhdGlvbikpOwotICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVy
OjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0
aW9uKSB9LCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51
bGxvcHQsIGlzT3BlcmF0b3IpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4o
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRp
b24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksICJvcGVyYXRvciBjYXN0Il9z
dHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCmluZGV4IDgyNjcyMjEz
N2U0YzNlMzgyMjc3ODBkYWUxMmIyOWFhYmExYjcyZWUuLjk0NWQwY2VlZmFhMzljZTUwNzQ2MDdk
MmM0NDkzY2YzOTdlOTgzZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzLmNwcApAQCAtNDYsNyArNDYsNyBAQCBib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVB
Y2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVF
bGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi0+c3RydWN0dXJlRWxlbWVudHMoKSkgewogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIFRoZSBnZXR0ZXI6IG9wZXJhdG9yLmZpZWxk
Ci0gICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVy
ZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSB9LCBTdHJpbmcoKSwgV1RG
OjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVE
ZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhl
cjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikp
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAg
ICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVs
ZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgc3Ry
dWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSwgbWFrZVN0cmluZygib3BlcmF0b3IuIiwgc3Ry
dWN0dXJlRWxlbWVudC5uYW1lKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQs
IGlzT3BlcmF0b3IpKTsKQEAgLTU2LDggKzU2LDggQEAgYm9vbCBzeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzKFByb2dyYW0mIHByb2dyYW0pCiAKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KLSAgICAgICAgICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjEoTGV4ZXI6OlRva2VuKHN0
cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBz
dHJ1Y3R1cmVEZWZpbml0aW9uKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOwotICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURl
Y2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6
UXVhbGlmaWVycygpLCB7IHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCkgfSwgU3RyaW5n
KCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAgICBhdXRvIHZh
cmlhYmxlRGVjbGFyYXRpb24xID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZp
bml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAg
ICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7CiAgICAgICAgICAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOwpA
QCAtNjksNyArNjksNyBAQCBib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3Jh
bSYgcHJvZ3JhbSkKICAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCiAg
ICAgICAgICAgICBhdXRvIGNyZWF0ZUFuZGVyID0gWyZdKEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSkgLT4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHsKICAgICAgICAgICAg
ICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4o
TGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UsIEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmln
aW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pKTsKLSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IFdURk1vdmUoYXJndW1lbnRU
eXBlKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAg
ICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oV1RGTW92ZShh
cmd1bWVudFR5cGUpKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAg
ICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAg
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7CiAgICAgICAgICAgICAgICAgYXV0byByZXR1cm5UeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFk
ZHJlc3NTcGFjZSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAppbmRl
eCBlZDJlOGMwMDUyZDZkZmU5YmQwN2JhZjc2NDlkOGNlNDhjOWIwOWJiLi4yZjIwMTUyY2FiN2Fk
MWM3ODI2YmEzZDIxNTE3YTRlYzA5ZWFlZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKQEAgLTUzMiw3ICs1MzIsNyBA
QCB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHJhcCYpCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3Rh
dGVtZW50KQogewogICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50LnZhcmlhYmxlRGVjbGFyYXRpb25zKCkpCi0gICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb24uZ2V0KCkpOwogfQogCiB2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCkBAIC01ODksMTcgKzU4OSwxNyBAQCB2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RF
eHByZXNzaW9uKQogCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVl
KCkpOwogfQogCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9u
JiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
KQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxW
YWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5sZWZ0VmFsdWUoKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24ub2xkVmFsdWUoKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7CiAgICAgaWYgKHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcxY2ZmMWIxMWIy
NzBhNTUzOWFjMjQ0ZjVlNWQzMWVjMjZkNWIwODIuLmIxZTczYTIwYTQyZjQyNWZjYTA0MjkxNDYy
MDU1ODU0NmQ3Yzk5ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zNDksNiArMzQ5LDcgQEAgTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHAKIE1vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJlcGFyZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNv
bHZlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQ
VUJpbmRHcm91cC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cERlc2NyaXB0b3Iu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggMmU1MjlkYzQyNDk2MTQyYzkxOTUxMzRhN2I2NTdkM2NiODEwODk2NC4uNjIxOTVm
N2FjZjk0YmFlYmU1N2Q3MDEzZDI1N2I4NDkxOTc0MmFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQ3OSw2ICs2NDc5LDgg
QEAKIAkJMUNBMEMyRUMyMUVFRDZGNjAwQTExODYwIC8qIFdITFNMTGl0ZXJhbFR5cGVDaGVja2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMDMwREMyNTU5NTAwNjVBOTk0IC8qIEV2
ZW50TG9vcE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV2
ZW50TG9vcE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMTUwREMy
NTVDQTAwNjVBOTk0IC8qIEV2ZW50TG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFdmVudExvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNBQTgyRjYy
MjQyQUUwNTAwRTg0QkJCIC8qIFdITFNMUHJvcGVydHlSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQ0FBODJGNzIyNDJBRTA1MDBFODRCQkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUHJvcGVydHlSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQ0FGMzQ3RTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2Jq
ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ3RjBBNkM0MDUyMDBBQkUwNkUg
LyogV2ViU2NyaXB0T2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViU2NyaXB0T2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
Q0FGMzQ4MDBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTgxNSw2ICsyNTgxNyw4IEBACiAJCQkJQzI0
QTU3QkEyMUZFQUZFQTAwNEM2REQxIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCiAJCQkJQzI0QTU3
QkIyMUZFQUZFQTAwNEM2REQxIC8qIFdITFNMUHJlcGFyZS5oICovLAogCQkJCUMyMUJGNzNBMjFD
RDhENzAwMDIyNzk3OSAvKiBXSExTTFByb2dyYW0uaCAqLywKKwkJCQkxQ0FBODJGNjIyNDJBRTA1
MDBFODRCQkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcCAqLywKKwkJCQkxQ0FBODJGNzIy
NDJBRTA1MDBFODRCQkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmggKi8sCiAJCQkJMUNBMEMy
RTAyMUVFQjVGNTAwQTExODYwIC8qIFdITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHAgKi8sCiAJCQkJ
MUNBMEMyREUyMUVFQjVGNDAwQTExODYwIC8qIFdITFNMUmVjdXJzaW9uQ2hlY2tlci5oICovLAog
CQkJCUMyMzRBOUFEMjFFOTJDMTkwMDNDOTg0RCAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2Vy
LmNwcCAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365669</attachid>
            <date>2019-03-21 19:21:40 -0700</date>
            <delta_ts>2019-03-22 17:25:29 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190321192139.patch</filename>
            <type>text/plain</type>
            <size>133802</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ2NDA4ZmE1M2M1ODg1
ZjBkYThkZTc3OTNiZDRhNDQ3N2Q4ZmE2Ny4uYTRmNTg0NTMxNWI3YzQzNDdmZTMyY2YxNWNiYzdm
MDYzYThhNTNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTAzLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDMt
MTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwYXJlbnRp
bmcgZHVyaW5nIGEgbXV0YXRpb24gZXZlbnQgaW5zaWRlIGFwcGVuZENoaWxkIGNvdWxkIHJlc3Vs
dCBpbiBhIGNpcmN1bGFyIERPTSB0cmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCmluZGV4IDRhNmQ3
YzQ2OTVkYzRjYWM4MjkwNTRlNDA1NTU3ODc2NTE3NWY4NjMuLmQ0MzZkNjg5Yzc4ZTA0MGM1ZmRk
Y2UzOTYwZjM4ZjQzMDE1MGIyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICs0Myw3
MCBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAogfTsK
IAorc3RydWN0IExlZnRWYWx1ZSB7CisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKK307
CisKK3N0cnVjdCBBYnN0cmFjdExlZnRWYWx1ZSB7Cit9OworCitzdHJ1Y3QgUmlnaHRWYWx1ZSB7
Cit9OworCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCitj
bGFzcyBUeXBlQW5ub3RhdGlvbiB7CitwdWJsaWM6CisgICAgVHlwZUFubm90YXRpb24oKQorICAg
ICAgICA6IG1fZW1wdHkodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24o
TGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBU
eXBlQW5ub3RhdGlvbihBYnN0cmFjdExlZnRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIodikK
KyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oUmlnaHRWYWx1ZSB2KQorICAgICAg
ICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oY29uc3Qg
VHlwZUFubm90YXRpb24mKSA9IGRlZmF1bHQ7CisgICAgVHlwZUFubm90YXRpb24oVHlwZUFubm90
YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgVHlwZUFubm90YXRpb24mIG9wZXJhdG9y
PShjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBlQW5ub3RhdGlvbiYg
b3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9uJiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIE9wdGlv
bmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFkZHJlc3NTcGFjZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIW1fZW1wdHkpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxM
ZWZ0VmFsdWU+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PExlZnRWYWx1
ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIH0KKworICAgIGJvb2wgaXNSaWdodFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJp
Z2h0VmFsdWU+KG1faW5uZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNp
dG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6
dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0cmFjdExl
ZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigpKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0
eSk7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW5uZXIpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWYXJpYW50PExlZnRWYWx1ZSwgQWJzdHJhY3RMZWZ0VmFsdWUsIFJp
Z2h0VmFsdWU+IG1faW5uZXI7CisgICAgYm9vbCBtX2VtcHR5IHsgZmFsc2UgfTsKK307CisKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgKaW5kZXggYjEyMWZiNmMx
ZTFkMTc5MjYxNWQ5YmIwMjc0ZmUyMzU4OGE3ZjJiNS4uNzk0MTVlMmZmMzAzMDI5MTA2YjViZjQx
OTc2N2ViNTk5OGYwZTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5o
CkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24mIGxlZnQoKSB7IHJl
dHVybiBtX2xlZnQ7IH0KICAgICBFeHByZXNzaW9uJiByaWdodCgpIHsgcmV0dXJuIG1fcmlnaHQ7
IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiB0YWtlUmlnaHQoKSB7IHJldHVybiBXVEZN
b3ZlKG1fcmlnaHQpOyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1f
bGVmdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBiN2FiMjBjZWQyYzQ1M2Y5NWYxYzJlM2VmYzI4
MWZkYTQ4ZTVjM2FkLi4zMThhODEwNjE2M2RiODdlODVlZjQ4MWVjODg3ZDlkNmM1YzI5Y2MxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xF
eHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRXhwcmVzc2lvbi5oCkBAIC02NSwxMiArNjUsMTIgQEAgcHVibGljOgogICAgICAgICBt
X3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAgIH0KIAotICAgIGNvbnN0IE9wdGlvbmFsPEFkZHJl
c3NTcGFjZT4mIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9
CisgICAgY29uc3QgVHlwZUFubm90YXRpb24qIHR5cGVBbm5vdGF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlQW5ub3RhdGlvbiA/ICYqbV90eXBlQW5ub3RhdGlvbiA6IG51bGxwdHI7IH0KIAot
ICAgIHZvaWQgc2V0QWRkcmVzc1NwYWNlKE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFkZHJlc3NT
cGFjZSkKKyAgICB2b2lkIHNldFR5cGVBbm5vdGF0aW9uKFR5cGVBbm5vdGF0aW9uJiYgdHlwZUFu
bm90YXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoIW1fYWRkcmVzc1NwYWNlKTsKLSAgICAg
ICAgbV9hZGRyZXNzU3BhY2UgPSBhZGRyZXNzU3BhY2U7CisgICAgICAgIEFTU0VSVCghbV90eXBl
QW5ub3RhdGlvbik7CisgICAgICAgIG1fdHlwZUFubm90YXRpb24gPSBXVEZNb3ZlKHR5cGVBbm5v
dGF0aW9uKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBc3NpZ25tZW50RXhwcmVzc2lv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJl
ZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsKLSAgICBPcHRpb25hbDxBZGRyZXNzU3BhY2U+IG1fYWRk
cmVzc1NwYWNlOworICAgIE9wdGlvbmFsPFR5cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5vdGF0aW9u
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKaW5kZXggNjMxNmY1NGUxNjMyNmI0YTQ4M2ZhODcyZTFm
NDdiYjA0OGVkZjg4ZS4uNzcwY2Y4YmE5ZjI1MjcyNmY2OWMxYWU2ZGU1ZWE0YTViMTJiZjc3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaApA
QCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4
cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAg
ICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUo
V1RGTW92ZShsVmFsdWUpKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVl
KSkKICAgICB7CiAgICAgfQogCkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc01ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xWYWx1ZTsg
fQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9CiAK
IHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAgIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TWFrZVBvaW50ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAppbmRleCA3YjA1MmI2ZDVmMjg4
N2Y1OTJkZjQ0ZmQ5NDA5YzRmYTk1MjAzYWE4Li4zNDYwNGQ1NmFlY2M0YjYzMGQ3YTdlNmY3OTZi
OWM4NTM0N2NlMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaApA
QCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZVBvaW50ZXJFeHBy
ZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIE1ha2VQb2ludGVyRXhw
cmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxW
YWx1ZSkKKyAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihX
VEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQorICAg
ICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVlKSkKICAgICB7CiAgICAgfQogCkBA
IC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01ha2VQb2ludGVyRXhwcmVz
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24m
IGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVl
KCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8RXhw
cmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5oCmluZGV4IDJlYzM0ZTE1ZDhhNDBlNWFkMmUyYmY4OTY4MGMyMWMzMzQ0
Yzk5ODguLjAzYWRkZGM3NjNiN2Y4MWRjNzRkY2VmNjk0ZjY0NmNmMjlkZWJkZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCkBAIC01OSwyNyArNTksNTYg
QEAgcHVibGljOgogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiYgcG9zc2libGVHZXRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxl
R2V0T3ZlcmxvYWRzOyB9CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZVNldE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9z
c2libGVTZXRPdmVybG9hZHM7IH0KICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlQW5kT3ZlcmxvYWRzKCkgeyByZXR1cm4g
bV9wb3NzaWJsZUFuZE92ZXJsb2FkczsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1
bmN0aW9uKCkgeyByZXR1cm4gbV9nZXRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRp
b24qIGFuZEZ1bmN0aW9uKCkgeyByZXR1cm4gbV9hbmRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9u
RGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uKCkgeyByZXR1cm4gbV90aHJlYWRBbmRGdW5j
dGlvbjsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIHNldEZ1bmN0aW9uKCkgeyByZXR1cm4g
bV9zZXRGdW5jdGlvbjsgfQogCiAgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fkcyhjb25z
dCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IG92ZXJsb2FkcykKICAgICB7CiAgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMgPSBvdmVy
bG9hZHM7CiAgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29uc3QgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVy
bG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRz
OworICAgIH0KICAgICB2b2lkIHNldFBvc3NpYmxlU2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRz
KQogICAgIHsKICAgICAgICAgbV9wb3NzaWJsZVNldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKICAg
ICB9Ci0gICAgdm9pZCBzZXRQb3NzaWJsZUFuZE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKKwor
ICAgIHZvaWQgc2V0R2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb24p
CiAgICAgewotICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAg
ICAgICBtX2dldEZ1bmN0aW9uID0gZ2V0RnVuY3Rpb247CisgICAgfQorCisgICAgdm9pZCBzZXRB
bmRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbikKKyAgICB7CisgICAg
ICAgIG1fYW5kRnVuY3Rpb24gPSBhbmRGdW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldFRo
cmVhZEFuZEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uKQor
ICAgIHsKKyAgICAgICAgbV90aHJlYWRBbmRGdW5jdGlvbiA9IHRocmVhZEFuZEZ1bmN0aW9uOwor
ICAgIH0KKworICAgIHZvaWQgc2V0U2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0
RnVuY3Rpb24pCisgICAgeworICAgICAgICBtX3NldEZ1bmN0aW9uID0gc2V0RnVuY3Rpb247CiAg
ICAgfQogCiAgICAgRXhwcmVzc2lvbiYgYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiYmIHRha2VCYXNlKCkgeyByZXR1cm4gV1RGTW92ZShtX2Jhc2Up
OyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fYmFzZTsKICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9w
b3NzaWJsZUdldE92ZXJsb2FkczsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsKICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3Nz
aWJsZUFuZE92ZXJsb2FkczsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX2dldEZ1bmN0aW9u
IHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fYW5kRnVuY3Rpb24geyBu
dWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV90aHJlYWRBbmRGdW5jdGlvbiB7
IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX3NldEZ1bmN0aW9uIHsgbnVs
bHB0ciB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKaW5kZXggNzlkOGQwZjcwOGU4ZDA1NzgzMTJjODE3OTRl
ODhlZGFmMzQ4N2NmOS4uMzgxZGU5ZTQzYTc4MTExNmM2ZWU3Nzk4MDdmNDg3NWI5NWYzNTVhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaApAQCAtNDEs
MTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogLyoKLSAq
ICAxLiBFdmFsdWF0ZSBtX2xWYWx1ZQorICogIDEuIEV2YWx1YXRlIG1fbGVmdFZhbHVlCiAgKiAg
Mi4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9vbGRWYWx1ZQogICogIDMuIEV2YWx1YXRlIG1fbmV3
VmFsdWVFeHByZXNzaW9uCiAgKiAgNC4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9uZXdWYWx1ZQot
ICogIDUuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1fbFZhbHVlCisgKiAgNS4gQXNzaWduIHRoZSBy
ZXN1bHQgdG8gbV9sZWZ0VmFsdWUKICAqICA2LiBFdmFsdWF0ZSBtX3Jlc3VsdEV4cHJlc3Npb24K
ICAqICA3LiBSZXR1cm4gdGhlIHJlc3VsdAogICovCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9s
VmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1
ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRW
YWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9u
ZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24qIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJu
IG1fbmV3VmFsdWVFeHByZXNzaW9uID8gJiptX25ld1ZhbHVlRXhwcmVzc2lvbiA6IG51bGxwdHI7
IH0KQEAgLTk0LDE1ICs5NCwxNSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNs
YXNzIFUsIGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gV1RGOjptYWtlVW5pcXVl
UmVmKEFyZ3MmJi4uLik7CiAKLSAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxWYWx1ZSkKKyAgICBSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJl
c3Npb24+IGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmln
aW4pKQotICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKKyAgICAgICAgLCBtX2xl
ZnRWYWx1ZShXVEZNb3ZlKGxlZnRWYWx1ZSkpCiAgICAgICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKICAgICAgICAgLCBtX25ld1ZhbHVlKFdURk1vdmUob3Jp
Z2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCkKICAgICB7CiAgICAgfQogCi0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+
IG1fbFZhbHVlOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKICAgICBW
YXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBt
X25ld1ZhbHVlOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9uZXdWYWx1
ZUV4cHJlc3Npb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKaW5kZXggMTk4
MjRmOTQwNTRlNGIzYjdkN2NmMjRmNjNjMDExOWI4YTYzZjRmYi4uZTUwYWFhZGRlNzg4ZjRlZDg5
ZTljMjZiZjQ0NjM5YzIxNDA0OWNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRp
b24uaApAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxF
eHByZXNzaW9uPj4gbV9pbml0aWFsaXplcjsKIH07CiAKLXVzaW5nIFZhcmlhYmxlRGVjbGFyYXRp
b25zID0gVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+OwordXNpbmcgVmFyaWFibGVEZWNsYXJh
dGlvbnMgPSBWZWN0b3I8VW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+PjsKIAogfSAvLyBu
YW1lc3BhY2UgQVNUCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudC5oCmluZGV4IGU4ZTFmYzdmNWIyMzhkYmIwNDAzZTlmNDAyNzgwNGE3MGE3ZTg4
MWMuLjA5YTAyZDAxZjQ5Njg0YWI5NjNlZjg3MjViMDQ1MmQ1YTM4ZWRmNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaApAQCAtNDAsNyAr
NDAsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50IHsKIHB1YmxpYzoKLSAgICBWYXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFZlY3RvcjxWYXJpYWJsZURlY2xh
cmF0aW9uPiYmIHZhcmlhYmxlRGVjbGFyYXRpb25zKQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiB2
YXJpYWJsZURlY2xhcmF0aW9ucykKICAgICAgICAgOiBTdGF0ZW1lbnQoV1RGTW92ZShvcmlnaW4p
KQogICAgICAgICAsIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMoV1RGTW92ZSh2YXJpYWJsZURlY2xh
cmF0aW9ucykpCiAgICAgewpAQCAtNTMsMTAgKzUzLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiYgdmFyaWFibGVEZWNs
YXJhdGlvbnMoKSB7IHJldHVybiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9y
PFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPj4mIHZhcmlhYmxlRGVjbGFyYXRpb25zKCkg
eyByZXR1cm4gbV92YXJpYWJsZURlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgotICAgIFZlY3Rv
cjxWYXJpYWJsZURlY2xhcmF0aW9uPiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOworICAgIFZhcmlh
YmxlRGVjbGFyYXRpb25zIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcApp
bmRleCA2MjRjNTYyZTUxY2E2MGM2ZWY4ZGUyOGFmZWJhYzUxNGYyYmUwZGJkLi4xYTAwNTNjOWM0
ZDRjNjY2ZmU1ODNjMTIxNjhlOTE3MmVkZjI2NjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xF
bnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCkBAIC0xODgsOSArMTg4LDkgQEAgU3RyaW5nIEVudHJ5
UG9pbnRTY2FmZm9sZGluZzo6bWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkK
ICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uKiBz
dHJ1Y3R1cmVEZWZpbml0aW9uID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAobV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLm5hbWUoKSA9PSBwYXRo
WzBdKSB7CisgICAgICAgIGlmIChtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0t
Pm5hbWUoKSA9PSBwYXRoWzBdKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
X3BhcmFtZXRlclZhcmlhYmxlc1tpXSk7Ci0gICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBt
X2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLT51bmlmeU5vZGUoKTsK
KyAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6
Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlw
ZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAgICAgICAgICAg
IGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCkBAIC0yNDksNyAr
MjQ5LDcgQEAgU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5k
TmFtZWRCdWlsdElucygpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
LnNpemUoKTsgKytpKQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1f
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpW2ldLnR5cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCptX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5
cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fbGF5b3V0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8g
dmFyaWFibGVOYW1lID0gbV9uYW1lZEJpbmRHcm91cHNbaV0udmFyaWFibGVOYW1lOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5j
dGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAppbmRleCAyZmMxNDY1ODYxNmM5ODljYTIxN2M2OTI4
MmFlODZkYzQ4NzE5ZjA4Li5kYWY1ODQ5OGFiZjliYWZiZjZmYmM1YzljZTljM2NlMDIwMGU1ZDU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEZ1bmN0aW9uV3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAo
aSkKICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKTsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpKTsKICAgICB9CiAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwogfQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uCiAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlck5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJp
YWJsZU1hcHBpbmcuYWRkKCZwYXJhbWV0ZXIsIHBhcmFtZXRlck5hbWUpOwogICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKnBhcmFtZXRlci50eXBlKCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKnBhcmFtZXRlci0+dHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJOYW1l
KSk7CiAgICAgICAgIH0KICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7XG4iKTsK
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsK
QEAgLTU3MCw3ICs1NzAsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlcwogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAg
ICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgdm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbiYgbWFrZUFycmEKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7
Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KSk7CiAgICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1h
a2VQb2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRp
dmVGdW5jdGlvbldyaXRlci5jcHAKaW5kZXggNjk3MmU5ODkwNTBhOWExYjdkYTgxMWE4N2MzM2Mz
M2QxZTRlZDI5Yy4uMzQwNjVlNThjMTczYTZjODEyNjRlYjdkZTM1ZDQ5ZjUxOTZmODYyMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xO
YXRpdmVGdW5jdGlvbldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAKQEAgLTExMSw4ICsx
MTEsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICB9CiAKICAgICAgICAgQVNT
RVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsK
LSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
OwotICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byYg
cGFyYW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHBh
cmFtZXRlclR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBwYXJhbWV0ZXJOYW1lZFR5cGUgPSBk
b3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgICAgICBpZiAo
aXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBhcmFtZXRlck5hbWVkVHlwZSkpIHsKQEAg
LTEzNCw3ICsxMzQsNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvci52YWx1ZSIpIHsKICAgICAg
ICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9
PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBv
dXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHgpIHtcbiIpKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBzdGF0
aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIikpOwpAQCAtMTQ1LDggKzE0NSw4
IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiKSB7CiAgICAgICAgIEFTU0VSVF9VTlVT
RUQoaW50cmluc2ljcywgbWF0Y2hlcyhuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSwg
aW50cmluc2ljcy51aW50VHlwZSgpKSk7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byYgcGFy
YW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5vZGUo
KTsKICAgICAgICAgQVNTRVJUKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHBhcmFtZXRlclR5cGUpKTsK
ICAgICAgICAgYXV0byYgdW5uYW1lZFBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPihwYXJhbWV0ZXJUeXBlKTsKICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1
bm5hbWVkUGFyYW1ldGVyVHlwZSkpIHsKQEAgLTE2Nyw4ICsxNjcsOCBAQCBTdHJpbmcgd3JpdGVO
YXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFy
dHNXaXRoKCJvcGVyYXRvci4iX3N0cikpIHsKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKICAgICAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwot
ICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlw
ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAg
ICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5zdWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0
aCgpIC0gMSk7CkBAIC0xODAsNyArMTgwLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24o
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAg
ICAgICAgfQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
dHlwZSgpKTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0
cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iKSk7CkBA
IC0xOTEsNyArMTkxLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIl9zdHIp
KSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgp
KTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1
bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIikpOwpAQCAtMjAy
LDggKzIwMiw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW10iKSB7CiAgICAgICAgIEFTU0VS
VChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0g
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7
Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUo
KSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50
eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywg
b3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwgbWV0
YWxQYXJhbWV0ZXIyTmFtZSwgIiBpKSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbVtpXTtcbiIpKTsKQEAgLTIxMyw4ICsyMTMsOCBA
QCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Cisg
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
OwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBhdXRvIGZp
ZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3Bl
cmF0b3ImW10uIl9zdHIubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtc
biIpKTsKQEAgLTIyNSw5ICsyMjUsOSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAg
aWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpIHsK
ICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNp
emUoKSA9PSAzKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMl0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
M05hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVy
bk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
ZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1l
dGVyMU5hbWUsICIgbSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFt
ZXRlcjNOYW1lLCAiIHYpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiICAgIG1baV0gPSB2O1xuIikpOwpAQCAtMjM5LDcgKzIzOSw3IEBAIFN0cmluZyB3
cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaXNPcGVy
YXRvcigpKSB7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVu
Z3RoKCkpOwotICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5
cGUoKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFs
UmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJO
YW1lLCAiIHgpIHtcbiIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoIiAgICByZXR1cm4gIiwgb3BlcmF0b3JOYW1lLCAieDtcbiIpKTsKQEAgLTI0OSw4ICsy
NDksOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CiAgICAgICAgIGF1
dG8gb3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3Ry
aW5nKCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
cjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRv
IG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtc
biIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVy
biB4ICIsIG9wZXJhdG9yTmFtZSwgIiB5O1xuIikpOwpAQCAtMjgzLDcgKzI4Myw3IEBAIFN0cmlu
ZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhc3VpbnQiCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhc2Zsb2F0IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0
YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRh
bFBhcmFtZXRlck5hbWUsICIgeCkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSksICIoeCk7XG4iKSk7CkBAIC0yOTMsOCArMjkzLDggQEAgU3Ry
aW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAicG93IiB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
YXRhbjIiKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIx
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJl
dHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFy
YW1ldGVyMU5hbWUsICIgeCwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iKSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksICIoeCwgeSk7XG4iKSk7CkBAIC0zMzYsMTQg
KzMzNiwxNCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJJbnRlcmxvY2tlZCJfc3RyKSkgewogICAg
ICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkludGVybG9ja2Vk
Q29tcGFyZUV4Y2hhbmdlIikgewogICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIEFTU0VSVChp
czxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKSk7Ci0gICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9
IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRl
clR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgp
KSk7CisgICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9
IGZpcnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAgYXV0byBm
aXJzdEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RB
cmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZEFy
Z3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gdGhpcmRB
cmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8
QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzNdLnR5cGUoKSkpOwotICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0g
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzNdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnQg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBv
aW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5
cGUoKSkpOworICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0gZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzNdLT50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1bWVudEFkZHJlc3NT
cGFjZSA9IGZvdXJ0aEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgICAg
IGF1dG8gZm91cnRoQXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZShmb3VydGhBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwg
JygnLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcs
IGZpcnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIGNv
bXBhcmUsICIsIHRoaXJkQXJndW1lbnQsICIgZGVzaXJlZCwgIiwgY29udmVydEFkZHJlc3NTcGFj
ZShmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZm91cnRoQXJndW1lbnRQb2ludGVl
LCAiKiBvdXQpIHtcbiIpKTsKQEAgLTM1NCwxMyArMzU0LDEzIEBAIFN0cmluZyB3cml0ZU5hdGl2
ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOwotICAgICAgICBBU1NFUlQoaXM8QVNUOjpQ
b2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKSkpOwotICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKTsKKyAgICAgICAgYXV0
byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAg
IGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1lbnRQb2ludGVyLmFk
ZHJlc3NTcGFjZSgpOwogICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgp
KTsKLSAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7
Ci0gICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgpKSk7Ci0gICAgICAgIGF1dG8mIHRoaXJkQXJn
dW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gc2Vjb25k
QXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzPEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsy
XS0+dHlwZSgpKSk7CisgICAgICAgIGF1dG8mIHRoaXJkQXJndW1lbnRQb2ludGVyID0gZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzJdLT50eXBlKCkpOwogICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnRBZGRyZXNzU3BhY2Ug
PSB0aGlyZEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgYXV0byB0aGly
ZEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodGhpcmRBcmd1
bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgIGF1dG8gbmFtZSA9IGF0b21pY05h
bWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJJbnRlcmxvY2tl
ZCJfc3RyLmxlbmd0aCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
CmluZGV4IDYxZDM0OGFmMTU5NjYyM2FmNGMzNzk4ZWE5OTgxZjk0YTQxNjk1NjUuLjQxZWJhZTZi
NDBkZmVhMzBkYjEzNWVhM2ZlOWIxNGVjMTk3NzhlMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBs
aWNhdGVGdW5jdGlvbnMuY3BwCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGJvb2wgc2FtZSA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2sp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKClba10udHlwZSgpLCAqZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50
eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpW2tdLT50eXBlKCksICpmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVy
cygpW2tdLT50eXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtODAsOCArODAs
OCBAQCBib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0p
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFt
ZSgpID09ICJvcGVyYXRvciZbXSIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMgotICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0
YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpKSkgewotICAgICAgICAgICAgYXV0byYgdHlwZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFt
ZXRlcnMoKVsxXS50eXBlKCkpOworICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5
cGUgPSBzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpU
eXBlUmVmZXJlbmNlPih0eXBlKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvbHZl
ZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlwZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4oKnJlc29sdmVkVHlwZSkpIHsKQEAgLTkyLDE0ICs5MiwxNCBAQCBib29sIGNoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1l
KCkgPT0gIm9wZXJhdG9yLmxlbmd0aCIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMQotICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkKLSAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlU
eXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkpKQorICAgICAgICAgICAgJiYgKGlzPEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4o
KmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpCisgICAgICAgICAg
ICB8fCBpczxBU1Q6OkFycmF5VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlw
ZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQo
KS5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCiAgICAgICAgICAgICAmJiBmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCi0gICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVy
ZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25z
W2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQotICAgICAgICAgICAgJiYgaXM8QVNU
OjpSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1
bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKSkKLSAgICAgICAgICAgICYm
IG1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCAqZnVu
Y3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpKQorICAgICAgICAgICAgJiYg
aXM8QVNUOjpSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBl
Jj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpCisgICAgICAg
ICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5u
YW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKSkK
KyAgICAgICAgICAgICYmIG1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClb
MF0tPnR5cGUoKSwgKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5j
cHAKaW5kZXggMTM2NWYyNmQxMjM0ODIwMDBlZTc0MDQ3Y2IzMjFlODAyYjJjNjA4My4uNDY5ZmFj
NmY4ZmRiMzZmNWU3YzczMzQwOWViNWE0Y2JhMWNkY2NkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC0xMjIsOCAr
MTIyLDggQEAgc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0
aE9wZXJhdG9yQW5kZXJJbmRleGVyKEFTVDo6Q2FsbEUKICAgICBjb25zdCBib29sIGlzT3BlcmF0
b3IgPSB0cnVlOwogICAgIGF1dG8gcmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2lu
dGVyVHlwZT4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgZmlyc3RBcmd1
bWVudC5hZGRyZXNzU3BhY2UoKSwgZmlyc3RBcmd1bWVudC5lbGVtZW50VHlwZSgpLmNsb25lKCkp
OwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0
ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgZmlyc3RBcmd1bWVudC5jbG9u
ZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwotICAgIHBhcmFt
ZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2lj
cy51aW50VHlwZSgpKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsK
KyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIGZpcnN0QXJndW1lbnQuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0KSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBl
UmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGlu
dHJpbnNpY3MudWludFR5cGUoKSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpKTsKICAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBB
U1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwg
U3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMTMy
LDcgKzEzMiw3IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2
ZVdpdGhPcGVyYXRvckxlbmd0aChBU1Q6OkNhbGxFeHByZXNzCiAgICAgY29uc3QgYm9vbCBpc09w
ZXJhdG9yID0gdHJ1ZTsKICAgICBhdXRvIHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51
aW50VHlwZSgpKTsKICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0g
ICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJn
dW1lbnQuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsK
KyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIGZpcnN0QXJndW1lbnQuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0KSk7CiAgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdp
bigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJu
VHlwZSksIFN0cmluZygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwog
fQogCkBAIC0xNTMsOCArMTUzLDggQEAgc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiByZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IoQVNUOjpDYWxsRXgKICAgICAgICAg
fSkpOwogICAgIH0pKTsKICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7
Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGFyZ3Vt
ZW50VHlwZS0+Y2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
KTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RG
TW92ZShhcmd1bWVudFR5cGUpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCkpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1
YWxpZmllcnMoKSwgYXJndW1lbnRUeXBlLT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdp
bigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZN
b3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
KTsKICAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6
OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3Ry
aW5nKCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUo
cGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0yMDMsOCAr
MjAzLDggQEAgc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4g
cmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihBU1Q6OkNhbGwKICAgICAgICAgYXV0byByaWdodEFjY2Vw
dGFiaWxpdHkgPSBhY2NlcHRhYmlsaXR5KHR5cGVzWzFdLmdldCgpKTsKICAgICAgICAgYm9vbCBz
dWNjZXNzID0gZmFsc2U7CiAgICAgICAgIGlmIChsZWZ0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRh
YmlsaXR5OjpZZXMgJiYgcmlnaHRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6Olllcykg
ewotICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUxID0gdHlwZXNbMF0uZ2V0KCkuZ2V0VW5u
YW1lZFR5cGUoKTsKLSAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlMiA9IHR5cGVzWzFdLmdl
dCgpLmdldFVubmFtZWRUeXBlKCk7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTEgPSAq
dHlwZXNbMF0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVubmFt
ZWRUeXBlMiA9ICp0eXBlc1sxXS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgpOwogICAgICAgICAgICAg
c3VjY2VzcyA9IG1hdGNoZXModW5uYW1lZFR5cGUxLCB1bm5hbWVkVHlwZTIpOwogICAgICAgICB9
IGVsc2UgaWYgKChsZWZ0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXliZSAmJiBy
aWdodEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6WWVzKQogICAgICAgICAgICAgfHwg
KGxlZnRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcyAmJiByaWdodEFjY2VwdGFi
aWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6TWF5YmUpKQpAQCAtMzA0LDE0ICszMDQsMTQgQEAgc3Rh
dGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJiBmdW5jdGlvbkRlZmluaXQKICAgICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVy
cyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCA/IDIgOiAxOwogICAgICAgICBpZiAoZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJz
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvJiBmaXJzdFBhcmFtZXRl
clVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
LT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYgZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUgPSAo
KmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgp
OwogICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5v
ZGUpKSB7CiAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5u
YW1lZFR5cGU+KGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxB
U1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2luZCA9
PSBDaGVja0tpbmQ6OkluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJV
bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKS0+
dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUg
PSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSktPnVuaWZ5Tm9k
ZSgpOwogICAgICAgICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVy
VW5pZnlOb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBh
dXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVy
VW5pZnlOb2RlKTsKQEAgLTMyOCwxNCArMzI4LDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0
b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0
CiAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2lu
ZDo6SW5kZXggPyAzIDogMjsKICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAg
ICAgYXV0byYgZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgIGlmIChpczxBU1Q6
OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKSkgewogICAgICAgICAgICAgYXV0
byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50
VW5pZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxB
U1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2luZCA9PSBDaGVja0tpbmQ6OkluZGV4KSB7Ci0g
ICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVm
aW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAg
ICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFp
czxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKTsKQEAgLTM0NSw5ICsz
NDUsOSBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICAgICAgaWYgKCFuYXRpdmVU
eXBlRGVjbGFyYXRpb24uaXNJbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCks
ICpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpCisgICAgICAgIGlm
ICghbWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpLCAqZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgYXV0byYgdmFsdWVUeXBlID0gKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClb
bnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMV0udHlwZSgpOworICAgICAgICBhdXRvJiB2YWx1ZVR5
cGUgPSAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtudW1FeHBlY3RlZFBhcmFtZXRl
cnMgLSAxXS0+dHlwZSgpOwogICAgICAgICBhdXRvIGdldHRlck5hbWUgPSBmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpLnN1YnN0cmluZygwLCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLmxlbmd0
aCgpIC0gMSk7CiAgICAgICAgIGF1dG8qIGdldHRlckZ1bmNzID0gbmFtZUNvbnRleHQuZ2V0RnVu
Y3Rpb25zKGdldHRlck5hbWUpOwogICAgICAgICBpZiAoIWdldHRlckZ1bmNzKQpAQCAtMzU1LDcg
KzM1NSw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgIFZlY3RvcjxSZXNvbHZp
bmdUeXBlPiBhcmd1bWVudFR5cGVzOwogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4gYXJndW1lbnRUeXBlUmVmZXJlbmNlczsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxOyArK2kpCi0gICAg
ICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFw
cGVuZCgoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSktPmNsb25l
KCkpOwogICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50VHlwZXMpCiAg
ICAgICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5cGUpOwog
ICAgICAgICBhdXRvKiBvdmVybG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgqZ2V0
dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMsIG51bGxwdHIpOwpAQCAtMzc4LDcgKzM3
OCw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9
ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUo
KTsKKyAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlz
PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPih1bmlmeU5vZGUpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIHN0YXRpYyBib29sIGNoZWNr
T3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvcisrIiB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvci0tIikgewogICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMQotICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwor
ICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpLCBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKICAgICB9CiAgICAgaWYgKGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKyIgfHwgZnVuY3Rpb25EZWZpbml0
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ItIikKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEgfHwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgPT0gMjsKQEAgLTQ0NywxOSArNDQ3LDE4IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICBib29sIGNoZWNrU2hhZGVyVHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiYpOwotICAgIHZvaWQgZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiYsIEFTVDo6VW5uYW1lZFR5cGUmIHdyYXBwZWRCYXNlVHlwZSwg
QVNUOjpVbm5hbWVkVHlwZSogZXh0cmFBcmd1bWVudFR5cGUgPSBudWxscHRyKTsKICAgICBib29s
IGlzQm9vbFR5cGUoUmVzb2x2aW5nVHlwZSYpOwogICAgIHN0cnVjdCBSZWN1cnNlSW5mbyB7CiAg
ICAgICAgIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGU7Ci0gICAgICAgIE9wdGlvbmFsPEFT
VDo6QWRkcmVzc1NwYWNlPiYgYWRkcmVzc1NwYWNlOworICAgICAgICBBU1Q6OlR5cGVBbm5vdGF0
aW9uJiB0eXBlQW5ub3RhdGlvbjsKICAgICB9OwotICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBy
ZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTFZhbHVlID0g
ZmFsc2UpOwotICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lv
biYsIGJvb2wgcmVxdWlyZXNMVmFsdWUgPSBmYWxzZSk7CisgICAgT3B0aW9uYWw8UmVjdXJzZUlu
Zm8+IHJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMZWZ0
VmFsdWUgPSBmYWxzZSk7CisgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpF
eHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSA9IGZhbHNlKTsKICAgICBPcHRpb25h
bDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNU
OjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKICAgICBib29sIHJlY3Vyc2VBbmRSZXF1aXJl
Qm9vbFR5cGUoQVNUOjpFeHByZXNzaW9uJik7Ci0gICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhw
cmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmLCBPcHRpb25hbDxBU1Q6OkFk
ZHJlc3NTcGFjZT4gPSBXVEY6Om51bGxvcHQpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4
cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIE9wdGlvbmFsPEFT
VDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBmb3J3YXJkVHlwZShB
U1Q6OkV4cHJlc3Npb24mLCBSZXNvbHZpbmdUeXBlJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3Bh
Y2U+ID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9u
JiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOwor
ICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOworICAgIHZvaWQgZm9yd2FyZFR5
cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVzb2x2aW5nVHlwZSYsIEFTVDo6VHlwZUFubm90YXRpb24p
OwogCiAgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKQEAg
LTQ5NCw3ICs0OTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVz
c2lvbiYpIG92ZXJyaWRlOwogCiAgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBSZXNvbHZp
bmdUeXBlPiBtX3R5cGVNYXA7Ci0gICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBPcHRpb25h
bDxBU1Q6OkFkZHJlc3NTcGFjZT4+IG1fYWRkcmVzc1NwYWNlTWFwOworICAgIEhhc2hNYXA8QVNU
OjpFeHByZXNzaW9uKiwgQVNUOjpUeXBlQW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbnM7CiAg
ICAgSGFzaFNldDxTdHJpbmc+IG1fdmVydGV4RW50cnlQb2ludHM7CiAgICAgSGFzaFNldDxTdHJp
bmc+IG1fZnJhZ21lbnRFbnRyeVBvaW50czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9jb21wdXRl
RW50cnlQb2ludHM7CkBAIC01MzgsOCArNTM3LDggQEAgYm9vbCBDaGVja2VyOjphc3NpZ25UeXBl
cygpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBr
ZXlWYWx1ZVBhaXIgOiBtX2FkZHJlc3NTcGFjZU1hcCkKLSAgICAgICAga2V5VmFsdWVQYWlyLmtl
eS0+c2V0QWRkcmVzc1NwYWNlKGtleVZhbHVlUGFpci52YWx1ZSk7CisgICAgZm9yIChhdXRvJiBr
ZXlWYWx1ZVBhaXIgOiBtX3R5cGVBbm5vdGF0aW9ucykKKyAgICAgICAga2V5VmFsdWVQYWlyLmtl
eS0+c2V0VHlwZUFubm90YXRpb24oV1RGTW92ZShrZXlWYWx1ZVBhaXIudmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjIxLDYgKzYyMCwxNyBAQCBzdGF0aWMgT3B0aW9uYWw8VW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiBy
ZXNvbAogICAgIH0pKTsKIH0KIAorc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPj4gY29tbWl0KFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUpCit7CisgICAgcmV0
dXJuIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+PiB7CisgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAg
ICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAg
ICAgICBpZiAoIXJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29s
dmVkVHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbW1pdChyZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICB9
KSk7Cit9CisKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24m
IGVudW1lcmF0aW9uRGVmaW5pdGlvbikKIHsKICAgICBhdXRvKiBiYXNlVHlwZSA9IChbJl0oKSAt
PiBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogewpAQCAtNzI4LDI2ICs3MzgsMjYgQEAgdm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCiAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOwogfQogCi1hdXRvIENoZWNrZXI6
OnJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1
aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OnJlY3Vy
c2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xl
ZnRWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CiB7CiAgICAgVmlzaXRvcjo6dmlzaXQo
ZXhwcmVzc2lvbik7CiAgICAgaWYgKGVycm9yKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgcmV0dXJuIGdldEluZm8oZXhwcmVzc2lvbiwgcmVxdWlyZXNMVmFsdWUpOworICAg
IHJldHVybiBnZXRJbmZvKGV4cHJlc3Npb24sIHJlcXVpcmVzTGVmdFZhbHVlKTsKIH0KIAotYXV0
byBDaGVja2VyOjpnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1
aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OmdldElu
Zm8oQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlKSAt
PiBPcHRpb25hbDxSZWN1cnNlSW5mbz4KIHsKICAgICBhdXRvIHR5cGVJdGVyYXRvciA9IG1fdHlw
ZU1hcC5maW5kKCZleHByZXNzaW9uKTsKICAgICBBU1NFUlQodHlwZUl0ZXJhdG9yICE9IG1fdHlw
ZU1hcC5lbmQoKSk7CiAKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUl0ZXJhdG9yID0gbV9hZGRyZXNz
U3BhY2VNYXAuZmluZCgmZXhwcmVzc2lvbik7Ci0gICAgQVNTRVJUKGFkZHJlc3NTcGFjZUl0ZXJh
dG9yICE9IG1fYWRkcmVzc1NwYWNlTWFwLmVuZCgpKTsKLSAgICBpZiAocmVxdWlyZXNMVmFsdWUg
JiYgIWFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSkgeworICAgIGF1dG8gdHlwZUFubm90YXRp
b25JdGVyYXRvciA9IG1fdHlwZUFubm90YXRpb25zLmZpbmQoJmV4cHJlc3Npb24pOworICAgIEFT
U0VSVCh0eXBlQW5ub3RhdGlvbkl0ZXJhdG9yICE9IG1fdHlwZUFubm90YXRpb25zLmVuZCgpKTsK
KyAgICBpZiAocmVxdWlyZXNMZWZ0VmFsdWUgJiYgdHlwZUFubm90YXRpb25JdGVyYXRvci0+dmFs
dWUuaXNSaWdodFZhbHVlKCkpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIHt7IHR5cGVJdGVyYXRvci0+dmFsdWUs
IGFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSB9fTsKKyAgICByZXR1cm4ge3sgdHlwZUl0ZXJh
dG9yLT52YWx1ZSwgdHlwZUFubm90YXRpb25JdGVyYXRvci0+dmFsdWUgfX07CiB9CiAKIHZvaWQg
Q2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0
aW9uKQpAQCAtNzY3LDE5ICs3NzcsMzIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgfQogfQogCi12b2lkIENo
ZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVkVHlwZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3Bh
Y2U+IGFkZHJlc3NTcGFjZSkKK3ZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Np
b24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRUeXBl
LCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkp
CiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZN
b3ZlKHVubmFtZWRUeXBlKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVz
c1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKKyAgICBhdXRvIGFkZHJl
c3NTcGFjZUFkZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RG
TW92ZSh0eXBlQW5ub3RhdGlvbikpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRk
UmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKLXZvaWQgQ2hl
Y2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgT3B0aW9uYWw8
QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKK3ZvaWQgQ2hlY2tlcjo6YXNzaWduVHlw
ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBl
QW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZSkpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQo
JmV4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1
bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90
YXRpb24pKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVz
c1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIENoZWNrZXI6OmZvcndhcmRU
eXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5n
VHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1
ZSgpKQoreworICAgIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0s
IFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKKyAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJl
ZigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICB9KSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVB
bm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKICAg
ICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVz
dWx0LmlzTmV3RW50cnkpOwogfQogCkBAIC03ODksNiArODEyLDExIEBAIHZvaWQgQ2hlY2tlcjo6
dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCiAg
ICAgaWYgKCFsZWZ0SW5mbykKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGxlZnRJbmZvLT50
eXBlQW5ub3RhdGlvbi5pc1JpZ2h0VmFsdWUoKSkgeworICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgYXV0byByaWdodEluZm8gPSByZWN1cnNlQW5kR2V0
SW5mbyhhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKICAgICBpZiAoIXJpZ2h0SW5mbykK
ICAgICAgICAgcmV0dXJuOwpAQCAtODAyLDIzICs4MzAsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKICAgICBh
c3NpZ25UeXBlKGFzc2lnbm1lbnRFeHByZXNzaW9uLCBXVEZNb3ZlKCpyZXN1bHRUeXBlKSk7CiB9
CiAKLXZvaWQgQ2hlY2tlcjo6Zm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9u
LCBSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFj
ZT4gYWRkcmVzc1NwYWNlKQotewotICAgIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKLSAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25l
KCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50
cnkpOwotICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQp
IHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBy
ZXN1bHQuY29weVJlZigpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKLSAgICB9KSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1
bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKLX0KLQogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgYXV0
byBsVmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5sVmFsdWUoKSwgdHJ1ZSk7Ci0gICAgaWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZh
bHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVm
dFZhbHVlKCksIHRydWUpOworICAgIGlmICghbGVmdFZhbHVlSW5mbykKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSBSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uJ3MgQW5vbnltb3VzVmFyaWFibGVzLgpAQCAtODI3LDcgKzg0Miw3
IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiBy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQogICAgIGlmICghbmV3VmFsdWVJbmZvKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KGxWYWx1ZUluZm8tPnJlc29sdmlu
Z1R5cGUsIG5ld1ZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSkpIHsKKyAgICBpZiAoIW1hdGNoQW5k
Q29tbWl0KGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+cmVzb2x2
aW5nVHlwZSkpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTg3MywzNyArODg4LDQzIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5j
ZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGFzc2lnblR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+
Y2xvbmUoKSwgcG9pbnRlclR5cGUtPmFkZHJlc3NTcGFjZSgpKTsKKyAgICBhc3NpZ25UeXBlKGRl
cmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmNsb25lKCksIEFTVDo6TGVmdFZhbHVl
IHsgcG9pbnRlclR5cGUtPmFkZHJlc3NTcGFjZSgpIH0pOwogfQogCiB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7
Ci0gICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLmxWYWx1ZSgpLCB0cnVlKTsKLSAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgYXV0byBs
ZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxl
ZnRWYWx1ZSgpLCB0cnVlKTsKKyAgICBpZiAoIWxlZnRWYWx1ZUluZm8pCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5v
dGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsK
KyAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGF1dG8q
IGxWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsK
LSAgICBpZiAoIWxWYWx1ZVR5cGUpIHsKKyAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0VW5u
YW1lZFR5cGUobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFsZWZ0VmFs
dWVUeXBlKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhc3NpZ25UeXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6
OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4obWFrZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigp
KSwgKmxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSwgbFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAg
IGFzc2lnblR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6UG9p
bnRlclR5cGU+KExleGVyOjpUb2tlbihtYWtlUG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkpLCAq
bGVmdEFkZHJlc3NTcGFjZSwgbGVmdFZhbHVlVHlwZS0+Y2xvbmUoKSkpOwogfQogCiB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsKLSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5k
R2V0SW5mbyhtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICBpZiAo
IWxWYWx1ZUluZm8pCisgICAgYXV0byBsZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8o
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CisgICAgaWYgKCFsZWZ0
VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBsVmFsdWVUeXBlID0gZ2V0
VW5uYW1lZFR5cGUobFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFsVmFsdWVU
eXBlKSB7CisgICAgYXV0byogbGVmdFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxlZnRWYWx1
ZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGlmICghbGVmdFZhbHVlVHlwZSkgewogICAgICAg
ICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byYgdW5pZnlO
b2RlID0gbFZhbHVlVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgYXV0byYgdW5pZnlOb2RlID0gbGVm
dFZhbHVlVHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVu
aWZ5Tm9kZSkpIHsKICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVu
bmFtZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKSB7CkBAIC05MTMsNyArOTM0LDggQEAgdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3MKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbFZhbHVl
SW5mby0+YWRkcmVzc1NwYWNlKSB7CisgICAgICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxl
ZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICAgICAg
aWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7CiAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC05MjEsMTgzICs5NDMsMTEyIEBAIHZvaWQgQ2hl
Y2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzCiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5
cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5
VHlwZT4odW5uYW1lZFR5cGUpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhlIG51bWJl
ciBvZiBlbGVtZW50cy4KLSAgICAgICAgICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6
OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5m
by0+YWRkcmVzc1NwYWNlLCBhcnJheVR5cGUudHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAg
IGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5j
bG9uZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAoIWxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSkgeworICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFj
ZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAg
ICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2Vu
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRk
cmVzc1NwYWNlLCBsVmFsdWVUeXBlLT5jbG9uZSgpKSk7CisgICAgYXNzaWduVHlwZShtYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSks
ICpsZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKLXZvaWQg
Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiB3
cmFwcGVkQmFzZVR5cGUsIEFTVDo6VW5uYW1lZFR5cGUqIGV4dHJhQXJndW1lbnRUeXBlKQordm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7Ci0g
ICAgdXNpbmcgT3ZlcmxvYWRSZXNvbHV0aW9uID0gc3RkOjp0dXBsZTxBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24qLCBBU1Q6OlVubmFtZWRUeXBlKj47Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIGdldEZ1bmN0aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVyblR5cGU7
Ci0gICAgc3RkOjp0aWUoZ2V0RnVuY3Rpb24sIGdldFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92
ZXJsb2FkUmVzb2x1dGlvbiB7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgZ2V0QXJndW1lbnRUeXBl
MSh3cmFwcGVkQmFzZVR5cGUuY2xvbmUoKSk7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5
cGU+IGdldEFyZ3VtZW50VHlwZTI7Ci0gICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAg
ICAgICAgICAgIGdldEFyZ3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRU
eXBlLT5jbG9uZSgpKTsKKyAgICBhdXRvIGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oZG90
RXhwcmVzc2lvbi5iYXNlKCkpOworICAgIGlmICghYmFzZUluZm8pCisgICAgICAgIHJldHVybjsK
KyAgICBhdXRvIGJhc2VVbm5hbWVkVHlwZSA9IGNvbW1pdChiYXNlSW5mby0+cmVzb2x2aW5nVHlw
ZSk7CisgICAgaWYgKCFiYXNlVW5uYW1lZFR5cGUpCisgICAgICAgIHJldHVybjsKIAorICAgIEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6
VW5uYW1lZFR5cGUqIGdldFJldHVyblR5cGUgPSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGdldEFyZ3VtZW50VHlw
ZXM7Ci0gICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGdldEFyZ3VtZW50VHlwZTEpOwot
ICAgICAgICBpZiAoZ2V0QXJndW1lbnRUeXBlMikKLSAgICAgICAgICAgIGdldEFyZ3VtZW50VHlw
ZXMuYXBwZW5kKCpnZXRBcmd1bWVudFR5cGUyKTsKLQotICAgICAgICBhdXRvKiBnZXRGdW5jdGlv
biA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
cG9zc2libGVHZXRPdmVybG9hZHMoKSwgZ2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAg
ICAgIGlmICghZ2V0RnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
bnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihnZXRGdW5j
dGlvbiwgJmdldEZ1bmN0aW9uLT50eXBlKCkpOwotICAgIH0pKCk7Ci0KLSAgICBBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJl
dHVyblR5cGU7Ci0gICAgc3RkOjp0aWUoYW5kRnVuY3Rpb24sIGFuZFJldHVyblR5cGUpID0gKFsm
XSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlvbiB7Ci0gICAgICAgIGF1dG8gY29tcHV0ZUFuZEFyZ3Vt
ZW50VHlwZSA9IFsmXShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8
UmVzb2x2aW5nVHlwZT4gewotICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgdW5uYW1lZFR5cGUu
Y2xvbmUoKSB9OwotICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlw
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVm
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNU
OjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCkuY2xvbmUoKSkpIH07Ci0gICAgICAgICAg
ICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4geyBSZXNvbHZpbmdUeXBl
KG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25j
YXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpLmNsb25lKCkpKSB9OwotICAgICAg
ICB9OwotICAgICAgICBhdXRvIGNvbXB1dGVBbmRSZXR1cm5UeXBlID0gWyZdKEFTVDo6VW5uYW1l
ZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7Ci0gICAgICAgICAgICBp
ZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJl
dHVybiAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBl
KCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfTsKLQotICAgICAgICBh
dXRvIGFuZEFyZ3VtZW50VHlwZTEgPSBjb21wdXRlQW5kQXJndW1lbnRUeXBlKHdyYXBwZWRCYXNl
VHlwZSk7Ci0gICAgICAgIGlmICghYW5kQXJndW1lbnRUeXBlMSkKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgT3B0aW9uYWw8UmVz
b2x2aW5nVHlwZT4gYW5kQXJndW1lbnRUeXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRU
eXBlKQotICAgICAgICAgICAgYW5kQXJndW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFB
cmd1bWVudFR5cGUtPmNsb25lKCkpOworICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChi
YXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1
bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwg
Z2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlmIChnZXRGdW5jdGlvbikKKyAg
ICAgICAgICAgIGdldFJldHVyblR5cGUgPSAmZ2V0RnVuY3Rpb24tPnR5cGUoKTsKKyAgICB9CiAK
KyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAg
ICBBU1Q6OlVubmFtZWRUeXBlKiBhbmRSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICBpZiAoYXV0
byBsZWZ0QWRkcmVzc1NwYWNlID0gYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNz
U3BhY2UoKSkgeworICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVm
dEFkZHJlc3NTcGFjZSwgYmFzZVVubmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKICAgICAgICAg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFuZEFyZ3VtZW50
VHlwZXM7Ci0gICAgICAgIGFuZEFyZ3VtZW50VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5cGUx
KTsKLSAgICAgICAgaWYgKGFuZEFyZ3VtZW50VHlwZTIpCi0gICAgICAgICAgICBhbmRBcmd1bWVu
dFR5cGVzLmFwcGVuZCgqYW5kQXJndW1lbnRUeXBlMik7Ci0KLSAgICAgICAgYXV0byogYW5kRnVu
Y3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRzKCksIGFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwot
ICAgICAgICBpZiAoIWFuZEZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYW5k
RnVuY3Rpb24sIGNvbXB1dGVBbmRSZXR1cm5UeXBlKGFuZEZ1bmN0aW9uLT50eXBlKCkpKTsKLSAg
ICB9KSgpOworICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2
aW5nVHlwZSk7CisgICAgICAgIGFuZEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJ
bXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVBbmRPdmVybG9hZHMoKSwgYW5kQXJndW1lbnRUeXBl
cywgbnVsbHB0cik7CisgICAgICAgIGlmIChhbmRGdW5jdGlvbikKKyAgICAgICAgICAgIGFuZFJl
dHVyblR5cGUgPSAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUo
KSkuZWxlbWVudFR5cGUoKTsgLy8gRklYTUU6IEVuZm9yY2UgdGhlIHJldHVybiBvZiBhbmRlcnMg
d2lsbCBhbHdheXMgYmUgYSBwb2ludGVyCisgICAgfQorCisgICAgQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiB0aHJlYWRBbmRGdW5jdGlvbiA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlw
ZSogdGhyZWFkQW5kUmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAgeworICAgICAgICBhdXRvIGFy
Z3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2Vu
KGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNl
VW5uYW1lZFR5cGUtPmdldCgpLmNsb25lKCkpOworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gdGhyZWFkQW5kQXJndW1lbnRUeXBlczsKKyAgICAg
ICAgdGhyZWFkQW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUp
OworICAgICAgICB0aHJlYWRBbmRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1w
bChkb3RFeHByZXNzaW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRzKCksIHRocmVhZEFuZEFyZ3VtZW50
VHlwZXMsIG51bGxwdHIpOworICAgICAgICBpZiAodGhyZWFkQW5kRnVuY3Rpb24pCisgICAgICAg
ICAgICB0aHJlYWRBbmRSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHRo
cmVhZEFuZEZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBFbmZvcmNl
IHRoZSByZXR1cm4gb2YgYW5kZXJzIHdpbGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgIH0KIAot
ICAgIGlmICghZ2V0UmV0dXJuVHlwZSAmJiAhYW5kUmV0dXJuVHlwZSkgeworICAgIGlmICghZ2V0
RnVuY3Rpb24gJiYgIWFuZEZ1bmN0aW9uKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0KLSAgICBpZiAoZ2V0UmV0dXJuVHlwZSAmJiBhbmRSZXR1cm5UeXBl
ICYmICFtYXRjaGVzKCpnZXRSZXR1cm5UeXBlLCAqYW5kUmV0dXJuVHlwZSkpIHsKKyAgICBpZiAo
Z2V0RnVuY3Rpb24gJiYgYW5kRnVuY3Rpb24pIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYW5kRnVuY3Rpb24gJiYgdGhyZWFkQW5kRnVuY3Rp
b24gJiYgIW1hdGNoZXMoKmFuZFJldHVyblR5cGUsICp0aHJlYWRBbmRSZXR1cm5UeXBlKSkgewog
ICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBz
ZXRSZXR1cm5UeXBlOwotICAgIHN0ZDo6dGllKHNldEZ1bmN0aW9uLCBzZXRSZXR1cm5UeXBlKSA9
IChbJl0oKSAtPiBPdmVybG9hZFJlc29sdXRpb24gewotICAgICAgICBSZXNvbHZpbmdUeXBlIHNl
dEFyZ3VtZW50MVR5cGUod3JhcHBlZEJhc2VUeXBlLmNsb25lKCkpOwotICAgICAgICBPcHRpb25h
bDxSZXNvbHZpbmdUeXBlPiBzZXRBcmd1bWVudFR5cGUyOwotICAgICAgICBpZiAoZXh0cmFBcmd1
bWVudFR5cGUpCi0gICAgICAgICAgICBzZXRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShl
eHRyYUFyZ3VtZW50VHlwZS0+Y2xvbmUoKSk7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgc2V0QXJn
dW1lbnQzVHlwZShnZXRSZXR1cm5UeXBlID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJl
dHVyblR5cGUtPmNsb25lKCkpOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdl
dFJldHVyblR5cGUgPyBnZXRSZXR1cm5UeXBlIDogYW5kUmV0dXJuVHlwZTsKIAorICAgIEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5u
YW1lZFR5cGUqIHNldFJldHVyblR5cGUgPSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHNldEFyZ3VtZW50VHlwZXM7
Ci0gICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKHNldEFyZ3VtZW50MVR5cGUpOwotICAg
ICAgICBpZiAoc2V0QXJndW1lbnRUeXBlMikKLSAgICAgICAgICAgIHNldEFyZ3VtZW50VHlwZXMu
YXBwZW5kKCpzZXRBcmd1bWVudFR5cGUyKTsKLSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBl
bmQoc2V0QXJndW1lbnQzVHlwZSk7Ci0KLSAgICAgICAgYXV0byogc2V0RnVuY3Rpb24gPSByZXNv
bHZlRnVuY3Rpb25PdmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxl
U2V0T3ZlcmxvYWRzKCksIHNldEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAo
IXNldEZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIs
IG51bGxwdHIpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc2V0RnVuY3Rpb24sICZz
ZXRGdW5jdGlvbi0+dHlwZSgpKTsKLSAgICB9KSgpOwotCi0gICAgaWYgKHNldEZ1bmN0aW9uKSB7
Ci0gICAgICAgIGlmICghbWF0Y2hlcyhzZXRGdW5jdGlvbi0+dHlwZSgpLCB3cmFwcGVkQmFzZVR5
cGUpKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NT
cGFjZTsKLSAgICBpZiAoZ2V0UmV0dXJuVHlwZSB8fCBhbmRSZXR1cm5UeXBlKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBUaGUgcmVmZXJlbmNlIGNvbXBpbGVyIGhhcyAiZWxzZSBpZiAoIW5vZGUuYmFz
ZS5pc0xWYWx1ZSAmJiAhYmFzZVR5cGUuaXNBcnJheVJlZikiLAotICAgICAgICAvLyBidXQgSSBk
b24ndCB1bmRlcnN0YW5kIHdoeSBpdCBleGlzdHMuIEkgaGF2ZW4ndCB3cml0dGVuIGl0IGhlcmUs
IGFuZCBJJ2xsIGludmVzdGlnYXRlCi0gICAgICAgIC8vIGlmIHdlIGNhbiByZW1vdmUgaXQgZnJv
bSB0aGUgcmVmZXJlbmNlIGNvbXBpbGVyLgotICAgICAgICBpZiAoaXM8QVNUOjpSZWZlcmVuY2VU
eXBlPih3cmFwcGVkQmFzZVR5cGUpKQotICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gZG93bmNh
c3Q8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVkQmFzZVR5cGUpLmFkZHJlc3NTcGFjZSgpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBt
X2FkZHJlc3NTcGFjZU1hcC5maW5kKCZwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsK
LSAgICAgICAgICAgIEFTU0VSVChhZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFj
ZU1hcC5lbmQoKSk7Ci0gICAgICAgICAgICBpZiAoYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVl
KQotICAgICAgICAgICAgICAgIGFkZHJlc3NTcGFjZSA9ICphZGRyZXNzU3BhY2VJdGVyYXRvci0+
dmFsdWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAg
ICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAg
ICAgIFJlc29sdmluZ1R5cGUgZmllbGRSZXNvbHZpbmdUeXBlKGZpZWxkVHlwZS0+Y2xvbmUoKSk7
CisgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGZpZWxkUmVzb2x2aW5nVHlwZSk7Cisg
ICAgICAgIHNldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJl
c3Npb24ucG9zc2libGVTZXRPdmVybG9hZHMoKSwgc2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7
CisgICAgICAgIGlmIChzZXRGdW5jdGlvbikKKyAgICAgICAgICAgIHNldFJldHVyblR5cGUgPSAm
c2V0RnVuY3Rpb24tPnR5cGUoKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogR2VuZXJhdGUgdGhl
IGNhbGwgZXhwcmVzc2lvbnMKLQotICAgIGFzc2lnblR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLCBnZXRSZXR1cm5UeXBlID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5
cGUtPmNsb25lKCksIGFkZHJlc3NTcGFjZSk7Ci19Ci0KLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPj4gQ2hlY2tlcjo6cmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQotewotICAgIGF1
dG8gYmFzZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
YmFzZSgpKTsKLSAgICBpZiAoIWJhc2VJbmZvKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgYXV0byogYmFzZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShiYXNlSW5mby0+cmVzb2x2
aW5nVHlwZSk7Ci0gICAgaWYgKCFiYXNlVHlwZSkgeworICAgIGlmIChzZXRGdW5jdGlvbiAmJiBh
bmRGdW5jdGlvbikgewogICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIH0KLSAgICBhdXRvJiBiYXNlVW5pZnlOb2RlID0gYmFzZVR5cGUtPnVuaWZ5
Tm9kZSgpOwotICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSkKLSAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpLmNs
b25lKCk7Ci0gICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSk7Ci0g
ICAgcmV0dXJuIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFz
ZVVuaWZ5Tm9kZSkpIH07Ci19Ci0KLXZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNz
aW9uJiBkb3RFeHByZXNzaW9uKQotewotICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3Jh
cEJhc2VUeXBlKGRvdEV4cHJlc3Npb24pOwotICAgIGlmICghYmFzZVR5cGUpCiAgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLSAgICBmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKGRvdEV4cHJl
c3Npb24sICpiYXNlVHlwZSk7CisgICAgZG90RXhwcmVzc2lvbi5zZXRHZXRGdW5jdGlvbihnZXRG
dW5jdGlvbik7CisgICAgZG90RXhwcmVzc2lvbi5zZXRBbmRGdW5jdGlvbihhbmRGdW5jdGlvbik7
CisgICAgZG90RXhwcmVzc2lvbi5zZXRUaHJlYWRBbmRGdW5jdGlvbih0aHJlYWRBbmRGdW5jdGlv
bik7CisgICAgZG90RXhwcmVzc2lvbi5zZXRTZXRGdW5jdGlvbihzZXRGdW5jdGlvbik7CisKKyAg
ICBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCk7
CisgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlv
bi5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgaWYgKGFuZEZ1bmN0aW9uKQorICAgICAg
ICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRkcmVzc1NwYWNl
IH07CisgICAgICAgIGVsc2UgaWYgKHNldEZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFubm90
YXRpb24gPSBBU1Q6OkFic3RyYWN0TGVmdFZhbHVlKCk7CisgICAgfSBlbHNlIGlmICghYmFzZUlu
Zm8tPnR5cGVBbm5vdGF0aW9uLmlzUmlnaHRWYWx1ZSgpICYmIChzZXRGdW5jdGlvbiB8fCBhbmRG
dW5jdGlvbikpCisgICAgICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1
ZSgpOworICAgIGFzc2lnblR5cGUoZG90RXhwcmVzc2lvbiwgZmllbGRUeXBlLT5jbG9uZSgpLCBX
VEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJ
bmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpJbmRleEV4cHJlc3Npb24mKQogewotICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3Jh
cEJhc2VUeXBlKGluZGV4RXhwcmVzc2lvbik7Ci0gICAgaWYgKCFiYXNlVHlwZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byBpbmRleEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhpbmRleEV4
cHJlc3Npb24uaW5kZXhFeHByZXNzaW9uKCkpOwotICAgIGlmICghaW5kZXhJbmZvKQotICAgICAg
ICByZXR1cm47Ci0gICAgYXV0byBpbmRleEV4cHJlc3Npb25UeXBlID0gZ2V0VW5uYW1lZFR5cGUo
aW5kZXhJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWluZGV4RXhwcmVzc2lvblR5cGUp
IHsKLSAgICAgICAgc2V0RXJyb3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZp
bmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoaW5kZXhFeHByZXNzaW9uLCBXVEZNb3ZlKCpiYXNl
VHlwZSksIGluZGV4RXhwcmVzc2lvblR5cGUpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJp
YWJsZVJlZmVyZW5jZSkKQEAgLTExMDUsMTAgKzEwNTYsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKICAgICBBU1NFUlQo
dmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CiAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJl
bmNlLnZhcmlhYmxlKCktPnR5cGUoKSk7CiAgICAgCi0gICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNz
U3BhY2U+IGFkZHJlc3NTcGFjZTsKLSAgICBpZiAoIXZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxl
KCktPmlzQW5vbnltb3VzKCkpCi0gICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6QWRkcmVzc1Nw
YWNlOjpUaHJlYWQ7Ci0gICAgYXNzaWduVHlwZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVS
ZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgpLT5jbG9uZSgpLCBhZGRyZXNzU3BhY2UpOworICAg
IEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKTsK
KyAgICBpZiAoIXZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPmlzQW5vbnltb3VzKCkpIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgc2VlbSByaWdodC4KKyAgICAgICAgdHlwZUFubm90YXRpb24g
PSBBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfTsKKyAgICBhc3Np
Z25UeXBlKHZhcmlhYmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50
eXBlKCktPmNsb25lKCksIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0KIAogdm9pZCBDaGVj
a2VyOjp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQpAQCAtMTQwNyw3ICsxMzU4
LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHBy
ZXNzaW9uKQogICAgIGlmIChlcnJvcigpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBsYXN0
SW5mbyA9IGdldEluZm8oY29tbWFFeHByZXNzaW9uLmxpc3QoKS5sYXN0KCkpOwotICAgIGZvcndh
cmRUeXBlKGNvbW1hRXhwcmVzc2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGZv
cndhcmRUeXBlKGNvbW1hRXhwcmVzc2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUsIGxhc3RJ
bmZvLT50eXBlQW5ub3RhdGlvbik7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpUZXJu
YXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCkBAIC0xNDU2LDcgKzE0MDcsNyBAQCB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQog
ICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPnBhcmFtZXRlcnMo
KS5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KHR5cGVzW2ldLmdl
dCgpLCAqZnVuY3Rpb24tPnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKSB7CisgICAgICAgIGlmICgh
bWF0Y2hBbmRDb21taXQodHlwZXNbaV0uZ2V0KCksICpmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ld
LT50eXBlKCkpKSB7CiAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEluZmVyVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAppbmRleCAyZmNjNmYxMzlkZTg0YTMyYzRjNzA3Y2Ew
NjBiOWJlMWI0MmZkM2UwLi4xNThlMjNiNDcyZGU0OTkzMWViNzg0MmM5N2I4NGFhMjNkMDk3MGU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTElu
ZmVyVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMSW5mZXJUeXBlcy5jcHAKQEAgLTIyNyw5ICsyMjcsOSBAQCBib29sIGluZmVyVHlwZXNGb3JD
YWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgcG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0
ZDo6cgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
b3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRv
IHN1Y2Nlc3MgPSBhcmd1bWVudFR5cGVzW2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgewot
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygp
W2ldLnR5cGUoKSwgdW5uYW1lZFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnBv
c3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCksIHVubmFtZWRUeXBlKTsKICAg
ICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVU
eXBlUmVmZXJlbmNlKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZlKHBvc3NpYmxlRnVuY3Rpb24u
cGFyYW1ldGVycygpW2ldLnR5cGUoKS0+dW5pZnlOb2RlKCkpOworICAgICAgICAgICAgcmV0dXJu
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUocG9z
c2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKS0+dW5pZnlOb2RlKCkpOwogICAg
ICAgICB9KSk7CiAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
TmFtZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTmFtZVJlc29sdmVyLmNwcAppbmRleCAwNTM1MGUwZGM5ODVlY2IzOTBmNTg2ZjBhMzRkMmE2
ZWNmZWRjYTMyLi4zY2JlZGQ5YzI1Nzg4ZmU1ZGUwNTYxMmZmMGRkMjZkNGM4NTRmN2UzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNv
bHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xO
YW1lUmVzb2x2ZXIuY3BwCkBAIC0xOTcsOSArMTk3LDEwIEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2
aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8
PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJl
IGFibGUgdG8gYmVjb21lIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1cGRhdGlu
ZyBiYWNrcmVmZXJlbmNlcyIpOwogICAgICAgICAgICAgICAgICAgICBMZXhlcjo6VG9rZW4gb3Jp
Z2luID0gZG90RXhwcmVzc2lvbi5vcmlnaW4oKTsKICAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFBlcmhhcHMgZG8gdGhpcyB3aXRoIHZhcmlhbnRzIG9yIGEgUmV3cml0ZXIgaW5zdGVhZC4K
KyAgICAgICAgICAgICAgICAgICAgdm9pZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKICAg
ICAgICAgICAgICAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOwogICAgICAg
ICAgICAgICAgICAgICBhdXRvIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCA9IEFTVDo6RW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsOjp3cmFwKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShiYXNlTmFt
ZSksIFdURk1vdmUobWVtYmVyTmFtZSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbiwgKm1lbWJlcik7
Ci0gICAgICAgICAgICAgICAgICAgIG5ldyAoJmRvdEV4cHJlc3Npb24pIEFTVDo6RW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsKFdURk1vdmUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSk7CisgICAg
ICAgICAgICAgICAgICAgIG5ldyAobG9jYXRpb24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsKFdURk1vdmUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2V0RXJyb3Io
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFy
c2VyLmNwcAppbmRleCA1MzMyNTY3NjY0OWQ3MzMzMDkwYjAxNWE3YjY3MjU3ZmMzNjBiOGQ0Li44
MDVhNDYyNDc5N2MxMzRhNDM4N2RjMTk2NjZmNmVmYTY3NTFkOWEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkBAIC0xMDgy
LDEzICsxMDgyLDEzIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBlY3Rl
ZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zLCBFcnJvcj4KICAgICBhdXRvIGZpcnN0UGFyYW1l
dGVyID0gcGFyc2VQYXJhbWV0ZXIoKTsKICAgICBpZiAoIWZpcnN0UGFyYW1ldGVyKQogICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZmlyc3RQYXJhbWV0ZXIuZXJyb3IoKSk7Ci0gICAg
cGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSgqZmlyc3RQYXJhbWV0ZXIpKTsKKyAgICBwYXJhbWV0
ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92
ZSgqZmlyc3RQYXJhbWV0ZXIpKSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46
OlR5cGU6OkNvbW1hKSkgewogICAgICAgICBhdXRvIHBhcmFtZXRlciA9IHBhcnNlUGFyYW1ldGVy
KCk7CiAgICAgICAgIGlmICghcGFyYW1ldGVyKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KHBhcmFtZXRlci5lcnJvcigpKTsKLSAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQo
V1RGTW92ZSgqcGFyYW1ldGVyKSk7CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCpwYXJhbWV0ZXIpKSk7CiAg
ICAgfQogCiAgICAgYXV0byByaWdodFBhcmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRv
a2VuOjpUeXBlOjpSaWdodFBhcmVudGhlc2lzKTsKQEAgLTE1NjcsMTQgKzE1NjcsMTQgQEAgYXV0
byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3QKICAgICBpZiAoIWZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikK
ICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlv
bi5lcnJvcigpKTsKIAotICAgIFZlY3RvcjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IHJlc3Vs
dDsKLSAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikp
OworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gcmVzdWx0
OworICAgIHJlc3VsdC5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24+KFdURk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikpKTsKIAogICAgIHdoaWxlICh0
cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7CiAgICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgp
KTsKICAgICAgICAgaWYgKCF2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZN
b3ZlKCp2YXJpYWJsZURlY2xhcmF0aW9uKSkpOwogICAgIH0KIAogICAgIHJldHVybiBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocmVz
dWx0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFByZXBhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmNwcAppbmRleCA5YTEwMzVhNGI4Y2FkMzNhMjFlNjcwZjIyMDA1OTFjYzE0OGQ2
YjEzLi44NjliN2MzOGNkYjRhOWRjYzFiMjk0MTk2NGJlOWQ2ODFhZDhlMDg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAK
QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgogI2luY2x1
ZGUgIldITFNMUGFyc2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAi
V0hMU0xQcm9wZXJ0eVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV0hMU0xSZWN1cnNpb25DaGVja2Vy
LmgiCiAjaW5jbHVkZSAiV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oIgogI2luY2x1ZGUgIldI
TFNMU2VtYW50aWNNYXRjaGVyLmgiCkBAIC04Miw3ICs4Myw3IEBAIHN0YXRpYyBPcHRpb25hbDxQ
cm9ncmFtPiBwcmVwYXJlU2hhcmVkKFN0cmluZyYgd2hsc2xTb3VyY2UpCiAgICAgaWYgKCFjaGVj
ayhwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBjaGVja0xpdGVy
YWxUeXBlcyhwcm9ncmFtKTsKLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5NTc4OCBSZXNvbHZlIHByb3BlcnRpZXMgaGVyZQorICAgIHJlc29s
dmVQcm9wZXJ0aWVzKHByb2dyYW0pOwogICAgIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKICAg
ICBpZiAoIWNoZWNrU3RhdGVtZW50QmVoYXZpb3IocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzA1MDRj
YmY5NDIyNWFhZDA3ZGRmNWU5N2JmYWMyOWFkY2QyYjY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNw
cApAQCAtMCwwICsxLDUyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9wZXJ0eVJlc29sdmVyIDogcHVibGljIFZpc2l0b3Ig
eworcHVibGljOgorcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mKSBvdmVycmlk
ZTsKKworICAgIGJvb2wgc2ltcGxpZnlSaWdodFZhbHVlKEFTVDo6RG90RXhwcmVzc2lvbiYpOwor
ICAgIGJvb2wgc2ltcGxpZnlBYnN0cmFjdExlZnRWYWx1ZShBU1Q6OkFzc2lnbm1lbnRFeHByZXNz
aW9uJiwgQVNUOjpEb3RFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiBy
aWdodCk7CisgICAgdm9pZCBzaW1wbGlmeUxlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mKTsKKwor
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgbV92YXJpYWJsZURlY2xhcmF0aW9uczsKK307
CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RF
eHByZXNzaW9uKQoreworICAgIC8vIFVubGVzcyB3ZSdyZSBpbnNpZGUgYW4gQXNzaWdubWVudEV4
cHJlc3Npb24gb3IgYSBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLCB3ZSdyZSBhIHJpZ2h0IHZh
bHVlLgorICAgIGlmICghc2ltcGxpZnlSaWdodFZhbHVlKGRvdEV4cHJlc3Npb24pKQorICAgICAg
ICBzZXRFcnJvcigpOworfQorCit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgVmlzaXRvcjo6dmlz
aXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICBpZiAoIW1fdmFyaWFibGVEZWNsYXJhdGlvbnMu
aXNFbXB0eSgpKQorICAgICAgICBmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKS5zdGF0ZW1lbnRz
KCkuaW5zZXJ0KDAsIG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudD4oTGV4ZXI6OlRva2VuKG1fdmFyaWFibGVEZWNsYXJhdGlvbnNbMF0tPm9yaWdpbigpKSwg
V1RGTW92ZShtX3ZhcmlhYmxlRGVjbGFyYXRpb25zKSkpOworfQorCit2b2lkIFByb3BlcnR5UmVz
b2x2ZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNz
aW9uKQoreworICAgIEFTU0VSVChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkudHlwZUFubm90
YXRpb24oKSk7CisgICAgaWYgKGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKS50eXBlQW5ub3Rh
dGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgc2ltcGxpZnlMZWZ0VmFsdWUo
YXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEFTU0VSVCghYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpLnR5cGVBbm5vdGF0aW9uKCkt
PmlzUmlnaHRWYWx1ZSgpKTsKKyAgICBpZiAoIWlzPEFTVDo6RG90RXhwcmVzc2lvbj4oYXNzaWdu
bWVudEV4cHJlc3Npb24ubGVmdCgpKSkgeworICAgICAgICBzZXRFcnJvcigpOyAvLyBGSVhNRTog
TWFrZSB0aGlzIHdvcmsgd2l0aCBpbmRleCBleHByZXNzaW9ucy4KKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoIXNpbXBsaWZ5QWJzdHJhY3RMZWZ0VmFsdWUoYXNzaWdubWVudEV4cHJl
c3Npb24sIGRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24u
bGVmdCgpKSwgYXNzaWdubWVudEV4cHJlc3Npb24udGFrZVJpZ2h0KCkpKQorICAgICAgICBzZXRF
cnJvcigpOworfQorCitib29sIFByb3BlcnR5UmVzb2x2ZXI6OnNpbXBsaWZ5UmlnaHRWYWx1ZShB
U1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgTGV4ZXI6OlRva2VuIG9y
aWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CisKKyAgICBpZiAoYXV0byogYW5kRnVuY3Rp
b24gPSBkb3RFeHByZXNzaW9uLmFuZEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgYXV0byYgYmFzZSA9
IGRvdEV4cHJlc3Npb24uYmFzZSgpOworICAgICAgICBBU1NFUlQoYmFzZS5yZXNvbHZlZFR5cGUo
KSk7CisgICAgICAgIEFTU0VSVChiYXNlLnR5cGVBbm5vdGF0aW9uKCkpOworICAgICAgICBpZiAo
YXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gYmFzZS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVz
c1NwYWNlKCkpIHsKKyAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdp
biksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4
cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGJhc2UucmVzb2x2ZWRUeXBlKCktPmNs
b25lKCkpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBWZWN0b3I8VW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQoV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGF1dG8gY2Fs
bEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpU
b2tlbihvcmlnaW4pLCBTdHJpbmcoYW5kRnVuY3Rpb24tPm5hbWUoKSksIFdURk1vdmUoYXJndW1l
bnRzKSk7CisgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShhbmRGdW5jdGlvbi0+
dHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5z
ZXRGdW5jdGlvbigqYW5kRnVuY3Rpb24pOworCisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbikgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVz
c2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBkZXJlZmVy
ZW5jZSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAg
ICAgICAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOworICAgICAgICAgICAgZG90
RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgICAgICAgICAgYXV0byogZGVyZWZlcmVu
Y2VFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24o
V1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgICAgICAgICBk
ZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4o
YW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAg
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUg
eyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5hZGRyZXNz
U3BhY2UoKSB9KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gV2UgaGF2ZSBhbiBhbmRlciwgYnV0IG5vIGxlZnQgdmFsdWUgdG8gY2FsbCBpdCBvbi4g
TGV0J3Mgc2F2ZSB0aGUgdmFsdWUgaW50byBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBjcmVhdGUg
YSBsZWZ0IHZhbHVlLgorICAgICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGlubGluaW5nIHRo
ZSBmdW5jdGlvbnMgdGhlIHNwZWMgc2F5cyBhcmUgZ2VuZXJhdGVkLgorICAgICAgICBpZiAoIWRv
dEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIEFTVDo6UXVhbGlm
aWVycygpLCBiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UxID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVu
Y2UxLT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZTEtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4ob3JpZ2luKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTEpLCBkb3RFeHByZXNzaW9uLnRh
a2VCYXNlKCkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlLnJl
c29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBhdXRvIHZhcmlh
YmxlUmVmZXJlbmNlMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNU
OjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAg
IHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlwZShiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgp
KTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisKKyAgICAgICAgYXV0byBt
YWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHBy
ZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTIp
KTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8
QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQsIGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgbWFrZVBv
aW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisK
KyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7Cisg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsK
KyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhw
cmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFN0cmluZyhhbmRGdW5jdGlvbi0+bmFtZSgp
KSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUo
YW5kRnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Np
b24tPnNldEZ1bmN0aW9uKCphbmRGdW5jdGlvbik7CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5j
ZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihX
VEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgZGVyZWZl
cmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1
bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGRlcmVmZXJl
bmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFT
VDo6Q29tbWFFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBl
eHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGNvbW1hIGV4cHJlc3Npb25zIHdp
dGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgdm9pZCogbG9jYXRpb24g
PSAmZG90RXhwcmVzc2lvbjsKKyAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigp
OworICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25z
OworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lv
bikpOworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJl
c3Npb24pKTsKKyAgICAgICAgYXV0byogY29tbWFFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikg
QVNUOjpDb21tYUV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGV4cHJlc3Npb25z
KSk7CisgICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50
ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAg
ICAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsg
QVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKworICAgICAgICBtX3ZhcmlhYmxlRGVjbGFy
YXRpb25zLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpDYWxsRXhw
cmVzc2lvbikgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMg
bmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBjYWxsIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRp
bmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlv
bigpKTsKKyAgICBhdXRvJiBnZXRGdW5jdGlvbiA9ICpkb3RFeHByZXNzaW9uLmdldEZ1bmN0aW9u
KCk7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7Cisg
ICAgYXJndW1lbnRzLmFwcGVuZChkb3RFeHByZXNzaW9uLnRha2VCYXNlKCkpOworICAgIHZvaWQq
IGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247CisgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVz
c2lvbigpOworICAgIGF1dG8qIGNhbGxFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpD
YWxsRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFN0cmluZyhnZXRGdW5jdGlvbi5uYW1lKCkp
LCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbihn
ZXRGdW5jdGlvbik7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZ2V0RnVuY3Rpb24udHlw
ZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OlJpZ2h0VmFsdWUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gc2V0dGVyQ2FsbChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgbmV3VmFsdWUsIGNv
bnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIGxlZnRWYWx1
ZUZhY3RvcnksIGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4o
KT4mIHBvaW50ZXJUb0xlZnRWYWx1ZUZhY3RvcnkpCit7CisgICAgaWYgKGRvdEV4cHJlc3Npb24u
YW5kRnVuY3Rpb24oKSkgeworICAgICAgICAvLyAqb3BlcmF0b3ImLmZvbygmdikgPSBuZXdWYWx1
ZQorICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChwb2ludGVyVG9MZWZ0VmFsdWVGYWN0b3J5KCkpOworICAgICAgICBhdXRvIGNhbGxFeHBy
ZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4o
ZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1
bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgIGNhbGxFeHBy
ZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlwZSgp
LmNsb25lKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpSaWdodFZhbHVlKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmRv
dEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSk7CisKKyAgICAgICAgYXV0byBkZXJlZmVy
ZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9u
PihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUoY2FsbEV4cHJl
c3Npb24pKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0
PEFTVDo6UG9pbnRlclR5cGU+KGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlw
ZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6
OlRocmVhZCB9KTsKKworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVz
c2lvbi5vcmlnaW4oKSksIFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSwgV1RGTW92ZShu
ZXdWYWx1ZSkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPihkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5
cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICByZXR1
cm4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lv
bikpOworICAgIH0KKworICAgIC8vIHYgPSBvcGVyYXRvci5mb289KHYsIG5ld1ZhbHVlKQorICAg
IEFTU0VSVChkb3RFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCkpOworCisgICAgVmVjdG9yPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChs
ZWZ0VmFsdWVGYWN0b3J5KCkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShuZXdWYWx1
ZSkpOworICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4
cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKGRv
dEV4cHJlc3Npb24uc2V0RnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsK
KyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCkt
PnR5cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpSaWdodFZhbHVlKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90
RXhwcmVzc2lvbi5zZXRGdW5jdGlvbigpKTsKKworICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Np
b24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tl
bihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgbGVmdFZhbHVlRmFjdG9yeSgpLCBXVEZNb3ZlKGNh
bGxFeHByZXNzaW9uKSk7CisgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhw
cmVzc2lvbi5zZXRGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgYXNzaWdubWVudEV4
cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgIHJl
dHVybiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNz
aW9uKSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4g
Z2V0dGVyQ2FsbChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24sIGNvbnN0IHN0ZDo6
ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIGxlZnRWYWx1ZUZhY3Rvcnks
IGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIHBvaW50
ZXJUb0xlZnRWYWx1ZUZhY3RvcnkpCit7CisgICAgaWYgKGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rp
b24oKSkgeworICAgICAgICAvLyAqb3BlcmF0b3ImLmZvbygmdikKKyAgICAgICAgaWYgKCFkb3RF
eHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+PiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocG9pbnRlclRvTGVmdFZh
bHVlRmFjdG9yeSgpKTsKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2lu
KCkpLCBTdHJpbmcoZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpLT5uYW1lKCkpLCBX
VEZNb3ZlKGFyZ3VtZW50cykpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShkb3RF
eHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAg
Y2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAg
ICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLnRocmVhZEFu
ZEZ1bmN0aW9uKCkpOworCisgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgICAgIGRl
cmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihk
b3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5j
bG9uZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisKKyAgICAg
ICAgcmV0dXJuIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoZGVyZWZlcmVuY2VF
eHByZXNzaW9uKSk7CisgICAgfQorCisgICAgLy8gb3BlcmF0b3IuZm9vKHYpCisgICAgQVNTRVJU
KGRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKSk7CisgICAgCisgICAgVmVjdG9yPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChsZWZ0
VmFsdWVGYWN0b3J5KCkpOworICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigp
KSwgU3RyaW5nKGRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShh
cmd1bWVudHMpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLmdl
dEZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRG
dW5jdGlvbigqZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpKTsKKworICAgIHJldHVybiBVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7Cit9CisKKy8v
IEZJWE1FOiBNYWtlIHRoZXNlIHN0YXRpYworYm9vbCBQcm9wZXJ0eVJlc29sdmVyOjpzaW1wbGlm
eUFic3RyYWN0TGVmdFZhbHVlKEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRF
eHByZXNzaW9uLCBBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24sIFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+JiYgcmlnaHQpCit7CisgICAgLy8gQ29uc2lkZXIgYS5iLmMuZCA9IGU7
CisgICAgLy8gVGhpcyB3b3VsZCBnZXQgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAvLworICAgIC8v
IFN0ZXAgMToKKyAgICAvLyBwID0gJmE7CisgICAgLy8KKyAgICAvLyBTdGVwIDI6CisgICAgLy8g
cSA9IG9wZXJhdG9yLmIoKnApOworICAgIC8vIHIgPSBvcGVyYXRvci5jKHEpOworICAgIC8vCisg
ICAgLy8gU3RlcCAzOgorICAgIC8vIHIgPSBvcGVyYXRvci5kPShyLCBlKTsKKyAgICAvLyBxID0g
b3BlcmF0b3IuYz0ocSwgcik7CisgICAgLy8KKyAgICAvLyBTdGVwIDQ6CisgICAgLy8gKnAgPSBv
cGVyYXRvci5iKCpwLCBxKTsKKworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyaWdodCk7CisKKyAg
ICAvLyBGaW5kIHRoZSAiLmIiICIuYyIgYW5kICIuZCIgZXhwcmVzc2lvbnMuCisgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpEb3RFeHByZXNzaW9uPj4gY2hhaW47CisgICAg
QVNUOjpEb3RFeHByZXNzaW9uKiBpdGVyYXRvciA9ICZkb3RFeHByZXNzaW9uOworICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgIEFTU0VSVChpdGVyYXRvci0+YmFzZSgpLnR5cGVBbm5vdGF0aW9u
KCkpOworICAgICAgICBpZiAoaXRlcmF0b3ItPmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0
QWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgQVNTRVJUKCFpdGVy
YXRvci0+YmFzZSgpLnR5cGVBbm5vdGF0aW9uKCktPmlzUmlnaHRWYWx1ZSgpKTsKKyAgICAgICAg
Y2hhaW4uYXBwZW5kKCppdGVyYXRvcik7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OkRvdEV4cHJl
c3Npb24+KGl0ZXJhdG9yLT5iYXNlKCkpKTsgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIHdpdGgg
aW5kZXggZXhwcmVzc2lvbnMKKyAgICAgICAgaXRlcmF0b3IgPSAmZG93bmNhc3Q8QVNUOjpEb3RF
eHByZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKTsKKyAgICB9CisgICAgYXV0byBsZWZ0RXhwcmVz
c2lvbiA9IGl0ZXJhdG9yLT50YWtlQmFzZSgpOworICAgIEFTVDo6RXhwcmVzc2lvbiYgaW5uZXJM
ZWZ0RXhwcmVzc2lvbiA9IGxlZnRFeHByZXNzaW9uOworICAgIHNpbXBsaWZ5TGVmdFZhbHVlKGxl
ZnRFeHByZXNzaW9uKTsKKworICAgIC8vIENyZWF0ZSAicCIgdmFyaWFibGUuCisgICAgQVNTRVJU
KGxlZnRFeHByZXNzaW9uLT5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byBwb2ludGVyVmFyaWFi
bGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2Vu
KGxlZnRFeHByZXNzaW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4obWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6
VG9rZW4obGVmdEV4cHJlc3Npb24tPm9yaWdpbigpKSwgKmxlZnRFeHByZXNzaW9uLT50eXBlQW5u
b3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCksIGxlZnRFeHByZXNzaW9uLT5yZXNvbHZlZFR5
cGUoKS0+Y2xvbmUoKSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwor
CisgICAgLy8gQ3JlYXRlICJxIiBhbmQgInIiIHZhcmlhYmxlcy4KKyAgICBWZWN0b3I8VW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+IGludGVybWVkaWF0ZVZhcmlhYmxlczsKKyAg
ICBpbnRlcm1lZGlhdGVWYXJpYWJsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjaGFpbi5zaXpl
KCkgLSAxKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGNoYWluLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGF1dG8mIGRvdEV4cHJlc3Npb24gPSBzdGF0aWNfY2FzdDxBU1Q6OkRvdEV4cHJl
c3Npb24mPihjaGFpbltpXSk7CisgICAgICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLnJlc29sdmVk
VHlwZSgpKTsKKyAgICAgICAgaW50ZXJtZWRpYXRlVmFyaWFibGVzLnVuY2hlY2tlZEFwcGVuZCht
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGRvdEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZG90RXhwcmVzc2lvbi5yZXNv
bHZlZFR5cGUoKS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KSk7CisgICAgfQorCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHBy
ZXNzaW9uczsKKworICAgIC8vIFN0ZXAgMToKKyAgICB7CisgICAgICAgIGF1dG8gbWFrZVBvaW50
ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4o
TGV4ZXI6OlRva2VuKGlubmVyTGVmdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGxlZnRF
eHByZXNzaW9uKSk7CisgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtl
VW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihpbm5lckxlZnRFeHByZXNz
aW9uLm9yaWdpbigpKSwgKmlubmVyTGVmdEV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKS0+bGVm
dEFkZHJlc3NTcGFjZSgpLCBpbm5lckxlZnRFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpLT5jbG9u
ZSgpKSk7CisgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFi
bGUtPnR5cGUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJW
YXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgYXV0byBhc3NpZ25tZW50
RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4
ZXI6OlRva2VuKGlubmVyTGVmdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxl
UmVmZXJlbmNlKSwgV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAgICAgYXNz
aWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25l
KCkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpSaWdodFZhbHVlKCkpOworCisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFz
c2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgfQorCisgICAgLy8gU3RlcCAyOgorICAgIHsKKyAg
ICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiBwcmV2aW91cyA9IG51bGxwdHI7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBjaGFpbi5zaXplKCkgLSAxOyBpID4gMDsgLS1pKSB7CisgICAg
ICAgICAgICBBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24gPSBjaGFpbltpXTsKKyAg
ICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbiA9
IGludGVybWVkaWF0ZVZhcmlhYmxlc1tpIC0gMV07CisKKyAgICAgICAgICAgIGF1dG8gY2FsbEV4
cHJlc3Npb24gPSBnZXR0ZXJDYWxsKGRvdEV4cHJlc3Npb24sIFsmXSgpIC0+IFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCgqcHJldmlv
dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzLT50eXBlKCkpOworICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwcmV2aW91cy0+dHlw
ZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2lu
dGVyVmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50
eXBlKCkpOworICAgICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50
ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAg
ICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVm
ZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBX
VEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHBvaW50
ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Np
b24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+
dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgICAgIGRlcmVmZXJl
bmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpLmFkZHJlc3NTcGFj
ZSgpIH0pOworICAgICAgICAgICAgICAgIHJldHVybiBkZXJlZmVyZW5jZUV4cHJlc3Npb247Cisg
ICAgICAgICAgICB9LCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAg
ICAgICAgICAgICAgaWYgKHByZXZpb3VzKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdmFy
aWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAoKnByZXZpb3VzKSk7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChwcmV2aW91cy0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2UtPnNldFR5cGUocHJldmlvdXMtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlz
IHJpZ2h0PworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9u
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91cy0+dHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8QVNU
OjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBwcmV2aW91cy0+dHlwZSgpLT5jbG9uZSgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpSaWdodFZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVBvaW50
ZXJFeHByZXNzaW9uOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGF1dG8g
dmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+
KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xv
bmUoKSk7CisgICAgICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklY
TUU6IElzIHRoaXMgcmlnaHQ/CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJl
bmNlOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmICghY2FsbEV4cHJlc3Npb24p
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBhdXRvIHZhcmlh
YmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAg
ICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUo
KSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMg
dGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgq
Y2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRU
eXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFz
c2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7
CisKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHBy
ZXNzaW9uKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHByZXZpb3VzID0gJnZhcmlhYmxl
RGVjbGFyYXRpb247CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTdGVwIDM6CisgICAgVW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gcmlnaHRWYWx1ZSA9IFdURk1vdmUocmlnaHQpOworICAg
IEFTU0VSVChyaWdodFZhbHVlLT5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byBleHByZXNzaW9u
VHlwZSA9IHJpZ2h0VmFsdWUtPnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY2hhaW4uc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIEFTVDo6RG90
RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbiA9IGNoYWluW2ldOworICAgICAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBpbnRlcm1lZGlhdGVWYXJpYWJs
ZXNbaV07CisKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IHNldHRlckNhbGwo
ZG90RXhwcmVzc2lvbiwgV1RGTW92ZShyaWdodFZhbHVlKSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4geworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFi
bGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNl
dFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAg
dmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNU
OjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisgICAg
ICAgICAgICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CisgICAgICAgIH0sIFsmXSgpIC0+IFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZl
cmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgQVNT
RVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlLT5zZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJp
Z2h0PworCisgICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNz
aW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOworICAgICAgICAgICAg
QVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2lu
dGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExl
eGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRo
cmVhZCwgdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgICAg
IG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVl
KCkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VQb2ludGVyRXhwcmVzc2lvbjsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgaWYgKCFhc3NpZ25tZW50RXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZSgqYXNzaWdu
bWVudEV4cHJlc3Npb24pKTsKKworICAgICAgICByaWdodFZhbHVlID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlw
ZSgpKTsKKyAgICAgICAgcmlnaHRWYWx1ZS0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5
cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJpZ2h0VmFsdWUtPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElz
IHRoaXMgcmlnaHQ/CisgICAgfQorCisgICAgLy8gU3RlcCA0OgorICAgIHsKKyAgICAgICAgYXV0
byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IHNldHRlckNhbGwoY2hhaW5bY2hhaW4uc2l6ZSgpIC0g
MV0sIFdURk1vdmUocmlnaHRWYWx1ZSksIFsmXSgpIC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+IHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9p
bnRlclZhcmlhYmxlKSk7CisgICAgICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBl
KCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclZhcmlh
YmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gZGVyZWZl
cmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lv
bj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxl
UmVmZXJlbmNlKSk7CisgICAgICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkp
OworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5j
bG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRl
clZhcmlhYmxlLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOworICAgICAgICAgICAgcmV0dXJu
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbjsKKyAgICAgICAgfSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4geworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgICAgIEFTU0VSVChwb2ludGVyVmFy
aWFibGUtPnR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShw
b2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKyAgICAgICAgICAgIHJl
dHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKCFhc3Np
Z25tZW50RXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBl
eHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZSgqYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICB9
CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkNvbW1hRXhwcmVzc2lvbikgPD0gc2l6
ZW9mKEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24pLCAiQXNzaWdubWVudCBleHByZXNzaW9ucyBu
ZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGNvbW1hIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRp
bmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gYXNzaWdubWVu
dEV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgdm9pZCogbG9jYXRpb24gPSAmYXNzaWdubWVudEV4
cHJlc3Npb247CisgICAgYXNzaWdubWVudEV4cHJlc3Npb24ufkFzc2lnbm1lbnRFeHByZXNzaW9u
KCk7CisgICAgYXV0byogY29tbWFFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpDb21t
YUV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSk7CisgICAg
Y29tbWFFeHByZXNzaW9uLT5zZXRUeXBlKFdURk1vdmUoZXhwcmVzc2lvblR5cGUpKTsKKyAgICBj
b21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKwor
ICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUocG9pbnRlclZhcmlhYmxl
KSk7CisgICAgZm9yIChhdXRvJiBpbnRlcm1lZGlhdGVWYXJpYWJsZSA6IGludGVybWVkaWF0ZVZh
cmlhYmxlcykKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShp
bnRlcm1lZGlhdGVWYXJpYWJsZSkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2NsYXNzIExl
ZnRWYWx1ZVNpbXBsaWZpZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgdm9pZCB2
aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
RGVyZWZlcmVuY2VFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cit9OworCit2b2lk
IExlZnRWYWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVz
c2lvbikKK3sKKyAgICBWaXNpdG9yOjp2aXNpdChkb3RFeHByZXNzaW9uKTsKKyAgICBBU1NFUlQo
ZG90RXhwcmVzc2lvbi5iYXNlKCkudHlwZUFubm90YXRpb24oKSk7CisgICAgQVNTRVJUKGRvdEV4
cHJlc3Npb24uYmFzZSgpLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSk7Cisg
ICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rpb24oKSk7CisKKyAgICBMZXhlcjo6VG9r
ZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICBhdXRvKiBhbmRGdW5jdGlv
biA9IGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rpb24oKTsKKyAgICBhdXRvJiBiYXNlID0gZG90RXhw
cmVzc2lvbi5iYXNlKCk7CisgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gKmRvdEV4cHJlc3Np
b24uYmFzZSgpLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBhdXRv
IG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4
cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBkb3RFeHByZXNzaW9uLnRha2VCYXNlKCkp
OworICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6
UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4pLCBsZWZ0QWRkcmVzc1NwYWNlLCBiYXNl
LnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKSk7CisgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICBWZWN0b3I8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKFdU
Rk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiks
IFN0cmluZyhhbmRGdW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICBj
YWxsRXhwcmVzc2lvbi0+c2V0VHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOworICAg
IGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7Cisg
ICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCphbmRGdW5jdGlvbik7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbikgPD0gc2l6ZW9mKEFT
VDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJl
Y29tZSBkZXJlZmVyZW5jZSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVu
Y2VzIik7CisgICAgdm9pZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKKyAgICBkb3RFeHBy
ZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CisgICAgYXV0byogZGVyZWZlcmVuY2VFeHByZXNzaW9u
ID0gbmV3IChsb2NhdGlvbikgQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24oV1RGTW92ZShvcmln
aW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9u
LT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkp
LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+
KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOworfQorCit2b2lkIExlZnRW
YWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVy
ZW5jZUV4cHJlc3Npb24pCit7CisgICAgLy8gRGVyZWZlcmVuY2UgZXhwcmVzc2lvbnMgYXJlIHRo
ZSBvbmx5IGV4cHJlc3Npb25zIHdoZXJlIHRoZSBjaGlsZHJlbiBtaWdodCBiZSBtb3JlLXJpZ2h0
IHRoYW4gd2UgYXJlLgorICAgIC8vIEZvciBleGFtcGxlLCBhIGRlcmVmZXJlbmNlIGV4cHJlc3Np
b24gbWF5IGJlIGEgbGVmdCB2YWx1ZSBidXQgaXRzIGNoaWxkIG1heSBiZSBhIGNhbGwgZXhwcmVz
c2lvbiB3aGljaCBpcyBhIHJpZ2h0IHZhbHVlLgorICAgIC8vIExlZnRWYWx1ZVNpbXBsaWZpZXIg
ZG9lc24ndCBoYW5kbGUgcmlnaHQgdmFsdWVzLCBzbyB3ZSBpbnN0ZWFkIG5lZWQgdG8gdXNlIFBy
b3BlcnR5UmVzb2x2ZXIuCisgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgZnVuY3Rpb24gY2FsbCBh
cmd1bWVudHM/CisgICAgUHJvcGVydHlSZXNvbHZlcigpLlZpc2l0b3I6OnZpc2l0KGRlcmVmZXJl
bmNlRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6c2ltcGxpZnlMZWZ0
VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIExlZnRWYWx1ZVNpbXBs
aWZpZXIoKS5WaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKK30KKwordm9pZCByZXNvbHZlUHJv
cGVydGllcyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFByb3BlcnR5UmVzb2x2ZXIoKS5WaXNp
dG9yOjp2aXNpdChwcm9ncmFtKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZl
ci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJl
c29sdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIyMDVmOTAyYmNjOTRlY2E5ZWYzM2I1OGRhMWM3MDFhYjcy
YjM0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCByZXNvbHZl
UHJvcGVydGllcyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVP
dmVybG9hZEltcGwuY3BwCmluZGV4IGU3ODM4Y2UzZjcyNWFlMDlhYmExZWRiNTBhNjU5MmMzNDYz
MTNlZTUuLmRjOTM0ZGJmNzI2YTgxNGEwODA0YjRjY2I1NzUyZGJlY2I4MWYzOGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApAQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgdW5zaWdu
ZWQgY29udmVyc2lvbkNvc3QoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBjYW5kaWRhdGUsIGNv
bnN0IFZlY3RvcgogICAgICAgICBjb252ZXJzaW9uQ29zdCArPSBhcmd1bWVudFR5cGVzW2ldLmdl
dCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiYpIC0+IHVuc2lnbmVkIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9LCBbJl0o
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Up
IC0+IHVuc2lnbmVkIHsKLSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZS0+cmVzb2x2YWJsZVR5cGUoKS5jb252ZXJzaW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMo
KVtpXS50eXBlKCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LT5yZXNvbHZhYmxlVHlwZSgpLmNvbnZlcnNpb25Db3N0KCpjYW5kaWRhdGUucGFyYW1ldGVycygp
W2ldLT50eXBlKCkpOwogICAgICAgICB9KSk7CiAgICAgfQogICAgIC8vIFRoZSByZXR1cm4gdHlw
ZSBjYW4gbmV2ZXIgYmUgYSBsaXRlcmFsIHR5cGUsIHNvIGl0cyBjb252ZXJzaW9uIGNvc3QgaXMg
YWx3YXlzIDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlc29sdmluZ1R5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCmluZGV4IGNhNWNiYjU5MjljZjllMTgxOGMyY2Q3NDFl
NzlkOTM2Y2FhYzY4ZWUuLjUwZTUzMmI2YTZlODJmMWUwMmEwNDY3OTFiOGU2Njk2ZDViMTFlMTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVz
b2x2aW5nVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUmVzb2x2aW5nVHlwZS5oCkBAIC03Miw2ICs3Miw3IEBAIHByaXZhdGU6CiAKIC8vIFRoaXMg
aXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGEgVmFyaWFudC4KIC8vIEl0IGV4aXN0cyBzbyB3ZSBj
YW4gbWFrZSBzdXJlIHRoYXQgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZG9lcyB0aGUgcmlnaHQg
dGhpbmcuCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCiBj
bGFzcyBSZXNvbHZpbmdUeXBlIHsKIHB1YmxpYzoKICAgICBSZXNvbHZpbmdUeXBlKCkKQEAgLTEw
MiwxMCArMTAzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAot
ICAgIEFTVDo6VW5uYW1lZFR5cGUmIGdldFVubmFtZWRUeXBlKCkKKyAgICBBU1Q6OlVubmFtZWRU
eXBlKiBnZXRVbm5hbWVkVHlwZSgpCiAgICAgewotICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpKTsKLSAgICAg
ICAgcmV0dXJuIFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcik7
CisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPj4obV9pbm5lcikpCisgICAgICAgICAgICByZXR1cm4gJldURjo6Z2V0PFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcik7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yPiBhdXRvIHZpc2l0KGNvbnN0
IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6dmlzaXQodmlzaXRvciwgc3RkOjpk
ZWNsdmFsPFZhcmlhbnQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBSZWZQdHI8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+PiY+KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJh
eU9wZXJhdG9yTGVuZ3RoLmNwcAppbmRleCBhZTNjYTY0MjM5ZTNiNTlkMzZhYWFhZWVjN2JhNDcx
YmNiNjdjZWI5Li42NWVkN2FjZjQzZjIwMDQwMjUwZjkwNjZhMTRiNjQwYjU3YmJmMGNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcApAQCAtNjUs
NyArNjUsNyBAQCBib29sIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mIHBy
b2dyYW0pCiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKIAogICAgIGZvciAoYXV0byYgYXJy
YXlUeXBlIDogYXJyYXlUeXBlcykgewotICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24g
dmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgYXJyYXlUeXBlLmdldCgpLmNsb25lKCkgfSwgU3RyaW5n
KCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURl
Y2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVy
OjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgYXJy
YXlUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCk7CiAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAg
ICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgp
Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwg
cHJvZ3JhbS5pbnRyaW5zaWNzKCkudWludFR5cGUoKSksICJvcGVyYXRvci5sZW5ndGgiX3N0ciwg
V1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAppbmRleCBjZDdjMzcwMmFkYmVhMjlhYzE4YzVj
YmU2ZGI2MDg3YjllMDJlZDhhLi43NGNjOGYxODRlODM1YjNjZTFjNDliNWNlNmVjOGQ2YTRhODY4
YzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTExMCw3ICsx
MTAsNyBAQCBib29sIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAg
ICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogCiAgICAgZm9yIChhdXRvJiB1bm5hbWVkVHlwZSA6
IHVubmFtZWRUeXBlcykgewotICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFi
bGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBB
U1Q6OlF1YWxpZmllcnMoKSwgeyB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNs
YXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5u
YW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdp
bigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdl
dCgpLmNsb25lKCksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdU
Rjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgc3ludGhl
c2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICBpZiAoaXM8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KHN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4obmFtZWRU
eXBlKSkgJiYgZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHN0YXRpY19jYXN0
PEFTVDo6TmFtZWRUeXBlJj4obmFtZWRUeXBlKSkuaXNBdG9taWMoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlw
ZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5nZXQoKSkgfSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihuYW1l
ZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRU
eXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSksIFN0cmluZygpLCBXVEY6Om51
bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMg
cGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURl
Y2xhcmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5
Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5
cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwg
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3Jp
Z2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9u
RnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAppbmRleCAxNzk3ZmU1Mzk0YzgxZWFj
ZDM5NTRhYmM2YThhNjVhNmM4ZmM5NmUyLi5kNzRhZjMzYTFmMDVhNjkyMjE5YzhjY2U0YWZkY2M5
Mjk1MTA5NzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMuY3BwCkBAIC00MSw4ICs0MSw4IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVu
Y3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAg
ICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25E
ZWZpbml0aW9ucygpKSB7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xh
cmF0aW9uMihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikg
fSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1
dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBB
U1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQpOworICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRp
b25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0
cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFw
cGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7CiAgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CkBAIC01Miw3ICs1Miw3
IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0p
CiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1l
cmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRl
ZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZN
b3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24t
PnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3IudmFsdWUiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJz
KSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CkBAIC02MSw3ICs2MSw3IEBAIGJvb2wgc3lu
dGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0K
IAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFi
bGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
ICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9y
aWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBh
cmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxl
RGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhl
cjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9u
ZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxv
cHQsIGlzT3BlcmF0b3IpKTsKQEAgLTcwLDEwICs3MCwxMCBAQCBib29sIHN5bnRoZXNpemVFbnVt
ZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICB9CiAKICAgICAgICAg
ewotICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1
YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3RyaW5n
KCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RG
TW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBB
U1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVt
ZXJhdGlvbkRlZmluaXRpb24pIH0sICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1l
dGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOworICAgICAgICAgICAgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdp
bigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgIm9w
ZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09w
ZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbikpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAK
aW5kZXggODI2NzIyMTM3ZTRjM2UzODIyNzc4MGRhZTEyYjI5YWFiYTFiNzJlZS4uOTQ1ZDBjZWVm
YWEzOWNlNTA3NDYwN2QyYzQ0OTNjZjM5N2U5ODNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3Jz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCkBAIC00Niw3ICs0Niw3IEBAIGJvb2wgc3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICBmb3IgKGF1
dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5zdHJ1Y3R1cmVFbGVt
ZW50cygpKSB7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGdldHRlcjog
b3BlcmF0b3IuZmllbGQKLSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24g
dmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pIH0s
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAg
YXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1
cmVEZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAg
ICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlv
bikpOwogICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBtYWtlU3RyaW5nKCJv
cGVyYXRvci4iLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKSksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpAQCAtNTYsOCArNTYsOCBAQCBib29sIHN5bnRo
ZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKIAogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQotICAgICAg
ICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShM
ZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVu
dC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCk7Ci0gICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24yKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xv
bmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAg
ICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSks
IHN0cnVjdHVyZURlZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24yID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVF
bGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHN0cnVjdHVyZUVsZW1lbnQudHlw
ZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAg
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEp
KTsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24yKSk7CkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFj
Y2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVy
YXRvciYuZmllbGQKICAgICAgICAgICAgIGF1dG8gY3JlYXRlQW5kZXIgPSBbJl0oQVNUOjpBZGRy
ZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
ewogICAgICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFk
ZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1
cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikpOwotICAgICAgICAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RG
TW92ZShhcmd1bWVudFR5cGUpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVt
ZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQpOwogICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtl
VW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50
Lm9yaWdpbigpKSwgYWRkcmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
VmlzaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZp
c2l0b3IuY3BwCmluZGV4IGVkMmU4YzAwNTJkNmRmZTliZDA3YmFmNzY0OWQ4Y2U0OGM5YjA5YmIu
LjJmMjAxNTJjYWI3YWQxYzc4MjZiYTNkMjE1MTdhNGVjMDllYWVlYWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAt
NTMyLDcgKzUzMiw3IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUcmFwJikKIHZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYWJsZURlY2xhcmF0
aW9uIDogdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQudmFyaWFibGVEZWNsYXJhdGlvbnMo
KSkKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb24pOworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbi5nZXQoKSk7CiB9CiAK
IHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKQEAgLTU4OSwx
NyArNTg5LDE3IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lv
biYgbG9naWNhbE5vdEV4cHJlc3Npb24pCiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpNYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQog
ewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxW
YWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbi5sZWZ0VmFsdWUoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpNYWtlUG9p
bnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9y
QW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKIH0KIAogdm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsKICAgICBjaGVja0Vycm9yQW5kVmlz
aXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsKICAgICBpZiAocmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5k
ZXggNzFjZmYxYjExYjI3MGE1NTM5YWMyNDRmNWU1ZDMxZWMyNmQ1YjA4Mi4uYjFlNzNhMjBhNDJm
NDI1ZmNhMDQyOTE0NjIwNTU4NTQ2ZDdjOTlmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTM0OSw2ICsz
NDksNyBAQCBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcAog
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuY3BwCiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcAogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcm9wZXJ0eVJlc29sdmVyLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVLmNwcAogTW9kdWxl
cy93ZWJncHUvV2ViR1BVQmluZEdyb3VwLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVQmluZEdy
b3VwRGVzY3JpcHRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAyZTUyOWRjNDI0OTYxNDJjOTE5NTEzNGE3YjY1N2QzY2I4
MTA4OTY0Li42MjE5NWY3YWNmOTRiYWViZTU3ZDcwMTNkMjU3Yjg0OTE5NzQyYWNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02
NDc5LDYgKzY0NzksOCBAQAogCQkxQ0EwQzJFQzIxRUVENkY2MDBBMTE4NjAgLyogV0hMU0xMaXRl
cmFsVHlwZUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xMaXRlcmFsVHlwZUNo
ZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUwMzBEQzI1NTk1
MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gRXZlbnRMb29wTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQ0ExOUUxNTBEQzI1NUNBMDA2NUE5OTQgLyogRXZlbnRMb29wLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50TG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQ0FBODJGNjIyNDJBRTA1MDBFODRCQkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMUHJvcGVydHlSZXNvbHZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQUE4MkY3MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFBy
b3BlcnR5UmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDdFMEE2QzQwNTIwMEFCRTA2RSAv
KiBXZWJTY3JpcHRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
U2NyaXB0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDdGMEE2
QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDQUYzNDgwMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3RQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVj
dFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1ODE1LDYgKzI1ODE3
LDggQEAKIAkJCQlDMjRBNTdCQTIxRkVBRkVBMDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmNwcCAq
LywKIAkJCQlDMjRBNTdCQjIxRkVBRkVBMDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmggKi8sCiAJ
CQkJQzIxQkY3M0EyMUNEOEQ3MDAwMjI3OTc5IC8qIFdITFNMUHJvZ3JhbS5oICovLAorCQkJCTFD
QUE4MkY2MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwICovLAor
CQkJCTFDQUE4MkY3MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCAq
LywKIAkJCQkxQ0EwQzJFMDIxRUVCNUY1MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2Vy
LmNwcCAqLywKIAkJCQkxQ0EwQzJERTIxRUVCNUY0MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25D
aGVja2VyLmggKi8sCiAJCQkJQzIzNEE5QUQyMUU5MkMxOTAwM0M5ODREIC8qIFdITFNMUmVjdXJz
aXZlVHlwZUNoZWNrZXIuY3BwICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365787</attachid>
            <date>2019-03-22 17:25:30 -0700</date>
            <delta_ts>2019-05-14 23:15:33 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190322172529.patch</filename>
            <type>text/plain</type>
            <size>148077</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ2NDA4ZmE1M2M1ODg1
ZjBkYThkZTc3OTNiZDRhNDQ3N2Q4ZmE2Ny4uYTRmNTg0NTMxNWI3YzQzNDdmZTMyY2YxNWNiYzdm
MDYzYThhNTNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTAzLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDMt
MTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwYXJlbnRp
bmcgZHVyaW5nIGEgbXV0YXRpb24gZXZlbnQgaW5zaWRlIGFwcGVuZENoaWxkIGNvdWxkIHJlc3Vs
dCBpbiBhIGNpcmN1bGFyIERPTSB0cmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCmluZGV4IDRhNmQ3
YzQ2OTVkYzRjYWM4MjkwNTRlNDA1NTU3ODc2NTE3NWY4NjMuLmQ0MzZkNjg5Yzc4ZTA0MGM1ZmRk
Y2UzOTYwZjM4ZjQzMDE1MGIyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICs0Myw3
MCBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAogfTsK
IAorc3RydWN0IExlZnRWYWx1ZSB7CisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKK307
CisKK3N0cnVjdCBBYnN0cmFjdExlZnRWYWx1ZSB7Cit9OworCitzdHJ1Y3QgUmlnaHRWYWx1ZSB7
Cit9OworCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCitj
bGFzcyBUeXBlQW5ub3RhdGlvbiB7CitwdWJsaWM6CisgICAgVHlwZUFubm90YXRpb24oKQorICAg
ICAgICA6IG1fZW1wdHkodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24o
TGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBU
eXBlQW5ub3RhdGlvbihBYnN0cmFjdExlZnRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIodikK
KyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oUmlnaHRWYWx1ZSB2KQorICAgICAg
ICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oY29uc3Qg
VHlwZUFubm90YXRpb24mKSA9IGRlZmF1bHQ7CisgICAgVHlwZUFubm90YXRpb24oVHlwZUFubm90
YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgVHlwZUFubm90YXRpb24mIG9wZXJhdG9y
PShjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBlQW5ub3RhdGlvbiYg
b3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9uJiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIE9wdGlv
bmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFkZHJlc3NTcGFjZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIW1fZW1wdHkpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxM
ZWZ0VmFsdWU+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PExlZnRWYWx1
ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIH0KKworICAgIGJvb2wgaXNSaWdodFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJp
Z2h0VmFsdWU+KG1faW5uZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNp
dG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6
dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0cmFjdExl
ZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigpKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0
eSk7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW5uZXIpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWYXJpYW50PExlZnRWYWx1ZSwgQWJzdHJhY3RMZWZ0VmFsdWUsIFJp
Z2h0VmFsdWU+IG1faW5uZXI7CisgICAgYm9vbCBtX2VtcHR5IHsgZmFsc2UgfTsKK307CisKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgKaW5kZXggYjEyMWZiNmMx
ZTFkMTc5MjYxNWQ5YmIwMjc0ZmUyMzU4OGE3ZjJiNS4uNzk0MTVlMmZmMzAzMDI5MTA2YjViZjQx
OTc2N2ViNTk5OGYwZTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5o
CkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24mIGxlZnQoKSB7IHJl
dHVybiBtX2xlZnQ7IH0KICAgICBFeHByZXNzaW9uJiByaWdodCgpIHsgcmV0dXJuIG1fcmlnaHQ7
IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiB0YWtlUmlnaHQoKSB7IHJldHVybiBXVEZN
b3ZlKG1fcmlnaHQpOyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1f
bGVmdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBiN2FiMjBjZWQyYzQ1M2Y5NWYxYzJlM2VmYzI4
MWZkYTQ4ZTVjM2FkLi4zMThhODEwNjE2M2RiODdlODVlZjQ4MWVjODg3ZDlkNmM1YzI5Y2MxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xF
eHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRXhwcmVzc2lvbi5oCkBAIC02NSwxMiArNjUsMTIgQEAgcHVibGljOgogICAgICAgICBt
X3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAgIH0KIAotICAgIGNvbnN0IE9wdGlvbmFsPEFkZHJl
c3NTcGFjZT4mIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9
CisgICAgY29uc3QgVHlwZUFubm90YXRpb24qIHR5cGVBbm5vdGF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlQW5ub3RhdGlvbiA/ICYqbV90eXBlQW5ub3RhdGlvbiA6IG51bGxwdHI7IH0KIAot
ICAgIHZvaWQgc2V0QWRkcmVzc1NwYWNlKE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFkZHJlc3NT
cGFjZSkKKyAgICB2b2lkIHNldFR5cGVBbm5vdGF0aW9uKFR5cGVBbm5vdGF0aW9uJiYgdHlwZUFu
bm90YXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoIW1fYWRkcmVzc1NwYWNlKTsKLSAgICAg
ICAgbV9hZGRyZXNzU3BhY2UgPSBhZGRyZXNzU3BhY2U7CisgICAgICAgIEFTU0VSVCghbV90eXBl
QW5ub3RhdGlvbik7CisgICAgICAgIG1fdHlwZUFubm90YXRpb24gPSBXVEZNb3ZlKHR5cGVBbm5v
dGF0aW9uKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBc3NpZ25tZW50RXhwcmVzc2lv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJl
ZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsKLSAgICBPcHRpb25hbDxBZGRyZXNzU3BhY2U+IG1fYWRk
cmVzc1NwYWNlOworICAgIE9wdGlvbmFsPFR5cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5vdGF0aW9u
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKaW5kZXggNjMxNmY1NGUxNjMyNmI0YTQ4M2ZhODcyZTFm
NDdiYjA0OGVkZjg4ZS4uNzcwY2Y4YmE5ZjI1MjcyNmY2OWMxYWU2ZGU1ZWE0YTViMTJiZjc3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaApA
QCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4
cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAg
ICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUo
V1RGTW92ZShsVmFsdWUpKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVl
KSkKICAgICB7CiAgICAgfQogCkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc01ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xWYWx1ZTsg
fQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9CiAK
IHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAgIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TWFrZVBvaW50ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAppbmRleCA3YjA1MmI2ZDVmMjg4
N2Y1OTJkZjQ0ZmQ5NDA5YzRmYTk1MjAzYWE4Li4zNDYwNGQ1NmFlY2M0YjYzMGQ3YTdlNmY3OTZi
OWM4NTM0N2NlMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaApA
QCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZVBvaW50ZXJFeHBy
ZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIE1ha2VQb2ludGVyRXhw
cmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxW
YWx1ZSkKKyAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihX
VEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQorICAg
ICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVlKSkKICAgICB7CiAgICAgfQogCkBA
IC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01ha2VQb2ludGVyRXhwcmVz
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24m
IGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVl
KCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8RXhw
cmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5oCmluZGV4IDJlYzM0ZTE1ZDhhNDBlNWFkMmUyYmY4OTY4MGMyMWMzMzQ0
Yzk5ODguLjAzYWRkZGM3NjNiN2Y4MWRjNzRkY2VmNjk0ZjY0NmNmMjlkZWJkZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCkBAIC01OSwyNyArNTksNTYg
QEAgcHVibGljOgogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiYgcG9zc2libGVHZXRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxl
R2V0T3ZlcmxvYWRzOyB9CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZVNldE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9z
c2libGVTZXRPdmVybG9hZHM7IH0KICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlQW5kT3ZlcmxvYWRzKCkgeyByZXR1cm4g
bV9wb3NzaWJsZUFuZE92ZXJsb2FkczsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1
bmN0aW9uKCkgeyByZXR1cm4gbV9nZXRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRp
b24qIGFuZEZ1bmN0aW9uKCkgeyByZXR1cm4gbV9hbmRGdW5jdGlvbjsgfQorICAgIEZ1bmN0aW9u
RGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uKCkgeyByZXR1cm4gbV90aHJlYWRBbmRGdW5j
dGlvbjsgfQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIHNldEZ1bmN0aW9uKCkgeyByZXR1cm4g
bV9zZXRGdW5jdGlvbjsgfQogCiAgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fkcyhjb25z
dCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IG92ZXJsb2FkcykKICAgICB7CiAgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMgPSBvdmVy
bG9hZHM7CiAgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29uc3QgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVy
bG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRz
OworICAgIH0KICAgICB2b2lkIHNldFBvc3NpYmxlU2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRz
KQogICAgIHsKICAgICAgICAgbV9wb3NzaWJsZVNldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKICAg
ICB9Ci0gICAgdm9pZCBzZXRQb3NzaWJsZUFuZE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKKwor
ICAgIHZvaWQgc2V0R2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb24p
CiAgICAgewotICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAg
ICAgICBtX2dldEZ1bmN0aW9uID0gZ2V0RnVuY3Rpb247CisgICAgfQorCisgICAgdm9pZCBzZXRB
bmRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbikKKyAgICB7CisgICAg
ICAgIG1fYW5kRnVuY3Rpb24gPSBhbmRGdW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldFRo
cmVhZEFuZEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uKQor
ICAgIHsKKyAgICAgICAgbV90aHJlYWRBbmRGdW5jdGlvbiA9IHRocmVhZEFuZEZ1bmN0aW9uOwor
ICAgIH0KKworICAgIHZvaWQgc2V0U2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0
RnVuY3Rpb24pCisgICAgeworICAgICAgICBtX3NldEZ1bmN0aW9uID0gc2V0RnVuY3Rpb247CiAg
ICAgfQogCiAgICAgRXhwcmVzc2lvbiYgYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiYmIHRha2VCYXNlKCkgeyByZXR1cm4gV1RGTW92ZShtX2Jhc2Up
OyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fYmFzZTsKICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9w
b3NzaWJsZUdldE92ZXJsb2FkczsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsKICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3Nz
aWJsZUFuZE92ZXJsb2FkczsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX2dldEZ1bmN0aW9u
IHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fYW5kRnVuY3Rpb24geyBu
dWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV90aHJlYWRBbmRGdW5jdGlvbiB7
IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX3NldEZ1bmN0aW9uIHsgbnVs
bHB0ciB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKaW5kZXggNzlkOGQwZjcwOGU4ZDA1NzgzMTJjODE3OTRl
ODhlZGFmMzQ4N2NmOS4uMjA5YTUyNjUxZTdlYjNlYjVhOWNjMWY2YmMxNzAyYmViNjU4MmJjOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaApAQCAtNDEs
MTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogLyoKLSAq
ICAxLiBFdmFsdWF0ZSBtX2xWYWx1ZQorICogIDEuIEV2YWx1YXRlIG1fbGVmdFZhbHVlCiAgKiAg
Mi4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9vbGRWYWx1ZQogICogIDMuIEV2YWx1YXRlIG1fbmV3
VmFsdWVFeHByZXNzaW9uCiAgKiAgNC4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9uZXdWYWx1ZQot
ICogIDUuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1fbFZhbHVlCisgKiAgNS4gQXNzaWduIHRoZSBy
ZXN1bHQgdG8gbV9sZWZ0VmFsdWUKICAqICA2LiBFdmFsdWF0ZSBtX3Jlc3VsdEV4cHJlc3Npb24K
ICAqICA3LiBSZXR1cm4gdGhlIHJlc3VsdAogICovCkBAIC03MywzOCArNzMsNDEgQEAgcHVibGlj
OgogCiAgICAgVW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJlbmNlPiBvbGRWYXJpYWJsZVJlZmVyZW5j
ZSgpCiAgICAgewotICAgICAgICAvLyBUaGUgb25seSByZWFzb24gd2UgZG9uJ3QgZ2V0IHVzZS1h
ZnRlci1mcmVlcyBpcyB0aGUgZmFjdCB0aGF0IGV2ZXJ5IGluc3RhbmNlIG9mIFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24gaXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLgogICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZVJlZjxWYXJpYWJsZVJlZmVyZW5jZT4oVmFyaWFibGVSZWZlcmVuY2U6OndyYXAo
bV9vbGRWYWx1ZSkpOwogICAgIH0KIAogICAgIFVuaXF1ZVJlZjxWYXJpYWJsZVJlZmVyZW5jZT4g
bmV3VmFyaWFibGVSZWZlcmVuY2UoKQogICAgIHsKLSAgICAgICAgLy8gVGhlIG9ubHkgcmVhc29u
IHdlIGRvbid0IGdldCB1c2UtYWZ0ZXItZnJlZXMgaXMgdGhlIGZhY3QgdGhhdCBldmVyeSBpbnN0
YW5jZSBvZiBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uIGlzIGFsbG9jYXRlZCBvbiB0aGUgaGVh
cC4KICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VmFyaWFibGVSZWZlcmVuY2U+KFZhcmlh
YmxlUmVmZXJlbmNlOjp3cmFwKG1fbmV3VmFsdWUpKTsKICAgICB9CiAKICAgICBib29sIGlzUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
IAotICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhw
cmVzc2lvbiYgbGVmdFZhbHVlKCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KICAgICBWYXJpYWJs
ZURlY2xhcmF0aW9uJiBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KICAgICBWYXJp
YWJsZURlY2xhcmF0aW9uJiBuZXdWYWx1ZSgpIHsgcmV0dXJuIG1fbmV3VmFsdWU7IH0KICAgICBF
eHByZXNzaW9uKiBuZXdWYWx1ZUV4cHJlc3Npb24oKSB7IHJldHVybiBtX25ld1ZhbHVlRXhwcmVz
c2lvbiA/ICYqbV9uZXdWYWx1ZUV4cHJlc3Npb24gOiBudWxscHRyOyB9CiAgICAgRXhwcmVzc2lv
biogcmVzdWx0RXhwcmVzc2lvbigpIHsgcmV0dXJuIG1fcmVzdWx0RXhwcmVzc2lvbiA/ICYqbV9y
ZXN1bHRFeHByZXNzaW9uIDogbnVsbHB0cjsgfQorICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYm
IHRha2VMZWZ0VmFsdWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fbGVmdFZhbHVlKTsgfQorICAgIFVu
aXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPiYmIHRha2VPbGRWYWx1ZSgpIHsgcmV0dXJuIFdU
Rk1vdmUobV9vbGRWYWx1ZSk7IH0KKyAgICBVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4m
JiB0YWtlTmV3VmFsdWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fbmV3VmFsdWUpOyB9CisgICAgT3B0
aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYmIHRha2VOZXdWYWx1ZUV4cHJlc3Npb24oKSB7
IHJldHVybiBXVEZNb3ZlKG1fbmV3VmFsdWVFeHByZXNzaW9uKTsgfQorICAgIE9wdGlvbmFsPFVu
aXF1ZVJlZjxFeHByZXNzaW9uPj4mJiB0YWtlUmVzdWx0RXhwcmVzc2lvbigpIHsgcmV0dXJuIFdU
Rk1vdmUobV9yZXN1bHRFeHByZXNzaW9uKTsgfQogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNs
YXNzIFUsIGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gV1RGOjptYWtlVW5pcXVl
UmVmKEFyZ3MmJi4uLik7CiAKLSAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxWYWx1ZSkKKyAgICBSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJl
c3Npb24+IGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmln
aW4pKQotICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKLSAgICAgICAgLCBtX29s
ZFZhbHVlKExleGVyOjpUb2tlbihvcmlnaW4pLCBRdWFsaWZpZXJzKCksIFdURjo6bnVsbG9wdCwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KQotICAgICAgICAsIG1fbmV3VmFs
dWUoV1RGTW92ZShvcmlnaW4pLCBRdWFsaWZpZXJzKCksIFdURjo6bnVsbG9wdCwgU3RyaW5nKCks
IFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1v
dmUobGVmdFZhbHVlKSkKKyAgICAgICAgLCBtX29sZFZhbHVlKG1ha2VVbmlxdWVSZWY8VmFyaWFi
bGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFF1YWxpZmllcnMoKSwgV1RGOjpu
dWxsb3B0LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKQorICAgICAgICAs
IG1fbmV3VmFsdWUobWFrZVVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKG9y
aWdpbiksIFF1YWxpZmllcnMoKSwgV1RGOjpudWxsb3B0LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQpKQogICAgIHsKICAgICB9CiAKLSAgICBVbmlxdWVSZWY8RXhwcmVzc2lv
bj4gbV9sVmFsdWU7Ci0gICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX29sZFZhbHVlOwotICAgIFZh
cmlhYmxlRGVjbGFyYXRpb24gbV9uZXdWYWx1ZTsKKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4g
bV9sZWZ0VmFsdWU7CisgICAgVW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+IG1fb2xkVmFs
dWU7CisgICAgVW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+IG1fbmV3VmFsdWU7CiAgICAg
T3B0aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiBtX25ld1ZhbHVlRXhwcmVzc2lvbjsKICAg
ICBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IG1fcmVzdWx0RXhwcmVzc2lvbjsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKaW5kZXggMTk4MjRmOTQwNTRlNGIz
YjdkN2NmMjRmNjNjMDExOWI4YTYzZjRmYi4uZTUwYWFhZGRlNzg4ZjRlZDg5ZTljMjZiZjQ0NjM5
YzIxNDA0OWNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaApAQCAtNzks
NyArNzksNyBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4g
bV9pbml0aWFsaXplcjsKIH07CiAKLXVzaW5nIFZhcmlhYmxlRGVjbGFyYXRpb25zID0gVmVjdG9y
PFZhcmlhYmxlRGVjbGFyYXRpb24+OwordXNpbmcgVmFyaWFibGVEZWNsYXJhdGlvbnMgPSBWZWN0
b3I8VW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+PjsKIAogfSAvLyBuYW1lc3BhY2UgQVNU
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5o
CmluZGV4IGU4ZTFmYzdmNWIyMzhkYmIwNDAzZTlmNDAyNzgwNGE3MGE3ZTg4MWMuLjA5YTAyZDAx
ZjQ5Njg0YWI5NjNlZjg3MjViMDQ1MmQ1YTM4ZWRmNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3Rh
dGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaApAQCAtNDAsNyArNDAsNyBAQCBuYW1l
c3BhY2UgQVNUIHsKIAogY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQgOiBwdWJs
aWMgU3RhdGVtZW50IHsKIHB1YmxpYzoKLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiYmIHZh
cmlhYmxlRGVjbGFyYXRpb25zKQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KExl
eGVyOjpUb2tlbiYmIG9yaWdpbiwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiB2YXJpYWJsZURlY2xh
cmF0aW9ucykKICAgICAgICAgOiBTdGF0ZW1lbnQoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAs
IG1fdmFyaWFibGVEZWNsYXJhdGlvbnMoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9ucykpCiAg
ICAgewpAQCAtNTMsMTAgKzUzLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiYgdmFyaWFibGVEZWNsYXJhdGlvbnMoKSB7
IHJldHVybiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxW
YXJpYWJsZURlY2xhcmF0aW9uPj4mIHZhcmlhYmxlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV92
YXJpYWJsZURlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgotICAgIFZlY3RvcjxWYXJpYWJsZURl
Y2xhcmF0aW9uPiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOworICAgIFZhcmlhYmxlRGVjbGFyYXRp
b25zIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcAppbmRleCA2MjRjNTYy
ZTUxY2E2MGM2ZWY4ZGUyOGFmZWJhYzUxNGYyYmUwZGJkLi4xYTAwNTNjOWM0ZDRjNjY2ZmU1ODNj
MTIxNjhlOTE3MmVkZjI2NjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2Nh
ZmZvbGRpbmcuY3BwCkBAIC0xODgsOSArMTg4LDkgQEAgU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6bWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkKICAgICBib29sIGZv
dW5kID0gZmFsc2U7CiAgICAgQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uKiBzdHJ1Y3R1cmVEZWZp
bml0aW9uID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9mdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLm5hbWUoKSA9PSBwYXRoWzBdKSB7CisgICAg
ICAgIGlmIChtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPm5hbWUoKSA9PSBw
YXRoWzBdKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtX3BhcmFtZXRlclZh
cmlhYmxlc1tpXSk7Ci0gICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBtX2Z1bmN0aW9uRGVm
aW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAg
IGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS0+
dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4o
dW5pZnlOb2RlKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0
PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6
OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCkBAIC0yNDksNyArMjQ5LDcgQEAgU3Ry
aW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElu
cygpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytp
KQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLnR5
cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCptX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSksICcgJywg
bV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fbGF5b3V0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gdmFyaWFibGVOYW1l
ID0gbV9uYW1lZEJpbmRHcm91cHNbaV0udmFyaWFibGVOYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0
aW9uV3JpdGVyLmNwcAppbmRleCAyZmMxNDY1ODYxNmM5ODljYTIxN2M2OTI4MmFlODZkYzQ4NzE5
ZjA4Li5kYWY1ODQ5OGFiZjliYWZiZjZmYmM1YzljZTljM2NlMDIwMGU1ZDU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9u
V3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgRnVuY3Rp
b25EZWNsYXJhdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5j
dGlvbkRlY2xhcmF0CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoaSkKICAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpW2ldLT50eXBlKCkpKTsKICAgICB9CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgiKTtcbiIpOwogfQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0
aW9uCiAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlck5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUoKTsKICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJpYWJsZU1hcHBpbmcu
YWRkKCZwYXJhbWV0ZXIsIHBhcmFtZXRlck5hbWUpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
KnBhcmFtZXRlci50eXBlKCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsKKyAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKnBhcmFtZXRlci0+dHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJOYW1lKSk7CiAgICAgICAg
IH0KICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7XG4iKTsKICAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKQEAgLTU3MCw3ICs1
NzAsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpMb2dpY2Fs
Tm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlcwogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQo
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAgICAgYXV0byBsVmFs
dWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYg
bWFrZUFycmEKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFr
ZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tF
cnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAgICAgYXV0
byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1ha2VQb2ludGVyRXhw
cmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldy
aXRlci5jcHAKaW5kZXggNjk3MmU5ODkwNTBhOWExYjdkYTgxMWE4N2MzM2MzM2QxZTRlZDI5Yy4u
MzQwNjVlNThjMTczYTZjODEyNjRlYjdkZTM1ZDQ5ZjUxOTZmODYyMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlv
bldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAKQEAgLTExMSw4ICsxMTEsOCBAQCBTdHJp
bmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICBh
dXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5h
bWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byYgcGFyYW1ldGVyVHlw
ZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCktPnVu
aWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHBhcmFtZXRlclR5cGUp
KSB7CiAgICAgICAgICAgICBhdXRvJiBwYXJhbWV0ZXJOYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6
Ok5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KHBhcmFtZXRlck5hbWVkVHlwZSkpIHsKQEAgLTEzNCw3ICsxMzQs
NyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvci52YWx1ZSIpIHsKICAgICAgICAgQVNTRVJUKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKLSAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwog
ICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlv
bk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHgpIHtcbiIpKTsKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBzdGF0aWNfY2FzdDwiLCBt
ZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIikpOwpAQCAtMTQ1LDggKzE0NSw4IEBAIFN0cmluZyB3
cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJvcGVyYXRvci5sZW5ndGgiKSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoaW50cmluc2lj
cywgbWF0Y2hlcyhuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSwgaW50cmluc2ljcy51
aW50VHlwZSgpKSk7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKS0+dW5pZnlO
b2RlKCk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0t
PnR5cGUoKSk7CisgICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAg
QVNTRVJUKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHBhcmFtZXRlclR5cGUpKTsKICAgICAgICAgYXV0
byYgdW5uYW1lZFBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihwYXJh
bWV0ZXJUeXBlKTsKICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkUGFyYW1l
dGVyVHlwZSkpIHsKQEAgLTE2Nyw4ICsxNjcsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlv
bihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQog
ICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVy
YXRvci4iX3N0cikpIHsKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpLmVuZHNXaXRoKCI9IikpIHsKICAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBhdXRvIG1l
dGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAg
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
OworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0t
PnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAg
ICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgICAgIGZpZWxk
TmFtZSA9IGZpZWxkTmFtZS5zdWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0aCgpIC0gMSk7CkBA
IC0xODAsNyArMTgwLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgfQogCiAg
ICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXpl
KCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAg
ICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5z
dWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25O
YW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iKSk7CkBAIC0xOTEsNyArMTkx
LDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIl9zdHIpKSB7CiAgICAgICAg
IEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAg
YXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJp
bmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwg
JygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIikpOwpAQCAtMjAyLDggKzIwMiw4IEBA
IFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW10iKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1
dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsK
ICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rp
b25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwgbWV0YWxQYXJhbWV0ZXIy
TmFtZSwgIiBpKSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoIiAgICByZXR1cm4gbVtpXTtcbiIpKTsKQEAgLTIxMyw4ICsyMTMsOCBAQCBTdHJpbmcgd3Jp
dGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJvcGVyYXRvciZbXSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBh
dXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3ImW10uIl9z
dHIubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1l
dGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0
ZXIxTmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtcbiIpKTsKQEAgLTIy
NSw5ICsyMjUsOSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpIHsKICAgICAgICAgQVNT
RVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAzKTsK
LSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgp
KTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlw
ZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0u
dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzFdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyM05hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVsyXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgp
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5h
bWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIg
bSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFtZXRlcjNOYW1lLCAi
IHYpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAg
IG1baV0gPSB2O1xuIikpOwpAQCAtMjM5LDcgKzIzOSw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaXNPcGVyYXRvcigpKSB7CiAg
ICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkg
PT0gMSkgewogICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkpOwotICAg
ICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
OworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwg
JyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHgpIHtc
biIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICBy
ZXR1cm4gIiwgb3BlcmF0b3JOYW1lLCAieDtcbiIpKTsKQEAgLTI0OSw4ICsyNDksOCBAQCBTdHJp
bmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CiAgICAgICAgIGF1dG8gb3BlcmF0b3JO
YW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRv
ciJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIy
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJu
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1l
dGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0
ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIpKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiB4ICIsIG9wZXJh
dG9yTmFtZSwgIiB5O1xuIikpOwpAQCAtMjgzLDcgKzI4Myw3IEBAIFN0cmluZyB3cml0ZU5hdGl2
ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJh
c3VpbnQiCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJh
c2Zsb2F0IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxS
ZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5h
bWUsICIgeCkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCIgICAgcmV0dXJuICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSksICIoeCk7XG4iKSk7CkBAIC0yOTMsOCArMjkzLDggQEAgU3RyaW5nIHdyaXRlTmF0
aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmEKIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
cG93IiB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRhbjIiKSB7CiAg
ICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXpl
KCkgPT0gMik7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzFdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVy
bk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUs
ICIgeCwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iKSk7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCksICIoeCwgeSk7XG4iKSk7CkBAIC0zMzYsMTQgKzMzNiwxNCBAQCBT
dHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKS5zdGFydHNXaXRoKCJJbnRlcmxvY2tlZCJfc3RyKSkgewogICAgICAgICBpZiAobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkludGVybG9ja2VkQ29tcGFyZUV4Y2hh
bmdlIikgewogICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50
ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgp
KSk7Ci0gICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpOworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+KCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSk7CisgICAgICAg
ICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsK
ICAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1l
bnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50
UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RBcmd1bWVudFBvaW50
ZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudCA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzJdLnR5cGUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVy
VHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzNdLnR5cGUoKSkp
OwotICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNU
OjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzNd
LnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MV0tPnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnQgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVsyXS0+dHlwZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5cGUoKSkpOworICAg
ICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzNdLT50eXBl
KCkpOwogICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZvdXJ0
aEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgICAgIGF1dG8gZm91cnRo
QXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShmb3VydGhBcmd1
bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBjb252ZXJ0
QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZpcnN0QXJndW1l
bnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIGNvbXBhcmUsICIsIHRo
aXJkQXJndW1lbnQsICIgZGVzaXJlZCwgIiwgY29udmVydEFkZHJlc3NTcGFjZShmb3VydGhBcmd1
bWVudEFkZHJlc3NTcGFjZSksICcgJywgZm91cnRoQXJndW1lbnRQb2ludGVlLCAiKiBvdXQpIHtc
biIpKTsKQEAgLTM1NCwxMyArMzU0LDEzIEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAg
ICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpID09IDMpOwotICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4o
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpOwotICAg
ICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwor
ICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKTsKKyAgICAgICAgYXV0byYgZmlyc3RBcmd1
bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gZmlyc3RB
cmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgp
OwogICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsKLSAgICAgICAg
YXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7Ci0gICAgICAgIEFT
U0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMl0udHlwZSgpKSk7Ci0gICAgICAgIGF1dG8mIHRoaXJkQXJndW1lbnRQb2ludGVy
ID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzJdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gc2Vjb25kQXJndW1lbnQgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5
cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKSk7
CisgICAgICAgIGF1dG8mIHRoaXJkQXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBl
KCkpOwogICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnRBZGRyZXNzU3BhY2UgPSB0aGlyZEFyZ3Vt
ZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50UG9p
bnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodGhpcmRBcmd1bWVudFBvaW50ZXIu
ZWxlbWVudFR5cGUoKSk7CiAgICAgICAgIGF1dG8gbmFtZSA9IGF0b21pY05hbWUobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJJbnRlcmxvY2tlZCJfc3RyLmxlbmd0
aCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCmluZGV4IDYxZDM0
OGFmMTU5NjYyM2FmNGMzNzk4ZWE5OTgxZjk0YTQxNjk1NjUuLjQxZWJhZTZiNDBkZmVhMzBkYjEz
NWVhM2ZlOWIxNGVjMTk3NzhlMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlv
bnMuY3BwCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29u
c3QgUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIGJvb2wgc2FtZSA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8
IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClba10u
dHlwZSgpLCAqZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCkpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVy
cygpW2tdLT50eXBlKCksICpmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpW2tdLT50eXBl
KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtODAsOCArODAsOCBAQCBib29sIGNo
ZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVy
YXRvciZbXSIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgot
ICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNv
bnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpKSkgewotICAgICAgICAgICAgYXV0byYgdHlwZSA9IHN0YXRpY19jYXN0PGNvbnN0
IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50
eXBlKCkpOworICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRp
Y19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGUgPSBzdGF0aWNf
Y2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0
ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNl
Pih0eXBlKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5cGUgPSBkb3du
Y2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlwZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29sdmVk
VHlwZSkpIHsKQEAgLTkyLDE0ICs5MiwxNCBAQCBib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25z
KGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJh
dG9yLmxlbmd0aCIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MQotICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2Fz
dDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKSkKLSAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlUeXBlPihzdGF0aWNf
Y2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKSkpKQorICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tp
XS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpCisgICAgICAgICAgICB8fCBpczxBU1Q6
OkFycmF5VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlv
bnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0g
Im9wZXJhdG9yPT0iCiAgICAgICAgICAgICAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVy
cygpLnNpemUoKSA9PSAyCi0gICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0
YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpKQotICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VU
eXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKSkKLSAgICAgICAgICAgICYmIG1hdGNoZXMoKmZ1
bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCAqZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpKQorICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZl
cmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9u
c1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpCisgICAgICAgICAgICAmJiBpczxB
U1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigq
ZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKSkKKyAgICAgICAgICAg
ICYmIG1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSwg
KmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKaW5kZXggMTM2
NWYyNmQxMjM0ODIwMDBlZTc0MDQ3Y2IzMjFlODAyYjJjNjA4My4uNDY5ZmFjNmY4ZmRiMzZmNWU3
YzczMzQwOWViNWE0Y2JhMWNkY2NkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC0xMjIsOCArMTIyLDggQEAgc3Rh
dGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yQW5k
ZXJJbmRleGVyKEFTVDo6Q2FsbEUKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwog
ICAgIGF1dG8gcmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4
ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgZmlyc3RBcmd1bWVudC5hZGRyZXNz
U3BhY2UoKSwgZmlyc3RBcmd1bWVudC5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwogICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdp
bigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgZmlyc3RBcmd1bWVudC5jbG9uZSgpIH0sIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwotICAgIHBhcmFtZXRlcnMuYXBwZW5k
KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4
ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgp
KSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0
ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6
OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0
QXJndW1lbnQuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7
CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWlu
dFR5cGUoKSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKICAgICBy
ZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0
ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVy
YXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMTMyLDcgKzEzMiw3IEBA
IHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVyYXRv
ckxlbmd0aChBU1Q6OkNhbGxFeHByZXNzCiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1
ZTsKICAgICBhdXRvIHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsK
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVy
cy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVz
c2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUo
KSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0
ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6
OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0
QXJndW1lbnQuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7
CiAgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpB
dHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmlu
Zygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1v
dmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0xNTMs
OCArMTUzLDggQEAgc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZl
V2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IoQVNUOjpDYWxsRXgKICAgICAgICAgfSkpOwogICAgIH0p
KTsKICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1l
dGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhw
cmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGFyZ3VtZW50VHlwZS0+Y2xv
bmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICBwYXJh
bWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RGTW92ZShhcmd1bWVu
dFR5cGUpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBh
cmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihM
ZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwg
YXJndW1lbnRUeXBlLT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFyZ3VtZW50
VHlwZSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKICAgICByZXR1
cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRv
cj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0yMDMsOCArMjAzLDggQEAgc3Rh
dGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZUJ5SW5z
dGFudGlhdGlvbihBU1Q6OkNhbGwKICAgICAgICAgYXV0byByaWdodEFjY2VwdGFiaWxpdHkgPSBh
Y2NlcHRhYmlsaXR5KHR5cGVzWzFdLmdldCgpKTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7CiAgICAgICAgIGlmIChsZWZ0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMg
JiYgcmlnaHRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcykgewotICAgICAgICAg
ICAgYXV0byYgdW5uYW1lZFR5cGUxID0gdHlwZXNbMF0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsK
LSAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlMiA9IHR5cGVzWzFdLmdldCgpLmdldFVubmFt
ZWRUeXBlKCk7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTEgPSAqdHlwZXNbMF0uZ2V0
KCkuZ2V0VW5uYW1lZFR5cGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlMiA9ICp0
eXBlc1sxXS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgpOwogICAgICAgICAgICAgc3VjY2VzcyA9IG1h
dGNoZXModW5uYW1lZFR5cGUxLCB1bm5hbWVkVHlwZTIpOwogICAgICAgICB9IGVsc2UgaWYgKChs
ZWZ0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXliZSAmJiByaWdodEFjY2VwdGFi
aWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6WWVzKQogICAgICAgICAgICAgfHwgKGxlZnRBY2NlcHRh
YmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcyAmJiByaWdodEFjY2VwdGFiaWxpdHkgPT0gQWNj
ZXB0YWJpbGl0eTo6TWF5YmUpKQpAQCAtMzA0LDE0ICszMDQsMTQgQEAgc3RhdGljIGJvb2wgY2hl
Y2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXQKICAgICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0g
Q2hlY2tLaW5kOjpJbmRleCA/IDIgOiAxOwogICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvJiBmaXJzdFBhcmFtZXRlclVuaWZ5Tm9kZSA9
ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUo
KTsKKyAgICAgICAgYXV0byYgZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVm
aW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBp
ZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUpKSB7CiAgICAg
ICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGZp
cnN0UGFyYW1ldGVyVW5pZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJU
eXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRU
eXBlKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2luZCA9PSBDaGVja0tpbmQ6
OkluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAo
KmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKS0+dW5pZnlOb2RlKCk7
CisgICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9u
RGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAg
ICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiBuYW1lZFR5
cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKTsK
QEAgLTMyOCwxNCArMzI4LDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChj
b25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgIHNp
emVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAz
IDogMjsKICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYgZmly
c3RBcmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBl
PihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKSkgewogICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5
cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsK
ICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5VHlw
ZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoa2luZCA9PSBDaGVja0tpbmQ6OkluZGV4KSB7Ci0gICAgICAgICAgICBh
dXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMV0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiBzZWNv
bmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClb
MV0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVk
VHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVk
VHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKTsKQEAgLTM0NSw5ICszNDUsOSBAQCBzdGF0
aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICAgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRp
b24uaXNJbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksICpmdW5jdGlvbkRl
ZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpCisgICAgICAgIGlmICghbWF0Y2hlcyhm
dW5jdGlvbkRlZmluaXRpb24udHlwZSgpLCAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYg
dmFsdWVUeXBlID0gKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbbnVtRXhwZWN0ZWRQ
YXJhbWV0ZXJzIC0gMV0udHlwZSgpOworICAgICAgICBhdXRvJiB2YWx1ZVR5cGUgPSAqZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxXS0+dHlw
ZSgpOwogICAgICAgICBhdXRvIGdldHRlck5hbWUgPSBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgp
LnN1YnN0cmluZygwLCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLmxlbmd0aCgpIC0gMSk7CiAg
ICAgICAgIGF1dG8qIGdldHRlckZ1bmNzID0gbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGdldHRl
ck5hbWUpOwogICAgICAgICBpZiAoIWdldHRlckZ1bmNzKQpAQCAtMzU1LDcgKzM1NSw3IEBAIHN0
YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgIFZlY3RvcjxSZXNvbHZpbmdUeXBlPiBhcmd1
bWVudFR5cGVzOwogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZp
bmdUeXBlPj4gYXJndW1lbnRUeXBlUmVmZXJlbmNlczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxOyArK2kpCi0gICAgICAgICAgICBhcmd1
bWVudFR5cGVzLmFwcGVuZCgoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgoKmZ1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSktPmNsb25lKCkpOwogICAgICAg
ICBmb3IgKGF1dG8mIGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50VHlwZXMpCiAgICAgICAgICAgICBh
cmd1bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5cGUpOwogICAgICAgICBhdXRv
KiBvdmVybG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgqZ2V0dGVyRnVuY3MsIGFy
Z3VtZW50VHlwZVJlZmVyZW5jZXMsIG51bGxwdHIpOwpAQCAtMzc4LDcgKzM3OCw3IEBAIHN0YXRp
YyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAg
ICAgIGF1dG8mIHVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1l
ZFR5cGU+KHVuaWZ5Tm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlm
eU5vZGUpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVy
bG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvcisrIiB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvci0tIikg
ewogICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkg
PT0gMQotICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKVswXS50eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgICAgICAgICAg
JiYgbWF0Y2hlcygqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLCBm
dW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKICAgICB9CiAgICAgaWYgKGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKyIgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9
PSAib3BlcmF0b3ItIikKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpID09IDEgfHwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXpl
KCkgPT0gMjsKQEAgLTQ0NywxOSArNDQ3LDE4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBi
b29sIGNoZWNrU2hhZGVyVHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOwotICAg
IHZvaWQgZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiYsIEFTVDo6VW5uYW1lZFR5cGUmIHdyYXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVk
VHlwZSogZXh0cmFBcmd1bWVudFR5cGUgPSBudWxscHRyKTsKICAgICBib29sIGlzQm9vbFR5cGUo
UmVzb2x2aW5nVHlwZSYpOwogICAgIHN0cnVjdCBSZWN1cnNlSW5mbyB7CiAgICAgICAgIFJlc29s
dmluZ1R5cGUmIHJlc29sdmluZ1R5cGU7Ci0gICAgICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1Nw
YWNlPiYgYWRkcmVzc1NwYWNlOworICAgICAgICBBU1Q6OlR5cGVBbm5vdGF0aW9uJiB0eXBlQW5u
b3RhdGlvbjsKICAgICB9OwotICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiByZWN1cnNlQW5kR2V0
SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTFZhbHVlID0gZmFsc2UpOwotICAg
IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVx
dWlyZXNMVmFsdWUgPSBmYWxzZSk7CisgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJlY3Vyc2VB
bmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxz
ZSk7CisgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwg
Ym9vbCByZXF1aXJlc0xlZnRWYWx1ZSA9IGZhbHNlKTsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4+IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mKTsKICAgICBib29sIHJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoQVNU
OjpFeHByZXNzaW9uJik7Ci0gICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4g
PSBXVEY6Om51bGxvcHQpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBS
ZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1Nw
YWNlPiA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Np
b24mLCBSZXNvbHZpbmdUeXBlJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpu
dWxsb3B0KTsKKyAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOworICAgIHZvaWQgYXNz
aWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+
JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOworICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHBy
ZXNzaW9uJiwgUmVzb2x2aW5nVHlwZSYsIEFTVDo6VHlwZUFubm90YXRpb24pOwogCiAgICAgdm9p
ZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlz
aXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKQEAgLTQ5NCw3ICs0OTMs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJy
aWRlOwogCiAgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBSZXNvbHZpbmdUeXBlPiBtX3R5
cGVNYXA7Ci0gICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBPcHRpb25hbDxBU1Q6OkFkZHJl
c3NTcGFjZT4+IG1fYWRkcmVzc1NwYWNlTWFwOworICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9u
KiwgQVNUOjpUeXBlQW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbnM7CiAgICAgSGFzaFNldDxT
dHJpbmc+IG1fdmVydGV4RW50cnlQb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZnJhZ21l
bnRFbnRyeVBvaW50czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9jb21wdXRlRW50cnlQb2ludHM7
CkBAIC01MzgsOCArNTM3LDggQEAgYm9vbCBDaGVja2VyOjphc3NpZ25UeXBlcygpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIg
OiBtX2FkZHJlc3NTcGFjZU1hcCkKLSAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0QWRkcmVz
c1NwYWNlKGtleVZhbHVlUGFpci52YWx1ZSk7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIg
OiBtX3R5cGVBbm5vdGF0aW9ucykKKyAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0VHlwZUFu
bm90YXRpb24oV1RGTW92ZShrZXlWYWx1ZVBhaXIudmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtNjIxLDYgKzYyMCwxNyBAQCBzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbAogICAgIH0p
KTsKIH0KIAorc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gY29t
bWl0KFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUpCit7CisgICAgcmV0dXJuIHJlc29sdmlu
Z1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
PiB7CisgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICB9LCBbJl0oUmVm
UHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+
IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICBpZiAoIXJl
c29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbW1pdChyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2
YWJsZVR5cGUoKSk7CisgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVz
b2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICB9KSk7Cit9CisKIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9u
RGVmaW5pdGlvbikKIHsKICAgICBhdXRvKiBiYXNlVHlwZSA9IChbJl0oKSAtPiBBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiogewpAQCAtNzI4LDI2ICs3MzgsMjYgQEAgdm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCiAgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOwogfQogCi1hdXRvIENoZWNrZXI6OnJlY3Vyc2VBbmRH
ZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xWYWx1ZSkg
LT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OnJlY3Vyc2VBbmRHZXRJbmZv
KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSkgLT4g
T3B0aW9uYWw8UmVjdXJzZUluZm8+CiB7CiAgICAgVmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lvbik7
CiAgICAgaWYgKGVycm9yKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0
dXJuIGdldEluZm8oZXhwcmVzc2lvbiwgcmVxdWlyZXNMVmFsdWUpOworICAgIHJldHVybiBnZXRJ
bmZvKGV4cHJlc3Npb24sIHJlcXVpcmVzTGVmdFZhbHVlKTsKIH0KIAotYXV0byBDaGVja2VyOjpn
ZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xWYWx1ZSkg
LT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OmdldEluZm8oQVNUOjpFeHBy
ZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlKSAtPiBPcHRpb25hbDxS
ZWN1cnNlSW5mbz4KIHsKICAgICBhdXRvIHR5cGVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZl
eHByZXNzaW9uKTsKICAgICBBU1NFUlQodHlwZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7
CiAKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUl0ZXJhdG9yID0gbV9hZGRyZXNzU3BhY2VNYXAuZmlu
ZCgmZXhwcmVzc2lvbik7Ci0gICAgQVNTRVJUKGFkZHJlc3NTcGFjZUl0ZXJhdG9yICE9IG1fYWRk
cmVzc1NwYWNlTWFwLmVuZCgpKTsKLSAgICBpZiAocmVxdWlyZXNMVmFsdWUgJiYgIWFkZHJlc3NT
cGFjZUl0ZXJhdG9yLT52YWx1ZSkgeworICAgIGF1dG8gdHlwZUFubm90YXRpb25JdGVyYXRvciA9
IG1fdHlwZUFubm90YXRpb25zLmZpbmQoJmV4cHJlc3Npb24pOworICAgIEFTU0VSVCh0eXBlQW5u
b3RhdGlvbkl0ZXJhdG9yICE9IG1fdHlwZUFubm90YXRpb25zLmVuZCgpKTsKKyAgICBpZiAocmVx
dWlyZXNMZWZ0VmFsdWUgJiYgdHlwZUFubm90YXRpb25JdGVyYXRvci0+dmFsdWUuaXNSaWdodFZh
bHVlKCkpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICB9Ci0gICAgcmV0dXJuIHt7IHR5cGVJdGVyYXRvci0+dmFsdWUsIGFkZHJlc3NTcGFj
ZUl0ZXJhdG9yLT52YWx1ZSB9fTsKKyAgICByZXR1cm4ge3sgdHlwZUl0ZXJhdG9yLT52YWx1ZSwg
dHlwZUFubm90YXRpb25JdGVyYXRvci0+dmFsdWUgfX07CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtNzY3
LDE5ICs3NzcsMzIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgfQogfQogCi12b2lkIENoZWNrZXI6OmFzc2ln
blR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mJiB1bm5hbWVkVHlwZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NT
cGFjZSkKK3ZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Np
b24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVB
bm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCiB7CiAgICAgYXV0
byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHVubmFtZWRU
eXBlKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFk
ZCgmZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJl
c3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh0eXBlQW5u
b3RhdGlvbikpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRy
ZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWdu
VHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNz
U3BhY2U+IGFkZHJlc3NTcGFjZSkKK3ZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJl
c3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiByZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9
IEFTVDo6UmlnaHRWYWx1ZSgpKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFk
ZCgmZXhwcmVzc2lvbiwgV1RGTW92ZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkpOwogICAgIEFT
U0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgYXV0byBh
ZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24s
IGFkZHJlc3NTcGFjZSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVB
bm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVz
dWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIENoZWNrZXI6OmZvcndhcmRUeXBlKEFTVDo6RXhw
cmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpU
eXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQoreworICAg
IHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVN
YXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0sIFsmXShSZWZQdHI8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJlZigpKTsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9
KSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5h
ZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKICAgICBBU1NFUlRfVU5V
U0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50
cnkpOwogfQogCkBAIC03ODksNiArODEyLDExIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpB
c3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCiAgICAgaWYgKCFsZWZ0
SW5mbykKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGxlZnRJbmZvLT50eXBlQW5ub3RhdGlv
bi5pc1JpZ2h0VmFsdWUoKSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgYXV0byByaWdodEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhhc3NpZ25t
ZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKICAgICBpZiAoIXJpZ2h0SW5mbykKICAgICAgICAgcmV0
dXJuOwpAQCAtODAyLDIzICs4MzAsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2ln
bm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKICAgICBhc3NpZ25UeXBlKGFz
c2lnbm1lbnRFeHByZXNzaW9uLCBXVEZNb3ZlKCpyZXN1bHRUeXBlKSk7CiB9CiAKLXZvaWQgQ2hl
Y2tlcjo6Zm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZXNvbHZpbmdU
eXBlJiByZXNvbHZpbmdUeXBlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1Nw
YWNlKQotewotICAgIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOwotICAgICAg
ICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0s
IFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKLSAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJl
ZigpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KTsKLSAgICB9KSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJl
c3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7Ci0gICAgQVNTRVJUX1VO
VVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0Vu
dHJ5KTsKLX0KLQogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZv
ID0gcmVjdXJzZUFuZEdldEluZm8ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSwg
dHJ1ZSk7Ci0gICAgaWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJl
Y3Vyc2VBbmRHZXRJbmZvKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCksIHRy
dWUpOworICAgIGlmICghbGVmdFZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RklYTUU6IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSBSZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uJ3MgQW5vbnltb3VzVmFyaWFibGVzLgpAQCAtODI3LDcgKzg0Miw3IEBAIHZvaWQgQ2hl
Y2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uKQogICAgIGlmICghbmV3VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1Zh
bHVlSW5mby0+cmVzb2x2aW5nVHlwZSkpIHsKKyAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KGxlZnRW
YWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSkpIHsK
ICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTg3MywzNyAr
ODg4LDQzIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24m
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFz
c2lnblR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+Y2xvbmUoKSwgcG9p
bnRlclR5cGUtPmFkZHJlc3NTcGFjZSgpKTsKKyAgICBhc3NpZ25UeXBlKGRlcmVmZXJlbmNlRXhw
cmVzc2lvbiwgcG9pbnRlclR5cGUtPmNsb25lKCksIEFTVDo6TGVmdFZhbHVlIHsgcG9pbnRlclR5
cGUtPmFkZHJlc3NTcGFjZSgpIH0pOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFr
ZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBs
VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1
ZSgpLCB0cnVlKTsKLSAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgYXV0byBsZWZ0VmFsdWVJbmZv
ID0gcmVjdXJzZUFuZEdldEluZm8obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLCB0
cnVlKTsKKyAgICBpZiAoIWxlZnRWYWx1ZUluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRB
ZGRyZXNzU3BhY2UoKTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKKyAgICAgICAgc2V0
RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGF1dG8qIGxWYWx1ZVR5cGUg
PSBnZXRVbm5hbWVkVHlwZShsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWxW
YWx1ZVR5cGUpIHsKKyAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobGVm
dFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVUeXBlKSB7CiAg
ICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25U
eXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBl
PihMZXhlcjo6VG9rZW4obWFrZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUlu
Zm8tPmFkZHJlc3NTcGFjZSwgbFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAgIGFzc2lnblR5cGUo
bWFrZVBvaW50ZXJFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExl
eGVyOjpUb2tlbihtYWtlUG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NT
cGFjZSwgbGVmdFZhbHVlVHlwZS0+Y2xvbmUoKSkpOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbikKIHsKLSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhtYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICBpZiAoIWxWYWx1ZUluZm8p
CisgICAgYXV0byBsZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CisgICAgaWYgKCFsZWZ0VmFsdWVJbmZvKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBsVmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUo
bFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFsVmFsdWVUeXBlKSB7CisgICAg
YXV0byogbGVmdFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxlZnRWYWx1ZUluZm8tPnJlc29s
dmluZ1R5cGUpOworICAgIGlmICghbGVmdFZhbHVlVHlwZSkgewogICAgICAgICBzZXRFcnJvcigp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byYgdW5pZnlOb2RlID0gbFZhbHVl
VHlwZS0+dW5pZnlOb2RlKCk7CisgICAgYXV0byYgdW5pZnlOb2RlID0gbGVmdFZhbHVlVHlwZS0+
dW5pZnlOb2RlKCk7CiAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsK
ICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1
bmlmeU5vZGUpOwogICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUp
KSB7CkBAIC05MTMsNyArOTM0LDggQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3MKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbFZhbHVlSW5mby0+YWRkcmVz
c1NwYWNlKSB7CisgICAgICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8t
PnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgaWYgKCFsZWZ0QWRk
cmVzc1NwYWNlKSB7CiAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC05MjEsMTgzICs5NDMsMTEyIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzCiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKSB7CiAgICAg
ICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1l
ZFR5cGUpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhlIG51bWJlciBvZiBlbGVtZW50
cy4KLSAgICAgICAgICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwg
bWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1Nw
YWNlLCBhcnJheVR5cGUudHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAgIGFzc2lnblR5cGUo
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3Jp
Z2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIWxWYWx1ZUlu
Zm8tPmFkZHJlc3NTcGFjZSkgeworICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1
ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBpZiAoIWxlZnRB
ZGRyZXNzU3BhY2UpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVu
aXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBs
VmFsdWVUeXBlLT5jbG9uZSgpKSk7CisgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6
VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVz
c1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6Zmlu
aXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYg
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5
cGUsIEFTVDo6VW5uYW1lZFR5cGUqIGV4dHJhQXJndW1lbnRUeXBlKQordm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7Ci0gICAgdXNpbmcgT3Zl
cmxvYWRSZXNvbHV0aW9uID0gc3RkOjp0dXBsZTxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBB
U1Q6OlVubmFtZWRUeXBlKj47Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1
bmN0aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVyblR5cGU7Ci0gICAgc3RkOjp0
aWUoZ2V0RnVuY3Rpb24sIGdldFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1
dGlvbiB7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgZ2V0QXJndW1lbnRUeXBlMSh3cmFwcGVkQmFz
ZVR5cGUuY2xvbmUoKSk7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IGdldEFyZ3Vt
ZW50VHlwZTI7Ci0gICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAgICAgICAgICAgIGdl
dEFyZ3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgp
KTsKKyAgICBhdXRvIGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oZG90RXhwcmVzc2lvbi5i
YXNlKCkpOworICAgIGlmICghYmFzZUluZm8pCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGJh
c2VVbm5hbWVkVHlwZSA9IGNvbW1pdChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYg
KCFiYXNlVW5uYW1lZFR5cGUpCisgICAgICAgIHJldHVybjsKIAorICAgIEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUq
IGdldFJldHVyblR5cGUgPSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGdldEFyZ3VtZW50VHlwZXM7Ci0gICAgICAg
IGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGdldEFyZ3VtZW50VHlwZTEpOwotICAgICAgICBpZiAo
Z2V0QXJndW1lbnRUeXBlMikKLSAgICAgICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpn
ZXRBcmd1bWVudFR5cGUyKTsKLQotICAgICAgICBhdXRvKiBnZXRGdW5jdGlvbiA9IHJlc29sdmVG
dW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVHZXRP
dmVybG9hZHMoKSwgZ2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAgICAgIGlmICghZ2V0
RnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVs
bHB0cik7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihnZXRGdW5jdGlvbiwgJmdldEZ1
bmN0aW9uLT50eXBlKCkpOwotICAgIH0pKCk7Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIGFuZEZ1bmN0aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVyblR5cGU7Ci0g
ICAgc3RkOjp0aWUoYW5kRnVuY3Rpb24sIGFuZFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJs
b2FkUmVzb2x1dGlvbiB7Ci0gICAgICAgIGF1dG8gY29tcHV0ZUFuZEFyZ3VtZW50VHlwZSA9IFsm
XShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8UmVzb2x2aW5nVHlw
ZT4gewotICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVk
VHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgdW5uYW1lZFR5cGUuY2xvbmUoKSB9Owot
ICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHsgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdp
bigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+
KHVubmFtZWRUeXBlKS50eXBlKCkuY2xvbmUoKSkpIH07Ci0gICAgICAgICAgICBpZiAoaXM8QVNU
OjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4geyBSZXNvbHZpbmdUeXBlKG1ha2VVbmlxdWVS
ZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6VHlw
ZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpLmNsb25lKCkpKSB9OwotICAgICAgICB9OwotICAgICAg
ICBhdXRvIGNvbXB1dGVBbmRSZXR1cm5UeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFt
ZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpQ
b2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfTsKLQotICAgICAgICBhdXRvIGFuZEFyZ3Vt
ZW50VHlwZTEgPSBjb21wdXRlQW5kQXJndW1lbnRUeXBlKHdyYXBwZWRCYXNlVHlwZSk7Ci0gICAg
ICAgIGlmICghYW5kQXJndW1lbnRUeXBlMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4g
YW5kQXJndW1lbnRUeXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAgICAg
ICAgICAgYW5kQXJndW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUt
PmNsb25lKCkpOworICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVz
b2x2aW5nVHlwZSk7CisgICAgICAgIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3Zlcmxv
YWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwgZ2V0QXJndW1lbnRU
eXBlcywgbnVsbHB0cik7CisgICAgICAgIGlmIChnZXRGdW5jdGlvbikKKyAgICAgICAgICAgIGdl
dFJldHVyblR5cGUgPSAmZ2V0RnVuY3Rpb24tPnR5cGUoKTsKKyAgICB9CiAKKyAgICBBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBBU1Q6OlVubmFt
ZWRUeXBlKiBhbmRSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBsZWZ0QWRkcmVz
c1NwYWNlID0gYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKSkgewor
ICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlw
ZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFj
ZSwgYmFzZVVubmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKICAgICAgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFuZEFyZ3VtZW50VHlwZXM7Ci0gICAg
ICAgIGFuZEFyZ3VtZW50VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5cGUxKTsKLSAgICAgICAg
aWYgKGFuZEFyZ3VtZW50VHlwZTIpCi0gICAgICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVu
ZCgqYW5kQXJndW1lbnRUeXBlMik7Ci0KLSAgICAgICAgYXV0byogYW5kRnVuY3Rpb24gPSByZXNv
bHZlRnVuY3Rpb25PdmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxl
QW5kT3ZlcmxvYWRzKCksIGFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAo
IWFuZEZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIs
IG51bGxwdHIpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYW5kRnVuY3Rpb24sIGNv
bXB1dGVBbmRSZXR1cm5UeXBlKGFuZEZ1bmN0aW9uLT50eXBlKCkpKTsKLSAgICB9KSgpOworICAg
ICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7Cisg
ICAgICAgIGFuZEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJl
c3Npb24ucG9zc2libGVBbmRPdmVybG9hZHMoKSwgYW5kQXJndW1lbnRUeXBlcywgbnVsbHB0cik7
CisgICAgICAgIGlmIChhbmRGdW5jdGlvbikKKyAgICAgICAgICAgIGFuZFJldHVyblR5cGUgPSAm
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5
cGUoKTsgLy8gRklYTUU6IEVuZm9yY2UgdGhlIHJldHVybiBvZiBhbmRlcnMgd2lsbCBhbHdheXMg
YmUgYSBwb2ludGVyCisgICAgfQorCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJl
YWRBbmRGdW5jdGlvbiA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogdGhyZWFkQW5k
UmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAgeworICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlVW5uYW1lZFR5cGUt
PmdldCgpLmNsb25lKCkpOworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxS
ZXNvbHZpbmdUeXBlPj4gdGhyZWFkQW5kQXJndW1lbnRUeXBlczsKKyAgICAgICAgdGhyZWFkQW5k
QXJndW1lbnRUeXBlcy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgICAgICB0
aHJlYWRBbmRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNz
aW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRzKCksIHRocmVhZEFuZEFyZ3VtZW50VHlwZXMsIG51bGxw
dHIpOworICAgICAgICBpZiAodGhyZWFkQW5kRnVuY3Rpb24pCisgICAgICAgICAgICB0aHJlYWRB
bmRSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHRocmVhZEFuZEZ1bmN0
aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBFbmZvcmNlIHRoZSByZXR1cm4g
b2YgYW5kZXJzIHdpbGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgIH0KIAotICAgIGlmICghZ2V0
UmV0dXJuVHlwZSAmJiAhYW5kUmV0dXJuVHlwZSkgeworICAgIGlmICghZ2V0RnVuY3Rpb24gJiYg
IWFuZEZ1bmN0aW9uKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0KLSAgICBpZiAoZ2V0UmV0dXJuVHlwZSAmJiBhbmRSZXR1cm5UeXBlICYmICFtYXRjaGVz
KCpnZXRSZXR1cm5UeXBlLCAqYW5kUmV0dXJuVHlwZSkpIHsKKyAgICBpZiAoZ2V0RnVuY3Rpb24g
JiYgYW5kRnVuY3Rpb24pIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoYW5kRnVuY3Rpb24gJiYgdGhyZWFkQW5kRnVuY3Rpb24gJiYgIW1hdGNo
ZXMoKmFuZFJldHVyblR5cGUsICp0aHJlYWRBbmRSZXR1cm5UeXBlKSkgewogICAgICAgICBzZXRF
cnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiBzZXRGdW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBzZXRSZXR1cm5UeXBl
OwotICAgIHN0ZDo6dGllKHNldEZ1bmN0aW9uLCBzZXRSZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBP
dmVybG9hZFJlc29sdXRpb24gewotICAgICAgICBSZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50MVR5
cGUod3JhcHBlZEJhc2VUeXBlLmNsb25lKCkpOwotICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdU
eXBlPiBzZXRBcmd1bWVudFR5cGUyOwotICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCi0g
ICAgICAgICAgICBzZXRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50
VHlwZS0+Y2xvbmUoKSk7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgc2V0QXJndW1lbnQzVHlwZShn
ZXRSZXR1cm5UeXBlID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUtPmNs
b25lKCkpOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdldFJldHVyblR5cGUg
PyBnZXRSZXR1cm5UeXBlIDogYW5kUmV0dXJuVHlwZTsKIAorICAgIEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiogc2V0RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNl
dFJldHVyblR5cGUgPSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHNldEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIHNl
dEFyZ3VtZW50VHlwZXMuYXBwZW5kKHNldEFyZ3VtZW50MVR5cGUpOwotICAgICAgICBpZiAoc2V0
QXJndW1lbnRUeXBlMikKLSAgICAgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpzZXRB
cmd1bWVudFR5cGUyKTsKLSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoc2V0QXJndW1l
bnQzVHlwZSk7Ci0KLSAgICAgICAgYXV0byogc2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25P
dmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlU2V0T3ZlcmxvYWRz
KCksIHNldEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIXNldEZ1bmN0aW9u
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOwot
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc2V0RnVuY3Rpb24sICZzZXRGdW5jdGlvbi0+
dHlwZSgpKTsKLSAgICB9KSgpOwotCi0gICAgaWYgKHNldEZ1bmN0aW9uKSB7Ci0gICAgICAgIGlm
ICghbWF0Y2hlcyhzZXRGdW5jdGlvbi0+dHlwZSgpLCB3cmFwcGVkQmFzZVR5cGUpKSB7Ci0gICAg
ICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKLSAgICBp
ZiAoZ2V0UmV0dXJuVHlwZSB8fCBhbmRSZXR1cm5UeXBlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBU
aGUgcmVmZXJlbmNlIGNvbXBpbGVyIGhhcyAiZWxzZSBpZiAoIW5vZGUuYmFzZS5pc0xWYWx1ZSAm
JiAhYmFzZVR5cGUuaXNBcnJheVJlZikiLAotICAgICAgICAvLyBidXQgSSBkb24ndCB1bmRlcnN0
YW5kIHdoeSBpdCBleGlzdHMuIEkgaGF2ZW4ndCB3cml0dGVuIGl0IGhlcmUsIGFuZCBJJ2xsIGlu
dmVzdGlnYXRlCi0gICAgICAgIC8vIGlmIHdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGUgcmVmZXJl
bmNlIGNvbXBpbGVyLgotICAgICAgICBpZiAoaXM8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVk
QmFzZVR5cGUpKQotICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gZG93bmNhc3Q8QVNUOjpSZWZl
cmVuY2VUeXBlPih3cmFwcGVkQmFzZVR5cGUpLmFkZHJlc3NTcGFjZSgpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFj
ZU1hcC5maW5kKCZwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICAgICAgICAg
IEFTU0VSVChhZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7
Ci0gICAgICAgICAgICBpZiAoYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAg
ICAgICAgIGFkZHJlc3NTcGFjZSA9ICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWU7Ci0gICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBzZXRBcmd1bWVu
dFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIFJlc29sdmlu
Z1R5cGUgZmllbGRSZXNvbHZpbmdUeXBlKGZpZWxkVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIHNl
dEFyZ3VtZW50VHlwZXMuYXBwZW5kKGZpZWxkUmVzb2x2aW5nVHlwZSk7CisgICAgICAgIHNldEZ1
bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2li
bGVTZXRPdmVybG9hZHMoKSwgc2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlm
IChzZXRGdW5jdGlvbikKKyAgICAgICAgICAgIHNldFJldHVyblR5cGUgPSAmc2V0RnVuY3Rpb24t
PnR5cGUoKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogR2VuZXJhdGUgdGhlIGNhbGwgZXhwcmVz
c2lvbnMKLQotICAgIGFzc2lnblR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBnZXRSZXR1
cm5UeXBlID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUtPmNsb25lKCks
IGFkZHJlc3NTcGFjZSk7Ci19Ci0KLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
Pj4gQ2hlY2tlcjo6cmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQotewotICAgIGF1dG8gYmFzZUluZm8g
PSByZWN1cnNlQW5kR2V0SW5mbyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAg
ICBpZiAoIWJhc2VJbmZvKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0
byogYmFzZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0g
ICAgaWYgKCFiYXNlVHlwZSkgeworICAgIGlmIChzZXRGdW5jdGlvbiAmJiBhbmRGdW5jdGlvbikg
ewogICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAg
IH0KLSAgICBhdXRvJiBiYXNlVW5pZnlOb2RlID0gYmFzZVR5cGUtPnVuaWZ5Tm9kZSgpOwotICAg
IGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSkKLSAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpLmNsb25lKCk7Ci0gICAg
QVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSk7Ci0gICAgcmV0dXJuIHsg
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24ub3JpZ2luKCkpLCBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkp
IH07Ci19Ci0KLXZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHBy
ZXNzaW9uKQotewotICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGRv
dEV4cHJlc3Npb24pOwotICAgIGlmICghYmFzZVR5cGUpCiAgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICBmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKGRvdEV4cHJlc3Npb24sICpiYXNl
VHlwZSk7CisgICAgZG90RXhwcmVzc2lvbi5zZXRHZXRGdW5jdGlvbihnZXRGdW5jdGlvbik7Cisg
ICAgZG90RXhwcmVzc2lvbi5zZXRBbmRGdW5jdGlvbihhbmRGdW5jdGlvbik7CisgICAgZG90RXhw
cmVzc2lvbi5zZXRUaHJlYWRBbmRGdW5jdGlvbih0aHJlYWRBbmRGdW5jdGlvbik7CisgICAgZG90
RXhwcmVzc2lvbi5zZXRTZXRGdW5jdGlvbihzZXRGdW5jdGlvbik7CisKKyAgICBBU1Q6OlR5cGVB
bm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCk7CisgICAgaWYgKGF1
dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVz
c1NwYWNlKCkpIHsKKyAgICAgICAgaWYgKGFuZEZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFu
bm90YXRpb24gPSBBU1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRkcmVzc1NwYWNlIH07CisgICAgICAg
IGVsc2UgaWYgKHNldEZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6
OkFic3RyYWN0TGVmdFZhbHVlKCk7CisgICAgfSBlbHNlIGlmICghYmFzZUluZm8tPnR5cGVBbm5v
dGF0aW9uLmlzUmlnaHRWYWx1ZSgpICYmIChzZXRGdW5jdGlvbiB8fCBhbmRGdW5jdGlvbikpCisg
ICAgICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgpOworICAgIGFz
c2lnblR5cGUoZG90RXhwcmVzc2lvbiwgZmllbGRUeXBlLT5jbG9uZSgpLCBXVEZNb3ZlKHR5cGVB
bm5vdGF0aW9uKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Np
b24mIGluZGV4RXhwcmVzc2lvbikKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJl
c3Npb24mKQogewotICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGlu
ZGV4RXhwcmVzc2lvbik7Ci0gICAgaWYgKCFiYXNlVHlwZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBpbmRleEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhpbmRleEV4cHJlc3Npb24uaW5k
ZXhFeHByZXNzaW9uKCkpOwotICAgIGlmICghaW5kZXhJbmZvKQotICAgICAgICByZXR1cm47Ci0g
ICAgYXV0byBpbmRleEV4cHJlc3Npb25UeXBlID0gZ2V0VW5uYW1lZFR5cGUoaW5kZXhJbmZvLT5y
ZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWluZGV4RXhwcmVzc2lvblR5cGUpIHsKLSAgICAgICAg
c2V0RXJyb3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmlzaFZpc2l0aW5n
UHJvcGVydHlBY2Nlc3MoaW5kZXhFeHByZXNzaW9uLCBXVEZNb3ZlKCpiYXNlVHlwZSksIGluZGV4
RXhwcmVzc2lvblR5cGUpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAogdm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5j
ZSkKQEAgLTExMDUsMTAgKzEwNTYsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKICAgICBBU1NFUlQodmFyaWFibGVSZWZl
cmVuY2UudmFyaWFibGUoKSk7CiAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxl
KCktPnR5cGUoKSk7CiAgICAgCi0gICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJl
c3NTcGFjZTsKLSAgICBpZiAoIXZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPmlzQW5vbnlt
b3VzKCkpCi0gICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQ7
Ci0gICAgYXNzaWduVHlwZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFy
aWFibGUoKS0+dHlwZSgpLT5jbG9uZSgpLCBhZGRyZXNzU3BhY2UpOworICAgIEFTVDo6VHlwZUFu
bm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKTsKKyAgICBpZiAoIXZh
cmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPmlzQW5vbnltb3VzKCkpIC8vIEZJWE1FOiBUaGlz
IGRvZXNuJ3Qgc2VlbSByaWdodC4KKyAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfTsKKyAgICBhc3NpZ25UeXBlKHZhcmlh
YmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCktPmNsb25l
KCksIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQpAQCAtMTQwNyw3ICsxMzU4LDcgQEAgdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQogICAg
IGlmIChlcnJvcigpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBsYXN0SW5mbyA9IGdldElu
Zm8oY29tbWFFeHByZXNzaW9uLmxpc3QoKS5sYXN0KCkpOwotICAgIGZvcndhcmRUeXBlKGNvbW1h
RXhwcmVzc2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGZvcndhcmRUeXBlKGNv
bW1hRXhwcmVzc2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUsIGxhc3RJbmZvLT50eXBlQW5u
b3RhdGlvbik7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lv
biYgdGVybmFyeUV4cHJlc3Npb24pCkBAIC0xNDU2LDcgKzE0MDcsNyBAQCB2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQogICAgIH0KIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPnBhcmFtZXRlcnMoKS5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KHR5cGVzW2ldLmdldCgpLCAqZnVuY3Rp
b24tPnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKSB7CisgICAgICAgIGlmICghbWF0Y2hBbmRDb21t
aXQodHlwZXNbaV0uZ2V0KCksICpmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLT50eXBlKCkpKSB7
CiAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTElu
ZmVyVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJ
bmZlclR5cGVzLmNwcAppbmRleCAyZmNjNmYxMzlkZTg0YTMyYzRjNzA3Y2EwNjBiOWJlMWI0MmZk
M2UwLi4xNThlMjNiNDcyZGU0OTkzMWViNzg0MmM5N2I4NGFhMjNkMDk3MGU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBl
cy5jcHAKQEAgLTIyNyw5ICsyMjcsOSBAQCBib29sIGluZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiYgcG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3NzaWJsZUZ1bmN0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBh
cmd1bWVudFR5cGVzW2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgewotICAgICAgICAgICAg
cmV0dXJuIG1hdGNoZXMoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSwg
dW5uYW1lZFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnBvc3NpYmxlRnVuY3Rp
b24ucGFyYW1ldGVycygpW2ldLT50eXBlKCksIHVubmFtZWRUeXBlKTsKICAgICAgICAgfSwgWyZd
KFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
KSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+
cmVzb2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZlKHBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygp
W2ldLnR5cGUoKS0+dW5pZnlOb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVU
eXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUocG9zc2libGVGdW5jdGlv
bi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKS0+dW5pZnlOb2RlKCkpOwogICAgICAgICB9KSk7CiAg
ICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29s
dmVyLmNwcAppbmRleCAwNTM1MGUwZGM5ODVlY2IzOTBmNTg2ZjBhMzRkMmE2ZWNmZWRjYTMyLi4z
Y2JlZGQ5YzI1Nzg4ZmU1ZGUwNTYxMmZmMGRkMjZkNGM4NTRmN2UzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
Y3BwCkBAIC0xOTcsOSArMTk3LDEwIEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRv
dEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8PSBzaXplb2YoQVNU
OjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVj
b21lIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJl
bmNlcyIpOwogICAgICAgICAgICAgICAgICAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhw
cmVzc2lvbi5vcmlnaW4oKTsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBlcmhhcHMg
ZG8gdGhpcyB3aXRoIHZhcmlhbnRzIG9yIGEgUmV3cml0ZXIgaW5zdGVhZC4KKyAgICAgICAgICAg
ICAgICAgICAgdm9pZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKICAgICAgICAgICAgICAg
ICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOwogICAgICAgICAgICAgICAgICAg
ICBhdXRvIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCA9IEFTVDo6RW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsOjp3cmFwKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShiYXNlTmFtZSksIFdURk1vdmUo
bWVtYmVyTmFtZSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbiwgKm1lbWJlcik7Ci0gICAgICAgICAg
ICAgICAgICAgIG5ldyAoJmRvdEV4cHJlc3Npb24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsKFdURk1vdmUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSk7CisgICAgICAgICAgICAgICAg
ICAgIG5ldyAobG9jYXRpb24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUo
ZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAppbmRl
eCA1MzMyNTY3NjY0OWQ3MzMzMDkwYjAxNWE3YjY3MjU3ZmMzNjBiOGQ0Li44MDVhNDYyNDc5N2Mx
MzRhNDM4N2RjMTk2NjZmNmVmYTY3NTFkOWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkBAIC0xMDgyLDEzICsxMDgyLDEz
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zLCBFcnJvcj4KICAgICBhdXRvIGZpcnN0UGFyYW1ldGVyID0gcGFyc2VQ
YXJhbWV0ZXIoKTsKICAgICBpZiAoIWZpcnN0UGFyYW1ldGVyKQogICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4oZmlyc3RQYXJhbWV0ZXIuZXJyb3IoKSk7Ci0gICAgcGFyYW1ldGVycy5h
cHBlbmQoV1RGTW92ZSgqZmlyc3RQYXJhbWV0ZXIpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZCht
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqZmlyc3RQYXJh
bWV0ZXIpKSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1h
KSkgewogICAgICAgICBhdXRvIHBhcmFtZXRlciA9IHBhcnNlUGFyYW1ldGVyKCk7CiAgICAgICAg
IGlmICghcGFyYW1ldGVyKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBh
cmFtZXRlci5lcnJvcigpKTsKLSAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSgqcGFy
YW1ldGVyKSk7CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCpwYXJhbWV0ZXIpKSk7CiAgICAgfQogCiAgICAg
YXV0byByaWdodFBhcmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpS
aWdodFBhcmVudGhlc2lzKTsKQEAgLTE1NjcsMTQgKzE1NjcsMTQgQEAgYXV0byBQYXJzZXI6OnBh
cnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zU3QKICAgICBpZiAoIWZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsK
IAotICAgIFZlY3RvcjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IHJlc3VsdDsKLSAgICByZXN1
bHQuYXBwZW5kKFdURk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgIFZlY3Rv
cjxVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gcmVzdWx0OworICAgIHJlc3Vs
dC5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUo
KmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikpKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKExleGVy
OjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7CiAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlv
biA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICAgICAg
aWYgKCF2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoV1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICByZXN1bHQuYXBwZW5k
KG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCp2YXJpYWJs
ZURlY2xhcmF0aW9uKSkpOwogICAgIH0KIAogICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zU3RhdGVtZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocmVzdWx0KSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNw
cAppbmRleCA5YTEwMzVhNGI4Y2FkMzNhMjFlNjcwZjIyMDA1OTFjYzE0OGQ2YjEzLi44NjliN2Mz
OGNkYjRhOWRjYzFiMjk0MTk2NGJlOWQ2ODFhZDhlMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTM3LDYgKzM3
LDcgQEAKICNpbmNsdWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgogI2luY2x1ZGUgIldITFNMUGFy
c2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0
eVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV0hMU0xSZWN1cnNpb25DaGVja2VyLmgiCiAjaW5jbHVk
ZSAiV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWNN
YXRjaGVyLmgiCkBAIC04Miw3ICs4Myw3IEBAIHN0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVw
YXJlU2hhcmVkKFN0cmluZyYgd2hsc2xTb3VyY2UpCiAgICAgaWYgKCFjaGVjayhwcm9ncmFtKSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9n
cmFtKTsKLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NTc4OCBSZXNvbHZlIHByb3BlcnRpZXMgaGVyZQorICAgIHJlc29sdmVQcm9wZXJ0aWVz
KHByb2dyYW0pOwogICAgIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKICAgICBpZiAoIWNoZWNr
U3RhdGVtZW50QmVoYXZpb3IocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBy
b3BlcnR5UmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTU0ZTU1NzNlMWM0NWJjYjkx
NDFiN2U0ZDkwNjRiYmVkYzgzOWFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcApAQCAtMCwwICsx
LDc1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExT
TFByb3BlcnR5UmVzb2x2ZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJX
SExTTFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCitjbGFzcyBQcm9wZXJ0eVJlc29sdmVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgor
cHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworCisgICAg
Ym9vbCBzaW1wbGlmeVJpZ2h0VmFsdWUoQVNUOjpEb3RFeHByZXNzaW9uJik7CisgICAgYm9vbCBz
aW1wbGlmeUFic3RyYWN0TGVmdFZhbHVlKEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mLCBBU1Q6
OkRvdEV4cHJlc3Npb24mLCBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIHJpZ2h0KTsKKyAg
ICB2b2lkIHNpbXBsaWZ5TGVmdFZhbHVlKEFTVDo6RXhwcmVzc2lvbiYpOworCisgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9ucyBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOworfTsKKwordm9pZCBQ
cm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24p
Cit7CisgICAgLy8gVW5sZXNzIHdlJ3JlIGluc2lkZSBhbiBBc3NpZ25tZW50RXhwcmVzc2lvbiBv
ciBhIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24sIHdlJ3JlIGEgcmlnaHQgdmFsdWUuCisgICAg
aWYgKCFzaW1wbGlmeVJpZ2h0VmFsdWUoZG90RXhwcmVzc2lvbikpCisgICAgICAgIHNldEVycm9y
KCk7Cit9CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBWaXNpdG9yOjp2aXNpdChmdW5jdGlv
bkRlZmluaXRpb24pOworICAgIGlmICghbV92YXJpYWJsZURlY2xhcmF0aW9ucy5pc0VtcHR5KCkp
CisgICAgICAgIGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpLnN0YXRlbWVudHMoKS5pbnNlcnQo
MCwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihMZXhl
cjo6VG9rZW4obV92YXJpYWJsZURlY2xhcmF0aW9uc1swXS0+b3JpZ2luKCkpLCBXVEZNb3ZlKG1f
dmFyaWFibGVEZWNsYXJhdGlvbnMpKSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPj4gc2V0dGVyQ2FsbChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJl
c3Npb24sIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgbmV3VmFsdWUsIGNvbnN0IHN0ZDo6
ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIGxlZnRWYWx1ZUZhY3Rvcnks
IGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIHBvaW50
ZXJUb0xlZnRWYWx1ZUZhY3RvcnkpCit7CisgICAgaWYgKGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rp
b24oKSkgeworICAgICAgICAvLyAqb3BlcmF0b3ImLmZvbygmdikgPSBuZXdWYWx1ZQorICAgICAg
ICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChwb2lu
dGVyVG9MZWZ0VmFsdWVGYWN0b3J5KCkpOworICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVz
c2lvbi5vcmlnaW4oKSksIFN0cmluZyhkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCkt
Pm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5z
ZXRUeXBlKGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkp
OworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZh
bHVlKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmRvdEV4cHJlc3Np
b24udGhyZWFkQW5kRnVuY3Rpb24oKSk7CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJl
c3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6
VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsK
KyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9p
bnRlclR5cGU+KGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlwZSgpKS5lbGVt
ZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9
KTsKKworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmln
aW4oKSksIFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSwgV1RGTW92ZShuZXdWYWx1ZSkp
OworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBv
aW50ZXJUeXBlPihkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUoKSkuZWxl
bWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICByZXR1cm4gVW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4oV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAg
IH0KKworICAgIC8vIHYgPSBvcGVyYXRvci5mb289KHYsIG5ld1ZhbHVlKQorICAgIEFTU0VSVChk
b3RFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCkpOworCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChsZWZ0VmFsdWVG
YWN0b3J5KCkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShuZXdWYWx1ZSkpOworICAg
IGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+
KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKGRvdEV4cHJlc3Np
b24uc2V0RnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCktPnR5cGUoKS5j
bG9uZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90RXhwcmVzc2lv
bi5zZXRGdW5jdGlvbigpKTsKKworICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgbGVmdFZhbHVlRmFjdG9yeSgpLCBXVEZNb3ZlKGNhbGxFeHByZXNz
aW9uKSk7CisgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi5z
ZXRGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgYXNzaWdubWVudEV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgIHJldHVybiBVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7Cit9
CisKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZ2V0dGVyQ2Fs
bChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24sIGNvbnN0IHN0ZDo6ZnVuY3Rpb248
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIGxlZnRWYWx1ZUZhY3RvcnksIGNvbnN0IHN0
ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIHBvaW50ZXJUb0xlZnRW
YWx1ZUZhY3RvcnkpCit7CisgICAgaWYgKGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rpb24oKSkgewor
ICAgICAgICAvLyAqb3BlcmF0b3ImLmZvbygmdikKKyAgICAgICAgaWYgKCFkb3RFeHByZXNzaW9u
LnRocmVhZEFuZEZ1bmN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICAKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1
bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocG9pbnRlclRvTGVmdFZhbHVlRmFjdG9y
eSgpKTsKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpD
YWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJp
bmcoZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpLT5uYW1lKCkpLCBXVEZNb3ZlKGFy
Z3VtZW50cykpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9u
LnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY2FsbEV4cHJl
c3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgY2Fs
bEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9u
KCkpOworCisgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgICAgIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihkb3RFeHByZXNz
aW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsK
KyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisKKyAgICAgICAgcmV0dXJu
IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9u
KSk7CisgICAgfQorCisgICAgLy8gb3BlcmF0b3IuZm9vKHYpCisgICAgQVNTRVJUKGRvdEV4cHJl
c3Npb24uZ2V0RnVuY3Rpb24oKSk7CisgICAgCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4
cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChsZWZ0VmFsdWVGYWN0
b3J5KCkpOworICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2Fs
bEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5n
KGRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMp
KTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLmdldEZ1bmN0aW9u
KCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigq
ZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpKTsKKworICAgIHJldHVybiBVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPihXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7Cit9CisKK3N0cnVjdCBNb2Rp
ZnlSZXN1bHQgeworICAgIEFTVDo6RXhwcmVzc2lvbiYgaW5uZXJMZWZ0VmFsdWU7CisgICAgVmVj
dG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKyAgICBWZWN0b3I8
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+IHZhcmlhYmxlRGVjbGFyYXRpb25z
OworfTsKK3N0cnVjdCBNb2RpZmljYXRpb25SZXN1bHQgeworICAgIFZlY3RvcjxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisgICAgVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4gcmVzdWx0OworfTsKK3N0YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShB
U1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24sIHN0ZDo6ZnVuY3Rpb248T3B0aW9uYWw8
TW9kaWZpY2F0aW9uUmVzdWx0PihPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4m
Jik+IG1vZGlmaWNhdGlvbikKK3sKKyAgICAvLyBDb25zaWRlciBhLmIuYy5kKys7CisgICAgLy8g
VGhpcyB3b3VsZCBnZXQgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAvLworICAgIC8vIFN0ZXAgMToK
KyAgICAvLyBwID0gJmE7CisgICAgLy8KKyAgICAvLyBTdGVwIDI6CisgICAgLy8gcSA9IG9wZXJh
dG9yLmIoKnApOworICAgIC8vIHIgPSBvcGVyYXRvci5jKHEpOworICAgIC8vCisgICAgLy8gU3Rl
cCAzOgorICAgIC8vIG9sZFZhbHVlID0gb3BlcmF0b3IuZChyKTsKKyAgICAvLyBuZXdWYWx1ZSA9
IC4uLjsKKyAgICAvLworICAgIC8vIFN0ZXAgNDoKKyAgICAvLyByID0gb3BlcmF0b3IuZD0ociwg
bmV3VmFsdWUpOworICAgIC8vIHEgPSBvcGVyYXRvci5jPShxLCByKTsKKyAgICAvLworICAgIC8v
IFN0ZXAgNDoKKyAgICAvLyAqcCA9IG9wZXJhdG9yLmI9KCpwLCBxKTsKKworICAgIC8vIElmIHRo
ZSBleHByZXNzaW9uIGlzIGEuYi5jLmQgPSBlLCBTdGVwIDMgZGlzYXBwZWFycyBhbmQgIm5ld1Zh
bHVlIiBpbiBzdGVwIDQgYmVjb21lcyAiZSIuCisgICAgCisKKyAgICAvLyBGaW5kIHRoZSAiLmIi
ICIuYyIgYW5kICIuZCIgZXhwcmVzc2lvbnMuCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpEb3RFeHByZXNzaW9uPj4gY2hhaW47CisgICAgQVNUOjpEb3RFeHByZXNzaW9u
KiBpdGVyYXRvciA9ICZkb3RFeHByZXNzaW9uOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
IEFTU0VSVChpdGVyYXRvci0+YmFzZSgpLnR5cGVBbm5vdGF0aW9uKCkpOworICAgICAgICBpZiAo
aXRlcmF0b3ItPmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgQVNTRVJUKCFpdGVyYXRvci0+YmFzZSgpLnR5cGVB
bm5vdGF0aW9uKCktPmlzUmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgY2hhaW4uYXBwZW5kKCppdGVy
YXRvcik7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGl0ZXJhdG9yLT5i
YXNlKCkpKTsgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIHdpdGggaW5kZXggZXhwcmVzc2lvbnMK
KyAgICAgICAgaXRlcmF0b3IgPSAmZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihpdGVyYXRv
ci0+YmFzZSgpKTsKKyAgICB9CisgICAgYXV0byBsZWZ0RXhwcmVzc2lvbiA9IGl0ZXJhdG9yLT50
YWtlQmFzZSgpOworICAgIEFTVDo6RXhwcmVzc2lvbiYgaW5uZXJMZWZ0RXhwcmVzc2lvbiA9IGxl
ZnRFeHByZXNzaW9uOworCisgICAgLy8gQ3JlYXRlICJwIiB2YXJpYWJsZS4KKyAgICBBU1NFUlQo
bGVmdEV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHBvaW50ZXJWYXJpYWJs
ZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4o
bGVmdEV4cHJlc3Npb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPihtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpU
b2tlbihsZWZ0RXhwcmVzc2lvbi0+b3JpZ2luKCkpLCAqbGVmdEV4cHJlc3Npb24tPnR5cGVBbm5v
dGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSwgbGVmdEV4cHJlc3Npb24tPnJlc29sdmVkVHlw
ZSgpLT5jbG9uZSgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisK
KyAgICAvLyBDcmVhdGUgInEiIGFuZCAiciIgdmFyaWFibGVzLgorICAgIFZlY3RvcjxVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gaW50ZXJtZWRpYXRlVmFyaWFibGVzOworICAg
IGludGVybWVkaWF0ZVZhcmlhYmxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNoYWluLnNpemUo
KSAtIDEpOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgY2hhaW4uc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgYXV0byYgZG90RXhwcmVzc2lvbiA9IHN0YXRpY19jYXN0PEFTVDo6RG90RXhwcmVz
c2lvbiY+KGNoYWluW2ldKTsKKyAgICAgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24ucmVzb2x2ZWRU
eXBlKCkpOworICAgICAgICBpbnRlcm1lZGlhdGVWYXJpYWJsZXMudW5jaGVja2VkQXBwZW5kKG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZG90RXhw
cmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBkb3RFeHByZXNzaW9uLnJlc29s
dmVkVHlwZSgpLT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
KTsKKyAgICB9CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJl
c3Npb25zOworCisgICAgLy8gU3RlcCAxOgorICAgIHsKKyAgICAgICAgYXV0byBtYWtlUG9pbnRl
ckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihM
ZXhlcjo6VG9rZW4oaW5uZXJMZWZ0RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUobGVmdEV4
cHJlc3Npb24pKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VV
bmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGlubmVyTGVmdEV4cHJlc3Np
b24ub3JpZ2luKCkpLCAqaW5uZXJMZWZ0RXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbigpLT5sZWZ0
QWRkcmVzc1NwYWNlKCksIGlubmVyTGVmdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCktPmNsb25l
KCkpKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJs
ZS0+dHlwZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclZh
cmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFk
IH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICBhdXRvIGFzc2lnbm1lbnRF
eHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhl
cjo6VG9rZW4oaW5uZXJMZWZ0RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVS
ZWZlcmVuY2UpLCBXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOworICAgICAgICBhc3Np
Z25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUo
KSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNz
aWdubWVudEV4cHJlc3Npb24pKTsKKyAgICB9CisKKyAgICAvLyBTdGVwIDI6CisgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uKiBwcmV2aW91cyA9IG51bGxwdHI7CisgICAgYXV0byBwcmV2aW91
c0xlZnRWYWx1ZSA9IFsmXSgpIC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKKyAgICAg
ICAgaWYgKHByZXZpb3VzKSB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKCpwcmV2aW91cykpOworICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzLT50eXBl
KCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocHJldmlvdXMtPnR5
cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAv
LyBGSVhNRTogSXMgdGhpcyByaWdodD8KKyAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVy
ZW5jZTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlh
YmxlLT50eXBlKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVy
VmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgIGF1dG8gZGVyZWZlcmVu
Y2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4o
TGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVm
ZXJlbmNlKSk7CisgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAg
ICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJU
eXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7Cisg
ICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0
VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBl
KCkpLmFkZHJlc3NTcGFjZSgpIH0pOworICAgICAgICByZXR1cm4gZGVyZWZlcmVuY2VFeHByZXNz
aW9uOworICAgIH07CisgICAgYXV0byBwb2ludGVyVG9QcmV2aW91c0xlZnRWYWx1ZSA9IFsmXSgp
IC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgaWYgKHByZXZpb3VzKSB7
CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKCpwcmV2aW91
cykpOworICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzLT50eXBlKCkpOworICAgICAgICAgICAg
dmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocHJldmlvdXMtPnR5cGUoKS0+Y2xvbmUoKSk7Cisg
ICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0
VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyBy
aWdodD8KKworICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVz
c2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpKTsKKyAgICAgICAgICAg
IEFTU0VSVChwcmV2aW91cy0+dHlwZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVz
c2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tl
bihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgcHJl
dmlvdXMtPnR5cGUoKS0+Y2xvbmUoKSkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVBvaW50ZXJFeHByZXNzaW9uOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB2
YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4o
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAg
QVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVu
Y2UtPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKyAgICAg
ICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJlbmNlOworICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9
IGNoYWluLnNpemUoKSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgQVNUOjpEb3RFeHByZXNz
aW9uJiBkb3RFeHByZXNzaW9uID0gY2hhaW5baV07CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbiA9IGludGVybWVkaWF0ZVZhcmlhYmxlc1tpIC0g
MV07CisKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IGdldHRlckNhbGwoZG90RXhwcmVz
c2lvbiwgcHJldmlvdXNMZWZ0VmFsdWUsIHBvaW50ZXJUb1ByZXZpb3VzTGVmdFZhbHVlKTsKKwor
ICAgICAgICBpZiAoIWNhbGxFeHByZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlw
ZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUodmFyaWFibGVEZWNsYXJh
dGlvbi50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0p
OyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHBy
ZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6
VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2Up
LCBXVEZNb3ZlKCpjYWxsRXhwcmVzc2lvbikpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lv
bi0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAg
IGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUo
KSk7CisKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJl
c3Npb24pKTsKKyAgICAgICAgCisgICAgICAgIHByZXZpb3VzID0gJnZhcmlhYmxlRGVjbGFyYXRp
b247CisgICAgfQorICAgIGF1dG8gbGFzdEdldHRlckNhbGxFeHByZXNzaW9uID0gZ2V0dGVyQ2Fs
bChjaGFpblswXSwgcHJldmlvdXNMZWZ0VmFsdWUsIHBvaW50ZXJUb1ByZXZpb3VzTGVmdFZhbHVl
KTsKKworICAgIC8vIE1vZGlmaWNhdGlvblJlc3VsdChVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
PiYmKQorICAgIC8vIFN0ZXAgMzoKKyAgICBhdXRvIG1vZGlmaWNhdGlvblJlc3VsdCA9IG1vZGlm
aWNhdGlvbihXVEZNb3ZlKGxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikpOworICAgIGlmICghbW9k
aWZpY2F0aW9uUmVzdWx0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uUmVzdWx0LT5leHByZXNzaW9ucy5zaXplKCk7
ICsraSkKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUobW9kaWZpY2F0aW9uUmVz
dWx0LT5leHByZXNzaW9uc1tpXSkpOworCisgICAgLy8gU3RlcCA0OgorICAgIFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+IHJpZ2h0VmFsdWUgPSBXVEZNb3ZlKG1vZGlmaWNhdGlvblJlc3VsdC0+
cmVzdWx0KTsKKyAgICBBU1NFUlQocmlnaHRWYWx1ZS0+cmVzb2x2ZWRUeXBlKCkpOworICAgIGF1
dG8gZXhwcmVzc2lvblR5cGUgPSByaWdodFZhbHVlLT5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYWluLnNpemUoKSAtIDE7ICsraSkgeworICAg
ICAgICBBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24gPSBjaGFpbltpXTsKKyAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uID0gaW50ZXJt
ZWRpYXRlVmFyaWFibGVzW2ldOworCisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24g
PSBzZXR0ZXJDYWxsKGRvdEV4cHJlc3Npb24sIFdURk1vdmUocmlnaHRWYWx1ZSksIFsmXSgpIC0+
IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVS
ZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFy
aWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAg
QVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsK
KyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlz
IHJpZ2h0PworICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJlbmNlOworICAgICAgICB9
LCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgICAgICBhdXRv
IHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
PihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAg
ICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgICAg
ICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+
Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhN
RTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Np
b24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpKTsK
KyAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAg
ICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBv
aW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQsIHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKSk7
CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlUG9pbnRlckV4cHJlc3Np
b247CisgICAgICAgIH0pOworCisgICAgICAgIGlmICghYXNzaWdubWVudEV4cHJlc3Npb24pCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGV4cHJlc3Npb25zLmFw
cGVuZChXVEZNb3ZlKCphc3NpZ25tZW50RXhwcmVzc2lvbikpOworCisgICAgICAgIHJpZ2h0VmFs
dWUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1NFUlQodmFy
aWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICByaWdodFZhbHVlLT5zZXRUeXBlKHZh
cmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgcmlnaHRWYWx1ZS0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKyAgICB9CisKKyAgICAvLyBTdGVwIDU6
CisgICAgeworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gc2V0dGVyQ2FsbChj
aGFpbltjaGFpbi5zaXplKCkgLSAxXSwgV1RGTW92ZShyaWdodFZhbHVlKSwgWyZdKCkgLT4gVW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVy
ZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgICAgIEFTU0VSVChw
b2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+
c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAg
ICAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4o
KSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpKTsKKyAgICAgICAgICAgIEFTU0VSVChwb2lu
dGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24t
PnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+dHlw
ZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuYWRkcmVzc1NwYWNlKCkgfSk7
CisgICAgICAgICAgICByZXR1cm4gZGVyZWZlcmVuY2VFeHByZXNzaW9uOworICAgICAgICB9LCBb
Jl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgICAgICBhdXRvIHZh
cmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICAg
ICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJp
Z2h0PworICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJlbmNlOworICAgICAgICB9KTsK
KworICAgICAgICBpZiAoIWFzc2lnbm1lbnRFeHByZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZSgqYXNz
aWdubWVudEV4cHJlc3Npb24pKTsKKyAgICB9CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbj4+IHZhcmlhYmxlRGVjbGFyYXRpb25zOworICAgIHZhcmlhYmxl
RGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHBvaW50ZXJWYXJpYWJsZSkpOworICAgIGZvciAo
YXV0byYgaW50ZXJtZWRpYXRlVmFyaWFibGUgOiBpbnRlcm1lZGlhdGVWYXJpYWJsZXMpCisgICAg
ICAgIHZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKGludGVybWVkaWF0ZVZhcmlh
YmxlKSk7CisKKyAgICByZXR1cm4ge3sgaW5uZXJMZWZ0RXhwcmVzc2lvbiwgV1RGTW92ZShleHBy
ZXNzaW9ucyksIFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbnMpIH19OworfQorCit2b2lkIFBy
b3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1l
bnRFeHByZXNzaW9uKQoreworICAgIEFTU0VSVChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCku
dHlwZUFubm90YXRpb24oKSk7CisgICAgaWYgKGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKS50
eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgc2ltcGxpZnlM
ZWZ0VmFsdWUoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEFTU0VSVCghYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpLnR5cGVBbm5v
dGF0aW9uKCktPmlzUmlnaHRWYWx1ZSgpKTsKKyAgICBpZiAoIWlzPEFTVDo6RG90RXhwcmVzc2lv
bj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKSkgeworICAgICAgICBzZXRFcnJvcigpOyAv
LyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgd2l0aCBpbmRleCBleHByZXNzaW9ucy4KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgp
LnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHR5cGUgPSBhc3NpZ25tZW50RXhwcmVzc2lvbi5y
aWdodCgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpOworCisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworCisgICAgYXV0byBtb2RpZnlSZXN1bHQg
PSBtb2RpZnkoZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihhc3NpZ25tZW50RXhwcmVzc2lv
bi5sZWZ0KCkpLCBbJl0oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYpIC0+
IE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4geworICAgICAgICByZXR1cm4ge3sgVmVjdG9y
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PigpLCBhc3NpZ25tZW50RXhwcmVzc2lvbi50YWtl
UmlnaHQoKSB9fTsKKyAgICB9KTsKKworICAgIGlmICghbW9kaWZ5UmVzdWx0KSB7CisgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2ltcGxpZnlMZWZ0VmFs
dWUobW9kaWZ5UmVzdWx0LT5pbm5lckxlZnRWYWx1ZSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihBU1Q6OkNvbW1hRXhwcmVzc2lvbikgPD0gc2l6ZW9mKEFTVDo6QXNzaWdubWVudEV4cHJl
c3Npb24pLCAiQXNzaWdubWVudCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21l
IGNvbW1hIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAg
ICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gYXNzaWdubWVudEV4cHJlc3Npb24ub3JpZ2luKCk7Cisg
ICAgdm9pZCogbG9jYXRpb24gPSAmYXNzaWdubWVudEV4cHJlc3Npb247CisgICAgYXNzaWdubWVu
dEV4cHJlc3Npb24ufkFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgYXV0byogY29tbWFFeHBy
ZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpDb21tYUV4cHJlc3Npb24oV1RGTW92ZShvcmln
aW4pLCBXVEZNb3ZlKG1vZGlmeVJlc3VsdC0+ZXhwcmVzc2lvbnMpKTsKKyAgICBjb21tYUV4cHJl
c3Npb24tPnNldFR5cGUoV1RGTW92ZSh0eXBlKSk7CisgICAgY29tbWFFeHByZXNzaW9uLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICBmb3IgKGF1dG8mIHZhcmlh
YmxlRGVjbGFyYXRpb24gOiBtb2RpZnlSZXN1bHQtPnZhcmlhYmxlRGVjbGFyYXRpb25zKQorICAg
ICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFy
YXRpb24pKTsKK30KKwordm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OlJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCit7CisgICAgQVNT
RVJUKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkudHlwZUFubm90YXRpb24o
KSk7CisgICAgaWYgKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkudHlwZUFu
bm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgIC8vIENvbnNpZGVyIGEr
KzsKKyAgICAgICAgLy8gVGhpcyB3b3VsZCBnZXQgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gcCA9ICZhOworICAgICAgICAvLyBvbGRWYWx1ZSA9ICpwOworICAgICAg
ICAvLyBuZXdWYWx1ZSA9IC4uLjsKKyAgICAgICAgLy8gKnAgPSBuZXdWYWx1ZTsKKworICAgICAg
ICBBU1NFUlQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5
cGUoKSk7CisgICAgICAgIGF1dG8gYmFzZVR5cGUgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpOworICAgICAgICBhdXRvIHBvaW50
ZXJUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5vcmlnaW4oKSksICpyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNz
U3BhY2UoKSwgYmFzZVR5cGUtPmNsb25lKCkpOworCisgICAgICAgIGF1dG8gcG9pbnRlclZhcmlh
YmxlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tl
bihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihwb2ludGVyVHlwZS0+Y2xv
bmUoKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisKKyAgICAgICAg
VmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKworICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIG9yaWdpbiA9IExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKTsKKyAgICAgICAgICAgIGF1dG8gbWFr
ZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFr
ZUxlZnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlw
ZShwb2ludGVyVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAg
YXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9uZSgp
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0
aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihXVEZNb3ZlKG9yaWdpbiksIFdU
Rk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikp
OworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocG9pbnRlclR5cGUt
PmNsb25lKCkpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBw
ZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQorCisgICAgICAg
IHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50
ZXJWYXJpYWJsZSkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlKHBv
aW50ZXJUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFk
IH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBkZXJlZmVy
ZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9u
PihMZXhlcjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1v
dmUodmFyaWFibGVSZWZlcmVuY2UxKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Np
b24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VF
eHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAg
ICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5vbGRWYXJpYWJsZVJlZmVyZW5jZSgpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2Uy
LT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlMi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0
byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhw
cmVzc2lvbj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkp
LCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMiksIFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNz
aW9uKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlw
ZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBleHByZXNzaW9ucy5h
cHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVuY2UoKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlh
YmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAg
ICAgICBhdXRvIG5ld1ZhbHVlRXhwcmVzc2lvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
dGFrZU5ld1ZhbHVlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgQVNTRVJUKG5ld1ZhbHVlRXhw
cmVzc2lvbik7IC8vIEZJWE1FOiBSZWxheCB0aGlzIGNvbnN0cmFpbnQuCisgICAgICAgICAgICBh
dXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRF
eHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4o
KSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3ZlKCpuZXdWYWx1ZUV4cHJlc3Np
b24pKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBl
LT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFw
cGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIH0KKworICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMSA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2lu
dGVyVmFyaWFibGUpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZShw
b2ludGVyVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gZGVyZWZl
cmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lv
bj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZN
b3ZlKHZhcmlhYmxlUmVmZXJlbmNlMSkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNz
aW9uLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAg
ICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24ubmV3VmFyaWFibGVSZWZlcmVuY2UoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
Mi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVy
ZW5jZTItPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1
dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4
cHJlc3Npb24+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigp
KSwgV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJl
bmNlMikpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5
cGUtPmNsb25lKCkpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMu
YXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGF1dG8gcmVzdWx0RXhwcmVzc2lvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFr
ZVJlc3VsdEV4cHJlc3Npb24oKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdEV4cHJlc3Npb24pOyAv
LyBGSVhNRTogQmUgcmVzaWxpZW50IHRvIHRoaXMgYmVpbmcgbnVsbC4KKyAgICAgICAgQVNTRVJU
KCgqcmVzdWx0RXhwcmVzc2lvbiktPnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB0eXBl
ID0gKCpyZXN1bHRFeHByZXNzaW9uKS0+cmVzb2x2ZWRUeXBlKCktPmNsb25lKCk7CisgICAgICAg
IGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKCpyZXN1bHRFeHByZXNzaW9uKSk7CisKKyAgICAg
ICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4gb2xkVmFyaWFibGVEZWNsYXJh
dGlvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFrZU9sZFZhbHVlKCk7CisgICAgICAg
IFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IG5ld1ZhcmlhYmxlRGVjbGFyYXRp
b24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VOZXdWYWx1ZSgpOworCisgICAgICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNU
OjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKSwgIlJlYWRNb2RpZnlXcml0ZSBleHByZXNzaW9u
cyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGNvbW1hIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBk
YXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgICAgIHZvaWQqIGxvY2F0aW9u
ID0gJnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb247CisgICAgICAgIHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uflJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKTsKKyAgICAgICAgYXV0byogY29t
bWFFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpDb21tYUV4cHJlc3Npb24oV1RGTW92
ZShvcmlnaW4pLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSk7CisgICAgICAgIGNvbW1hRXhwcmVzc2lv
bi0+c2V0VHlwZShXVEZNb3ZlKHR5cGUpKTsKKyAgICAgICAgY29tbWFFeHByZXNzaW9uLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgbV92YXJpYWJsZURl
Y2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgbV92
YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShvbGRWYXJpYWJsZURlY2xhcmF0aW9u
KSk7CisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobmV3VmFy
aWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJU
KCFyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnR5cGVBbm5vdGF0aW9uKCkt
PmlzUmlnaHRWYWx1ZSgpKTsKKyAgICBpZiAoIWlzPEFTVDo6RG90RXhwcmVzc2lvbj4ocmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSkpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsg
Ly8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIHdpdGggaW5kZXggZXhwcmVzc2lvbnMuCisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgYXV0byBtb2RpZnlSZXN1bHQgPSBtb2RpZnkoZG93bmNhc3Q8
QVNUOjpEb3RFeHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgp
KSwgWyZdKE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmIGxhc3RHZXR0ZXJD
YWxsRXhwcmVzc2lvbikgLT4gT3B0aW9uYWw8TW9kaWZpY2F0aW9uUmVzdWx0PiB7CisgICAgICAg
IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisgICAgICAg
IGlmICghbGFzdEdldHRlckNhbGxFeHByZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNl
ID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYXJpYWJsZVJlZmVyZW5jZSgpOworICAg
ICAgICAgICAgQVNTRVJUKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVz
b2x2ZWRUeXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUo
KSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMg
dGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlh
YmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgqbGFzdEdldHRlckNhbGxFeHByZXNzaW9uKSk7CisgICAg
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAg
IGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUo
KSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRF
eHByZXNzaW9uKSk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHZh
cmlhYmxlUmVmZXJlbmNlID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJpYWJsZVJl
ZmVyZW5jZSgpOworICAgICAgICAgICAgQVNTRVJUKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
bGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVu
Y2UtPnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZl
ZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0p
OyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBuZXdWYWx1ZUV4
cHJlc3Npb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VOZXdWYWx1ZUV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdWYWx1ZUV4cHJlc3Npb24pOyAvLyBGSVhNRTog
UmVsYXggdGhpcyBjb25zdHJhaW50CisgICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5vcmlnaW4oKSksIFdURk1v
dmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3ZlKCpuZXdWYWx1ZUV4cHJlc3Npb24pKTsKKyAg
ICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICAg
ICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1
ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVu
dEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKGV4
cHJlc3Npb25zKSwgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJpYWJsZVJlZmVyZW5j
ZSgpIH19OworICAgIH0pOworCisgICAgaWYgKCFtb2RpZnlSZXN1bHQpIHsKKyAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzaW1wbGlmeUxlZnRWYWx1ZSht
b2RpZnlSZXN1bHQtPmlubmVyTGVmdFZhbHVlKTsKKworICAgIGF1dG8gcmVzdWx0RXhwcmVzc2lv
biA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFrZVJlc3VsdEV4cHJlc3Npb24oKTsKKyAg
ICBBU1NFUlQocmVzdWx0RXhwcmVzc2lvbik7IC8vIEZJWE1FOiBCZSByZXNpbGllbnQgdG8gdGhp
cyBiZWluZyBudWxsLgorICAgIEFTU0VSVCgoKnJlc3VsdEV4cHJlc3Npb24pLT5yZXNvbHZlZFR5
cGUoKSk7CisgICAgYXV0byB0eXBlID0gKCpyZXN1bHRFeHByZXNzaW9uKS0+cmVzb2x2ZWRUeXBl
KCktPmNsb25lKCk7CisgICAgbW9kaWZ5UmVzdWx0LT5leHByZXNzaW9ucy5hcHBlbmQoV1RGTW92
ZSgqcmVzdWx0RXhwcmVzc2lvbikpOworCisgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4gb2xkVmFyaWFibGVEZWNsYXJhdGlvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24udGFrZU9sZFZhbHVlKCk7CisgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bj4gbmV3VmFyaWFibGVEZWNsYXJhdGlvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFr
ZU5ld1ZhbHVlKCk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkNvbW1hRXhwcmVz
c2lvbikgPD0gc2l6ZW9mKEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiksICJSZWFkTW9k
aWZ5V3JpdGUgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBjb21tYSBleHBy
ZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgTGV4ZXI6OlRv
a2VuIG9yaWdpbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgdm9p
ZCogbG9jYXRpb24gPSAmcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjsKKyAgICByZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLn5SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCk7CisgICAgYXV0byog
Y29tbWFFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpDb21tYUV4cHJlc3Npb24oV1RG
TW92ZShvcmlnaW4pLCBXVEZNb3ZlKG1vZGlmeVJlc3VsdC0+ZXhwcmVzc2lvbnMpKTsKKyAgICBj
b21tYUV4cHJlc3Npb24tPnNldFR5cGUoV1RGTW92ZSh0eXBlKSk7CisgICAgY29tbWFFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICBmb3IgKGF1
dG8mIHZhcmlhYmxlRGVjbGFyYXRpb24gOiBtb2RpZnlSZXN1bHQtPnZhcmlhYmxlRGVjbGFyYXRp
b25zKQorICAgICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKKyAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZN
b3ZlKG9sZFZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25z
LmFwcGVuZChXVEZNb3ZlKG5ld1ZhcmlhYmxlRGVjbGFyYXRpb24pKTsKK30KKworYm9vbCBQcm9w
ZXJ0eVJlc29sdmVyOjpzaW1wbGlmeVJpZ2h0VmFsdWUoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RF
eHByZXNzaW9uKQoreworICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RFeHByZXNzaW9uLm9y
aWdpbigpOworCisgICAgaWYgKGF1dG8qIGFuZEZ1bmN0aW9uID0gZG90RXhwcmVzc2lvbi5hbmRG
dW5jdGlvbigpKSB7CisgICAgICAgIGF1dG8mIGJhc2UgPSBkb3RFeHByZXNzaW9uLmJhc2UoKTsK
KyAgICAgICAgQVNTRVJUKGJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBBU1NFUlQoYmFz
ZS50eXBlQW5ub3RhdGlvbigpKTsKKyAgICAgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9
IGJhc2UudHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgICAg
ICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9p
bnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBkb3RFeHByZXNzaW9uLnRha2VC
YXNlKCkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VV
bmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbiksICpsZWZ0QWRk
cmVzc1NwYWNlLCBiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKSk7CisgICAgICAgICAgICBt
YWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgp
KTsKKworICAgICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1
bWVudHM7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUobWFrZVBvaW50ZXJF
eHByZXNzaW9uKSk7CisgICAgICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgU3RyaW5nKGFu
ZEZ1bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgICAgICAgICAgY2Fs
bEV4cHJlc3Npb24tPnNldFR5cGUoYW5kRnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAg
ICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUo
KSk7CisgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZEZ1bmN0aW9u
KTsKKworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24pIDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25z
IG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgZGVyZWZlcmVuY2UgZXhwcmVzc2lvbnMgd2l0aG91
dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgICAgICAgICAgdm9pZCogbG9jYXRpb24g
PSAmZG90RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgIGF1dG8qIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG5ldyAobG9j
YXRpb24pIEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSwgV1RGTW92
ZShjYWxsRXhwcmVzc2lvbikpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5z
ZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmVs
ZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVy
VHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuYWRkcmVzc1NwYWNlKCkgfSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGhhdmUgYW4gYW5kZXIs
IGJ1dCBubyBsZWZ0IHZhbHVlIHRvIGNhbGwgaXQgb24uIExldCdzIHNhdmUgdGhlIHZhbHVlIGlu
dG8gYSB0ZW1wb3JhcnkgdmFyaWFibGUgdG8gY3JlYXRlIGEgbGVmdCB2YWx1ZS4KKyAgICAgICAg
Ly8gVGhpcyBpcyBlZmZlY3RpdmVseSBpbmxpbmluZyB0aGUgZnVuY3Rpb25zIHRoZSBzcGVjIHNh
eXMgYXJlIGdlbmVyYXRlZC4KKyAgICAgICAgaWYgKCFkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1
bmN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byB2YXJp
YWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+
KExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMoKSwgYmFzZS5yZXNvbHZlZFR5
cGUoKS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKwor
ICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xh
cmF0aW9uKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZShiYXNlLnJlc29s
dmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7
CisKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFdURk1vdmUodmFy
aWFibGVSZWZlcmVuY2UxKSwgZG90RXhwcmVzc2lvbi50YWtlQmFzZSgpKTsKKyAgICAgICAgYXNz
aWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7
CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTIgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6Ondy
YXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNl
dFR5cGUoYmFzZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlMi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkIH0pOworCisgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9y
aWdpbiksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSk7CisgICAgICAgIG1ha2VQb2ludGVy
RXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVy
OjpUb2tlbihvcmlnaW4pLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlLnJlc29sdmVk
VHlwZSgpLT5jbG9uZSgpKSk7CisgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgIFZlY3RvcjxVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAgICAgIGF1dG8gY2FsbEV4cHJl
c3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihv
cmlnaW4pLCBTdHJpbmcoYW5kRnVuY3Rpb24tPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7
CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGFuZEZ1bmN0aW9uLT50eXBlKCkuY2xv
bmUoKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kRnVu
Y3Rpb24pOworCisgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3Zl
KGNhbGxFeHByZXNzaW9uKSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlw
ZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50
VHlwZSgpLmNsb25lKCkpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsK
KworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkNvbW1hRXhwcmVzc2lvbikgPD0g
c2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBh
YmxlIHRvIGJlY29tZSBjb21tYSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZl
cmVuY2VzIik7CisgICAgICAgIHZvaWQqIGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247CisgICAg
ICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsKKyAgICAgICAgVmVjdG9yPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKyAgICAgICAgZXhwcmVzc2lvbnMu
YXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgZXhwcmVzc2lv
bnMuYXBwZW5kKFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSk7CisgICAgICAgIGF1dG8q
IGNvbW1hRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q29tbWFFeHByZXNzaW9uKFdU
Rk1vdmUob3JpZ2luKSwgV1RGTW92ZShleHByZXNzaW9ucykpOworICAgICAgICBjb21tYUV4cHJl
c3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5
cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY29tbWFFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7CisKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZSh2
YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q2FsbEV4cHJlc3Npb24pIDw9IHNpemVvZihBU1Q6
OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNv
bWUgY2FsbCBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7Cisg
ICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKSk7CisgICAgYXV0byYgZ2V0RnVu
Y3Rpb24gPSAqZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpOworICAgIFZlY3RvcjxVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQoZG90
RXhwcmVzc2lvbi50YWtlQmFzZSgpKTsKKyAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNz
aW9uOworICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsKKyAgICBhdXRvKiBjYWxs
RXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q2FsbEV4cHJlc3Npb24oV1RGTW92ZShv
cmlnaW4pLCBTdHJpbmcoZ2V0RnVuY3Rpb24ubmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsK
KyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oZ2V0RnVuY3Rpb24pOworICAgIGNhbGxF
eHByZXNzaW9uLT5zZXRUeXBlKGdldEZ1bmN0aW9uLnR5cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIHJl
dHVybiB0cnVlOworfQorCitjbGFzcyBMZWZ0VmFsdWVTaW1wbGlmaWVyIDogcHVibGljIFZpc2l0
b3IgeworcHVibGljOgorICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworCitwcml2YXRlOgorfTsKKwordm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVyOjp2aXNpdChBU1Q6
OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgVmlzaXRvcjo6dmlzaXQoZG90
RXhwcmVzc2lvbik7CisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uYmFzZSgpLnR5cGVBbm5vdGF0
aW9uKCkpOworICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmJhc2UoKS50eXBlQW5ub3RhdGlvbigp
LT5sZWZ0QWRkcmVzc1NwYWNlKCkpOworICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmFuZEZ1bmN0
aW9uKCkpOworCisgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2lu
KCk7CisgICAgYXV0byogYW5kRnVuY3Rpb24gPSBkb3RFeHByZXNzaW9uLmFuZEZ1bmN0aW9uKCk7
CisgICAgYXV0byYgYmFzZSA9IGRvdEV4cHJlc3Npb24uYmFzZSgpOworICAgIGF1dG8gbGVmdEFk
ZHJlc3NTcGFjZSA9ICpkb3RFeHByZXNzaW9uLmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0
QWRkcmVzc1NwYWNlKCk7CisgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwg
ZG90RXhwcmVzc2lvbi50YWtlQmFzZSgpKTsKKyAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNl
dFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2lu
KSwgbGVmdEFkZHJlc3NTcGFjZSwgYmFzZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSkpOworICAg
IG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVl
KCkpOworCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7
CisgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOwor
ICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Np
b24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBTdHJpbmcoYW5kRnVuY3Rpb24tPm5hbWUoKSksIFdU
Rk1vdmUoYXJndW1lbnRzKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoYW5kRnVuY3Rp
b24tPnR5cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigq
YW5kRnVuY3Rpb24pOworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpEZXJlZmVyZW5j
ZUV4cHJlc3Npb24pIDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Np
b25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgZGVyZWZlcmVuY2UgZXhwcmVzc2lvbnMgd2l0
aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgIHZvaWQqIGxvY2F0aW9uID0gJmRv
dEV4cHJlc3Npb247CisgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgIGF1
dG8qIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6RGVyZWZlcmVu
Y2VFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOwor
ICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJU
eXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgIGRl
cmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBk
b3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5hZGRyZXNzU3Bh
Y2UoKSB9KTsKK30KKwordm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVyOjp2aXNpdChBU1Q6OkRlcmVm
ZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIC8vIERlcmVm
ZXJlbmNlIGV4cHJlc3Npb25zIGFyZSB0aGUgb25seSBleHByZXNzaW9ucyB3aGVyZSB0aGUgY2hp
bGRyZW4gbWlnaHQgYmUgbW9yZS1yaWdodCB0aGFuIHdlIGFyZS4KKyAgICAvLyBGb3IgZXhhbXBs
ZSwgYSBkZXJlZmVyZW5jZSBleHByZXNzaW9uIG1heSBiZSBhIGxlZnQgdmFsdWUgYnV0IGl0cyBj
aGlsZCBtYXkgYmUgYSBjYWxsIGV4cHJlc3Npb24gd2hpY2ggaXMgYSByaWdodCB2YWx1ZS4KKyAg
ICAvLyBMZWZ0VmFsdWVTaW1wbGlmaWVyIGRvZXNuJ3QgaGFuZGxlIHJpZ2h0IHZhbHVlcywgc28g
d2UgaW5zdGVhZCBuZWVkIHRvIHVzZSBQcm9wZXJ0eVJlc29sdmVyLgorICAgIC8vIEZJWE1FOiBX
aGF0IGFib3V0IGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzPworICAgIFByb3BlcnR5UmVzb2x2ZXIo
KS5WaXNpdG9yOjp2aXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24pOworfQorCit2b2lkIFByb3Bl
cnR5UmVzb2x2ZXI6OnNpbXBsaWZ5TGVmdFZhbHVlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lv
bikKK3sKKyAgICBMZWZ0VmFsdWVTaW1wbGlmaWVyKCkuVmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lv
bik7Cit9CisKK3ZvaWQgcmVzb2x2ZVByb3BlcnRpZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAg
ICBQcm9wZXJ0eVJlc29sdmVyKCkuVmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyMjA1ZjkwMmJj
Yzk0ZWNhOWVmMzNiNThkYTFjNzAxYWI3MmIzNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuaApAQCAt
MCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNz
IFByb2dyYW07CisKK3ZvaWQgcmVzb2x2ZVByb3BlcnRpZXMoUHJvZ3JhbSYpOworCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAppbmRleCBlNzgzOGNlM2Y3
MjVhZTA5YWJhMWVkYjUwYTY1OTJjMzQ2MzEzZWU1Li5kYzkzNGRiZjcyNmE4MTRhMDgwNGI0Y2Ni
NTc1MmRiZWNiODFmMzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKQEAgLTQ0
LDcgKzQ0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbiYgY2FuZGlkYXRlLCBjb25zdCBWZWN0b3IKICAgICAgICAgY29udmVyc2lvbkNv
c3QgKz0gYXJndW1lbnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mKSAtPiB1bnNpZ25lZCB7CiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiB1bnNpZ25lZCB7Ci0gICAgICAgICAgICByZXR1
cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY29udmVyc2lvbkNv
c3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jb252ZXJzaW9uQ29z
dCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKTsKICAgICAgICAgfSkpOwogICAg
IH0KICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgY2FuIG5ldmVyIGJlIGEgbGl0ZXJhbCB0eXBlLCBz
byBpdHMgY29udmVyc2lvbiBjb3N0IGlzIGFsd2F5cyAwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaAppbmRleCBj
YTVjYmI1OTI5Y2Y5ZTE4MThjMmNkNzQxZTc5ZDkzNmNhYWM2OGVlLi41MGU1MzJiNmE2ZTgyZjFl
MDJhMDQ2NzkxYjhlNjY5NmQ1YjExZTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaApAQCAtNzIsNiArNzIs
NyBAQCBwcml2YXRlOgogCiAvLyBUaGlzIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhIFZhcmlh
bnQuCiAvLyBJdCBleGlzdHMgc28gd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZhdWx0IGNv
bnN0cnVjdG9yIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorLy8gRklYTUU6IFRoaXMgd3JhcHBlciBt
aWdodCBub3QgYmUgbmVjZXNzYXJ5LgogY2xhc3MgUmVzb2x2aW5nVHlwZSB7CiBwdWJsaWM6CiAg
ICAgUmVzb2x2aW5nVHlwZSgpCkBAIC0xMDIsMTAgKzEwMywxMSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICBBU1Q6OlVubmFtZWRUeXBlJiBnZXRVbm5hbWVk
VHlwZSgpCisgICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0VW5uYW1lZFR5cGUoKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+PihtX2lubmVyKSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpKQorICAgICAgICAgICAg
cmV0dXJuICZXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VmlzaXRvcj4gYXV0byB2aXNpdChjb25zdCBWaXNpdG9yJiB2aXNpdG9yKSAtPiBkZWNsdHlwZShX
VEY6OnZpc2l0KHZpc2l0b3IsIHN0ZDo6ZGVjbHZhbDxWYXJpYW50PFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPj4mPigpKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKaW5kZXggYWUzY2E2
NDIzOWUzYjU5ZDM2YWFhYWVlYzdiYTQ3MWJjYjY3Y2ViOS4uNjVlZDdhY2Y0M2YyMDA0MDI1MGY5
MDY2YTE0YjY0MGI1N2JiZjBjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlP
cGVyYXRvckxlbmd0aC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBzeW50aGVzaXplQXJyYXlP
cGVyYXRvckxlbmd0aChQcm9ncmFtJiBwcm9ncmFtKQogICAgIGJvb2wgaXNPcGVyYXRvciA9IHRy
dWU7CiAKICAgICBmb3IgKGF1dG8mIGFycmF5VHlwZSA6IGFycmF5VHlwZXMpIHsKLSAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
KGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGFycmF5VHlw
ZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7
CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIGFycmF5VHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFy
aWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2so
KSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGFy
cmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIHByb2dyYW0uaW50cmluc2ljcygpLnVpbnRUeXBlKCkp
LCAib3BlcmF0b3IubGVuZ3RoIl9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgaXNPcGVyYXRvcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKaW5k
ZXggY2Q3YzM3MDJhZGJlYTI5YWMxOGM1Y2JlNmRiNjA4N2I5ZTAyZWQ4YS4uNzRjYzhmMTg0ZTgz
NWIzY2UxYzQ5YjVjZTZlYzhkNmE0YTg2OGMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBzeW50aGVzaXplQ29uc3RydWN0
b3JzKFByb2dyYW0mIHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKIAogICAg
IGZvciAoYXV0byYgdW5uYW1lZFR5cGUgOiB1bm5hbWVkVHlwZXMpIHsKLSAgICAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFt
ZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgdW5uYW1lZFR5cGUu
Z2V0KCkuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwor
ICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2
YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tl
bih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3Ry
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKQEAgLTEy
Nyw3ICsxMjcsNyBAQCBib29sIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3Jh
bSkKICAgICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihzdGF0aWNfY2Fz
dDxBU1Q6Ok5hbWVkVHlwZSY+KG5hbWVkVHlwZSkpICYmIGRvd25jYXN0PEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uPihzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSY+KG5hbWVkVHlwZSkpLmlz
QXRvbWljKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdl
dCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0
KCkpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIGF1
dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5n
ZXQoKSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1
dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgIm9wZXJh
dG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJh
dG9yKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5j
cHAKaW5kZXggMTc5N2ZlNTM5NGM4MWVhY2QzOTU0YWJjNmE4YTY1YTZjOGZjOTZlMi4uZDc0YWYz
M2ExZjA1YTY5MjIxOWM4Y2NlNGFmZGNjOTI5NTEwOTcxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcApAQCAtNDEsOCArNDEsOCBAQCBib29s
IHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQogICAgIGJv
b2wgaXNPcGVyYXRvciA9IHRydWU7CiAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRp
b24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjEoTGV4
ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjIoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZl
cmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkp
LCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCk7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24xID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFy
aWFibGVEZWNsYXJhdGlvbjIgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bj4oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1
YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwog
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
MSkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xh
cmF0aW9uMikpOwpAQCAtNTIsNyArNTIsNyBAQCBib29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1
bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAg
ICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMo
KSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVj
bGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMo
KSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9u
RGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAg
ICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9w
dCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgIm9wZXJhdG9yLnZhbHVl
Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpA
QCAtNjEsNyArNjEsNyBAQCBib29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9n
cmFtJiBwcm9ncmFtKQogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3Jp
Z2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikp
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRp
b25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CkBAIC03MCwxMCArNzAs
MTAgQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3Jh
bSkKICAgICAgICAgfQogCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGVudW1lcmF0aW9uRGVmaW5pdGlv
bi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7
CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50
eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAg
ICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwotICAg
ICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxv
cHQsIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRl
ZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSB9LCAib3BlcmF0b3Ig
Y2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3Ip
KTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51
bWVyYXRpb25EZWZpbml0aW9uKSksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1l
dGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogICAgICAgICAgICAgaWYgKCFwcm9n
cmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29y
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCmluZGV4IDgyNjcyMjEzN2U0YzNlMzgyMjc3ODBkYWUx
MmIyOWFhYmExYjcyZWUuLjk0NWQwY2VlZmFhMzljZTUwNzQ2MDdkMmM0NDkzY2YzOTdlOTgzZGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcApAQCAt
NDYsNyArNDYsNyBAQCBib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYg
cHJvZ3JhbSkKICAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJl
RGVmaW5pdGlvbi0+c3RydWN0dXJlRWxlbWVudHMoKSkgewogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIC8vIFRoZSBnZXR0ZXI6IG9wZXJhdG9yLmZpZWxkCi0gICAgICAgICAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
KHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkp
LCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51
bGxvcHQpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVF
bGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBB
U1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgc3RydWN0dXJlRWxlbWVudC50eXBl
KCkuY2xvbmUoKSwgbWFrZVN0cmluZygib3BlcmF0b3IuIiwgc3RydWN0dXJlRWxlbWVudC5uYW1l
KCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKQEAg
LTU2LDggKzU2LDggQEAgYm9vbCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0m
IHByb2dyYW0pCiAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgc2V0dGVy
OiBvcGVyYXRvci5maWVsZD0KLSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24gdmFyaWFibGVEZWNsYXJhdGlvbjEoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4
ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9u
KSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwotICAgICAgICAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6
VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IHN0
cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwg
V1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24x
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihz
dHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0
cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSksIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJp
YWJsZURlY2xhcmF0aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
PihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVy
cygpLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZN
b3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOwpAQCAtNjksNyArNjksNyBAQCBi
b29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAg
ICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCiAgICAgICAgICAgICBhdXRvIGNy
ZWF0ZUFuZGVyID0gWyZdKEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkgLT4gQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHsKICAgICAgICAgICAgICAgICBhdXRvIGFyZ3VtZW50
VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHN0cnVj
dHVyZUVsZW1lbnQub3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UsIEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURl
ZmluaXRpb24pKTsKLSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFy
aWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCB7IFdURk1vdmUoYXJndW1lbnRUeXBlKSB9LCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihM
ZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oV1RGTW92ZShhcmd1bWVudFR5cGUpKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICAgICAgcGFyYW1l
dGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICAg
ICAgYXV0byByZXR1cm5UeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhl
cjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgc3RydWN0
dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAppbmRleCBlZDJlOGMwMDUyZDZkZmU5
YmQwN2JhZjc2NDlkOGNlNDhjOWIwOWJiLi4yZjIwMTUyY2FiN2FkMWM3ODI2YmEzZDIxNTE3YTRl
YzA5ZWFlZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFZpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMVmlzaXRvci5jcHAKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIFZpc2l0b3I6OnZp
c2l0KEFTVDo6VHJhcCYpCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQogewogICAgIGZv
ciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50LnZhcmlhYmxlRGVjbGFyYXRpb25zKCkpCi0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2
YXJpYWJsZURlY2xhcmF0aW9uKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxl
RGVjbGFyYXRpb24uZ2V0KCkpOwogfQogCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6V2hpbGVM
b29wJiB3aGlsZUxvb3ApCkBAIC01ODksMTcgKzU4OSwxNyBAQCB2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQogCiB2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogfQogCiB2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJl
c3Npb24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5s
VmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5s
ZWZ0VmFsdWUoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFsdWUo
KSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3
VmFsdWUoKSk7CiAgICAgaWYgKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHBy
ZXNzaW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcxY2ZmMWIxMWIyNzBhNTUzOWFjMjQ0ZjVlNWQz
MWVjMjZkNWIwODIuLmIxZTczYTIwYTQyZjQyNWZjYTA0MjkxNDYyMDU1ODU0NmQ3Yzk5ZmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CkBAIC0zNDksNiArMzQ5LDcgQEAgTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVHlwZVJlZmVyZW5jZS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElu
dGVnZXJMaXRlcmFsLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAK
K01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAKIE1vZHVsZXMv
d2ViZ3B1L1dlYkdQVS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cC5jcHAKIE1v
ZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cERlc2NyaXB0b3IuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmU1MjlkYzQy
NDk2MTQyYzkxOTUxMzRhN2I2NTdkM2NiODEwODk2NC4uNjIxOTVmN2FjZjk0YmFlYmU1N2Q3MDEz
ZDI1N2I4NDkxOTc0MmFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQ3OSw2ICs2NDc5LDggQEAKIAkJMUNBMEMyRUMyMUVF
RDZGNjAwQTExODYwIC8qIFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUNBMTlFMDMwREMyNTU5NTAwNjVBOTk0IC8qIEV2ZW50TG9vcE1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV2ZW50TG9vcE1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMTUwREMyNTVDQTAwNjVBOTk0IC8qIEV2
ZW50TG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudExvb3AuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNBQTgyRjYyMjQyQUUwNTAwRTg0QkJCIC8q
IFdITFNMUHJvcGVydHlSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFByb3Bl
cnR5UmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0FBODJGNzIy
NDJBRTA1MDBFODRCQkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMUHJvcGVydHlSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
Q0FGMzQ3RTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQ0FGMzQ3RjBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU2NyaXB0T2Jq
ZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ4MDBBNkM0MDUyMDBB
QkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNTgxNSw2ICsyNTgxNyw4IEBACiAJCQkJQzI0QTU3QkEyMUZFQUZFQTAwNEM2
REQxIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCiAJCQkJQzI0QTU3QkIyMUZFQUZFQTAwNEM2REQx
IC8qIFdITFNMUHJlcGFyZS5oICovLAogCQkJCUMyMUJGNzNBMjFDRDhENzAwMDIyNzk3OSAvKiBX
SExTTFByb2dyYW0uaCAqLywKKwkJCQkxQ0FBODJGNjIyNDJBRTA1MDBFODRCQkIgLyogV0hMU0xQ
cm9wZXJ0eVJlc29sdmVyLmNwcCAqLywKKwkJCQkxQ0FBODJGNzIyNDJBRTA1MDBFODRCQkIgLyog
V0hMU0xQcm9wZXJ0eVJlc29sdmVyLmggKi8sCiAJCQkJMUNBMEMyRTAyMUVFQjVGNTAwQTExODYw
IC8qIFdITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHAgKi8sCiAJCQkJMUNBMEMyREUyMUVFQjVGNDAw
QTExODYwIC8qIFdITFNMUmVjdXJzaW9uQ2hlY2tlci5oICovLAogCQkJCUMyMzRBOUFEMjFFOTJD
MTkwMDNDOTg0RCAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcCAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369928</attachid>
            <date>2019-05-14 23:15:35 -0700</date>
            <delta_ts>2019-05-21 12:00:28 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190514231534.patch</filename>
            <type>text/plain</type>
            <size>156954</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1MzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWUxMjVlOTE3ZjgwNzNm
MzAxMDhiYTkwZTZhZjkzZjJkYzQzNGRiOS4uZDZmZjM0OWFjZTY1NGRlNGQzMjYyYjZlOWIxOGM5
NDE2MTQzOGQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTA1LTE0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDUt
MTQgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtBcHBsZSBQYXld
IFBheW1lbnQgQVBJcyBzaG91bGQgYmUgY29tcGxldGVseSBkaXNhYmxlZCBpbiB3ZWIgdmlld3Mg
aW50byB3aGljaCBjbGllbnRzIGhhdmUgaW5qZWN0ZWQgdXNlciBzY3JpcHRzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3Bh
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJl
c3NTcGFjZS5oCmluZGV4IDRhNmQ3YzQ2OTVkYzRjYWM4MjkwNTRlNDA1NTU3ODc2NTE3NWY4NjMu
LmQ0MzZkNjg5Yzc4ZTA0MGM1ZmRkY2UzOTYwZjM4ZjQzMDE1MGIyYjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJl
c3NTcGFjZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1
ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00Miw2ICs0Myw3MCBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4
X3QgewogICAgIFRocmVhZAogfTsKIAorc3RydWN0IExlZnRWYWx1ZSB7CisgICAgQWRkcmVzc1Nw
YWNlIGFkZHJlc3NTcGFjZTsKK307CisKK3N0cnVjdCBBYnN0cmFjdExlZnRWYWx1ZSB7Cit9Owor
CitzdHJ1Y3QgUmlnaHRWYWx1ZSB7Cit9OworCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0
IG5vdCBiZSBuZWNlc3NhcnkuCitjbGFzcyBUeXBlQW5ub3RhdGlvbiB7CitwdWJsaWM6CisgICAg
VHlwZUFubm90YXRpb24oKQorICAgICAgICA6IG1fZW1wdHkodHJ1ZSkKKyAgICB7CisgICAgfQor
CisgICAgVHlwZUFubm90YXRpb24oTGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQor
ICAgIHsKKyAgICB9CisKKyAgICBUeXBlQW5ub3RhdGlvbihBYnN0cmFjdExlZnRWYWx1ZSB2KQor
ICAgICAgICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24o
UmlnaHRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAg
VHlwZUFubm90YXRpb24oY29uc3QgVHlwZUFubm90YXRpb24mKSA9IGRlZmF1bHQ7CisgICAgVHlw
ZUFubm90YXRpb24oVHlwZUFubm90YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgVHlw
ZUFubm90YXRpb24mIG9wZXJhdG9yPShjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsK
KyAgICBUeXBlQW5ub3RhdGlvbiYgb3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9uJiYgb3RoZXIpID0g
ZGVmYXVsdDsKKworICAgIE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFkZHJlc3NTcGFjZSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIW1fZW1wdHkpOworICAgICAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxMZWZ0VmFsdWU+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6Z2V0PExlZnRWYWx1ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNlOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIGJvb2wgaXNSaWdodFZhbHVlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFJpZ2h0VmFsdWU+KG1faW5uZXIpOworICAgIH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0
b3IpIC0+IGRlY2x0eXBlKFdURjo6dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8
TGVmdFZhbHVlLCBBYnN0cmFjdExlZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigpKSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0
b3IsIG1faW5uZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWYXJpYW50PExlZnRWYWx1ZSwg
QWJzdHJhY3RMZWZ0VmFsdWUsIFJpZ2h0VmFsdWU+IG1faW5uZXI7CisgICAgYm9vbCBtX2VtcHR5
IHsgZmFsc2UgfTsKK307CisKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHByZXNz
aW9uLmgKaW5kZXggYjEyMWZiNmMxZTFkMTc5MjYxNWQ5YmIwMjc0ZmUyMzU4OGE3ZjJiNS4uNzk0
MTVlMmZmMzAzMDI5MTA2YjViZjQxOTc2N2ViNTk5OGYwZTRlNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Np
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xB
c3NpZ25tZW50RXhwcmVzc2lvbi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIEV4
cHJlc3Npb24mIGxlZnQoKSB7IHJldHVybiBtX2xlZnQ7IH0KICAgICBFeHByZXNzaW9uJiByaWdo
dCgpIHsgcmV0dXJuIG1fcmlnaHQ7IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiB0YWtl
UmlnaHQoKSB7IHJldHVybiBXVEZNb3ZlKG1fcmlnaHQpOyB9CiAKIHByaXZhdGU6CiAgICAgVW5p
cXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBiN2FiMjBj
ZWQyYzQ1M2Y5NWYxYzJlM2VmYzI4MWZkYTQ4ZTVjM2FkLi4zMThhODEwNjE2M2RiODdlODVlZjQ4
MWVjODg3ZDlkNmM1YzI5Y2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC02NSwxMiArNjUsMTIg
QEAgcHVibGljOgogICAgICAgICBtX3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAgIH0KIAotICAg
IGNvbnN0IE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYWRkcmVzc1NwYWNlOyB9CisgICAgY29uc3QgVHlwZUFubm90YXRpb24qIHR5cGVBbm5v
dGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlQW5ub3RhdGlvbiA/ICYqbV90eXBlQW5ub3Rh
dGlvbiA6IG51bGxwdHI7IH0KIAotICAgIHZvaWQgc2V0QWRkcmVzc1NwYWNlKE9wdGlvbmFsPEFk
ZHJlc3NTcGFjZT4mIGFkZHJlc3NTcGFjZSkKKyAgICB2b2lkIHNldFR5cGVBbm5vdGF0aW9uKFR5
cGVBbm5vdGF0aW9uJiYgdHlwZUFubm90YXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoIW1f
YWRkcmVzc1NwYWNlKTsKLSAgICAgICAgbV9hZGRyZXNzU3BhY2UgPSBhZGRyZXNzU3BhY2U7Cisg
ICAgICAgIEFTU0VSVCghbV90eXBlQW5ub3RhdGlvbik7CisgICAgICAgIG1fdHlwZUFubm90YXRp
b24gPSBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNBc3NpZ25tZW50RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05Nyw3
ICs5Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwog
ICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsKLSAgICBPcHRpb25h
bDxBZGRyZXNzU3BhY2U+IG1fYWRkcmVzc1NwYWNlOworICAgIE9wdGlvbmFsPFR5cGVBbm5vdGF0
aW9uPiBtX3R5cGVBbm5vdGF0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKaW5kZXggNjMxNmY1
NGUxNjMyNmI0YTQ4M2ZhODcyZTFmNDdiYjA0OGVkZjg4ZS4uNzcwY2Y4YmE5ZjI1MjcyNmY2OWMx
YWU2ZGU1ZWE0YTViMTJiZjc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24uaApAQCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAog
Y2xhc3MgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsK
IHB1YmxpYzoKLSAgICBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYm
IG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVz
c2lvbj4mJiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikp
Ci0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQorICAgICAgICAsIG1fbGVmdFZh
bHVlKFdURk1vdmUobGVmdFZhbHVlKSkKICAgICB7CiAgICAgfQogCkBAIC01MiwxMCArNTIsMTAg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc01ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUo
KSB7IHJldHVybiBtX2xWYWx1ZTsgfQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0
dXJuIG1fbGVmdFZhbHVlOyB9CiAKIHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+
IG1fbFZhbHVlOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24u
aAppbmRleCA3YjA1MmI2ZDVmMjg4N2Y1OTJkZjQ0ZmQ5NDA5YzRmYTk1MjAzYWE4Li4zNDYwNGQ1
NmFlY2M0YjYzMGQ3YTdlNmY3OTZiOWM4NTM0N2NlMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtl
UG9pbnRlckV4cHJlc3Npb24uaApAQCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAog
Y2xhc3MgTWFrZVBvaW50ZXJFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGlj
OgotICAgIE1ha2VQb2ludGVyRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiYmIGxWYWx1ZSkKKyAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAg
ICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUo
V1RGTW92ZShsVmFsdWUpKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVl
KSkKICAgICB7CiAgICAgfQogCkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc01ha2VQb2ludGVyRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9CisgICAg
RXhwcmVzc2lvbiYgbGVmdFZhbHVlKCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KIAogcHJpdmF0
ZToKLSAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVlUmVmPEV4
cHJlc3Npb24+IG1fbGVmdFZhbHVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCmluZGV4IDJlYzM0ZTE1ZDhhNDBl
NWFkMmUyYmY4OTY4MGMyMWMzMzQ0Yzk5ODguLjE1NzA5MmQ2NTBmYWNlYTAyOWI5YjE3NzYwZDgw
NTA1N2UxYWRkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldI
TFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgog
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKQEAg
LTU5LDI3ICs2MCw1NiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUdldE92ZXJsb2FkcygpIHsgcmV0
dXJuIG1fcG9zc2libGVHZXRPdmVybG9hZHM7IH0KICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlU2V0T3ZlcmxvYWRzKCkg
eyByZXR1cm4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsgfQogICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVBbmRPdmVybG9h
ZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzOyB9CisgICAgRnVuY3Rpb25EZWNs
YXJhdGlvbiogZ2V0RnVuY3Rpb24oKSB7IHJldHVybiBtX2dldEZ1bmN0aW9uOyB9CisgICAgRnVu
Y3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb24oKSB7IHJldHVybiBtX2FuZEZ1bmN0aW9uOyB9
CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogdGhyZWFkQW5kRnVuY3Rpb24oKSB7IHJldHVybiBt
X3RocmVhZEFuZEZ1bmN0aW9uOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0RnVuY3Rp
b24oKSB7IHJldHVybiBtX3NldEZ1bmN0aW9uOyB9CiAKICAgICB2b2lkIHNldFBvc3NpYmxlR2V0
T3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQogICAgIHsKICAgICAgICAgbV9wb3NzaWJsZUdldE92
ZXJsb2FkcyA9IG92ZXJsb2FkczsKICAgICB9CisgICAgdm9pZCBzZXRQb3NzaWJsZUFuZE92ZXJs
b2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4mIG92ZXJsb2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVBbmRPdmVybG9h
ZHMgPSBvdmVybG9hZHM7CisgICAgfQogICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMo
Y29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+JiBvdmVybG9hZHMpCiAgICAgewogICAgICAgICBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzID0g
b3ZlcmxvYWRzOwogICAgIH0KLSAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYg
b3ZlcmxvYWRzKQorCisgICAgdm9pZCBzZXRHZXRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9u
KiBnZXRGdW5jdGlvbikKICAgICB7Ci0gICAgICAgIG1fcG9zc2libGVBbmRPdmVybG9hZHMgPSBv
dmVybG9hZHM7CisgICAgICAgIG1fZ2V0RnVuY3Rpb24gPSBnZXRGdW5jdGlvbjsKKyAgICB9CisK
KyAgICB2b2lkIHNldEFuZEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgbV9hbmRGdW5jdGlvbiA9IGFuZEZ1bmN0aW9uOworICAgIH0KKwor
ICAgIHZvaWQgc2V0VGhyZWFkQW5kRnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogdGhyZWFk
QW5kRnVuY3Rpb24pCisgICAgeworICAgICAgICBtX3RocmVhZEFuZEZ1bmN0aW9uID0gdGhyZWFk
QW5kRnVuY3Rpb247CisgICAgfQorCisgICAgdm9pZCBzZXRTZXRGdW5jdGlvbihGdW5jdGlvbkRl
Y2xhcmF0aW9uKiBzZXRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIG1fc2V0RnVuY3Rpb24gPSBz
ZXRGdW5jdGlvbjsKICAgICB9CiAKICAgICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gbV9i
YXNlOyB9CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgdGFrZUJhc2UoKSB7IHJldHVybiBX
VEZNb3ZlKG1fYmFzZSk7IH0KIAogcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4g
bV9iYXNlOwogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFy
YXRpb24+LCAxPiBtX3Bvc3NpYmxlR2V0T3ZlcmxvYWRzOwogICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlU2V0T3Zlcmxv
YWRzOwogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRp
b24+LCAxPiBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzOworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24q
IG1fZ2V0RnVuY3Rpb24geyBudWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9h
bmRGdW5jdGlvbiB7IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX3RocmVh
ZEFuZEZ1bmN0aW9uIHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fc2V0
RnVuY3Rpb24geyBudWxscHRyIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAppbmRleCA3OWQ4ZDBmNzA4ZThk
MDU3ODMxMmM4MTc5NGU4OGVkYWYzNDg3Y2Y5Li4yMDlhNTI2NTFlN2ViM2ViNWE5Y2MxZjZiYzE3
MDJiZWI2NTgyYmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi5oCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBB
U1QgewogCiAvKgotICogIDEuIEV2YWx1YXRlIG1fbFZhbHVlCisgKiAgMS4gRXZhbHVhdGUgbV9s
ZWZ0VmFsdWUKICAqICAyLiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX29sZFZhbHVlCiAgKiAgMy4g
RXZhbHVhdGUgbV9uZXdWYWx1ZUV4cHJlc3Npb24KICAqICA0LiBBc3NpZ24gdGhlIHJlc3VsdCB0
byBtX25ld1ZhbHVlCi0gKiAgNS4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9sVmFsdWUKKyAqICA1
LiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX2xlZnRWYWx1ZQogICogIDYuIEV2YWx1YXRlIG1fcmVz
dWx0RXhwcmVzc2lvbgogICogIDcuIFJldHVybiB0aGUgcmVzdWx0CiAgKi8KQEAgLTczLDM4ICs3
Myw0MSBAQCBwdWJsaWM6CiAKICAgICBVbmlxdWVSZWY8VmFyaWFibGVSZWZlcmVuY2U+IG9sZFZh
cmlhYmxlUmVmZXJlbmNlKCkKICAgICB7Ci0gICAgICAgIC8vIFRoZSBvbmx5IHJlYXNvbiB3ZSBk
b24ndCBnZXQgdXNlLWFmdGVyLWZyZWVzIGlzIHRoZSBmYWN0IHRoYXQgZXZlcnkgaW5zdGFuY2Ug
b2YgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiBpcyBhbGxvY2F0ZWQgb24gdGhlIGhlYXAuCiAg
ICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJlbmNlPihWYXJpYWJsZVJl
ZmVyZW5jZTo6d3JhcChtX29sZFZhbHVlKSk7CiAgICAgfQogCiAgICAgVW5pcXVlUmVmPFZhcmlh
YmxlUmVmZXJlbmNlPiBuZXdWYXJpYWJsZVJlZmVyZW5jZSgpCiAgICAgewotICAgICAgICAvLyBU
aGUgb25seSByZWFzb24gd2UgZG9uJ3QgZ2V0IHVzZS1hZnRlci1mcmVlcyBpcyB0aGUgZmFjdCB0
aGF0IGV2ZXJ5IGluc3RhbmNlIG9mIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24gaXMgYWxsb2Nh
dGVkIG9uIHRoZSBoZWFwLgogICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxWYXJpYWJsZVJl
ZmVyZW5jZT4oVmFyaWFibGVSZWZlcmVuY2U6OndyYXAobV9uZXdWYWx1ZSkpOwogICAgIH0KIAog
ICAgIGJvb2wgaXNSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9sVmFs
dWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsg
fQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1
ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9uZXdW
YWx1ZTsgfQogICAgIEV4cHJlc3Npb24qIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJuIG1f
bmV3VmFsdWVFeHByZXNzaW9uID8gJiptX25ld1ZhbHVlRXhwcmVzc2lvbiA6IG51bGxwdHI7IH0K
ICAgICBFeHByZXNzaW9uKiByZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gbV9yZXN1bHRFeHBy
ZXNzaW9uID8gJiptX3Jlc3VsdEV4cHJlc3Npb24gOiBudWxscHRyOyB9CisgICAgVW5pcXVlUmVm
PEV4cHJlc3Npb24+JiYgdGFrZUxlZnRWYWx1ZSgpIHsgcmV0dXJuIFdURk1vdmUobV9sZWZ0VmFs
dWUpOyB9CisgICAgVW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+JiYgdGFrZU9sZFZhbHVl
KCkgeyByZXR1cm4gV1RGTW92ZShtX29sZFZhbHVlKTsgfQorICAgIFVuaXF1ZVJlZjxWYXJpYWJs
ZURlY2xhcmF0aW9uPiYmIHRha2VOZXdWYWx1ZSgpIHsgcmV0dXJuIFdURk1vdmUobV9uZXdWYWx1
ZSk7IH0KKyAgICBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYgdGFrZU5ld1ZhbHVl
RXhwcmVzc2lvbigpIHsgcmV0dXJuIFdURk1vdmUobV9uZXdWYWx1ZUV4cHJlc3Npb24pOyB9Cisg
ICAgT3B0aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYmIHRha2VSZXN1bHRFeHByZXNzaW9u
KCkgeyByZXR1cm4gV1RGTW92ZShtX3Jlc3VsdEV4cHJlc3Npb24pOyB9CiAKIHByaXZhdGU6CiAg
ICAgdGVtcGxhdGU8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4gZnJpZW5kIFVuaXF1ZVJlZjxVPiBX
VEY6Om1ha2VVbmlxdWVSZWYoQXJncyYmLi4uKTsKIAotICAgIFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbFZhbHVl
KQorICAgIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4gbGVmdFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oTGV4
ZXI6OlRva2VuKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQot
ICAgICAgICAsIG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbiksIFF1YWxpZmllcnMoKSwg
V1RGOjpudWxsb3B0LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpCi0gICAg
ICAgICwgbV9uZXdWYWx1ZShXVEZNb3ZlKG9yaWdpbiksIFF1YWxpZmllcnMoKSwgV1RGOjpudWxs
b3B0LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpCisgICAgICAgICwgbV9s
ZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUpKQorICAgICAgICAsIG1fb2xkVmFsdWUobWFrZVVu
aXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgUXVhbGlm
aWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCkpCisgICAgICAgICwgbV9uZXdWYWx1ZShtYWtlVW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRp
b24+KFdURk1vdmUob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpCiAgICAgewogICAgIH0KIAotICAgIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiBtX2xWYWx1ZTsKLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fb2xk
VmFsdWU7Ci0gICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOworICAgIFVuaXF1ZVJl
ZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKKyAgICBVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJh
dGlvbj4gbV9vbGRWYWx1ZTsKKyAgICBVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4gbV9u
ZXdWYWx1ZTsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IG1fbmV3VmFsdWVF
eHByZXNzaW9uOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9yZXN1bHRF
eHByZXNzaW9uOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAppbmRleCAx
OTgyNGY5NDA1NGU0YjNiN2Q3Y2YyNGY2M2MwMTE5YjhhNjNmNGZiLi5lNTBhYWFkZGU3ODhmNGVk
ODllOWMyNmJmNDQ2MzljMjE0MDQ5Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJh
dGlvbi5oCkBAIC03OSw3ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVm
PEV4cHJlc3Npb24+PiBtX2luaXRpYWxpemVyOwogfTsKIAotdXNpbmcgVmFyaWFibGVEZWNsYXJh
dGlvbnMgPSBWZWN0b3I8VmFyaWFibGVEZWNsYXJhdGlvbj47Cit1c2luZyBWYXJpYWJsZURlY2xh
cmF0aW9ucyA9IFZlY3RvcjxVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4+OwogCiB9IC8v
IG5hbWVzcGFjZSBBU1QKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50LmgKaW5kZXggZThlMWZjN2Y1YjIzOGRiYjA0MDNlOWY0MDI3ODA0YTcwYTdl
ODgxYy4uMDlhMDJkMDFmNDk2ODRhYjk2M2VmODcyNWIwNDUyZDVhMzhlZGY0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oCkBAIC00MCw3
ICs0MCw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQgewogcHVibGljOgotICAgIFZhcmlhYmxlRGVjbGFy
YXRpb25zU3RhdGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVmVjdG9yPFZhcmlhYmxlRGVj
bGFyYXRpb24+JiYgdmFyaWFibGVEZWNsYXJhdGlvbnMpCisgICAgVmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBWYXJpYWJsZURlY2xhcmF0aW9ucyYm
IHZhcmlhYmxlRGVjbGFyYXRpb25zKQogICAgICAgICA6IFN0YXRlbWVudChXVEZNb3ZlKG9yaWdp
bikpCiAgICAgICAgICwgbV92YXJpYWJsZURlY2xhcmF0aW9ucyhXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb25zKSkKICAgICB7CkBAIC01MywxMCArNTMsMTAgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc1ZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+JiB2YXJpYWJsZURl
Y2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7IH0KKyAgICBWZWN0
b3I8VW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+PiYgdmFyaWFibGVEZWNsYXJhdGlvbnMo
KSB7IHJldHVybiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVj
dG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+IG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7CisgICAgVmFy
aWFibGVEZWNsYXJhdGlvbnMgbV92YXJpYWJsZURlY2xhcmF0aW9uczsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3Bw
CmluZGV4IDYyNGM1NjJlNTFjYTYwYzZlZjhkZTI4YWZlYmFjNTE0ZjJiZTBkYmQuLjFhMDA1M2M5
YzRkNGM2NjZmZTU4M2MxMjE2OGU5MTcyZWRmMjY2NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKQEAgLTE4OCw5ICsxODgsOSBAQCBTdHJpbmcgRW50
cnlQb2ludFNjYWZmb2xkaW5nOjptYW5nbGVkSW5wdXRQYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRo
KQogICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24q
IHN0cnVjdHVyZURlZmluaXRpb24gPSBudWxscHRyOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0ubmFtZSgpID09IHBh
dGhbMF0pIHsKKyAgICAgICAgaWYgKG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtp
XS0+bmFtZSgpID09IHBhdGhbMF0pIHsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KG1fcGFyYW1ldGVyVmFyaWFibGVzW2ldKTsKLSAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9
IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCktPnVuaWZ5Tm9kZSgp
OworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbV9mdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpW2ldLT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKGlzPEFT
VDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgbmFtZWRU
eXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKQEAgLTI0OSw3
ICsyNDksNyBAQCBTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2tSZXNvdXJjZXNB
bmROYW1lZEJ1aWx0SW5zKCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbaV0udHlwZSgpKSwgJyAnLCBtX3BhcmFtZXRlclZhcmlhYmxlc1tpXSwgIjtcbiIp
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS0+
dHlwZSgpKSwgJyAnLCBtX3BhcmFtZXRlclZhcmlhYmxlc1tpXSwgIjtcbiIpKTsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXlvdXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0
byB2YXJpYWJsZU5hbWUgPSBtX25hbWVkQmluZEdyb3Vwc1tpXS52YXJpYWJsZU5hbWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1
bmN0aW9uV3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCmluZGV4IDJmYzE0NjU4NjE2Yzk4OWNhMjE3YzY5
MjgyYWU4NmRjNDg3MTlmMDguLjA5ZDY5YjEwM2FkMTYzOWE1Mjk2NDIyZjZiYmE0N2I1OGE5Mjhh
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCkBAIC0xMDcsNyArMTA3LDcg
QEAgdm9pZCBGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXQKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlm
IChpKQogICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKLSAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSkpOworICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSkpOwogICAgIH0KICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CiB9CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBm
dW5jdGlvbkRlZmluaXRpb24KICAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVyTmFtZSA9IGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3Zh
cmlhYmxlTWFwcGluZy5hZGQoJnBhcmFtZXRlciwgcGFyYW1ldGVyTmFtZSk7CiAgICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqcGFyYW1ldGVyLnR5cGUoKSksICcgJywgcGFyYW1ldGVyTmFtZSkpOwor
ICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqcGFyYW1ldGVyLT50eXBlKCkpLCAnICcsIHBhcmFtZXRlck5h
bWUpKTsKICAgICAgICAgfQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpIHtcbiIp
OwogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkp
OwpAQCAtNDg2LDEyICs0ODYsMjEgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGkKIAogdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24m
IGFzc2lnbm1lbnRFeHByZXNzaW9uKQogeworICAgIGlmIChpczxBU1Q6OkRlcmVmZXJlbmNlRXhw
cmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKSkgeworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGFzc2lnbm1l
bnRFeHByZXNzaW9uLmxlZnQoKSkucG9pbnRlcigpKTsKKyAgICAgICAgYXV0byBsZWZ0TmFtZSA9
IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1l
bnRFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICBhdXRvIHJpZ2h0TmFtZSA9IG1fc3RhY2su
dGFrZUxhc3QoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCcq
JywgbGVmdE5hbWUsICIgPSAiLCByaWdodE5hbWUsICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2su
YXBwZW5kKHJpZ2h0TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CiAgICAgYXV0byBsZWZ0TmFt
ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVu
dEV4cHJlc3Npb24ucmlnaHQoKSk7CiAgICAgYXV0byByaWdodE5hbWUgPSBtX3N0YWNrLnRha2VM
YXN0KCk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKGxlZnROYW1lLCAi
ID0gIiwgcmlnaHROYW1lLCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKGxlZnROYW1lKTsK
KyAgICBtX3N0YWNrLmFwcGVuZChyaWdodE5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCkBA
IC01NzAsNyArNTc5LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXMKIAogdm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
biYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlz
aXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogICAg
IGF1dG8gbFZhbHVlID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAgIEFTU0VSVChtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKICAgICBhdXRvIHZhcmlhYmxlTmFt
ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwpAQCAtNTg3LDcgKzU5Niw3IEBAIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24mIG1ha2VBcnJhCiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewot
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOwor
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkp
OwogICAgIGF1dG8gbFZhbHVlID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAgIEFTU0VSVChtYWtl
UG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGF1dG8gdmFyaWFibGVOYW1l
ID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZl
RnVuY3Rpb25Xcml0ZXIuY3BwCmluZGV4IDY5NzJlOTg5MDUwYTlhMWI3ZGE4MTFhODdjMzNjMzNk
MWU0ZWQyOWMuLjM0MDY1ZTU4YzE3M2E2YzgxMjY0ZWI3ZGUzNWQ0OWY1MTk2Zjg2MjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0
aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCkBAIC0xMTEsOCArMTEx
LDggQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VS
VChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0g
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsK
LSAgICAgICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLnR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8mIHBh
cmFtZXRlclR5cGUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgaWYgKGlzPEFTVDo6TmFtZWRUeXBlPihwYXJh
bWV0ZXJUeXBlKSkgewogICAgICAgICAgICAgYXV0byYgcGFyYW1ldGVyTmFtZWRUeXBlID0gZG93
bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHBhcmFtZXRlclR5cGUpOwogICAgICAgICAgICAgaWYgKGlz
PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihwYXJhbWV0ZXJOYW1lZFR5cGUpKSB7CkBAIC0x
MzQsNyArMTM0LDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IudmFsdWUiKSB7CiAgICAgICAg
IEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0
cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iKSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8IiwgbWV0YWxSZXR1cm5OYW1lLCAiPih4KTtcbiIpKTsKQEAgLTE0NSw4ICsxNDUsOCBA
QCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIikgewogICAgICAgICBBU1NFUlRfVU5VU0VE
KGludHJpbnNpY3MsIG1hdGNoZXMobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIGlu
dHJpbnNpY3MudWludFR5cGUoKSkpOwogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8mIHBhcmFt
ZXRlclR5cGUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBl
KCktPnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7
CiAgICAgICAgIEFTU0VSVChpczxBU1Q6OlVubmFtZWRUeXBlPihwYXJhbWV0ZXJUeXBlKSk7CiAg
ICAgICAgIGF1dG8mIHVubmFtZWRQYXJhbWV0ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVk
VHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5u
YW1lZFBhcmFtZXRlclR5cGUpKSB7CkBAIC0xNjcsOCArMTY3LDggQEAgU3RyaW5nIHdyaXRlTmF0
aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmEKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRz
V2l0aCgib3BlcmF0b3IuIl9zdHIpKSB7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5lbmRzV2l0aCgiPSIpKSB7CiAgICAgICAgICAgICBBU1NFUlQobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOwotICAgICAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAg
ICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUo
KSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpKTsKICAgICAgICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvci4iX3N0ci5sZW5ndGgoKSk7CiAgICAgICAg
ICAgICBmaWVsZE5hbWUgPSBmaWVsZE5hbWUuc3Vic3RyaW5nKDAsIGZpZWxkTmFtZS5sZW5ndGgo
KSAtIDEpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAg
ICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5
cGUoKSk7CiAgICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvci4iX3N0ci5sZW5ndGgoKSk7CiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1
dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIikpOwpAQCAt
MTkxLDcgKzE5MSw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3BlcmF0b3ImLiJfc3RyKSkg
ewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzBdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7
CiAgICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkuc3Vic3RyaW5nKCJvcGVyYXRvciYuIl9zdHIubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5j
dGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHYpIHtcbiIpKTsKQEAgLTIwMiw4
ICsyMDIsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdIikgewogICAgICAgICBBU1NFUlQo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOwotICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwot
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkp
OworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlw
ZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0t
PnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91
dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIG0sICIsIG1ldGFs
UGFyYW1ldGVyMk5hbWUsICIgaSkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIG1baV07XG4iKSk7CkBAIC0yMTMsOCArMjEzLDggQEAg
U3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ImW10iKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1
dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsK
ICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgYXV0byBmaWVs
ZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJh
dG9yJltdLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1l
dGFsUGFyYW1ldGVyMU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4i
KSk7CkBAIC0yMjUsOSArMjI1LDkgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlm
IChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7CiAg
ICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXpl
KCkgPT0gMyk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzFdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzJdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNO
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMl0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5O
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0
YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRl
cjFOYW1lLCAiIG0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSwgIiwgbWV0YWxQYXJhbWV0
ZXIzTmFtZSwgIiB2KSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoIiAgICBtW2ldID0gdjtcbiIpKTsKQEAgLTIzOSw3ICsyMzksNyBAQCBTdHJpbmcgd3Jp
dGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmlzT3BlcmF0
b3IoKSkgewogICAgICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpID09IDEpIHsKICAgICAgICAgICAgIGF1dG8gb3BlcmF0b3JOYW1lID0gbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvciJfc3RyLmxlbmd0
aCgpKTsKLSAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBl
KCkpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJl
dHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFt
ZSwgIiB4KSB7XG4iKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCIgICAgcmV0dXJuICIsIG9wZXJhdG9yTmFtZSwgIng7XG4iKSk7CkBAIC0yNDksOCArMjQ5
LDggQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOwogICAgICAgICBhdXRv
IG9wZXJhdG9yTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmlu
Zygib3BlcmF0b3IiX3N0ci5sZW5ndGgoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIx
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0
ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFs
UGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBt
ZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1l
dGFsUGFyYW1ldGVyMU5hbWUsICIgeCwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4i
KSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4g
eCAiLCBvcGVyYXRvck5hbWUsICIgeTtcbiIpKTsKQEAgLTI4Myw3ICsyODMsNyBAQCBTdHJpbmcg
d3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiYXN1aW50IgogICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiYXNmbG9hdCIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFs
UmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQ
YXJhbWV0ZXJOYW1lLCAiIHgpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygiICAgIHJldHVybiAiLCBtYXBGdW5jdGlvbk5hbWUobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCkpLCAiKHgpO1xuIikpOwpAQCAtMjkzLDggKzI5Myw4IEBAIFN0cmlu
ZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkgPT0gInBvdyIgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0
YW4yIikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpID09IDIpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5h
bWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
cjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1
cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFt
ZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xuIikpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCAiKHgsIHkpO1xuIikpOwpAQCAtMzM2LDE0ICsz
MzYsMTQgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICBpZiAobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgiSW50ZXJsb2NrZWQiX3N0cikpIHsKICAgICAg
ICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJJbnRlcmxvY2tlZENv
bXBhcmVFeGNoYW5nZSIpIHsKICAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8
QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLnR5cGUoKSkpOwotICAgICAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBk
b3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJU
eXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkp
OworICAgICAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6
OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0t
PnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UgPSBm
aXJzdEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgICAgIGF1dG8gZmly
c3RBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZpcnN0QXJn
dW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwotICAgICAgICAgICAgYXV0byBzZWNvbmRBcmd1
bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHRoaXJkQXJn
dW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBlKCkpOwotICAgICAgICAgICAgQVNTRVJUKGlzPEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsz
XS50eXBlKCkpKTsKLSAgICAgICAgICAgIGF1dG8mIGZvdXJ0aEFyZ3VtZW50UG9pbnRlciA9IGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVszXS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50ID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMl0tPnR5cGUoKSk7CisgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2lu
dGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzNdLT50eXBl
KCkpKTsKKyAgICAgICAgICAgIGF1dG8mIGZvdXJ0aEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0
PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVszXS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gZm91cnRoQXJndW1lbnRBZGRyZXNzU3Bh
Y2UgPSBmb3VydGhBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAgICAgICAgICBh
dXRvIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Zm91cnRoQXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwogICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICco
JywgY29udmVydEFkZHJlc3NTcGFjZShmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBm
aXJzdEFyZ3VtZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBjb21w
YXJlLCAiLCB0aGlyZEFyZ3VtZW50LCAiIGRlc2lyZWQsICIsIGNvbnZlcnRBZGRyZXNzU3BhY2Uo
Zm91cnRoQXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSwg
Iiogb3V0KSB7XG4iKSk7CkBAIC0zNTQsMTMgKzM1NCwxMyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVG
dW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYQogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAzKTsKLSAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9p
bnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBl
KCkpKTsKLSAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6
OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0u
dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSk7CisgICAgICAgIGF1dG8m
IGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBh
dXRvIGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmaXJzdEFyZ3VtZW50UG9pbnRlci5hZGRy
ZXNzU3BhY2UoKTsKICAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7
Ci0gICAgICAgIGF1dG8gc2Vjb25kQXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOwot
ICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSkpOwotICAgICAgICBhdXRvJiB0aGlyZEFyZ3Vt
ZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBlKCkpOworICAgICAgICBhdXRvIHNlY29uZEFy
Z3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6
OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0t
PnR5cGUoKSkpOworICAgICAgICBhdXRvJiB0aGlyZEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0
PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVsyXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlID0g
dGhpcmRBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAgICAgIGF1dG8gdGhpcmRB
cmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRoaXJkQXJndW1l
bnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwogICAgICAgICBhdXRvIG5hbWUgPSBhdG9taWNOYW1l
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygiSW50ZXJsb2NrZWQi
X3N0ci5sZW5ndGgoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcApp
bmRleCA2MWQzNDhhZjE1OTY2MjNhZjRjMzc5OGVhOTk4MWY5NGE0MTY5NTY1Li40MWViYWU2YjQw
ZGZlYTMwZGIxMzVlYTNmZTliMTRlYzE5Nzc4ZTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zLmNwcApAQCAtNzAsNyArNzAsNyBAQCBib29sIGNoZWNrRHVwbGljYXRlRnVu
Y3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBib29sIHNhbWUgPSB0cnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
ayA9IDA7IGsgPCBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKTsgKytrKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1l
dGVycygpW2tdLnR5cGUoKSwgKmZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlw
ZSgpKSkgeworICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKVtrXS0+dHlwZSgpLCAqZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMo
KVtrXS0+dHlwZSgpKSkgewogICAgICAgICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTgwLDggKzgwLDgg
QEAgYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9ncmFtKQog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUo
KSA9PSAib3BlcmF0b3ImW10iICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDIKLSAgICAgICAgICAgICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0
aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpKSkpIHsKLSAgICAgICAgICAgIGF1dG8mIHR5cGUgPSBzdGF0aWNf
Y2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0
ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgICAgICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpKSB7CisgICAgICAgICAgICBhdXRvJiB0eXBl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICAgICAgaWYgKGlzPEFTVDo6VHlw
ZVJlZmVyZW5jZT4odHlwZSkpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRU
eXBlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKS5yZXNvbHZlZFR5cGUoKSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KCpyZXNvbHZlZFR5cGUpKSB7CkBAIC05MiwxNCArOTIsMTQgQEAgYm9vbCBjaGVja0R1cGxpY2F0
ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgp
ID09ICJvcGVyYXRvci5sZW5ndGgiICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCku
c2l6ZSgpID09IDEKLSAgICAgICAgICAgICYmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
c3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpWzBdLnR5cGUoKSkpCi0gICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlw
ZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpKSkKKyAgICAgICAgICAgICYmIChpczxBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpm
dW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKQorICAgICAgICAgICAg
fHwgaXM8QVNUOjpBcnJheVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUm
PigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBlbHNlIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCku
bmFtZSgpID09ICJvcGVyYXRvcj09IgogICAgICAgICAgICAgJiYgZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgotICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVu
Y2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tp
XS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkKLSAgICAgICAgICAgICYmIGlzPEFTVDo6
UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKSkpCi0gICAgICAgICAgICAmJiBt
YXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgKmZ1bmN0
aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKSkKKyAgICAgICAgICAgICYmIGlz
PEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+
KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKQorICAgICAgICAg
ICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFt
ZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCisg
ICAgICAgICAgICAmJiBtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBd
LT50eXBlKCksICpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLT50eXBlKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3Bw
CmluZGV4IDEzNjVmMjZkMTIzNDgyMDAwZWU3NDA0N2NiMzIxZTgwMmIyYzYwODMuLjQ2OWZhYzZm
OGZkYjM2ZjVlN2M3MzM0MDllYjVhNGNiYTFjZGNjZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApAQCAtMTIyLDggKzEy
Miw4IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhP
cGVyYXRvckFuZGVySW5kZXhlcihBU1Q6OkNhbGxFCiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9y
ID0gdHJ1ZTsKICAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRl
clR5cGU+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGZpcnN0QXJndW1l
bnQuYWRkcmVzc1NwYWNlKCksIGZpcnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsK
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVy
cy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVz
c2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUo
KSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICBwYXJhbWV0
ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3Mu
dWludFR5cGUoKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7Cisg
ICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVy
cygpLCBmaXJzdEFyZ3VtZW50LmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBB
U1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRy
aW5zaWNzLnVpbnRUeXBlKCkpKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KSk7CiAgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNU
OjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0
cmluZygib3BlcmF0b3ImW10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiB9CiAKQEAgLTEzMiw3
ICsxMzIsNyBAQCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVX
aXRoT3BlcmF0b3JMZW5ndGgoQVNUOjpDYWxsRXhwcmVzcwogICAgIGNvbnN0IGJvb2wgaXNPcGVy
YXRvciA9IHRydWU7CiAgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWlu
dFR5cGUoKSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwotICAg
IHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
Y2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBmaXJzdEFyZ3Vt
ZW50LmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7Cisg
ICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVy
cygpLCBmaXJzdEFyZ3VtZW50LmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCkpOwogICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4o
KSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5
cGUpLCBTdHJpbmcoIm9wZXJhdG9yLmxlbmd0aCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0K
IApAQCAtMTUzLDggKzE1Myw4IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gcmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKEFTVDo6Q2FsbEV4CiAgICAgICAgIH0p
KTsKICAgICB9KSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwot
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBhcmd1bWVu
dFR5cGUtPmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7
Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IFdURk1v
dmUoYXJndW1lbnRUeXBlKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
KTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIGFyZ3VtZW50VHlwZS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwg
V1RGOjpudWxsb3B0KSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oV1RGTW92
ZShhcmd1bWVudFR5cGUpKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7
CiAgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpB
dHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmlu
Zygib3BlcmF0b3I9PSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMjAzLDggKzIw
Myw4IEBAIHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJl
c29sdmVCeUluc3RhbnRpYXRpb24oQVNUOjpDYWxsCiAgICAgICAgIGF1dG8gcmlnaHRBY2NlcHRh
YmlsaXR5ID0gYWNjZXB0YWJpbGl0eSh0eXBlc1sxXS5nZXQoKSk7CiAgICAgICAgIGJvb2wgc3Vj
Y2VzcyA9IGZhbHNlOwogICAgICAgICBpZiAobGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJp
bGl0eTo6WWVzICYmIHJpZ2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMpIHsK
LSAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlMSA9IHR5cGVzWzBdLmdldCgpLmdldFVubmFt
ZWRUeXBlKCk7Ci0gICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTIgPSB0eXBlc1sxXS5nZXQo
KS5nZXRVbm5hbWVkVHlwZSgpOworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUxID0gKnR5
cGVzWzBdLmdldCgpLmdldFVubmFtZWRUeXBlKCk7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVk
VHlwZTIgPSAqdHlwZXNbMV0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKICAgICAgICAgICAgIHN1
Y2Nlc3MgPSBtYXRjaGVzKHVubmFtZWRUeXBlMSwgdW5uYW1lZFR5cGUyKTsKICAgICAgICAgfSBl
bHNlIGlmICgobGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6TWF5YmUgJiYgcmln
aHRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcykKICAgICAgICAgICAgIHx8IChs
ZWZ0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMgJiYgcmlnaHRBY2NlcHRhYmls
aXR5ID09IEFjY2VwdGFiaWxpdHk6Ok1heWJlKSkKQEAgLTMwNCwxNCArMzA0LDE0IEBAIHN0YXRp
YyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMg
PSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAyIDogMTsKICAgICAgICAgaWYgKGZ1bmN0aW9u
RGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYgZmlyc3RQYXJhbWV0ZXJV
bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+
dW5pZnlOb2RlKCk7CisgICAgICAgIGF1dG8mIGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlID0gKCpm
dW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpLT51bmlmeU5vZGUoKTsK
ICAgICAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0UGFyYW1ldGVyVW5pZnlOb2Rl
KSkgewogICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPihmaXJzdFBhcmFtZXRlclVuaWZ5Tm9kZSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNU
OjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
Pih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGtpbmQgPT0g
Q2hlY2tLaW5kOjpJbmRleCkgewotICAgICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5p
ZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSktPnVu
aWZ5Tm9kZSgpOworICAgICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0g
KCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpLT51bmlmeU5vZGUo
KTsKICAgICAgICAgICAgIGlmICghaXM8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVu
aWZ5Tm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0
byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVu
aWZ5Tm9kZSk7CkBAIC0zMjgsMTQgKzMyOCwxNCBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9y
T3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdAog
ICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6
OkluZGV4ID8gMyA6IDI7CiAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVy
cygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRVbmlmeU5vZGUgPSAoKmZ1bmN0aW9u
RGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAg
IGF1dG8mIGZpcnN0QXJndW1lbnRVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpV
bm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8m
IHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVu
aWZ5Tm9kZSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5
cGUpIHx8IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNU
OjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCkgewotICAg
ICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmlu
aXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAg
YXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpWzFdLT50eXBlKCkpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmICghaXM8
QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSk7CkBAIC0zNDUsOSArMzQ1
LDkgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAgICAgICAgICAgIGlmICghbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmlzSW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9Ci0gICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpLCAq
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQorICAgICAgICBpZiAo
IW1hdGNoZXMoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSwgKmZ1bmN0aW9uRGVmaW5pdGlvbi5w
YXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGF1dG8mIHZhbHVlVHlwZSA9ICpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW251
bUV4cGVjdGVkUGFyYW1ldGVycyAtIDFdLnR5cGUoKTsKKyAgICAgICAgYXV0byYgdmFsdWVUeXBl
ID0gKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbbnVtRXhwZWN0ZWRQYXJhbWV0ZXJz
IC0gMV0tPnR5cGUoKTsKICAgICAgICAgYXV0byBnZXR0ZXJOYW1lID0gZnVuY3Rpb25EZWZpbml0
aW9uLm5hbWUoKS5zdWJzdHJpbmcoMCwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5sZW5ndGgo
KSAtIDEpOwogICAgICAgICBhdXRvKiBnZXR0ZXJGdW5jcyA9IG5hbWVDb250ZXh0LmdldEZ1bmN0
aW9ucyhnZXR0ZXJOYW1lKTsKICAgICAgICAgaWYgKCFnZXR0ZXJGdW5jcykKQEAgLTM1NSw3ICsz
NTUsNyBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICBWZWN0b3I8UmVzb2x2aW5n
VHlwZT4gYXJndW1lbnRUeXBlczsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+IGFyZ3VtZW50VHlwZVJlZmVyZW5jZXM7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMTsgKytpKQotICAgICAg
ICAgICAgYXJndW1lbnRUeXBlcy5hcHBlbmQoKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVy
cygpWzBdLnR5cGUoKSktPmNsb25lKCkpOworICAgICAgICAgICAgYXJndW1lbnRUeXBlcy5hcHBl
bmQoKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpLT5jbG9uZSgp
KTsKICAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudFR5cGUgOiBhcmd1bWVudFR5cGVzKQogICAg
ICAgICAgICAgYXJndW1lbnRUeXBlUmVmZXJlbmNlcy5hcHBlbmQoYXJndW1lbnRUeXBlKTsKICAg
ICAgICAgYXV0byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoKmdldHRl
ckZ1bmNzLCBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLCBudWxscHRyKTsKQEAgLTM3OCw3ICszNzgs
NyBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSAo
KmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+dW5pZnlOb2RlKCk7
CisgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpczxB
U1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVk
VHlwZT4odW5pZnlOb2RlKTsKQEAgLTM5Miw3ICszOTIsNyBAQCBzdGF0aWMgYm9vbCBjaGVja09w
ZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVm
aW5pdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5h
bWUoKSA9PSAib3BlcmF0b3IrKyIgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3ItLSIpIHsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpID09IDEKLSAgICAgICAgICAgICYmIG1hdGNoZXMoKmZ1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAg
ICAgICAgICAgICYmIG1hdGNoZXMoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0t
PnR5cGUoKSwgZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CiAgICAgfQogICAgIGlmIChmdW5j
dGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcisiIHx8IGZ1bmN0aW9uRGVmaW5pdGlv
bi5uYW1lKCkgPT0gIm9wZXJhdG9yLSIpCiAgICAgICAgIHJldHVybiBmdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpID09IDI7CkBAIC00NDcsMTkgKzQ0NywxOCBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgYm9vbCBjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mKTsKLSAgICB2b2lkIGZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoQVNUOjpQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24mLCBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5cGUsIEFT
VDo6VW5uYW1lZFR5cGUqIGV4dHJhQXJndW1lbnRUeXBlID0gbnVsbHB0cik7CiAgICAgYm9vbCBp
c0Jvb2xUeXBlKFJlc29sdmluZ1R5cGUmKTsKICAgICBzdHJ1Y3QgUmVjdXJzZUluZm8gewogICAg
ICAgICBSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlOwotICAgICAgICBPcHRpb25hbDxBU1Q6
OkFkZHJlc3NTcGFjZT4mIGFkZHJlc3NTcGFjZTsKKyAgICAgICAgQVNUOjpUeXBlQW5ub3RhdGlv
biYgdHlwZUFubm90YXRpb247CiAgICAgfTsKLSAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4gcmVj
dXJzZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xWYWx1ZSA9IGZh
bHNlKTsKLSAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4gZ2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24m
LCBib29sIHJlcXVpcmVzTFZhbHVlID0gZmFsc2UpOworICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZv
PiByZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTGVmdFZh
bHVlID0gZmFsc2UpOworICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhw
cmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CiAgICAgT3B0aW9uYWw8
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJik7CiAgICAgYm9vbCByZWN1cnNlQW5kUmVxdWlyZUJv
b2xUeXBlKEFTVDo6RXhwcmVzc2lvbiYpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJl
c3Npb24mLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiwgT3B0aW9uYWw8QVNUOjpBZGRy
ZXNzU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHBy
ZXNzaW9uJiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmLCBPcHRpb25hbDxBU1Q6
OkFkZHJlc3NTcGFjZT4gPSBXVEY6Om51bGxvcHQpOwotICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNU
OjpFeHByZXNzaW9uJiwgUmVzb2x2aW5nVHlwZSYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNl
PiA9IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYs
IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKKyAg
ICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVmUHRyPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKKyAgICB2b2lkIGZvcndhcmRUeXBl
KEFTVDo6RXhwcmVzc2lvbiYsIFJlc29sdmluZ1R5cGUmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsK
IAogICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CkBAIC00
OTQsNyArNDkzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Np
b24mKSBvdmVycmlkZTsKIAogICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgUmVzb2x2aW5n
VHlwZT4gbV90eXBlTWFwOwotICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgT3B0aW9uYWw8
QVNUOjpBZGRyZXNzU3BhY2U+PiBtX2FkZHJlc3NTcGFjZU1hcDsKKyAgICBIYXNoTWFwPEFTVDo6
RXhwcmVzc2lvbiosIEFTVDo6VHlwZUFubm90YXRpb24+IG1fdHlwZUFubm90YXRpb25zOwogICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5n
PiBtX2ZyYWdtZW50RW50cnlQb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0ZUVu
dHJ5UG9pbnRzOwpAQCAtNTM4LDggKzUzNyw4IEBAIGJvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMo
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZvciAoYXV0byYga2V5
VmFsdWVQYWlyIDogbV9hZGRyZXNzU3BhY2VNYXApCi0gICAgICAgIGtleVZhbHVlUGFpci5rZXkt
PnNldEFkZHJlc3NTcGFjZShrZXlWYWx1ZVBhaXIudmFsdWUpOworICAgIGZvciAoYXV0byYga2V5
VmFsdWVQYWlyIDogbV90eXBlQW5ub3RhdGlvbnMpCisgICAgICAgIGtleVZhbHVlUGFpci5rZXkt
PnNldFR5cGVBbm5vdGF0aW9uKFdURk1vdmUoa2V5VmFsdWVQYWlyLnZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTYyMSw2ICs2MjAsMTcgQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5nVHlwZSYgcmVz
b2wKICAgICB9KSk7CiB9CiAKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+IGNvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQoreworICAgIHJldHVy
biByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPj4geworICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7CisgICAg
fSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAg
ICAgaWYgKCFyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZl
ZFR5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBjb21taXQocmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UtPnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCktPmNsb25lKCk7CisgICAgfSkp
OworfQorCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBl
bnVtZXJhdGlvbkRlZmluaXRpb24pCiB7CiAgICAgYXV0byogYmFzZVR5cGUgPSAoWyZdKCkgLT4g
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHsKQEAgLTcyOCwyNiArNzM4LDI2IEBAIHZvaWQg
Q2hlY2tlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQogICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKIH0KIAotYXV0byBDaGVja2VyOjpy
ZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWly
ZXNMVmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgorYXV0byBDaGVja2VyOjpyZWN1cnNl
QW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMZWZ0
VmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgogewogICAgIFZpc2l0b3I6OnZpc2l0KGV4
cHJlc3Npb24pOwogICAgIGlmIChlcnJvcigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIHJldHVybiBnZXRJbmZvKGV4cHJlc3Npb24sIHJlcXVpcmVzTFZhbHVlKTsKKyAgICBy
ZXR1cm4gZ2V0SW5mbyhleHByZXNzaW9uLCByZXF1aXJlc0xlZnRWYWx1ZSk7CiB9CiAKLWF1dG8g
Q2hlY2tlcjo6Z2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWly
ZXNMVmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgorYXV0byBDaGVja2VyOjpnZXRJbmZv
KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSkgLT4g
T3B0aW9uYWw8UmVjdXJzZUluZm8+CiB7CiAgICAgYXV0byB0eXBlSXRlcmF0b3IgPSBtX3R5cGVN
YXAuZmluZCgmZXhwcmVzc2lvbik7CiAgICAgQVNTRVJUKHR5cGVJdGVyYXRvciAhPSBtX3R5cGVN
YXAuZW5kKCkpOwogCi0gICAgYXV0byBhZGRyZXNzU3BhY2VJdGVyYXRvciA9IG1fYWRkcmVzc1Nw
YWNlTWFwLmZpbmQoJmV4cHJlc3Npb24pOwotICAgIEFTU0VSVChhZGRyZXNzU3BhY2VJdGVyYXRv
ciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7Ci0gICAgaWYgKHJlcXVpcmVzTFZhbHVlICYm
ICFhZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUpIHsKKyAgICBhdXRvIHR5cGVBbm5vdGF0aW9u
SXRlcmF0b3IgPSBtX3R5cGVBbm5vdGF0aW9ucy5maW5kKCZleHByZXNzaW9uKTsKKyAgICBBU1NF
UlQodHlwZUFubm90YXRpb25JdGVyYXRvciAhPSBtX3R5cGVBbm5vdGF0aW9ucy5lbmQoKSk7Cisg
ICAgaWYgKHJlcXVpcmVzTGVmdFZhbHVlICYmIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3ItPnZhbHVl
LmlzUmlnaHRWYWx1ZSgpKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiB7eyB0eXBlSXRlcmF0b3ItPnZhbHVlLCBh
ZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUgfX07CisgICAgcmV0dXJuIHt7IHR5cGVJdGVyYXRv
ci0+dmFsdWUsIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3ItPnZhbHVlIH19OwogfQogCiB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlv
bikKQEAgLTc2NywxOSArNzc3LDMyIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgIH0KIH0KIAotdm9pZCBDaGVj
a2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiYgdW5uYW1lZFR5cGUsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNl
PiBhZGRyZXNzU3BhY2UpCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9u
JiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVkVHlwZSwg
QVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQog
ewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92
ZSh1bm5hbWVkVHlwZSkpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NT
cGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7CisgICAgYXV0byBhZGRyZXNz
U3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdURk1v
dmUodHlwZUFubm90YXRpb24pKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJl
c3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCi12b2lkIENoZWNr
ZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZWZQdHI8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UsIE9wdGlvbmFsPEFT
VDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2UpCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUo
QVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2U+JiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFu
bm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Up
KTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwot
ICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZl
eHByZXNzaW9uLCBhZGRyZXNzU3BhY2UpOworICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0
ID0gbV90eXBlQW5ub3RhdGlvbnMuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5vdGF0
aW9uKSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NT
cGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKK30KKwordm9pZCBDaGVja2VyOjpmb3J3YXJkVHlw
ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5
cGUsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUo
KSkKK3sKKyAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0LT5jbG9uZSgpKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9LCBb
Jl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzdWx0KSB7CisgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0LmNvcHlSZWYo
KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgfSkpOworICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV90eXBlQW5u
b3RhdGlvbnMuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiAgICAg
QVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKIH0KIApAQCAtNzg5LDYgKzgxMiwxMSBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQogICAg
IGlmICghbGVmdEluZm8pCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChsZWZ0SW5mby0+dHlw
ZUFubm90YXRpb24uaXNSaWdodFZhbHVlKCkpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIGF1dG8gcmlnaHRJbmZvID0gcmVjdXJzZUFuZEdldElu
Zm8oYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7CiAgICAgaWYgKCFyaWdodEluZm8pCiAg
ICAgICAgIHJldHVybjsKQEAgLTgwMiwyMyArODMwLDEwIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCiAgICAgYXNz
aWduVHlwZShhc3NpZ25tZW50RXhwcmVzc2lvbiwgV1RGTW92ZSgqcmVzdWx0VHlwZSkpOwogfQog
Ci12b2lkIENoZWNrZXI6OmZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwg
UmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+
IGFkZHJlc3NTcGFjZSkKLXsKLSAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7Ci0gICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0LT5jbG9uZSgp
KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKLSAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzdWx0KSB7
Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVz
dWx0LmNvcHlSZWYoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1
bHQuaXNOZXdFbnRyeSk7Ci0gICAgfSkpOwotICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0
ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZleHByZXNzaW9uLCBhZGRyZXNzU3BhY2UpOwotICAg
IEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1
bHQuaXNOZXdFbnRyeSk7Ci19Ci0KIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQogewotICAgIGF1dG8g
bFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
bFZhbHVlKCksIHRydWUpOwotICAgIGlmICghbFZhbHVlSW5mbykKKyAgICBhdXRvIGxlZnRWYWx1
ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRW
YWx1ZSgpLCB0cnVlKTsKKyAgICBpZiAoIWxlZnRWYWx1ZUluZm8pCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCB0aGUgUmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbidzIEFub255bW91c1ZhcmlhYmxlcy4KQEAgLTgyNyw3ICs4NDIsNyBA
QCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKICAgICBpZiAoIW5ld1ZhbHVlSW5mbykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKCFtYXRjaEFuZENvbW1pdChsVmFsdWVJbmZvLT5yZXNvbHZpbmdU
eXBlLCBuZXdWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpKSB7CisgICAgaWYgKCFtYXRjaEFuZENv
bW1pdChsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8tPnJlc29sdmlu
Z1R5cGUpKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC04NzMsMzcgKzg4OCw0MyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VF
eHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhc3NpZ25UeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmNs
b25lKCksIHBvaW50ZXJUeXBlLT5hZGRyZXNzU3BhY2UoKSk7CisgICAgYXNzaWduVHlwZShkZXJl
ZmVyZW5jZUV4cHJlc3Npb24sIHBvaW50ZXJUeXBlLT5jbG9uZSgpLCBBU1Q6OkxlZnRWYWx1ZSB7
IHBvaW50ZXJUeXBlLT5hZGRyZXNzU3BhY2UoKSB9KTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewot
ICAgIGF1dG8gbFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VQb2ludGVyRXhwcmVz
c2lvbi5sVmFsdWUoKSwgdHJ1ZSk7Ci0gICAgaWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVm
dFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0
VmFsdWUoKSwgdHJ1ZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVJbmZvKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBsZWZ0VmFsdWVJbmZvLT50eXBlQW5ub3Rh
dGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAgaWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7Cisg
ICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBhdXRvKiBs
VmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0g
ICAgaWYgKCFsVmFsdWVUeXBlKSB7CisgICAgYXV0byogbGVmdFZhbHVlVHlwZSA9IGdldFVubmFt
ZWRUeXBlKGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGlmICghbGVmdFZhbHVl
VHlwZSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgYXNzaWduVHlwZShtYWtlUG9pbnRlckV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpQ
b2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5vcmlnaW4oKSks
ICpsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25lKCkpKTsKKyAgICBh
c3NpZ25UeXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50
ZXJUeXBlPihMZXhlcjo6VG9rZW4obWFrZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxl
ZnRBZGRyZXNzU3BhY2UsIGxlZnRWYWx1ZVR5cGUtPmNsb25lKCkpKTsKIH0KIAogdm9pZCBDaGVj
a2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFuZEdl
dEluZm8obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgaWYgKCFs
VmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOworICAgIGlmICghbGVmdFZh
bHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogbFZhbHVlVHlwZSA9IGdldFVu
bmFtZWRUeXBlKGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOwotICAgIGlmICghbFZhbHVlVHlw
ZSkgeworICAgIGF1dG8qIGxlZnRWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsZWZ0VmFsdWVJ
bmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBpZiAoIWxlZnRWYWx1ZVR5cGUpIHsKICAgICAgICAg
c2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8mIHVuaWZ5Tm9k
ZSA9IGxWYWx1ZVR5cGUtPnVuaWZ5Tm9kZSgpOworICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGxlZnRW
YWx1ZVR5cGUtPnVuaWZ5Tm9kZSgpOwogICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlm
eU5vZGUpKSB7CiAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5h
bWVkVHlwZT4odW5pZnlOb2RlKTsKICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVu
bmFtZWRUeXBlKSkgewpAQCAtOTEzLDcgKzkzNCw4IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWxWYWx1ZUlu
Zm8tPmFkZHJlc3NTcGFjZSkgeworICAgICAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBsZWZ0
VmFsdWVJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAgICAgIGlm
ICghbGVmdEFkZHJlc3NTcGFjZSkgewogICAgICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtOTIxLDE4MyArOTQzLDExMiBAQCB2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzcwogICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBl
KSkgewogICAgICAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5
cGU+KHVubmFtZWRUeXBlKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXZlIHRoZSBudW1iZXIg
b2YgZWxlbWVudHMuCi0gICAgICAgICAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpU
b2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUluZm8t
PmFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSk7CisgICAgICAgICAgICBh
c3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50eXBlKCkuY2xv
bmUoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KCFsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UpIHsKKyAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2Ug
PSBsZWZ0VmFsdWVJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAg
aWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbiht
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUluZm8tPmFkZHJl
c3NTcGFjZSwgbFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAgIGFzc2lnblR5cGUobWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAq
bGVmdEFkZHJlc3NTcGFjZSwgbGVmdFZhbHVlVHlwZS0+Y2xvbmUoKSkpOwogfQogCi12b2lkIENo
ZWNrZXI6OmZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgQVNUOjpVbm5hbWVkVHlwZSYgd3Jh
cHBlZEJhc2VUeXBlLCBBU1Q6OlVubmFtZWRUeXBlKiBleHRyYUFyZ3VtZW50VHlwZSkKK3ZvaWQg
Q2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQogewotICAg
IHVzaW5nIE92ZXJsb2FkUmVzb2x1dGlvbiA9IHN0ZDo6dHVwbGU8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiwgQVNUOjpVbm5hbWVkVHlwZSo+OwotCi0gICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKiBnZXRGdW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBnZXRSZXR1cm5UeXBlOwot
ICAgIHN0ZDo6dGllKGdldEZ1bmN0aW9uLCBnZXRSZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBPdmVy
bG9hZFJlc29sdXRpb24gewotICAgICAgICBSZXNvbHZpbmdUeXBlIGdldEFyZ3VtZW50VHlwZTEo
d3JhcHBlZEJhc2VUeXBlLmNsb25lKCkpOwotICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdUeXBl
PiBnZXRBcmd1bWVudFR5cGUyOwotICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCi0gICAg
ICAgICAgICBnZXRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50VHlw
ZS0+Y2xvbmUoKSk7CisgICAgYXV0byBiYXNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGRvdEV4
cHJlc3Npb24uYmFzZSgpKTsKKyAgICBpZiAoIWJhc2VJbmZvKQorICAgICAgICByZXR1cm47Cisg
ICAgYXV0byBiYXNlVW5uYW1lZFR5cGUgPSBjb21taXQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUp
OworICAgIGlmICghYmFzZVVubmFtZWRUeXBlKQorICAgICAgICByZXR1cm47CiAKKyAgICBBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBBU1Q6OlVu
bmFtZWRUeXBlKiBnZXRSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICB7CiAgICAgICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBnZXRBcmd1bWVudFR5cGVz
OwotICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChnZXRBcmd1bWVudFR5cGUxKTsKLSAg
ICAgICAgaWYgKGdldEFyZ3VtZW50VHlwZTIpCi0gICAgICAgICAgICBnZXRBcmd1bWVudFR5cGVz
LmFwcGVuZCgqZ2V0QXJndW1lbnRUeXBlMik7Ci0KLSAgICAgICAgYXV0byogZ2V0RnVuY3Rpb24g
PSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBv
c3NpYmxlR2V0T3ZlcmxvYWRzKCksIGdldEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAg
ICBpZiAoIWdldEZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51
bGxwdHIsIG51bGxwdHIpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZ2V0RnVuY3Rp
b24sICZnZXRGdW5jdGlvbi0+dHlwZSgpKTsKLSAgICB9KSgpOwotCi0gICAgQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBhbmRSZXR1
cm5UeXBlOwotICAgIHN0ZDo6dGllKGFuZEZ1bmN0aW9uLCBhbmRSZXR1cm5UeXBlKSA9IChbJl0o
KSAtPiBPdmVybG9hZFJlc29sdXRpb24gewotICAgICAgICBhdXRvIGNvbXB1dGVBbmRBcmd1bWVu
dFR5cGUgPSBbJl0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIC0+IE9wdGlvbmFsPFJl
c29sdmluZ1R5cGU+IHsKLSAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IHVubmFtZWRUeXBlLmNs
b25lKCkgfTsKLSAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUp
KQotICAgICAgICAgICAgICAgIHJldHVybiB7IFJlc29sdmluZ1R5cGUobWFrZVVuaXF1ZVJlZjxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6
QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpLmNsb25lKCkpKSB9OwotICAgICAgICAgICAg
aWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0dXJuIHsgUmVzb2x2aW5nVHlwZSht
YWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBkb3duY2Fz
dDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKS5jbG9uZSgpKSkgfTsKLSAgICAgICAg
fTsKLSAgICAgICAgYXV0byBjb21wdXRlQW5kUmV0dXJuVHlwZSA9IFsmXShBU1Q6OlVubmFtZWRU
eXBlJiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogewotICAgICAgICAgICAgaWYg
KGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgp
OwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgYXV0
byBhbmRBcmd1bWVudFR5cGUxID0gY29tcHV0ZUFuZEFyZ3VtZW50VHlwZSh3cmFwcGVkQmFzZVR5
cGUpOwotICAgICAgICBpZiAoIWFuZEFyZ3VtZW50VHlwZTEpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29s
dmluZ1R5cGU+IGFuZEFyZ3VtZW50VHlwZTI7Ci0gICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlw
ZSkKLSAgICAgICAgICAgIGFuZEFyZ3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJn
dW1lbnRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgZ2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoYmFz
ZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgICAgICBnZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5j
dGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3NpYmxlR2V0T3ZlcmxvYWRzKCksIGdl
dEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAgICBpZiAoZ2V0RnVuY3Rpb24pCisgICAg
ICAgICAgICBnZXRSZXR1cm5UeXBlID0gJmdldEZ1bmN0aW9uLT50eXBlKCk7CisgICAgfQogCisg
ICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbiA9IG51bGxwdHI7CisgICAg
QVNUOjpVbm5hbWVkVHlwZSogYW5kUmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAgaWYgKGF1dG8g
bGVmdEFkZHJlc3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1Nw
YWNlKCkpIHsKKyAgICAgICAgYXV0byBhcmd1bWVudFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6
UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxlZnRB
ZGRyZXNzU3BhY2UsIGJhc2VVbm5hbWVkVHlwZS0+Z2V0KCkuY2xvbmUoKSk7CiAgICAgICAgIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhbmRBcmd1bWVudFR5
cGVzOwotICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZCgqYW5kQXJndW1lbnRUeXBlMSk7
Ci0gICAgICAgIGlmIChhbmRBcmd1bWVudFR5cGUyKQotICAgICAgICAgICAgYW5kQXJndW1lbnRU
eXBlcy5hcHBlbmQoKmFuZEFyZ3VtZW50VHlwZTIpOwotCi0gICAgICAgIGF1dG8qIGFuZEZ1bmN0
aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5wb3NzaWJsZUFuZE92ZXJsb2FkcygpLCBhbmRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKLSAg
ICAgICAgaWYgKCFhbmRGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGFuZEZ1
bmN0aW9uLCBjb21wdXRlQW5kUmV0dXJuVHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpKSk7Ci0gICAg
fSkoKTsKKyAgICAgICAgYW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmlu
Z1R5cGUpOworICAgICAgICBhbmRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1w
bChkb3RFeHByZXNzaW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRzKCksIGFuZEFyZ3VtZW50VHlwZXMs
IG51bGxwdHIpOworICAgICAgICBpZiAoYW5kRnVuY3Rpb24pCisgICAgICAgICAgICBhbmRSZXR1
cm5UeXBlID0gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkp
LmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJzIHdp
bGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgIH0KKworICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiogdGhyZWFkQW5kRnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUq
IHRocmVhZEFuZFJldHVyblR5cGUgPSBudWxscHRyOworICAgIHsKKyAgICAgICAgYXV0byBhcmd1
bWVudFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihk
b3RFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgYmFzZVVu
bmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHRocmVhZEFuZEFyZ3VtZW50VHlwZXM7CisgICAgICAg
IHRocmVhZEFuZEFyZ3VtZW50VHlwZXMuYXBwZW5kKGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsK
KyAgICAgICAgdGhyZWFkQW5kRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwo
ZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFuZE92ZXJsb2FkcygpLCB0aHJlYWRBbmRBcmd1bWVudFR5
cGVzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKHRocmVhZEFuZEZ1bmN0aW9uKQorICAgICAgICAg
ICAgdGhyZWFkQW5kUmV0dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih0aHJl
YWRBbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpOyAvLyBGSVhNRTogRW5mb3JjZSB0
aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKKyAgICB9CiAKLSAg
ICBpZiAoIWdldFJldHVyblR5cGUgJiYgIWFuZFJldHVyblR5cGUpIHsKKyAgICBpZiAoIWdldEZ1
bmN0aW9uICYmICFhbmRGdW5jdGlvbikgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotCi0gICAgaWYgKGdldFJldHVyblR5cGUgJiYgYW5kUmV0dXJuVHlwZSAm
JiAhbWF0Y2hlcygqZ2V0UmV0dXJuVHlwZSwgKmFuZFJldHVyblR5cGUpKSB7CisgICAgaWYgKGdl
dEZ1bmN0aW9uICYmIGFuZEZ1bmN0aW9uKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKGFuZEZ1bmN0aW9uICYmIHRocmVhZEFuZEZ1bmN0aW9u
ICYmICFtYXRjaGVzKCphbmRSZXR1cm5UeXBlLCAqdGhyZWFkQW5kUmV0dXJuVHlwZSkpIHsKICAg
ICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiogc2V0RnVuY3Rpb247Ci0gICAgQVNUOjpVbm5hbWVkVHlwZSogc2V0
UmV0dXJuVHlwZTsKLSAgICBzdGQ6OnRpZShzZXRGdW5jdGlvbiwgc2V0UmV0dXJuVHlwZSkgPSAo
WyZdKCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsKLSAgICAgICAgUmVzb2x2aW5nVHlwZSBzZXRB
cmd1bWVudDFUeXBlKHdyYXBwZWRCYXNlVHlwZS5jbG9uZSgpKTsKLSAgICAgICAgT3B0aW9uYWw8
UmVzb2x2aW5nVHlwZT4gc2V0QXJndW1lbnRUeXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1l
bnRUeXBlKQotICAgICAgICAgICAgc2V0QXJndW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0
cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOwotICAgICAgICBSZXNvbHZpbmdUeXBlIHNldEFyZ3Vt
ZW50M1R5cGUoZ2V0UmV0dXJuVHlwZSA/IGdldFJldHVyblR5cGUtPmNsb25lKCkgOiBhbmRSZXR1
cm5UeXBlLT5jbG9uZSgpKTsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBmaWVsZFR5cGUgPSBnZXRS
ZXR1cm5UeXBlID8gZ2V0UmV0dXJuVHlwZSA6IGFuZFJldHVyblR5cGU7CiAKKyAgICBBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24qIHNldEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBBU1Q6OlVubmFt
ZWRUeXBlKiBzZXRSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICB7CiAgICAgICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBzZXRBcmd1bWVudFR5cGVzOwot
ICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChzZXRBcmd1bWVudDFUeXBlKTsKLSAgICAg
ICAgaWYgKHNldEFyZ3VtZW50VHlwZTIpCi0gICAgICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFw
cGVuZCgqc2V0QXJndW1lbnRUeXBlMik7Ci0gICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5k
KHNldEFyZ3VtZW50M1R5cGUpOwotCi0gICAgICAgIGF1dG8qIHNldEZ1bmN0aW9uID0gcmVzb2x2
ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZVNl
dE92ZXJsb2FkcygpLCBzZXRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFz
ZXRGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBu
dWxscHRyKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNldEZ1bmN0aW9uLCAmc2V0
RnVuY3Rpb24tPnR5cGUoKSk7Ci0gICAgfSkoKTsKLQotICAgIGlmIChzZXRGdW5jdGlvbikgewot
ICAgICAgICBpZiAoIW1hdGNoZXMoc2V0RnVuY3Rpb24tPnR5cGUoKSwgd3JhcHBlZEJhc2VUeXBl
KSkgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3Bh
Y2U7Ci0gICAgaWYgKGdldFJldHVyblR5cGUgfHwgYW5kUmV0dXJuVHlwZSkgewotICAgICAgICAv
LyBGSVhNRTogVGhlIHJlZmVyZW5jZSBjb21waWxlciBoYXMgImVsc2UgaWYgKCFub2RlLmJhc2Uu
aXNMVmFsdWUgJiYgIWJhc2VUeXBlLmlzQXJyYXlSZWYpIiwKLSAgICAgICAgLy8gYnV0IEkgZG9u
J3QgdW5kZXJzdGFuZCB3aHkgaXQgZXhpc3RzLiBJIGhhdmVuJ3Qgd3JpdHRlbiBpdCBoZXJlLCBh
bmQgSSdsbCBpbnZlc3RpZ2F0ZQotICAgICAgICAvLyBpZiB3ZSBjYW4gcmVtb3ZlIGl0IGZyb20g
dGhlIHJlZmVyZW5jZSBjb21waWxlci4KLSAgICAgICAgaWYgKGlzPEFTVDo6UmVmZXJlbmNlVHlw
ZT4od3JhcHBlZEJhc2VUeXBlKSkKLSAgICAgICAgICAgIGFkZHJlc3NTcGFjZSA9IGRvd25jYXN0
PEFTVDo6UmVmZXJlbmNlVHlwZT4od3JhcHBlZEJhc2VUeXBlKS5hZGRyZXNzU3BhY2UoKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIGFkZHJlc3NTcGFjZUl0ZXJhdG9yID0gbV9h
ZGRyZXNzU3BhY2VNYXAuZmluZCgmcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmJhc2UoKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoYWRkcmVzc1NwYWNlSXRlcmF0b3IgIT0gbV9hZGRyZXNzU3BhY2VN
YXAuZW5kKCkpOwotICAgICAgICAgICAgaWYgKGFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSkK
LSAgICAgICAgICAgICAgICBhZGRyZXNzU3BhY2UgPSAqYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZh
bHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAg
c2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgICAg
ICBSZXNvbHZpbmdUeXBlIGZpZWxkUmVzb2x2aW5nVHlwZShmaWVsZFR5cGUtPmNsb25lKCkpOwor
ICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChmaWVsZFJlc29sdmluZ1R5cGUpOworICAg
ICAgICBzZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNz
aW9uLnBvc3NpYmxlU2V0T3ZlcmxvYWRzKCksIHNldEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwor
ICAgICAgICBpZiAoc2V0RnVuY3Rpb24pCisgICAgICAgICAgICBzZXRSZXR1cm5UeXBlID0gJnNl
dEZ1bmN0aW9uLT50eXBlKCk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEdlbmVyYXRlIHRoZSBj
YWxsIGV4cHJlc3Npb25zCi0KLSAgICBhc3NpZ25UeXBlKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
biwgZ2V0UmV0dXJuVHlwZSA/IGdldFJldHVyblR5cGUtPmNsb25lKCkgOiBhbmRSZXR1cm5UeXBl
LT5jbG9uZSgpLCBhZGRyZXNzU3BhY2UpOwotfQotCi1PcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4+IENoZWNrZXI6OnJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKLXsKLSAgICBhdXRv
IGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmJh
c2UoKSk7Ci0gICAgaWYgKCFiYXNlSW5mbykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQotICAgIGF1dG8qIGJhc2VUeXBlID0gZ2V0VW5uYW1lZFR5cGUoYmFzZUluZm8tPnJlc29sdmlu
Z1R5cGUpOwotICAgIGlmICghYmFzZVR5cGUpIHsKKyAgICBpZiAoc2V0RnVuY3Rpb24gJiYgYW5k
RnVuY3Rpb24pIHsKICAgICAgICAgc2V0RXJyb3IoKTsKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICB9Ci0gICAgYXV0byYgYmFzZVVuaWZ5Tm9kZSA9IGJhc2VUeXBlLT51bmlmeU5v
ZGUoKTsKLSAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkpCi0gICAg
ICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKS5jbG9u
ZSgpOwotICAgIEFTU0VSVChpczxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkpOwotICAg
IHJldHVybiB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4ocHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KGJhc2VV
bmlmeU5vZGUpKSB9OwotfQotCi12b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lv
biYgZG90RXhwcmVzc2lvbikKLXsKLSAgICBhdXRvIGJhc2VUeXBlID0gcmVjdXJzZUFuZFdyYXBC
YXNlVHlwZShkb3RFeHByZXNzaW9uKTsKLSAgICBpZiAoIWJhc2VUeXBlKQogICAgICAgICByZXR1
cm47CisgICAgfQogCi0gICAgZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vzcyhkb3RFeHByZXNz
aW9uLCAqYmFzZVR5cGUpOworICAgIGRvdEV4cHJlc3Npb24uc2V0R2V0RnVuY3Rpb24oZ2V0RnVu
Y3Rpb24pOworICAgIGRvdEV4cHJlc3Npb24uc2V0QW5kRnVuY3Rpb24oYW5kRnVuY3Rpb24pOwor
ICAgIGRvdEV4cHJlc3Npb24uc2V0VGhyZWFkQW5kRnVuY3Rpb24odGhyZWFkQW5kRnVuY3Rpb24p
OworICAgIGRvdEV4cHJlc3Npb24uc2V0U2V0RnVuY3Rpb24oc2V0RnVuY3Rpb24pOworCisgICAg
QVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpOwor
ICAgIGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5mby0+dHlwZUFubm90YXRpb24u
bGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgIGlmIChhbmRGdW5jdGlvbikKKyAgICAgICAg
ICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpMZWZ0VmFsdWUgeyAqbGVmdEFkZHJlc3NTcGFjZSB9
OworICAgICAgICBlbHNlIGlmIChzZXRGdW5jdGlvbikKKyAgICAgICAgICAgIHR5cGVBbm5vdGF0
aW9uID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgpOworICAgIH0gZWxzZSBpZiAoIWJhc2VJbmZv
LT50eXBlQW5ub3RhdGlvbi5pc1JpZ2h0VmFsdWUoKSAmJiAoc2V0RnVuY3Rpb24gfHwgYW5kRnVu
Y3Rpb24pKQorICAgICAgICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6QWJzdHJhY3RMZWZ0VmFsdWUo
KTsKKyAgICBhc3NpZ25UeXBlKGRvdEV4cHJlc3Npb24sIGZpZWxkVHlwZS0+Y2xvbmUoKSwgV1RG
TW92ZSh0eXBlQW5ub3RhdGlvbikpOwogfQogCi12b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6SW5k
ZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6
SW5kZXhFeHByZXNzaW9uJikKIHsKLSAgICBhdXRvIGJhc2VUeXBlID0gcmVjdXJzZUFuZFdyYXBC
YXNlVHlwZShpbmRleEV4cHJlc3Npb24pOwotICAgIGlmICghYmFzZVR5cGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gaW5kZXhJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oaW5kZXhFeHBy
ZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpKTsKLSAgICBpZiAoIWluZGV4SW5mbykKLSAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8gaW5kZXhFeHByZXNzaW9uVHlwZSA9IGdldFVubmFtZWRUeXBlKGlu
ZGV4SW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFpbmRleEV4cHJlc3Npb25UeXBlKSB7
Ci0gICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmaW5p
c2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKGluZGV4RXhwcmVzc2lvbiwgV1RGTW92ZSgqYmFzZVR5
cGUpLCBpbmRleEV4cHJlc3Npb25UeXBlKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMu
CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFi
bGVSZWZlcmVuY2UpCkBAIC0xMTA1LDEwICsxMDU2LDEwIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpCiAgICAgQVNTRVJUKHZh
cmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOwogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5j
ZS52YXJpYWJsZSgpLT50eXBlKCkpOwogICAgIAotICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1Nw
YWNlPiBhZGRyZXNzU3BhY2U7Ci0gICAgaWYgKCF2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgp
LT5pc0Fub255bW91cygpKQotICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkOwotICAgIGFzc2lnblR5cGUodmFyaWFibGVSZWZlcmVuY2UsIHZhcmlhYmxlUmVm
ZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKS0+Y2xvbmUoKSwgYWRkcmVzc1NwYWNlKTsKKyAgICBB
U1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCk7Cisg
ICAgaWYgKCF2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT5pc0Fub255bW91cygpKSAvLyBG
SVhNRTogVGhpcyBkb2Vzbid0IHNlZW0gcmlnaHQuCisgICAgICAgIHR5cGVBbm5vdGF0aW9uID0g
QVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH07CisgICAgYXNzaWdu
VHlwZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlw
ZSgpLT5jbG9uZSgpLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiB9CiAKIHZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKQEAgLTE0MDcsNyArMTM1OCw3
IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVz
c2lvbikKICAgICBpZiAoZXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gbGFzdElu
Zm8gPSBnZXRJbmZvKGNvbW1hRXhwcmVzc2lvbi5saXN0KCkubGFzdCgpKTsKLSAgICBmb3J3YXJk
VHlwZShjb21tYUV4cHJlc3Npb24sIGxhc3RJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBmb3J3
YXJkVHlwZShjb21tYUV4cHJlc3Npb24sIGxhc3RJbmZvLT5yZXNvbHZpbmdUeXBlLCBsYXN0SW5m
by0+dHlwZUFubm90YXRpb24pOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VGVybmFy
eUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKQpAQCAtMTQ1Niw3ICsxNDA3LDcgQEAgdm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKICAg
ICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLT5wYXJhbWV0ZXJzKCku
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1pdCh0eXBlc1tpXS5nZXQo
KSwgKmZ1bmN0aW9uLT5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKSkgeworICAgICAgICBpZiAoIW1h
dGNoQW5kQ29tbWl0KHR5cGVzW2ldLmdldCgpLCAqZnVuY3Rpb24tPnBhcmFtZXRlcnMoKVtpXS0+
dHlwZSgpKSkgewogICAgICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbmZlclR5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMSW5mZXJUeXBlcy5jcHAKaW5kZXggMmZjYzZmMTM5ZGU4NGEzMmM0YzcwN2NhMDYw
YjliZTFiNDJmZDNlMC4uMTU4ZTIzYjQ3MmRlNDk5MzFlYjc4NDJjOTdiODRhYTIzZDA5NzBlNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZl
clR5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEluZmVyVHlwZXMuY3BwCkBAIC0yMjcsOSArMjI3LDkgQEAgYm9vbCBpbmZlclR5cGVzRm9yQ2Fs
bChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6
OnIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9z
c2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byBz
dWNjZXNzID0gYXJndW1lbnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKLSAg
ICAgICAgICAgIHJldHVybiBtYXRjaGVzKCpwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtp
XS50eXBlKCksIHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKCpwb3Nz
aWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLCB1bm5hbWVkVHlwZSk7CiAgICAg
ICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY2FuUmVzb2x2ZShwb3NzaWJsZUZ1bmN0aW9uLnBh
cmFtZXRlcnMoKVtpXS50eXBlKCktPnVuaWZ5Tm9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZlKHBvc3Np
YmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCktPnVuaWZ5Tm9kZSgpKTsKICAgICAg
ICAgfSkpOwogICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVSZXNvbHZlci5jcHAKaW5kZXggMDUzNTBlMGRjOTg1ZWNiMzkwZjU4NmYwYTM0ZDJhNmVj
ZmVkY2EzMi4uM2NiZWRkOWMyNTc4OGZlNWRlMDU2MTJmZjBkZDI2ZDRjODU0ZjdlMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFt
ZVJlc29sdmVyLmNwcApAQCAtMTk3LDkgKzE5NywxMCBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlz
aXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQogICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgPD0g
c2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBh
YmxlIHRvIGJlY29tZSBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWxzIHdpdGhvdXQgdXBkYXRpbmcg
YmFja3JlZmVyZW5jZXMiKTsKICAgICAgICAgICAgICAgICAgICAgTGV4ZXI6OlRva2VuIG9yaWdp
biA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBQZXJoYXBzIGRvIHRoaXMgd2l0aCB2YXJpYW50cyBvciBhIFJld3JpdGVyIGluc3RlYWQuCisg
ICAgICAgICAgICAgICAgICAgIHZvaWQqIGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247CiAgICAg
ICAgICAgICAgICAgICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsKICAgICAgICAg
ICAgICAgICAgICAgYXV0byBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwgPSBBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbDo6d3JhcChXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoYmFzZU5hbWUp
LCBXVEZNb3ZlKG1lbWJlck5hbWUpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24sICptZW1iZXIpOwot
ICAgICAgICAgICAgICAgICAgICBuZXcgKCZkb3RFeHByZXNzaW9uKSBBU1Q6OkVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbChXVEZNb3ZlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkpOworICAgICAg
ICAgICAgICAgICAgICBuZXcgKGxvY2F0aW9uKSBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bChXVEZNb3ZlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNldEVycm9yKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBh
cnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNl
ci5jcHAKaW5kZXggMzlkZDdhMmExYmFiMGE5N2IwOTM5OGU1MDdlNDg4NzE4N2U5YWQ2Yi4uYTk3
Nzg5NzkwMzA3NDY4Y2Y2ZjBmMzBiMTAwZDVmZjVlOTdhNmI0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApAQCAtMTA4Miwx
MyArMTA4MiwxMyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJzKCkgLT4gRXhwZWN0ZWQ8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucywgRXJyb3I+CiAgICAgYXV0byBmaXJzdFBhcmFtZXRl
ciA9IHBhcnNlUGFyYW1ldGVyKCk7CiAgICAgaWYgKCFmaXJzdFBhcmFtZXRlcikKICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0UGFyYW1ldGVyLmVycm9yKCkpOwotICAgIHBh
cmFtZXRlcnMuYXBwZW5kKFdURk1vdmUoKmZpcnN0UGFyYW1ldGVyKSk7CisgICAgcGFyYW1ldGVy
cy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUo
KmZpcnN0UGFyYW1ldGVyKSkpOwogCiAgICAgd2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpU
eXBlOjpDb21tYSkpIHsKICAgICAgICAgYXV0byBwYXJhbWV0ZXIgPSBwYXJzZVBhcmFtZXRlcigp
OwogICAgICAgICBpZiAoIXBhcmFtZXRlcikKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihwYXJhbWV0ZXIuZXJyb3IoKSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdU
Rk1vdmUoKnBhcmFtZXRlcikpOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqcGFyYW1ldGVyKSkpOwogICAg
IH0KIAogICAgIGF1dG8gcmlnaHRQYXJlbnRoZXNpcyA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tl
bjo6VHlwZTo6UmlnaHRQYXJlbnRoZXNpcyk7CkBAIC0xNTY3LDE0ICsxNTY3LDE0IEBAIGF1dG8g
UGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uc1N0CiAgICAgaWYgKCFmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pCiAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24u
ZXJyb3IoKSk7CiAKLSAgICBWZWN0b3I8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiByZXN1bHQ7
Ci0gICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pKTsK
KyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+IHJlc3VsdDsK
KyAgICByZXN1bHQuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
PihXVEZNb3ZlKCpmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pKSk7CiAKICAgICB3aGlsZSAodHJ5
VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAgICBhdXRvIHZhcmlhYmxl
RGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKCp0eXBlKS0+Y2xvbmUoKSk7
CiAgICAgICAgIGlmICghdmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPih2YXJpYWJsZURlY2xhcmF0aW9uLmVycm9yKCkpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKFdURk1vdmUoKnZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92
ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpKTsKICAgICB9CiAKICAgICByZXR1cm4gQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHJlc3Vs
dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHAKaW5kZXggOWExMDM1YTRiOGNhZDMzYTIxZTY3MGYyMjAwNTkxY2MxNDhkNmIx
My4uODY5YjdjMzhjZGI0YTlkY2MxYjI5NDE5NjRiZTlkNjgxYWQ4ZTA4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJXSExTTFBhcnNlci5oIgogI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldI
TFNMUHJvcGVydHlSZXNvbHZlci5oIgogI2luY2x1ZGUgIldITFNMUmVjdXJzaW9uQ2hlY2tlci5o
IgogI2luY2x1ZGUgIldITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCIKICNpbmNsdWRlICJXSExT
TFNlbWFudGljTWF0Y2hlci5oIgpAQCAtODIsNyArODMsNyBAQCBzdGF0aWMgT3B0aW9uYWw8UHJv
Z3JhbT4gcHJlcGFyZVNoYXJlZChTdHJpbmcmIHdobHNsU291cmNlKQogICAgIGlmICghY2hlY2so
cHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY2hlY2tMaXRlcmFs
VHlwZXMocHJvZ3JhbSk7Ci0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTU3ODggUmVzb2x2ZSBwcm9wZXJ0aWVzIGhlcmUKKyAgICByZXNvbHZl
UHJvcGVydGllcyhwcm9ncmFtKTsKICAgICBmaW5kSGlnaFpvbWJpZXMocHJvZ3JhbSk7CiAgICAg
aWYgKCFjaGVja1N0YXRlbWVudEJlaGF2aW9yKHByb2dyYW0pKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RlYWEwMjc1
ZmQ5ZjcwYThjMTQ3OWIwY2QxNTJjODc0ODA0YjQ1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAK
QEAgLTAsMCArMSw3NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisj
aW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ2Fs
bEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1
ZGUgIldITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVy
RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJX
SExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxl
RGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCisjaW5j
bHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IFdITFNMIHsKKworY2xhc3MgUHJvcGVydHlSZXNvbHZlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1
YmxpYzoKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKSBvdmVycmlkZTsK
KworICAgIGJvb2wgc2ltcGxpZnlSaWdodFZhbHVlKEFTVDo6RG90RXhwcmVzc2lvbiYpOworICAg
IGJvb2wgc2ltcGxpZnlBYnN0cmFjdExlZnRWYWx1ZShBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9u
JiwgQVNUOjpEb3RFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiByaWdo
dCk7CisgICAgdm9pZCBzaW1wbGlmeUxlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mKTsKKworICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgbV92YXJpYWJsZURlY2xhcmF0aW9uczsKK307CisK
K3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHBy
ZXNzaW9uKQoreworICAgIC8vIFVubGVzcyB3ZSdyZSBpbnNpZGUgYW4gQXNzaWdubWVudEV4cHJl
c3Npb24gb3IgYSBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLCB3ZSdyZSBhIHJpZ2h0IHZhbHVl
LgorICAgIGlmICghc2ltcGxpZnlSaWdodFZhbHVlKGRvdEV4cHJlc3Npb24pKQorICAgICAgICBz
ZXRFcnJvcigpOworfQorCit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgVmlzaXRvcjo6dmlzaXQo
ZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICBpZiAoIW1fdmFyaWFibGVEZWNsYXJhdGlvbnMuaXNF
bXB0eSgpKQorICAgICAgICBmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKS5zdGF0ZW1lbnRzKCku
aW5zZXJ0KDAsIG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dD4oTGV4ZXI6OlRva2VuKG1fdmFyaWFibGVEZWNsYXJhdGlvbnNbMF0tPm9yaWdpbigpKSwgV1RG
TW92ZShtX3ZhcmlhYmxlRGVjbGFyYXRpb25zKSkpOworfQorCitzdGF0aWMgT3B0aW9uYWw8VW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IHNldHRlckNhbGwoQVNUOjpEb3RFeHByZXNzaW9uJiBk
b3RFeHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIG5ld1ZhbHVlLCBjb25z
dCBzdGQ6OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBsZWZ0VmFsdWVG
YWN0b3J5LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+
JiBwb2ludGVyVG9MZWZ0VmFsdWVGYWN0b3J5KQoreworICAgIGlmIChkb3RFeHByZXNzaW9uLmFu
ZEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgLy8gKm9wZXJhdG9yJi5mb28oJnYpID0gbmV3VmFsdWUK
KyAgICAgICAgaWYgKCFkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQocG9pbnRlclRvTGVmdFZhbHVlRmFjdG9yeSgpKTsKKyAgICAgICAgYXV0byBjYWxsRXhwcmVz
c2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRv
dEV4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJpbmcoZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5j
dGlvbigpLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgICAgICBjYWxsRXhwcmVz
c2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUoKS5j
bG9uZSgpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RF
eHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCkpOworCisgICAgICAgIGF1dG8gZGVyZWZlcmVu
Y2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4o
TGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGNhbGxFeHByZXNz
aW9uKSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPihkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUo
KSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9u
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpU
aHJlYWQgfSk7CisKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiksIFdURk1vdmUobmV3
VmFsdWUpKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8
QVNUOjpQb2ludGVyVHlwZT4oZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpLT50eXBl
KCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9u
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgcmV0dXJu
IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24p
KTsKKyAgICB9CisKKyAgICAvLyB2ID0gb3BlcmF0b3IuZm9vPSh2LCBuZXdWYWx1ZSkKKyAgICBB
U1NFUlQoZG90RXhwcmVzc2lvbi5zZXRGdW5jdGlvbigpKTsKKworICAgIFZlY3RvcjxVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQobGVm
dFZhbHVlRmFjdG9yeSgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUobmV3VmFsdWUp
KTsKKyAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHBy
ZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhkb3RF
eHByZXNzaW9uLnNldEZ1bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7Cisg
ICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi5zZXRGdW5jdGlvbigpLT50
eXBlKCkuY2xvbmUoKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6UmlnaHRWYWx1ZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmRvdEV4
cHJlc3Npb24uc2V0RnVuY3Rpb24oKSk7CisKKyAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9u
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4o
ZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIGxlZnRWYWx1ZUZhY3RvcnkoKSwgV1RGTW92ZShjYWxs
RXhwcmVzc2lvbikpOworICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJl
c3Npb24uc2V0RnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgIGFzc2lnbm1lbnRFeHBy
ZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICByZXR1
cm4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lv
bikpOworfQorCitzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGdl
dHRlckNhbGwoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uLCBjb25zdCBzdGQ6OmZ1
bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBsZWZ0VmFsdWVGYWN0b3J5LCBj
b25zdCBzdGQ6OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBwb2ludGVy
VG9MZWZ0VmFsdWVGYWN0b3J5KQoreworICAgIGlmIChkb3RFeHByZXNzaW9uLmFuZEZ1bmN0aW9u
KCkpIHsKKyAgICAgICAgLy8gKm9wZXJhdG9yJi5mb28oJnYpCisgICAgICAgIGlmICghZG90RXhw
cmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4gYXJndW1lbnRzOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHBvaW50ZXJUb0xlZnRWYWx1
ZUZhY3RvcnkoKSk7CisgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigp
KSwgU3RyaW5nKGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RG
TW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhw
cmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGNh
bGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAg
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90RXhwcmVzc2lvbi50aHJlYWRBbmRG
dW5jdGlvbigpKTsKKworICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworICAgICAgICBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oZG90
RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xv
bmUoKSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworCisgICAgICAg
IHJldHVybiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGRlcmVmZXJlbmNlRXhw
cmVzc2lvbikpOworICAgIH0KKworICAgIC8vIG9wZXJhdG9yLmZvbyh2KQorICAgIEFTU0VSVChk
b3RFeHByZXNzaW9uLmdldEZ1bmN0aW9uKCkpOworICAgIAorICAgIFZlY3RvcjxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQobGVmdFZh
bHVlRmFjdG9yeSgpKTsKKyAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSks
IFN0cmluZyhkb3RFeHByZXNzaW9uLmdldEZ1bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJn
dW1lbnRzKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi5nZXRG
dW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVu
Y3Rpb24oKmRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKSk7CisKKyAgICByZXR1cm4gVW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4oV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworfQorCitzdHJ1
Y3QgTW9kaWZ5UmVzdWx0IHsKKyAgICBBU1Q6OkV4cHJlc3Npb24mIGlubmVyTGVmdFZhbHVlOwor
ICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisgICAg
VmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+PiB2YXJpYWJsZURlY2xh
cmF0aW9uczsKK307CitzdHJ1Y3QgTW9kaWZpY2F0aW9uUmVzdWx0IHsKKyAgICBWZWN0b3I8VW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOworICAgIFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+IHJlc3VsdDsKK307CitzdGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBt
b2RpZnkoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uLCBzdGQ6OmZ1bmN0aW9uPE9w
dGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4+JiYpPiBtb2RpZmljYXRpb24pCit7CisgICAgLy8gQ29uc2lkZXIgYS5iLmMuZCsrOwor
ICAgIC8vIFRoaXMgd291bGQgZ2V0IHRyYW5zZm9ybWVkIGludG86CisgICAgLy8KKyAgICAvLyBT
dGVwIDE6CisgICAgLy8gcCA9ICZhOworICAgIC8vCisgICAgLy8gU3RlcCAyOgorICAgIC8vIHEg
PSBvcGVyYXRvci5iKCpwKTsKKyAgICAvLyByID0gb3BlcmF0b3IuYyhxKTsKKyAgICAvLworICAg
IC8vIFN0ZXAgMzoKKyAgICAvLyBvbGRWYWx1ZSA9IG9wZXJhdG9yLmQocik7CisgICAgLy8gbmV3
VmFsdWUgPSAuLi47CisgICAgLy8KKyAgICAvLyBTdGVwIDQ6CisgICAgLy8gciA9IG9wZXJhdG9y
LmQ9KHIsIG5ld1ZhbHVlKTsKKyAgICAvLyBxID0gb3BlcmF0b3IuYz0ocSwgcik7CisgICAgLy8K
KyAgICAvLyBTdGVwIDQ6CisgICAgLy8gKnAgPSBvcGVyYXRvci5iPSgqcCwgcSk7CisKKyAgICAv
LyBJZiB0aGUgZXhwcmVzc2lvbiBpcyBhLmIuYy5kID0gZSwgU3RlcCAzIGRpc2FwcGVhcnMgYW5k
ICJuZXdWYWx1ZSIgaW4gc3RlcCA0IGJlY29tZXMgImUiLgorICAgIAorCisgICAgLy8gRmluZCB0
aGUgIi5iIiAiLmMiIGFuZCAiLmQiIGV4cHJlc3Npb25zLgorICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6RG90RXhwcmVzc2lvbj4+IGNoYWluOworICAgIEFTVDo6RG90RXhw
cmVzc2lvbiogaXRlcmF0b3IgPSAmZG90RXhwcmVzc2lvbjsKKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICBjaGFpbi5hcHBlbmQoKml0ZXJhdG9yKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9y
LT5iYXNlKCkudHlwZUFubm90YXRpb24oKSk7CisgICAgICAgIGlmIChpdGVyYXRvci0+YmFzZSgp
LnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBBU1NFUlQoIWl0ZXJhdG9yLT5iYXNlKCkudHlwZUFubm90YXRpb24oKS0+aXNS
aWdodFZhbHVlKCkpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpEb3RFeHByZXNzaW9uPihpdGVy
YXRvci0+YmFzZSgpKSk7IC8vIEZJWE1FOiBNYWtlIHRoaXMgd29yayB3aXRoIGluZGV4IGV4cHJl
c3Npb25zCisgICAgICAgIGl0ZXJhdG9yID0gJmRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4o
aXRlcmF0b3ItPmJhc2UoKSk7CisgICAgfQorICAgIGF1dG8gbGVmdEV4cHJlc3Npb24gPSBpdGVy
YXRvci0+dGFrZUJhc2UoKTsKKyAgICBBU1Q6OkV4cHJlc3Npb24mIGlubmVyTGVmdEV4cHJlc3Np
b24gPSBsZWZ0RXhwcmVzc2lvbjsKKworICAgIC8vIENyZWF0ZSAicCIgdmFyaWFibGUuCisgICAg
QVNTRVJUKGxlZnRFeHByZXNzaW9uLT5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byBwb2ludGVy
VmFyaWFibGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6
OlRva2VuKGxlZnRFeHByZXNzaW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4obWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihM
ZXhlcjo6VG9rZW4obGVmdEV4cHJlc3Npb24tPm9yaWdpbigpKSwgKmxlZnRFeHByZXNzaW9uLT50
eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCksIGxlZnRFeHByZXNzaW9uLT5yZXNv
bHZlZFR5cGUoKS0+Y2xvbmUoKSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOworCisgICAgLy8gQ3JlYXRlICJxIiBhbmQgInIiIHZhcmlhYmxlcy4KKyAgICBWZWN0b3I8
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+IGludGVybWVkaWF0ZVZhcmlhYmxl
czsKKyAgICBpbnRlcm1lZGlhdGVWYXJpYWJsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjaGFp
bi5zaXplKCkgLSAxKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGNoYWluLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGF1dG8mIGRvdEV4cHJlc3Npb24gPSBzdGF0aWNfY2FzdDxBU1Q6OkRv
dEV4cHJlc3Npb24mPihjaGFpbltpXSk7CisgICAgICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLnJl
c29sdmVkVHlwZSgpKTsKKyAgICAgICAgaW50ZXJtZWRpYXRlVmFyaWFibGVzLnVuY2hlY2tlZEFw
cGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2Vu
KGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZG90RXhwcmVzc2lv
bi5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpu
dWxsb3B0KSk7CisgICAgfQorCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
PiBleHByZXNzaW9uczsKKworICAgIC8vIFN0ZXAgMToKKyAgICB7CisgICAgICAgIGF1dG8gbWFr
ZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbj4oTGV4ZXI6OlRva2VuKGlubmVyTGVmdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3Zl
KGxlZnRFeHByZXNzaW9uKSk7CisgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlw
ZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihpbm5lckxlZnRF
eHByZXNzaW9uLm9yaWdpbigpKSwgKmlubmVyTGVmdEV4cHJlc3Npb24udHlwZUFubm90YXRpb24o
KS0+bGVmdEFkZHJlc3NTcGFjZSgpLCBpbm5lckxlZnRFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgp
LT5jbG9uZSgpKSk7CisgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVu
Y2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgIEFTU0VSVChwb2ludGVy
VmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBv
aW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVu
Y2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6
OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgYXV0byBhc3Np
Z25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lv
bj4oTGV4ZXI6OlRva2VuKGlubmVyTGVmdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZh
cmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAg
ICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCkt
PmNsb25lKCkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZN
b3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgfQorCisgICAgLy8gU3RlcCAyOgorICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogcHJldmlvdXMgPSBudWxscHRyOworICAgIGF1dG8g
cHJldmlvdXNMZWZ0VmFsdWUgPSBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7
CisgICAgICAgIGlmIChwcmV2aW91cykgeworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVy
ZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZTo6d3JhcCgqcHJldmlvdXMpKTsKKyAgICAgICAgICAgIEFTU0VSVChwcmV2aW91
cy0+dHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHByZXZp
b3VzLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisgICAgICAgICAgICByZXR1cm4gdmFyaWFi
bGVSZWZlcmVuY2U7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVy
ZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgQVNTRVJUKHBvaW50
ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUo
cG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVy
ZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICBhdXRvIGRl
cmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJl
c3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJp
YWJsZVJlZmVyZW5jZSkpOworICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkp
OworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25l
KCkpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJs
ZS0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKKyAgICAgICAgcmV0dXJuIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbjsKKyAgICB9OworICAgIGF1dG8gcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUg
PSBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgIGlmIChwcmV2
aW91cykgeworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCgq
cHJldmlvdXMpKTsKKyAgICAgICAgICAgIEFTU0VSVChwcmV2aW91cy0+dHlwZSgpKTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHByZXZpb3VzLT50eXBlKCktPmNsb25l
KCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElz
IHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRv
dEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSk7CisgICAg
ICAgICAgICBBU1NFUlQocHJldmlvdXMtPnR5cGUoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRl
ckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhl
cjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQsIHByZXZpb3VzLT50eXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVy
RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VQb2ludGVyRXhwcmVzc2lvbjsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZl
cmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7Cisg
ICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAg
ICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVl
IHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/
CisgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICB9OworICAgIGZvciAoc2l6
ZV90IGkgPSBjaGFpbi5zaXplKCkgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgIEFTVDo6RG90
RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbiA9IGNoYWluW2ldOworICAgICAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBpbnRlcm1lZGlhdGVWYXJpYWJs
ZXNbaSAtIDFdOworCisgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBnZXR0ZXJDYWxsKGRv
dEV4cHJlc3Npb24sIHByZXZpb3VzTGVmdFZhbHVlLCBwb2ludGVyVG9QcmV2aW91c0xlZnRWYWx1
ZSk7CisKKyAgICAgICAgaWYgKCFjYWxsRXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0
aW9uLnR5cGUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHZhcmlhYmxl
RGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2Ut
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRo
cmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgYXV0byBhc3NpZ25t
ZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4o
TGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVm
ZXJlbmNlKSwgV1RGTW92ZSgqY2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgYXNzaWdubWVudEV4
cHJlc3Npb24tPnNldFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOwor
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworCisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1l
bnRFeHByZXNzaW9uKSk7CisgICAgICAgIAorICAgICAgICBwcmV2aW91cyA9ICZ2YXJpYWJsZURl
Y2xhcmF0aW9uOworICAgIH0KKyAgICBhdXRvIGxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbiA9IGdl
dHRlckNhbGwoY2hhaW5bMF0sIHByZXZpb3VzTGVmdFZhbHVlLCBwb2ludGVyVG9QcmV2aW91c0xl
ZnRWYWx1ZSk7CisKKyAgICAvLyBNb2RpZmljYXRpb25SZXN1bHQoVW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4mJikKKyAgICAvLyBTdGVwIDM6CisgICAgYXV0byBtb2RpZmljYXRpb25SZXN1bHQg
PSBtb2RpZmljYXRpb24oV1RGTW92ZShsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24pKTsKKyAgICBp
ZiAoIW1vZGlmaWNhdGlvblJlc3VsdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvblJlc3VsdC0+ZXhwcmVzc2lvbnMu
c2l6ZSgpOyArK2kpCisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKG1vZGlmaWNh
dGlvblJlc3VsdC0+ZXhwcmVzc2lvbnNbaV0pKTsKKworICAgIC8vIFN0ZXAgNDoKKyAgICBVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPiByaWdodFZhbHVlID0gV1RGTW92ZShtb2RpZmljYXRpb25S
ZXN1bHQtPnJlc3VsdCk7CisgICAgQVNTRVJUKHJpZ2h0VmFsdWUtPnJlc29sdmVkVHlwZSgpKTsK
KyAgICBhdXRvIGV4cHJlc3Npb25UeXBlID0gcmlnaHRWYWx1ZS0+cmVzb2x2ZWRUeXBlKCktPmNs
b25lKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFpbi5zaXplKCkgLSAxOyArK2kp
IHsKKyAgICAgICAgQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uID0gY2hhaW5baV07
CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbiA9
IGludGVybWVkaWF0ZVZhcmlhYmxlc1tpXTsKKworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHBy
ZXNzaW9uID0gc2V0dGVyQ2FsbChkb3RFeHByZXNzaW9uLCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBb
Jl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgICAgICBhdXRvIHZh
cmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAg
ICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xv
bmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTog
SXMgdGhpcyByaWdodD8KKyAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAg
ICAgICAgfSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICAg
ICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJl
ZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAg
ICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50
eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsg
Ly8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJF
eHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4
ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJl
bmNlKSk7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOwor
ICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8
QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBB
U1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCB2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xv
bmUoKSkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVBvaW50ZXJF
eHByZXNzaW9uOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoIWFzc2lnbm1lbnRFeHByZXNz
aW9uKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBleHByZXNz
aW9ucy5hcHBlbmQoV1RGTW92ZSgqYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKworICAgICAgICBy
aWdodFZhbHVlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZh
cmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNT
RVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgcmlnaHRWYWx1ZS0+c2V0
VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJpZ2h0
VmFsdWUtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisgICAgfQorCisgICAgLy8g
U3RlcCA1OgorICAgIHsKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IHNldHRl
ckNhbGwoY2hhaW5bY2hhaW4uc2l6ZSgpIC0gMV0sIFdURk1vdmUocmlnaHRWYWx1ZSksIFsmXSgp
IC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6
VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgICAgICBB
U1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZl
cmVuY2UtPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAg
ICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVl
IHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/
CisKKyAgICAgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSk7CisgICAgICAgICAgICBBU1NF
UlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFi
bGUtPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVmZXJl
bmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpLmFkZHJlc3NTcGFj
ZSgpIH0pOworICAgICAgICAgICAgcmV0dXJuIGRlcmVmZXJlbmNlRXhwcmVzc2lvbjsKKyAgICAg
ICAgfSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICAgICAg
YXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUo
KSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMg
dGhpcyByaWdodD8KKyAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgaWYgKCFhc3NpZ25tZW50RXhwcmVzc2lvbikKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1v
dmUoKmFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgfQorCisgICAgVmVjdG9yPFVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+PiB2YXJpYWJsZURlY2xhcmF0aW9uczsKKyAgICB2
YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShwb2ludGVyVmFyaWFibGUpKTsKKyAg
ICBmb3IgKGF1dG8mIGludGVybWVkaWF0ZVZhcmlhYmxlIDogaW50ZXJtZWRpYXRlVmFyaWFibGVz
KQorICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnRlcm1lZGlh
dGVWYXJpYWJsZSkpOworCisgICAgcmV0dXJuIHt7IGlubmVyTGVmdEV4cHJlc3Npb24sIFdURk1v
dmUoZXhwcmVzc2lvbnMpLCBXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb25zKSB9fTsKK30KKwor
dm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBh
c3NpZ25tZW50RXhwcmVzc2lvbikKK3sKKyAgICBBU1NFUlQoYXNzaWdubWVudEV4cHJlc3Npb24u
bGVmdCgpLnR5cGVBbm5vdGF0aW9uKCkpOworICAgIGlmIChhc3NpZ25tZW50RXhwcmVzc2lvbi5s
ZWZ0KCkudHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgIHNp
bXBsaWZ5TGVmdFZhbHVlKGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoIWFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKS50
eXBlQW5ub3RhdGlvbigpLT5pc1JpZ2h0VmFsdWUoKSk7CisgICAgaWYgKCFpczxBU1Q6OkRvdEV4
cHJlc3Npb24+KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSkpIHsKKyAgICAgICAgc2V0RXJy
b3IoKTsgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIHdpdGggaW5kZXggZXhwcmVzc2lvbnMuCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoYXNzaWdubWVudEV4cHJlc3Npb24u
cmlnaHQoKS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byB0eXBlID0gYXNzaWdubWVudEV4cHJl
c3Npb24ucmlnaHQoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKworICAgIGF1dG8gbW9kaWZ5
UmVzdWx0ID0gbW9kaWZ5KGRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4oYXNzaWdubWVudEV4
cHJlc3Npb24ubGVmdCgpKSwgWyZdKE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
PiYmKSAtPiBPcHRpb25hbDxNb2RpZmljYXRpb25SZXN1bHQ+IHsKKyAgICAgICAgcmV0dXJuIHt7
IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4oKSwgYXNzaWdubWVudEV4cHJlc3Np
b24udGFrZVJpZ2h0KCkgfX07CisgICAgfSk7CisKKyAgICBpZiAoIW1vZGlmeVJlc3VsdCkgewor
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpbXBsaWZ5
TGVmdFZhbHVlKG1vZGlmeVJlc3VsdC0+aW5uZXJMZWZ0VmFsdWUpOworCisgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoQVNUOjpDb21tYUV4cHJlc3Npb24pIDw9IHNpemVvZihBU1Q6OkFzc2lnbm1l
bnRFeHByZXNzaW9uKSwgIkFzc2lnbm1lbnQgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRv
IGJlY29tZSBjb21tYSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2Vz
Iik7CisgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGFzc2lnbm1lbnRFeHByZXNzaW9uLm9yaWdp
bigpOworICAgIHZvaWQqIGxvY2F0aW9uID0gJmFzc2lnbm1lbnRFeHByZXNzaW9uOworICAgIGFz
c2lnbm1lbnRFeHByZXNzaW9uLn5Bc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgIGF1dG8qIGNv
bW1hRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q29tbWFFeHByZXNzaW9uKFdURk1v
dmUob3JpZ2luKSwgV1RGTW92ZShtb2RpZnlSZXN1bHQtPmV4cHJlc3Npb25zKSk7CisgICAgY29t
bWFFeHByZXNzaW9uLT5zZXRUeXBlKFdURk1vdmUodHlwZSkpOworICAgIGNvbW1hRXhwcmVzc2lv
bi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgZm9yIChhdXRv
JiB2YXJpYWJsZURlY2xhcmF0aW9uIDogbW9kaWZ5UmVzdWx0LT52YXJpYWJsZURlY2xhcmF0aW9u
cykKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJs
ZURlY2xhcmF0aW9uKSk7Cit9CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQorewor
ICAgIEFTU0VSVChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnR5cGVBbm5v
dGF0aW9uKCkpOworICAgIGlmIChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgp
LnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAgICAvLyBDb25z
aWRlciBhKys7CisgICAgICAgIC8vIFRoaXMgd291bGQgZ2V0IHRyYW5zZm9ybWVkIGludG86Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIHAgPSAmYTsKKyAgICAgICAgLy8gb2xkVmFsdWUgPSAqcDsK
KyAgICAgICAgLy8gbmV3VmFsdWUgPSAuLi47CisgICAgICAgIC8vICpwID0gbmV3VmFsdWU7CisK
KyAgICAgICAgQVNTRVJUKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVz
b2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIGJhc2VUeXBlID0gcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICAgICAgYXV0
byBwb2ludGVyVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRv
a2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkpLCAqcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0
QWRkcmVzc1NwYWNlKCksIGJhc2VUeXBlLT5jbG9uZSgpKTsKKworICAgICAgICBhdXRvIHBvaW50
ZXJWYXJpYWJsZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhl
cjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4ocG9pbnRlclR5
cGUtPmNsb25lKCkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworCisg
ICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byBvcmlnaW4gPSBMZXhlcjo6VG9rZW4ocmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5vcmlnaW4oKSk7CisgICAgICAgICAgICBh
dXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCByZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLnRha2VMZWZ0VmFsdWUoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24t
PnNldFR5cGUocG9pbnRlclR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJF
eHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAg
ICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxl
KSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVHlwZS0+
Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhN
RTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oV1RGTW92ZShvcmln
aW4pLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZShtYWtlUG9pbnRlckV4cHJl
c3Npb24pKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHBvaW50
ZXJUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Np
b25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0
VHlwZShwb2ludGVyVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZTEtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6
OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8g
ZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhw
cmVzc2lvbj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkp
LCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMSkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VF
eHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwor
CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMiA9IHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24ub2xkVmFyaWFibGVSZWZlcmVuY2UoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlMi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJs
ZVJlZmVyZW5jZTItPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRy
ZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAg
ICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9y
aWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTIpLCBXVEZNb3ZlKGRlcmVmZXJlbmNl
RXhwcmVzc2lvbikpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUo
YmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVz
c2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQor
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSByZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCk7CisgICAgICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAg
ICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBB
U1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKwor
ICAgICAgICAgICAgYXV0byBuZXdWYWx1ZUV4cHJlc3Npb24gPSByZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLnRha2VOZXdWYWx1ZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdW
YWx1ZUV4cHJlc3Npb24pOyAvLyBGSVhNRTogUmVsYXggdGhpcyBjb25zdHJhaW50LgorICAgICAg
ICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
b3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgqbmV3VmFsdWVF
eHByZXNzaW9uKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShi
YXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBleHByZXNz
aW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6Ondy
YXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNl
dFR5cGUocG9pbnRlclR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVu
Y2UxLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRv
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigp
KSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTEpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsK
KworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTIgPSByZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCk7CisgICAgICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZTItPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAg
ICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2ln
bm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5v
cmlnaW4oKSksIFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSwgV1RGTW92ZSh2YXJpYWJs
ZVJlZmVyZW5jZTIpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBl
KGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGV4cHJl
c3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIH0K
KworICAgICAgICBhdXRvIHJlc3VsdEV4cHJlc3Npb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLnRha2VSZXN1bHRFeHByZXNzaW9uKCk7CisgICAgICAgIEFTU0VSVChyZXN1bHRFeHByZXNz
aW9uKTsgLy8gRklYTUU6IEJlIHJlc2lsaWVudCB0byB0aGlzIGJlaW5nIG51bGwuCisgICAgICAg
IEFTU0VSVCgoKnJlc3VsdEV4cHJlc3Npb24pLT5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1
dG8gdHlwZSA9ICgqcmVzdWx0RXhwcmVzc2lvbiktPnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpOwor
ICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZSgqcmVzdWx0RXhwcmVzc2lvbikpOwor
CisgICAgICAgIFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IG9sZFZhcmlhYmxl
RGVjbGFyYXRpb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VPbGRWYWx1ZSgpOwor
ICAgICAgICBVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBuZXdWYXJpYWJsZURl
Y2xhcmF0aW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTmV3VmFsdWUoKTsKKwor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkNvbW1hRXhwcmVzc2lvbikgPD0gc2l6
ZW9mKEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiksICJSZWFkTW9kaWZ5V3JpdGUgZXhw
cmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBjb21tYSBleHByZXNzaW9ucyB3aXRo
b3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgICAgIExleGVyOjpUb2tlbiBvcmln
aW4gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigpOworICAgICAgICB2b2lkKiBs
b2NhdGlvbiA9ICZyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOworICAgICAgICByZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLn5SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCk7CisgICAgICAgIGF1
dG8qIGNvbW1hRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q29tbWFFeHByZXNzaW9u
KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShleHByZXNzaW9ucykpOworICAgICAgICBjb21tYUV4
cHJlc3Npb24tPnNldFR5cGUoV1RGTW92ZSh0eXBlKSk7CisgICAgICAgIGNvbW1hRXhwcmVzc2lv
bi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgIG1fdmFy
aWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUocG9pbnRlclZhcmlhYmxlKSk7CisgICAg
ICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUob2xkVmFyaWFibGVEZWNs
YXJhdGlvbikpOworICAgICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3Zl
KG5ld1ZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVCghcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5ub3Rh
dGlvbigpLT5pc1JpZ2h0VmFsdWUoKSk7CisgICAgaWYgKCFpczxBU1Q6OkRvdEV4cHJlc3Npb24+
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpKSB7CisgICAgICAgIHNldEVy
cm9yKCk7IC8vIEZJWE1FOiBNYWtlIHRoaXMgd29yayB3aXRoIGluZGV4IGV4cHJlc3Npb25zLgor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGF1dG8gbW9kaWZ5UmVzdWx0ID0gbW9kaWZ5KGRv
d25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0
VmFsdWUoKSksIFsmXShPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4mJiBsYXN0
R2V0dGVyQ2FsbEV4cHJlc3Npb24pIC0+IE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4gewor
ICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOwor
ICAgICAgICBpZiAoIWxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJl
ZmVyZW5jZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFyaWFibGVSZWZlcmVuY2Uo
KTsKKyAgICAgICAgICAgIEFTU0VSVChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1
ZSgpLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRU
eXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkt
PmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklY
TUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Np
b24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tl
bihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKSwgV1RGTW92
ZSh2YXJpYWJsZVJlZmVyZW5jZSksIFdURk1vdmUoKmxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikp
OworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAg
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworCisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3Np
Z25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFy
aWFibGVSZWZlcmVuY2UoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCku
cmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2Ut
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRo
cmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gbmV3
VmFsdWVFeHByZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTmV3VmFsdWVF
eHByZXNzaW9uKCk7CisgICAgICAgICAgICBBU1NFUlQobmV3VmFsdWVFeHByZXNzaW9uKTsgLy8g
RklYTUU6IFJlbGF4IHRoaXMgY29uc3RyYWludAorICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50
RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4
ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkp
LCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgqbmV3VmFsdWVFeHByZXNzaW9u
KSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAg
ICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFz
c2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ge3sgV1RG
TW92ZShleHByZXNzaW9ucyksIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVS
ZWZlcmVuY2UoKSB9fTsKKyAgICB9KTsKKworICAgIGlmICghbW9kaWZ5UmVzdWx0KSB7CisgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2ltcGxpZnlMZWZ0
VmFsdWUobW9kaWZ5UmVzdWx0LT5pbm5lckxlZnRWYWx1ZSk7CisKKyAgICBhdXRvIHJlc3VsdEV4
cHJlc3Npb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VSZXN1bHRFeHByZXNzaW9u
KCk7CisgICAgQVNTRVJUKHJlc3VsdEV4cHJlc3Npb24pOyAvLyBGSVhNRTogQmUgcmVzaWxpZW50
IHRvIHRoaXMgYmVpbmcgbnVsbC4KKyAgICBBU1NFUlQoKCpyZXN1bHRFeHByZXNzaW9uKS0+cmVz
b2x2ZWRUeXBlKCkpOworICAgIGF1dG8gdHlwZSA9ICgqcmVzdWx0RXhwcmVzc2lvbiktPnJlc29s
dmVkVHlwZSgpLT5jbG9uZSgpOworICAgIG1vZGlmeVJlc3VsdC0+ZXhwcmVzc2lvbnMuYXBwZW5k
KFdURk1vdmUoKnJlc3VsdEV4cHJlc3Npb24pKTsKKworICAgIFVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+IG9sZFZhcmlhYmxlRGVjbGFyYXRpb24gPSByZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLnRha2VPbGRWYWx1ZSgpOworICAgIFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+IG5ld1ZhcmlhYmxlRGVjbGFyYXRpb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLnRha2VOZXdWYWx1ZSgpOworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpDb21t
YUV4cHJlc3Npb24pIDw9IHNpemVvZihBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pLCAi
UmVhZE1vZGlmeVdyaXRlIGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgY29t
bWEgZXhwcmVzc2lvbnMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgIExl
eGVyOjpUb2tlbiBvcmlnaW4gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigpOwor
ICAgIHZvaWQqIGxvY2F0aW9uID0gJnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb247CisgICAgcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5+UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbigpOworICAg
IGF1dG8qIGNvbW1hRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q29tbWFFeHByZXNz
aW9uKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShtb2RpZnlSZXN1bHQtPmV4cHJlc3Npb25zKSk7
CisgICAgY29tbWFFeHByZXNzaW9uLT5zZXRUeXBlKFdURk1vdmUodHlwZSkpOworICAgIGNvbW1h
RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAg
Zm9yIChhdXRvJiB2YXJpYWJsZURlY2xhcmF0aW9uIDogbW9kaWZ5UmVzdWx0LT52YXJpYWJsZURl
Y2xhcmF0aW9ucykKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92
ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBl
bmQoV1RGTW92ZShvbGRWYXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgbV92YXJpYWJsZURlY2xh
cmF0aW9ucy5hcHBlbmQoV1RGTW92ZShuZXdWYXJpYWJsZURlY2xhcmF0aW9uKSk7Cit9CisKK2Jv
b2wgUHJvcGVydHlSZXNvbHZlcjo6c2ltcGxpZnlSaWdodFZhbHVlKEFTVDo6RG90RXhwcmVzc2lv
biYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVz
c2lvbi5vcmlnaW4oKTsKKworICAgIGlmIChhdXRvKiBhbmRGdW5jdGlvbiA9IGRvdEV4cHJlc3Np
b24uYW5kRnVuY3Rpb24oKSkgeworICAgICAgICBhdXRvJiBiYXNlID0gZG90RXhwcmVzc2lvbi5i
YXNlKCk7CisgICAgICAgIEFTU0VSVChiYXNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgQVNT
RVJUKGJhc2UudHlwZUFubm90YXRpb24oKSk7CisgICAgICAgIGlmIChhdXRvIGxlZnRBZGRyZXNz
U3BhY2UgPSBiYXNlLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAg
ICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgZG90RXhwcmVzc2lv
bi50YWtlQmFzZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlw
ZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4pLCAq
bGVmdEFkZHJlc3NTcGFjZSwgYmFzZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSkpOworICAgICAg
ICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0
VmFsdWUoKSk7CisKKyAgICAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4gYXJndW1lbnRzOworICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKG1ha2VQ
b2ludGVyRXhwcmVzc2lvbikpOworICAgICAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFN0
cmluZyhhbmRGdW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAg
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGFuZEZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKSk7
CisgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCphbmRG
dW5jdGlvbik7CisKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RGVyZWZl
cmVuY2VFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHBy
ZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGRlcmVmZXJlbmNlIGV4cHJlc3Npb25z
IHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgICAgIHZvaWQqIGxv
Y2F0aW9uID0gJmRvdEV4cHJlc3Npb247CisgICAgICAgICAgICBkb3RFeHByZXNzaW9uLn5Eb3RF
eHByZXNzaW9uKCk7CisgICAgICAgICAgICBhdXRvKiBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBu
ZXcgKGxvY2F0aW9uKSBBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiks
IFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVz
c2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlw
ZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBoYXZlIGFu
IGFuZGVyLCBidXQgbm8gbGVmdCB2YWx1ZSB0byBjYWxsIGl0IG9uLiBMZXQncyBzYXZlIHRoZSB2
YWx1ZSBpbnRvIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIGNyZWF0ZSBhIGxlZnQgdmFsdWUuCisg
ICAgICAgIC8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgaW5saW5pbmcgdGhlIGZ1bmN0aW9ucyB0aGUg
c3BlYyBzYXlzIGFyZSBnZW5lcmF0ZWQuCisgICAgICAgIGlmICghZG90RXhwcmVzc2lvbi50aHJl
YWRBbmRGdW5jdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1
dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJzKCksIGJhc2UucmVz
b2x2ZWRUeXBlKCktPmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCk7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFi
bGVEZWNsYXJhdGlvbikpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGUoYmFz
ZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkIH0pOworCisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBXVEZN
b3ZlKHZhcmlhYmxlUmVmZXJlbmNlMSksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7CisgICAg
ICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRUeXBlKCktPmNs
b25lKCkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVu
Y2UyLT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZTItPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKworICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVz
c2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpU
b2tlbihvcmlnaW4pLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMikpOworICAgICAgICBtYWtl
UG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBl
PihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgYmFzZS5y
ZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSkpOworICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBWZWN0b3I8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRz
LmFwcGVuZChXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOworICAgICAgICBhdXRvIGNh
bGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgU3RyaW5nKGFuZEZ1bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3Vt
ZW50cykpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShhbmRGdW5jdGlvbi0+dHlw
ZSgpLmNsb25lKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpSaWdodFZhbHVlKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24o
KmFuZEZ1bmN0aW9uKTsKKworICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KFdURk1vdmUob3JpZ2luKSwg
V1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24t
PnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSku
ZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7CisKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpDb21tYUV4cHJlc3Np
b24pIDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQg
dG8gYmUgYWJsZSB0byBiZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMgd2l0aG91dCB1cGRhdGluZyBi
YWNrcmVmZXJlbmNlcyIpOworICAgICAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNzaW9u
OworICAgICAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CisgICAgICAgIFZlY3Rv
cjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisgICAgICAgIGV4cHJl
c3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIGV4
cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbikpOworICAgICAg
ICBhdXRvKiBjb21tYUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVz
c2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoZXhwcmVzc2lvbnMpKTsKKyAgICAgICAgY29t
bWFFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0
aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGNvbW1hRXhwcmVz
c2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkIH0pOworCisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdU
Rk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkNhbGxFeHByZXNzaW9uKSA8PSBzaXpl
b2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUg
dG8gYmVjb21lIGNhbGwgZXhwcmVzc2lvbnMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNl
cyIpOworICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmdldEZ1bmN0aW9uKCkpOworICAgIGF1dG8m
IGdldEZ1bmN0aW9uID0gKmRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKTsKKyAgICBWZWN0b3I8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBw
ZW5kKGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7CisgICAgdm9pZCogbG9jYXRpb24gPSAmZG90
RXhwcmVzc2lvbjsKKyAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CisgICAgYXV0
byogY2FsbEV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkNhbGxFeHByZXNzaW9uKFdU
Rk1vdmUob3JpZ2luKSwgU3RyaW5nKGdldEZ1bmN0aW9uLm5hbWUoKSksIFdURk1vdmUoYXJndW1l
bnRzKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKGdldEZ1bmN0aW9uKTsKKyAg
ICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShnZXRGdW5jdGlvbi50eXBlKCkuY2xvbmUoKSk7Cisg
ICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworY2xhc3MgTGVmdFZhbHVlU2ltcGxpZmllciA6IHB1Ymxp
YyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKK307CisKK3ZvaWQgTGVmdFZhbHVlU2ltcGxpZmllcjo6dmlz
aXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIFZpc2l0b3I6OnZp
c2l0KGRvdEV4cHJlc3Npb24pOworICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmJhc2UoKS50eXBl
QW5ub3RhdGlvbigpKTsKKyAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5iYXNlKCkudHlwZUFubm90
YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpKTsKKyAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5h
bmRGdW5jdGlvbigpKTsKKworICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RFeHByZXNzaW9u
Lm9yaWdpbigpOworICAgIGF1dG8qIGFuZEZ1bmN0aW9uID0gZG90RXhwcmVzc2lvbi5hbmRGdW5j
dGlvbigpOworICAgIGF1dG8mIGJhc2UgPSBkb3RFeHByZXNzaW9uLmJhc2UoKTsKKyAgICBhdXRv
IGxlZnRBZGRyZXNzU3BhY2UgPSAqZG90RXhwcmVzc2lvbi5iYXNlKCkudHlwZUFubm90YXRpb24o
KS0+bGVmdEFkZHJlc3NTcGFjZSgpOworICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9y
aWdpbiksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7CisgICAgbWFrZVBvaW50ZXJFeHByZXNz
aW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2Vu
KG9yaWdpbiksIGxlZnRBZGRyZXNzU3BhY2UsIGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkp
KTsKKyAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6Umln
aHRWYWx1ZSgpKTsKKworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJn
dW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Np
b24pKTsKKyAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxF
eHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgU3RyaW5nKGFuZEZ1bmN0aW9uLT5uYW1l
KCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGFu
ZEZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVu
Y3Rpb24oKmFuZEZ1bmN0aW9uKTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RGVy
ZWZlcmVuY2VFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBl
eHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGRlcmVmZXJlbmNlIGV4cHJlc3Np
b25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICB2b2lkKiBsb2NhdGlv
biA9ICZkb3RFeHByZXNzaW9uOworICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsK
KyAgICBhdXRvKiBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkRl
cmVmZXJlbmNlRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2FsbEV4cHJlc3Np
b24pKTsKKyAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsK
KyAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZh
bHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuYWRk
cmVzc1NwYWNlKCkgfSk7Cit9CisKK3ZvaWQgTGVmdFZhbHVlU2ltcGxpZmllcjo6dmlzaXQoQVNU
OjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKK3sKKyAgICAv
LyBEZXJlZmVyZW5jZSBleHByZXNzaW9ucyBhcmUgdGhlIG9ubHkgZXhwcmVzc2lvbnMgd2hlcmUg
dGhlIGNoaWxkcmVuIG1pZ2h0IGJlIG1vcmUtcmlnaHQgdGhhbiB3ZSBhcmUuCisgICAgLy8gRm9y
IGV4YW1wbGUsIGEgZGVyZWZlcmVuY2UgZXhwcmVzc2lvbiBtYXkgYmUgYSBsZWZ0IHZhbHVlIGJ1
dCBpdHMgY2hpbGQgbWF5IGJlIGEgY2FsbCBleHByZXNzaW9uIHdoaWNoIGlzIGEgcmlnaHQgdmFs
dWUuCisgICAgLy8gTGVmdFZhbHVlU2ltcGxpZmllciBkb2Vzbid0IGhhbmRsZSByaWdodCB2YWx1
ZXMsIHNvIHdlIGluc3RlYWQgbmVlZCB0byB1c2UgUHJvcGVydHlSZXNvbHZlci4KKyAgICAvLyBG
SVhNRTogV2hhdCBhYm91dCBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cz8KKyAgICBQcm9wZXJ0eVJl
c29sdmVyKCkuVmlzaXRvcjo6dmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9uKTsKK30KKwordm9p
ZCBQcm9wZXJ0eVJlc29sdmVyOjpzaW1wbGlmeUxlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4
cHJlc3Npb24pCit7CisgICAgTGVmdFZhbHVlU2ltcGxpZmllcigpLlZpc2l0b3I6OnZpc2l0KGV4
cHJlc3Npb24pOworfQorCit2b2lkIHJlc29sdmVQcm9wZXJ0aWVzKFByb2dyYW0mIHByb2dyYW0p
Cit7CisgICAgUHJvcGVydHlSZXNvbHZlcigpLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjIw
NWY5MDJiY2M5NGVjYTllZjMzYjU4ZGExYzcwMWFiNzJiMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVy
LmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CitjbGFzcyBQcm9ncmFtOworCit2b2lkIHJlc29sdmVQcm9wZXJ0aWVzKFByb2dyYW0mKTsKKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKaW5kZXggZTc4
MzhjZTNmNzI1YWUwOWFiYTFlZGI1MGE2NTkyYzM0NjMxM2VlNS4uZGM5MzRkYmY3MjZhODE0YTA4
MDRiNGNjYjU3NTJkYmVjYjgxZjM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3Bw
CkBAIC00NCw3ICs0NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24mIGNhbmRpZGF0ZSwgY29uc3QgVmVjdG9yCiAgICAgICAgIGNvbnZl
cnNpb25Db3N0ICs9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JikgLT4gdW5zaWduZWQgewogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gdW5zaWduZWQgewotICAgICAgICAg
ICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNvbnZl
cnNpb25Db3N0KCpjYW5kaWRhdGUucGFyYW1ldGVycygpW2ldLnR5cGUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY29udmVy
c2lvbkNvc3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSk7CiAgICAgICAgIH0p
KTsKICAgICB9CiAgICAgLy8gVGhlIHJldHVybiB0eXBlIGNhbiBuZXZlciBiZSBhIGxpdGVyYWwg
dHlwZSwgc28gaXRzIGNvbnZlcnNpb24gY29zdCBpcyBhbHdheXMgMC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgK
aW5kZXggY2E1Y2JiNTkyOWNmOWUxODE4YzJjZDc0MWU3OWQ5MzZjYWFjNjhlZS4uNTBlNTMyYjZh
NmU4MmYxZTAyYTA0Njc5MWI4ZTY2OTZkNWIxMWUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKQEAgLTcy
LDYgKzcyLDcgQEAgcHJpdmF0ZToKIAogLy8gVGhpcyBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQg
YSBWYXJpYW50LgogLy8gSXQgZXhpc3RzIHNvIHdlIGNhbiBtYWtlIHN1cmUgdGhhdCB0aGUgZGVm
YXVsdCBjb25zdHJ1Y3RvciBkb2VzIHRoZSByaWdodCB0aGluZy4KKy8vIEZJWE1FOiBUaGlzIHdy
YXBwZXIgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeS4KIGNsYXNzIFJlc29sdmluZ1R5cGUgewogcHVi
bGljOgogICAgIFJlc29sdmluZ1R5cGUoKQpAQCAtMTAyLDEwICsxMDMsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgQVNUOjpVbm5hbWVkVHlwZSYgZ2V0
VW5uYW1lZFR5cGUoKQorICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFVubmFtZWRUeXBlKCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPj4obV9pbm5lcikpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKTsKKyAgICAgICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKSkKKyAgICAg
ICAgICAgIHJldHVybiAmV1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lu
bmVyKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlzaXRvciYgdmlzaXRvcikgLT4gZGVj
bHR5cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFyaWFudDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+Jj4oKSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0
YW5kYXJkTGlicmFyeS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN0YW5kYXJkTGlicmFyeS50eHQKaW5kZXggNzlhMmM2MGUwNjA2YjEzMjY1YmIyMzAzNjdh
Y2Y5NzI1MGJmOWE3Zi4uZjdmOGM1ZmZmNmQzYzA1MzM2MTA5MWU3M2FlMDE5NzQxN2E3MDZlMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFu
ZGFyZExpYnJhcnkudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dApAQCAtMzkwLDQgKzM5MCwxMyBAQCBuYXRpdmUgdm9p
ZCBBbGxNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYygpOwogbmF0aXZlIHZvaWQgRGV2aWNlTWVt
b3J5QmFycmllcldpdGhHcm91cFN5bmMoKTsKIG5hdGl2ZSB2b2lkIEdyb3VwTWVtb3J5QmFycmll
cldpdGhHcm91cFN5bmMoKTsKIAorZmxvYXQ0IGZsb2F0NChmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB6LCBmbG9hdCB3KSB7CisgICAgZmxvYXQ0IHJlc3VsdDsKKyAgICByZXN1bHQueCA9IHg7Cisg
ICAgcmVzdWx0LnkgPSB5OworICAgIHJlc3VsdC56ID0gejsKKyAgICByZXN1bHQudyA9IHc7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTI4OTAgSW5zZXJ0IHRoZSByZXN0IG9mIHRoZSBzdGFuZGFyZCBs
aWJyYXJ5IG9uY2UgdGhlIHBhcnNlciBpcyBmYXN0IGVub3VnaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRv
ckxlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAppbmRleCBhZTNjYTY0MjM5ZTNiNTlkMzZh
YWFhZWVjN2JhNDcxYmNiNjdjZWI5Li42NWVkN2FjZjQzZjIwMDQwMjUwZjkwNjZhMTRiNjQwYjU3
YmJmMGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3Ro
LmNwcApAQCAtNjUsNyArNjUsNyBAQCBib29sIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3Ro
KFByb2dyYW0mIHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKIAogICAgIGZv
ciAoYXV0byYgYXJyYXlUeXBlIDogYXJyYXlUeXBlcykgewotICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdl
dCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgYXJyYXlUeXBlLmdldCgpLmNsb25l
KCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgYXV0
byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24+KExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgYXJyYXlUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCk7CiAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1l
dGVyczsKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0
aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJy
YXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxv
cHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgp
Lm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudWludFR5cGUoKSksICJvcGVyYXRvci5s
ZW5ndGgiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9y
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAppbmRleCBjZDdjMzcwMmFk
YmVhMjlhYzE4YzVjYmU2ZGI2MDg3YjllMDJlZDhhLi43NGNjOGYxODRlODM1YjNjZTFjNDliNWNl
NmVjOGQ2YTRhODY4YzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAK
QEAgLTExMCw3ICsxMTAsNyBAQCBib29sIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYg
cHJvZ3JhbSkKICAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogCiAgICAgZm9yIChhdXRvJiB1
bm5hbWVkVHlwZSA6IHVubmFtZWRUeXBlcykgewotICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCku
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgp
IH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIGF1dG8g
dmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uPihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFy
YXRpb24pKTsKICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25z
dHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBl
LmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVu
bmFtZWRUeXBlLmdldCgpLmNsb25lKCksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFy
YW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpAQCAtMTI3LDcgKzEyNyw3IEBA
IGJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICBp
ZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHN0YXRpY19jYXN0PEFTVDo6TmFtZWRU
eXBlJj4obmFtZWRUeXBlKSkgJiYgZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KHN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4obmFtZWRUeXBlKSkuaXNBdG9taWMoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2
YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRv
a2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5nZXQoKSkgfSwgU3RyaW5n
KCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURl
Y2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVy
OjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSksIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92
ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5
cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCAib3BlcmF0b3IgY2FzdCJfc3Ry
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAppbmRleCAxNzk3
ZmU1Mzk0YzgxZWFjZDM5NTRhYmM2YThhNjVhNmM4ZmM5NmUyLi5kNzRhZjMzYTFmMDVhNjkyMjE5
YzhjY2U0YWZkY2M5Mjk1MTA5NzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51
bWVyYXRpb25GdW5jdGlvbnMuY3BwCkBAIC00MSw4ICs0MSw4IEBAIGJvb2wgc3ludGhlc2l6ZUVu
dW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJhdG9y
ID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0u
ZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5v
cmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0KTsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2
YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5v
cmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9u
RGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAg
ICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0
aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9r
ZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZp
bml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7CiAgICAgICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CkBA
IC01Miw3ICs1Miw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dy
YW0mIHByb2dyYW0pCiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmln
aW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwg
V1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihl
bnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSks
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJz
LmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlv
bkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3IudmFsdWUiX3N0ciwgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CkBAIC02MSw3ICs2MSw3
IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0p
CiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1l
cmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRl
ZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZN
b3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24t
PnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
LCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKQEAgLTcwLDEwICs3MCwxMCBAQCBib29sIHN5
bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICB9
CiAKICAgICAgICAgewotICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlh
YmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2lu
KCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAg
IGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgp
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgeyBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3Jp
Z2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sICJvcGVyYXRvciBjYXN0Il9zdHIsIFdU
Rk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOworICAgICAgICAg
ICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmlu
aXRpb24pKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpu
dWxsb3B0LCBpc09wZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdU
Rk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFj
Y2Vzc29ycy5jcHAKaW5kZXggODI2NzIyMTM3ZTRjM2UzODIyNzc4MGRhZTEyYjI5YWFiYTFiNzJl
ZS4uOTQ1ZDBjZWVmYWEzOWNlNTA3NDYwN2QyYzQ0OTNjZjM5N2U5ODNkZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0
dXJlQWNjZXNzb3JzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCkBAIC00Niw3ICs0Niw3IEBA
IGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAg
ICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5z
dHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8g
VGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQKLSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxl
bWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURl
ZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAg
ICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdp
bigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2lu
KCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCk7CiAgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFi
bGVEZWNsYXJhdGlvbikpOwogICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBt
YWtlU3RyaW5nKCJvcGVyYXRvci4iLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKSksIFdURk1vdmUo
cGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpAQCAtNTYsOCArNTYsOCBA
QCBib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKIAog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZp
ZWxkPQotICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURl
Y2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6
UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pIH0sIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Ci0gICAgICAgICAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24yKExleGVyOjpUb2tlbihzdHJ1Y3R1
cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgc3RydWN0dXJlRWxlbWVu
dC50eXBlKCkuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
OworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEgPSBtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1l
bnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVu
dC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRp
b24yID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tl
bihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHN0cnVjdHVy
ZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCk7CiAgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0
ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVE
ZWNsYXJhdGlvbjEpKTsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3Zl
KHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgc3ludGhlc2l6
ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICAgICAgLy8gVGhl
IGFuZGVyOiBvcGVyYXRvciYuZmllbGQKICAgICAgICAgICAgIGF1dG8gY3JlYXRlQW5kZXIgPSBb
Jl0oQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24gewogICAgICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5v
cmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikpOwot
ICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0
aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIHsgV1RGTW92ZShhcmd1bWVudFR5cGUpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9u
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihz
dHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgICAgICBhdXRvIHJldHVy
blR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1
Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRkcmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5
cGUoKS5jbG9uZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMVmlzaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFZpc2l0b3IuY3BwCmluZGV4IGVkMmU4YzAwNTJkNmRmZTliZDA3YmFmNzY0OWQ4
Y2U0OGM5YjA5YmIuLjJmMjAxNTJjYWI3YWQxYzc4MjZiYTNkMjE1MTdhNGVjMDllYWVlYWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNp
dG9yLmNwcApAQCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUcmFw
JikKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJp
YWJsZURlY2xhcmF0aW9uIDogdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQudmFyaWFibGVE
ZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFy
YXRpb24pOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbi5n
ZXQoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9v
cCkKQEAgLTU4OSwxNyArNTg5LDE3IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpMb2dpY2Fs
Tm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCiAKIHZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsKLSAg
ICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsK
IH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24m
IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICBjaGVja0Vycm9y
QW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsKICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsKICAg
ICBpZiAocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKaW5kZXggYmNlY2JhOTA4OTc2NmY5MGY5NTBjMjE3ODNhZjYyZTExOGZmYjZjYy4u
N2E2YzZkNDU5OTRlNWZjZjI4MzYzYTQzYzI0NzQzM2NiNzNlZTQxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
QEAgLTM0OCw2ICszNDgsNyBAQCBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVm
ZXJlbmNlLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwu
Y3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BV
LmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVQWRhcHRlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dl
YkdQVUJpbmRHcm91cC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA2ODBkNjQ0NmY1OTRjNWY1YmNlMDI1MDBmMGFjNTE1MWZm
Nzc1OWE2Li4wMzJkNjgxY2U5MjE0ZjMzZDNiZGRkMTAzMmFhODk4NDI1ZWUyNDFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02
Mzg2LDYgKzYzODYsOCBAQAogCQkxQ0EwQzJFQzIxRUVENkY2MDBBMTE4NjAgLyogV0hMU0xMaXRl
cmFsVHlwZUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xMaXRlcmFsVHlwZUNo
ZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUwMzBEQzI1NTk1
MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gRXZlbnRMb29wTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQ0ExOUUxNTBEQzI1NUNBMDA2NUE5OTQgLyogRXZlbnRMb29wLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50TG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQ0FBODJGNjIyNDJBRTA1MDBFODRCQkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMUHJvcGVydHlSZXNvbHZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQUE4MkY3MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFBy
b3BlcnR5UmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDdFMEE2QzQwNTIwMEFCRTA2RSAv
KiBXZWJTY3JpcHRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
U2NyaXB0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDdGMEE2
QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDQUYzNDgwMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3RQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVj
dFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1Mzk0LDYgKzI1Mzk2
LDggQEAKIAkJCQlDMjRBNTdCQTIxRkVBRkVBMDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmNwcCAq
LywKIAkJCQlDMjRBNTdCQjIxRkVBRkVBMDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmggKi8sCiAJ
CQkJQzIxQkY3M0EyMUNEOEQ3MDAwMjI3OTc5IC8qIFdITFNMUHJvZ3JhbS5oICovLAorCQkJCTFD
QUE4MkY2MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwICovLAor
CQkJCTFDQUE4MkY3MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCAq
LywKIAkJCQkxQ0EwQzJFMDIxRUVCNUY1MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2Vy
LmNwcCAqLywKIAkJCQkxQ0EwQzJERTIxRUVCNUY0MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25D
aGVja2VyLmggKi8sCiAJCQkJQzIzNEE5QUQyMUU5MkMxOTAwM0M5ODREIC8qIFdITFNMUmVjdXJz
aXZlVHlwZUNoZWNrZXIuY3BwICovLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWRvdC1leHByZXNzaW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdC1l
eHByZXNzaW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0NGEwZjZmZjg0NmZlYmUzMDY5MTJkNzg1MmVi
ZjQzZmQxY2UxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
ZG90LWV4cHJlc3Npb25zLmh0bWwKQEAgLTAsMCArMSwxMjggQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291
cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9z
aXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBWZXJ0
ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQg
c2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworICAgIHJlc3Vs
dC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChz
aGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkg
eworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVy
KCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisK
KyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAg
IGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFu
Z2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAi
Y3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAg
Y29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6
ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAv
LyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51
bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgaW5w
dXRTbG90OiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3No
YWRlckxvY2F0aW9uOiAxLCBpbnB1dFNsb3Q6IDEsIGZvcm1hdDogImZsb2F0In07CisgICAgY29u
c3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1
dDAgPSB7aW5wdXRTbG90OiAwLCBzdHJpZGU6IDE2IH07CisgICAgY29uc3QgaW5wdXQxID0ge2lu
cHV0U2xvdDogMSwgc3RyaWRlOiA0IH07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MCwgaW5w
dXQxXTsKKyAgICBjb25zdCBpbnB1dFN0YXRlID0ge2luZGV4Rm9ybWF0OiAidWludDMyIiwgYXR0
cmlidXRlcywgaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3Ig
PSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0t
YnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0
XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlv
dXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xv
Z3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCBp
bnB1dFN0YXRlLCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9y
ID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVz
Y3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVy
dGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwor
CisgICAgY29uc3QgdmVydGV4QnVmZmVyMURlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMSA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMURlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjFBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjEubWFwV3JpdGVBc3luYygp
OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHZlcnRleEJ1ZmZlcjFBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMURlc2NyaXB0b3Jb
MF0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yWzFdID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXIxRGVzY3JpcHRvclsyXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMURlc2NyaXB0b3JbM10g
PSAxOworICAgIHZlcnRleEJ1ZmZlcjEudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsK
KyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VC
dWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0g
YXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5
QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVz
b3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVy
OiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9
IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdy
b3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5k
R3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdl
dENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNl
LCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5j
b25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0
VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1
dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAg
Y29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8g
e30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3Qg
Y29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29s
dmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJD
b2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Cisg
ICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhT
dGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5k
RW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwLCB2ZXJ0ZXhCdWZmZXIxXSwgWzAs
IDBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFu
ZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5k
QnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFy
dCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370332</attachid>
            <date>2019-05-21 12:00:30 -0700</date>
            <delta_ts>2019-05-21 13:48:30 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190521120029.patch</filename>
            <type>text/plain</type>
            <size>160196</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWRjNmYxZjdkM2RlMzEx
ZGRhYjA1YjNiY2E0MWViM2U5ODRmZWIzNS4uOGQ2NjBhYWY1Zjc5MmRhMzgyOTgyNDNhN2NmMjNm
Njg3NzQyN2MyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTA1LTIwICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDUt
MjAgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIE1h
a2UgbG9zc3kgTGF5b3V0VW5pdCBjb25zdHJ1Y3RvcnMgZXhwbGljaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1Nw
YWNlLmgKaW5kZXggNGE2ZDdjNDY5NWRjNGNhYzgyOTA1NGU0MDU1NTc4NzY1MTc1Zjg2My4uZDQz
NmQ2ODljNzhlMDQwYzVmZGRjZTM5NjBmMzhmNDMwMTUwYjJiMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1Nw
YWNlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSA8
Y3N0ZGludD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQyLDYgKzQzLDcwIEBAIGVudW0gY2xhc3MgQWRkcmVzc1NwYWNlIDogdWludDhfdCB7
CiAgICAgVGhyZWFkCiB9OwogCitzdHJ1Y3QgTGVmdFZhbHVlIHsKKyAgICBBZGRyZXNzU3BhY2Ug
YWRkcmVzc1NwYWNlOworfTsKKworc3RydWN0IEFic3RyYWN0TGVmdFZhbHVlIHsKK307CisKK3N0
cnVjdCBSaWdodFZhbHVlIHsKK307CisKKy8vIEZJWE1FOiBUaGlzIHdyYXBwZXIgbWlnaHQgbm90
IGJlIG5lY2Vzc2FyeS4KK2NsYXNzIFR5cGVBbm5vdGF0aW9uIHsKK3B1YmxpYzoKKyAgICBUeXBl
QW5ub3RhdGlvbigpCisgICAgICAgIDogbV9lbXB0eSh0cnVlKQorICAgIHsKKyAgICB9CisKKyAg
ICBUeXBlQW5ub3RhdGlvbihMZWZ0VmFsdWUgdikKKyAgICAgICAgOiBtX2lubmVyKHYpCisgICAg
eworICAgIH0KKworICAgIFR5cGVBbm5vdGF0aW9uKEFic3RyYWN0TGVmdFZhbHVlIHYpCisgICAg
ICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBUeXBlQW5ub3RhdGlvbihSaWdo
dFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBUeXBl
QW5ub3RhdGlvbihjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBlQW5u
b3RhdGlvbihUeXBlQW5ub3RhdGlvbiYmIG90aGVyKSA9IGRlZmF1bHQ7CisKKyAgICBUeXBlQW5u
b3RhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IFR5cGVBbm5vdGF0aW9uJikgPSBkZWZhdWx0OworICAg
IFR5cGVBbm5vdGF0aW9uJiBvcGVyYXRvcj0oVHlwZUFubm90YXRpb24mJiBvdGhlcikgPSBkZWZh
dWx0OworCisgICAgT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiBsZWZ0QWRkcmVzc1NwYWNlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0eSk7CisgICAgICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPExlZnRWYWx1ZT4obV9pbm5lcikpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpnZXQ8TGVmdFZhbHVlPihtX2lubmVyKS5hZGRyZXNzU3BhY2U7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgYm9vbCBpc1JpZ2h0VmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2VtcHR5KTsKKyAgICAgICAgcmV0dXJuIFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmlnaHRWYWx1ZT4obV9pbm5lcik7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlzaXRvciYgdmlzaXRvcikg
LT4gZGVjbHR5cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFyaWFudDxMZWZ0
VmFsdWUsIEFic3RyYWN0TGVmdFZhbHVlLCBSaWdodFZhbHVlPiY+KCkpKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtX2VtcHR5KTsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwg
bV9pbm5lcik7CisgICAgfQorCitwcml2YXRlOgorICAgIFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0
cmFjdExlZnRWYWx1ZSwgUmlnaHRWYWx1ZT4gbV9pbm5lcjsKKyAgICBib29sIG1fZW1wdHkgeyBm
YWxzZSB9OworfTsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24u
aAppbmRleCBiMTIxZmI2YzFlMWQxNzkyNjE1ZDliYjAyNzRmZTIzNTg4YTdmMmI1Li43OTQxNWUy
ZmYzMDMwMjkxMDZiNWJmNDE5NzY3ZWI1OTk4ZjBlNGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFzc2ln
bm1lbnRFeHByZXNzaW9uLmgKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogCiAgICAgRXhwcmVz
c2lvbiYgbGVmdCgpIHsgcmV0dXJuIG1fbGVmdDsgfQogICAgIEV4cHJlc3Npb24mIHJpZ2h0KCkg
eyByZXR1cm4gbV9yaWdodDsgfQorICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIHRha2VSaWdo
dCgpIHsgcmV0dXJuIFdURk1vdmUobV9yaWdodCk7IH0KIAogcHJpdmF0ZToKICAgICBVbmlxdWVS
ZWY8RXhwcmVzc2lvbj4gbV9sZWZ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCmluZGV4IGI3YWIyMGNlZDJj
NDUzZjk1ZjFjMmUzZWZjMjgxZmRhNDhlNWMzYWQuLjMxOGE4MTA2MTYzZGI4N2U4NWVmNDgxZWM4
ODdkOWQ2YzVjMjljYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKQEAgLTY1LDEyICs2NSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fdHlwZSA9IFdURk1vdmUodHlwZSk7CiAgICAgfQogCi0gICAgY29u
c3QgT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiYgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4g
bV9hZGRyZXNzU3BhY2U7IH0KKyAgICBjb25zdCBUeXBlQW5ub3RhdGlvbiogdHlwZUFubm90YXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3R5cGVBbm5vdGF0aW9uID8gJiptX3R5cGVBbm5vdGF0aW9u
IDogbnVsbHB0cjsgfQogCi0gICAgdm9pZCBzZXRBZGRyZXNzU3BhY2UoT3B0aW9uYWw8QWRkcmVz
c1NwYWNlPiYgYWRkcmVzc1NwYWNlKQorICAgIHZvaWQgc2V0VHlwZUFubm90YXRpb24oVHlwZUFu
bm90YXRpb24mJiB0eXBlQW5ub3RhdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9hZGRy
ZXNzU3BhY2UpOwotICAgICAgICBtX2FkZHJlc3NTcGFjZSA9IGFkZHJlc3NTcGFjZTsKKyAgICAg
ICAgQVNTRVJUKCFtX3R5cGVBbm5vdGF0aW9uKTsKKyAgICAgICAgbV90eXBlQW5ub3RhdGlvbiA9
IFdURk1vdmUodHlwZUFubm90YXRpb24pOwogICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0Fz
c2lnbm1lbnRFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTk3LDcgKzk3
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAg
T3B0aW9uYWw8VW5pcXVlUmVmPFVubmFtZWRUeXBlPj4gbV90eXBlOwotICAgIE9wdGlvbmFsPEFk
ZHJlc3NTcGFjZT4gbV9hZGRyZXNzU3BhY2U7CisgICAgT3B0aW9uYWw8VHlwZUFubm90YXRpb24+
IG1fdHlwZUFubm90YXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaAppbmRleCA2MzE2ZjU0ZTE2
MzI2YjRhNDgzZmE4NzJlMWY0N2JiMDQ4ZWRmODhlLi43NzBjZjhiYTlmMjUyNzI2ZjY5YzFhZTZk
ZTVlYTRhNWIxMmJmNzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbi5oCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFz
cyBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVi
bGljOgotICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsVmFsdWUpCisgICAgTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9u
PiYmIGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKLSAg
ICAgICAgLCBtX2xWYWx1ZShXVEZNb3ZlKGxWYWx1ZSkpCisgICAgICAgICwgbV9sZWZ0VmFsdWUo
V1RGTW92ZShsZWZ0VmFsdWUpKQogICAgIHsKICAgICB9CiAKQEAgLTUyLDEwICs1MiwxMCBAQCBw
dWJsaWM6CiAKICAgICBib29sIGlzTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsg
cmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVlKCkgeyByZXR1cm4g
bV9sZWZ0VmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9s
VmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCmlu
ZGV4IDdiMDUyYjZkNWYyODg3ZjU5MmRmNDRmZDk0MDljNGZhOTUyMDNhYTguLjM0NjA0ZDU2YWVj
YzRiNjMwZDdhN2U2Zjc5NmI5Yzg1MzQ3Y2UxZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5oCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFz
cyBNYWtlUG9pbnRlckV4cHJlc3Npb24gOiBwdWJsaWMgRXhwcmVzc2lvbiB7CiBwdWJsaWM6Ci0g
ICAgTWFrZVBvaW50ZXJFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVm
PEV4cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VQb2ludGVyRXhwcmVzc2lvbihMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxlZnRWYWx1ZSkKICAgICAg
ICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShXVEZN
b3ZlKGxWYWx1ZSkpCisgICAgICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUpKQog
ICAgIHsKICAgICB9CiAKQEAgLTUyLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
TWFrZVBvaW50ZXJFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9sVmFsdWU7IH0KKyAgICBFeHBy
ZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogCiBwcml2YXRlOgot
ICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xWYWx1ZTsKKyAgICBVbmlxdWVSZWY8RXhwcmVz
c2lvbj4gbV9sZWZ0VmFsdWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKaW5kZXggMmVjMzRlMTVkOGE0MGU1YWQy
ZTJiZjg5NjgwYzIxYzMzNDRjOTk4OC4uMTU3MDkyZDY1MGZhY2VhMDI5YjliMTc3NjBkODA1MDU3
ZTFhZGQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgK
QEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIApAQCAtNTks
MjcgKzYwLDU2IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlR2V0T3ZlcmxvYWRzKCkgeyByZXR1cm4g
bV9wb3NzaWJsZUdldE92ZXJsb2FkczsgfQogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVTZXRPdmVybG9hZHMoKSB7IHJl
dHVybiBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzOyB9CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUFuZE92ZXJsb2Fkcygp
IHsgcmV0dXJuIG1fcG9zc2libGVBbmRPdmVybG9hZHM7IH0KKyAgICBGdW5jdGlvbkRlY2xhcmF0
aW9uKiBnZXRGdW5jdGlvbigpIHsgcmV0dXJuIG1fZ2V0RnVuY3Rpb247IH0KKyAgICBGdW5jdGlv
bkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbigpIHsgcmV0dXJuIG1fYW5kRnVuY3Rpb247IH0KKyAg
ICBGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRGdW5jdGlvbigpIHsgcmV0dXJuIG1fdGhy
ZWFkQW5kRnVuY3Rpb247IH0KKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5jdGlvbigp
IHsgcmV0dXJuIG1fc2V0RnVuY3Rpb247IH0KIAogICAgIHZvaWQgc2V0UG9zc2libGVHZXRPdmVy
bG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+JiBvdmVybG9hZHMpCiAgICAgewogICAgICAgICBtX3Bvc3NpYmxlR2V0T3Zlcmxv
YWRzID0gb3ZlcmxvYWRzOwogICAgIH0KKyAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRz
KGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+
LCAxPiYgb3ZlcmxvYWRzKQorICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9
IG92ZXJsb2FkczsKKyAgICB9CiAgICAgdm9pZCBzZXRQb3NzaWJsZVNldE92ZXJsb2Fkcyhjb25z
dCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IG92ZXJsb2FkcykKICAgICB7CiAgICAgICAgIG1fcG9zc2libGVTZXRPdmVybG9hZHMgPSBvdmVy
bG9hZHM7CiAgICAgfQotICAgIHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29uc3QgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVy
bG9hZHMpCisKKyAgICB2b2lkIHNldEdldEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIGdl
dEZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG92ZXJs
b2FkczsKKyAgICAgICAgbV9nZXRGdW5jdGlvbiA9IGdldEZ1bmN0aW9uOworICAgIH0KKworICAg
IHZvaWQgc2V0QW5kRnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb24pCisg
ICAgeworICAgICAgICBtX2FuZEZ1bmN0aW9uID0gYW5kRnVuY3Rpb247CisgICAgfQorCisgICAg
dm9pZCBzZXRUaHJlYWRBbmRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRG
dW5jdGlvbikKKyAgICB7CisgICAgICAgIG1fdGhyZWFkQW5kRnVuY3Rpb24gPSB0aHJlYWRBbmRG
dW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldFNldEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFy
YXRpb24qIHNldEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgbV9zZXRGdW5jdGlvbiA9IHNldEZ1
bmN0aW9uOwogICAgIH0KIAogICAgIEV4cHJlc3Npb24mIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7
IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiB0YWtlQmFzZSgpIHsgcmV0dXJuIFdURk1v
dmUobV9iYXNlKTsgfQogCiBwcml2YXRlOgogICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2Jh
c2U7CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlv
bj4sIDE+IG1fcG9zc2libGVHZXRPdmVybG9hZHM7CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVTZXRPdmVybG9hZHM7
CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+IG1fcG9zc2libGVBbmRPdmVybG9hZHM7CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9n
ZXRGdW5jdGlvbiB7IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX2FuZEZ1
bmN0aW9uIHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fdGhyZWFkQW5k
RnVuY3Rpb24geyBudWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9zZXRGdW5j
dGlvbiB7IG51bGxwdHIgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCmluZGV4IDc5ZDhkMGY3MDhlOGQwNTc4
MzEyYzgxNzk0ZTg4ZWRhZjM0ODdjZjkuLjIwOWE1MjY1MWU3ZWIzZWI1YTljYzFmNmJjMTcwMmJl
YjY1ODJiYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmgKQEAgLTQxLDExICs0MSwxMSBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7
CiAKIC8qCi0gKiAgMS4gRXZhbHVhdGUgbV9sVmFsdWUKKyAqICAxLiBFdmFsdWF0ZSBtX2xlZnRW
YWx1ZQogICogIDIuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1fb2xkVmFsdWUKICAqICAzLiBFdmFs
dWF0ZSBtX25ld1ZhbHVlRXhwcmVzc2lvbgogICogIDQuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1f
bmV3VmFsdWUKLSAqICA1LiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX2xWYWx1ZQorICogIDUuIEFz
c2lnbiB0aGUgcmVzdWx0IHRvIG1fbGVmdFZhbHVlCiAgKiAgNi4gRXZhbHVhdGUgbV9yZXN1bHRF
eHByZXNzaW9uCiAgKiAgNy4gUmV0dXJuIHRoZSByZXN1bHQKICAqLwpAQCAtNzMsMzggKzczLDQx
IEBAIHB1YmxpYzoKIAogICAgIFVuaXF1ZVJlZjxWYXJpYWJsZVJlZmVyZW5jZT4gb2xkVmFyaWFi
bGVSZWZlcmVuY2UoKQogICAgIHsKLSAgICAgICAgLy8gVGhlIG9ubHkgcmVhc29uIHdlIGRvbid0
IGdldCB1c2UtYWZ0ZXItZnJlZXMgaXMgdGhlIGZhY3QgdGhhdCBldmVyeSBpbnN0YW5jZSBvZiBS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uIGlzIGFsbG9jYXRlZCBvbiB0aGUgaGVhcC4KICAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VmFyaWFibGVSZWZlcmVuY2U+KFZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKG1fb2xkVmFsdWUpKTsKICAgICB9CiAKICAgICBVbmlxdWVSZWY8VmFyaWFibGVS
ZWZlcmVuY2U+IG5ld1ZhcmlhYmxlUmVmZXJlbmNlKCkKICAgICB7Ci0gICAgICAgIC8vIFRoZSBv
bmx5IHJlYXNvbiB3ZSBkb24ndCBnZXQgdXNlLWFmdGVyLWZyZWVzIGlzIHRoZSBmYWN0IHRoYXQg
ZXZlcnkgaW5zdGFuY2Ugb2YgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiBpcyBhbGxvY2F0ZWQg
b24gdGhlIGhlYXAuCiAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJl
bmNlPihWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChtX25ld1ZhbHVlKSk7CiAgICAgfQogCiAgICAg
Ym9vbCBpc1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xWYWx1ZTsg
fQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9CiAg
ICAgVmFyaWFibGVEZWNsYXJhdGlvbiYgb2xkVmFsdWUoKSB7IHJldHVybiBtX29sZFZhbHVlOyB9
CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiYgbmV3VmFsdWUoKSB7IHJldHVybiBtX25ld1ZhbHVl
OyB9CiAgICAgRXhwcmVzc2lvbiogbmV3VmFsdWVFeHByZXNzaW9uKCkgeyByZXR1cm4gbV9uZXdW
YWx1ZUV4cHJlc3Npb24gPyAmKm1fbmV3VmFsdWVFeHByZXNzaW9uIDogbnVsbHB0cjsgfQogICAg
IEV4cHJlc3Npb24qIHJlc3VsdEV4cHJlc3Npb24oKSB7IHJldHVybiBtX3Jlc3VsdEV4cHJlc3Np
b24gPyAmKm1fcmVzdWx0RXhwcmVzc2lvbiA6IG51bGxwdHI7IH0KKyAgICBVbmlxdWVSZWY8RXhw
cmVzc2lvbj4mJiB0YWtlTGVmdFZhbHVlKCkgeyByZXR1cm4gV1RGTW92ZShtX2xlZnRWYWx1ZSk7
IH0KKyAgICBVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4mJiB0YWtlT2xkVmFsdWUoKSB7
IHJldHVybiBXVEZNb3ZlKG1fb2xkVmFsdWUpOyB9CisgICAgVW5pcXVlUmVmPFZhcmlhYmxlRGVj
bGFyYXRpb24+JiYgdGFrZU5ld1ZhbHVlKCkgeyByZXR1cm4gV1RGTW92ZShtX25ld1ZhbHVlKTsg
fQorICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mJiB0YWtlTmV3VmFsdWVFeHBy
ZXNzaW9uKCkgeyByZXR1cm4gV1RGTW92ZShtX25ld1ZhbHVlRXhwcmVzc2lvbik7IH0KKyAgICBP
cHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYgdGFrZVJlc3VsdEV4cHJlc3Npb24oKSB7
IHJldHVybiBXVEZNb3ZlKG1fcmVzdWx0RXhwcmVzc2lvbik7IH0KIAogcHJpdmF0ZToKICAgICB0
ZW1wbGF0ZTxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPiBmcmllbmQgVW5pcXVlUmVmPFU+IFdURjo6
bWFrZVVuaXF1ZVJlZihBcmdzJiYuLi4pOwogCi0gICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBsVmFsdWUpCisg
ICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihMZXhlcjo6
VG9rZW4ob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShXVEZNb3ZlKGxWYWx1ZSkpCi0gICAg
ICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6
Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKLSAgICAgICAg
LCBtX25ld1ZhbHVlKFdURk1vdmUob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQs
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKKyAgICAgICAgLCBtX2xlZnRW
YWx1ZShXVEZNb3ZlKGxlZnRWYWx1ZSkpCisgICAgICAgICwgbV9vbGRWYWx1ZShtYWtlVW5pcXVl
UmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBRdWFsaWZpZXJz
KCksIFdURjo6bnVsbG9wdCwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSkK
KyAgICAgICAgLCBtX25ld1ZhbHVlKG1ha2VVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4o
V1RGTW92ZShvcmlnaW4pLCBRdWFsaWZpZXJzKCksIFdURjo6bnVsbG9wdCwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSkKICAgICB7CiAgICAgfQogCi0gICAgVW5pcXVlUmVm
PEV4cHJlc3Npb24+IG1fbFZhbHVlOwotICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9vbGRWYWx1
ZTsKLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fbmV3VmFsdWU7CisgICAgVW5pcXVlUmVmPEV4
cHJlc3Npb24+IG1fbGVmdFZhbHVlOworICAgIFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9u
PiBtX29sZFZhbHVlOworICAgIFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPiBtX25ld1Zh
bHVlOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9uZXdWYWx1ZUV4cHJl
c3Npb247CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiBtX3Jlc3VsdEV4cHJl
c3Npb247CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCmluZGV4IDE5ODI0
Zjk0MDU0ZTRiM2I3ZDdjZjI0ZjYzYzAxMTliOGE2M2Y0ZmIuLmU1MGFhYWRkZTc4OGY0ZWQ4OWU5
YzI2YmY0NDYzOWMyMTQwNDljZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9u
LmgKQEAgLTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8RXhw
cmVzc2lvbj4+IG1faW5pdGlhbGl6ZXI7CiB9OwogCi11c2luZyBWYXJpYWJsZURlY2xhcmF0aW9u
cyA9IFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPjsKK3VzaW5nIFZhcmlhYmxlRGVjbGFyYXRp
b25zID0gVmVjdG9yPFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPj47CiAKIH0gLy8gbmFt
ZXNwYWNlIEFTVAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQuaAppbmRleCBlOGUxZmM3ZjViMjM4ZGJiMDQwM2U5ZjQwMjc4MDRhNzBhN2U4ODFj
Li4wOWEwMmQwMWY0OTY4NGFiOTYzZWY4NzI1YjA0NTJkNWEzOGVkZjRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgKQEAgLTQwLDcgKzQw
LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50IDogcHVibGljIFN0YXRlbWVudCB7CiBwdWJsaWM6Ci0gICAgVmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBWZWN0b3I8VmFyaWFibGVEZWNsYXJh
dGlvbj4mJiB2YXJpYWJsZURlY2xhcmF0aW9ucykKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFZhcmlhYmxlRGVjbGFyYXRpb25zJiYgdmFy
aWFibGVEZWNsYXJhdGlvbnMpCiAgICAgICAgIDogU3RhdGVtZW50KFdURk1vdmUob3JpZ2luKSkK
ICAgICAgICAgLCBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zKFdURk1vdmUodmFyaWFibGVEZWNsYXJh
dGlvbnMpKQogICAgIHsKQEAgLTUzLDEwICs1MywxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CiAKLSAgICBWZWN0b3I8VmFyaWFibGVEZWNsYXJhdGlvbj4mIHZhcmlhYmxlRGVjbGFy
YXRpb25zKCkgeyByZXR1cm4gbV92YXJpYWJsZURlY2xhcmF0aW9uczsgfQorICAgIFZlY3RvcjxV
bmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4+JiB2YXJpYWJsZURlY2xhcmF0aW9ucygpIHsg
cmV0dXJuIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7IH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8
VmFyaWFibGVEZWNsYXJhdGlvbj4gbV92YXJpYWJsZURlY2xhcmF0aW9uczsKKyAgICBWYXJpYWJs
ZURlY2xhcmF0aW9ucyBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKaW5k
ZXggNjI0YzU2MmU1MWNhNjBjNmVmOGRlMjhhZmViYWM1MTRmMmJlMGRiZC4uMWEwMDUzYzljNGQ0
YzY2NmZlNTgzYzEyMTY4ZTkxNzJlZGYyNjY0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50
cnlQb2ludFNjYWZmb2xkaW5nLmNwcApAQCAtMTg4LDkgKzE4OCw5IEBAIFN0cmluZyBFbnRyeVBv
aW50U2NhZmZvbGRpbmc6Om1hbmdsZWRJbnB1dFBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGgpCiAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiogc3Ry
dWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS5uYW1lKCkgPT0gcGF0aFsw
XSkgeworICAgICAgICBpZiAobV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLT5u
YW1lKCkgPT0gcGF0aFswXSkgewogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobV9w
YXJhbWV0ZXJWYXJpYWJsZXNbaV0pOwotICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbV9m
dW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKS0+dW5pZnlOb2RlKCk7Cisg
ICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKClbaV0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpO
YW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUg
PSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKICAgICAgICAgICAgICAgICBp
ZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKQpAQCAtMjQ5LDcgKzI0
OSw3IEBAIFN0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFja1Jlc291cmNlc0FuZE5h
bWVkQnVpbHRJbnMoKQogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCk7ICsraSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKVtpXS50eXBlKCkpLCAnICcsIG1fcGFyYW1ldGVyVmFyaWFibGVzW2ldLCAiO1xuIikpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBl
KCkpLCAnICcsIG1fcGFyYW1ldGVyVmFyaWFibGVzW2ldLCAiO1xuIikpOwogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2xheW91dC5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvIHZh
cmlhYmxlTmFtZSA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldLnZhcmlhYmxlTmFtZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rp
b25Xcml0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xGdW5jdGlvbldyaXRlci5jcHAKaW5kZXggMmZjMTQ2NTg2MTZjOTg5Y2EyMTdjNjkyODJh
ZTg2ZGM0ODcxOWYwOC4uMDlkNjliMTAzYWQxNjM5YTUyOTY0MjJmNmJiYTQ3YjU4YTkyOGFkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xGdW5jdGlvbldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCB2
b2lkIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiYgZnVuY3Rpb25EZWNsYXJhdAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKGkp
CiAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKSk7CisgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKSk7CiAgICAgfQogICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQoIik7XG4iKTsKIH0KQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0
aW9uRGVmaW5pdGlvbgogICAgICAgICAgICAgYXV0byBwYXJhbWV0ZXJOYW1lID0gZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFi
bGVNYXBwaW5nLmFkZCgmcGFyYW1ldGVyLCBwYXJhbWV0ZXJOYW1lKTsKICAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCpwYXJhbWV0ZXIudHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJOYW1lKSk7CisgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpwYXJhbWV0ZXItPnR5cGUoKSksICcgJywgcGFyYW1ldGVyTmFtZSkp
OwogICAgICAgICB9CiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIikge1xuIik7CiAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7CkBA
IC00ODYsMTIgKzQ4NiwyMSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aQogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNz
aWdubWVudEV4cHJlc3Npb24pCiB7CisgICAgaWYgKGlzPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uPihhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpKSB7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oYXNzaWdubWVudEV4
cHJlc3Npb24ubGVmdCgpKS5wb2ludGVyKCkpOworICAgICAgICBhdXRvIGxlZnROYW1lID0gbV9z
dGFjay50YWtlTGFzdCgpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4
cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIGF1dG8gcmlnaHROYW1lID0gbV9zdGFjay50YWtl
TGFzdCgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoJyonLCBs
ZWZ0TmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBl
bmQocmlnaHROYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKICAgICBhdXRvIGxlZnROYW1lID0g
bV9zdGFjay50YWtlTGFzdCgpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhw
cmVzc2lvbi5yaWdodCgpKTsKICAgICBhdXRvIHJpZ2h0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3Qo
KTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobGVmdE5hbWUsICIgPSAi
LCByaWdodE5hbWUsICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQobGVmdE5hbWUpOworICAg
IG1fc3RhY2suYXBwZW5kKHJpZ2h0TmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKQEAgLTU3
MCw3ICs1NzksNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpM
b2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlcwogCiB2b2lkIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBt
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdCht
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAgICAgYXV0
byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0g
Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CkBAIC01ODcsNyArNTk2LDcgQEAgdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbiYgbWFrZUFycmEKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7Ci0gICAg
Y2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAg
ICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKG1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5j
dGlvbldyaXRlci5jcHAKaW5kZXggNjk3MmU5ODkwNTBhOWExYjdkYTgxMWE4N2MzM2MzM2QxZTRl
ZDI5Yy4uMmVkZjQxZmYzMjZhZDFjMzdlNjNkODM4Nzg4ZWViMWI1NmJkMmU5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVG
dW5jdGlvbldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAKQEAgLTExMSw4ICsxMTEsOCBA
QCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKLSAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAg
ICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byYgcGFyYW1l
dGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHBhcmFtZXRl
clR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBwYXJhbWV0ZXJOYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6Ok5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBhcmFtZXRlck5hbWVkVHlwZSkpIHsKQEAgLTEzNCw3
ICsxMzQsNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvci52YWx1ZSIpIHsKICAgICAgICAgQVNT
RVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsK
LSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
OworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRG
dW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHgpIHtcbiIpKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBzdGF0aWNfY2Fz
dDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIikpOwpAQCAtMTQyLDExICsxNDIsMTIgQEAg
U3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogQXV0aG9ycyBjYW4gbWFrZSBhIHN0cnVj
dCBmaWVsZCBuYW1lZCAibGVuZ3RoIiB0b28uIEF1dG9nZW5lcmF0ZWQgZ2V0dGVycyBmb3IgdGhv
c2Ugc2hvdWxkbid0IHRha2UgdGhpcyBjb2RlcGF0aC4KICAgICBpZiAobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLmxlbmd0aCIpIHsKICAgICAgICAgQVNTRVJU
X1VOVVNFRChpbnRyaW5zaWNzLCBtYXRjaGVzKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpKTsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0byBt
ZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICBhdXRv
JiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0udHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCktPnVuaWZ5
Tm9kZSgpOwogICAgICAgICBBU1NFUlQoaXM8QVNUOjpVbm5hbWVkVHlwZT4ocGFyYW1ldGVyVHlw
ZSkpOwogICAgICAgICBhdXRvJiB1bm5hbWVkUGFyYW1ldGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6
VW5uYW1lZFR5cGU+KHBhcmFtZXRlclR5cGUpOwogICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5
cGU+KHVubmFtZWRQYXJhbWV0ZXJUeXBlKSkgewpAQCAtMTY1LDQ1ICsxNjYsNzQgQEAgU3RyaW5n
IHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmEKICAgICB9CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3BlcmF0b3IuIl9zdHIpKSB7CisgICAgICAgIGF1dG8g
bWFuZ2xlZEZpZWxkTmFtZSA9IFsmXShTdHJpbmcmIGZpZWxkTmFtZSkgLT4gU3RyaW5nIHsKKyAg
ICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzBdLT50eXBlKCktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgYXV0byYgbmFt
ZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAg
ICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1
cmVFbGVtZW50ID0gc3RydWN0dXJlRGVmaW5pdGlvbi5maW5kKGZpZWxkTmFtZSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZUVsZW1lbnQpOworICAgICAgICAgICAgICAgIHJldHVy
biB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KCpzdHJ1Y3R1cmVFbGVt
ZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmllbGROYW1lOworICAgICAgICAgICAgfQorICAgICAgICB9OworCiAgICAgICAgIGlm
IChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5lbmRzV2l0aCgiPSIpKSB7CiAgICAg
ICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDIpOwotICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
MU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICAgICAgYXV0
byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gZmllbGROYW1lID0g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvci4iX3N0
ci5sZW5ndGgoKSk7CiAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZE5hbWUuc3Vic3RyaW5n
KDAsIGZpZWxkTmFtZS5sZW5ndGgoKSAtIDEpOworICAgICAgICAgICAgYXV0byBtZXRhbEZpZWxk
TmFtZSA9IG1hbmdsZWRGaWVsZE5hbWUoZmllbGROYW1lKTsKICAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0
aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHYsICIsIG1ldGFsUGFyYW1ldGVy
Mk5hbWUsICIgbikge1xuIikpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiICAgIHYuIiwgZmllbGROYW1lLCAiID0gbjtcbiIpKTsKKyAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICB2LiIsIG1ldGFsRmllbGROYW1lLCAi
ID0gbjtcbiIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
IiAgICByZXR1cm4gdjtcbiIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9
XG4iKTsKICAgICAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUo
KSk7CiAgICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvci4iX3N0ci5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1
dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxGaWVsZE5hbWUg
PSBtYW5nbGVkRmllbGROYW1lKGZpZWxkTmFtZSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwg
JygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIikpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHYuIiwgZmllbGROYW1lLCAiO1xuIikp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHYu
IiwgbWV0YWxGaWVsZE5hbWUsICI7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9
CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgi
b3BlcmF0b3ImLiJfc3RyKSkgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxS
ZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvciYuIl9zdHIubGVuZ3RoKCkp
OworCisgICAgICAgIFN0cmluZyBtZXRhbEZpZWxkTmFtZTsKKyAgICAgICAgYXV0byYgdW5uYW1l
ZFR5cGUgPSAqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUo
KTsKKyAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAgIGF1dG8mIG5h
bWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICBp
ZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7CisgICAgICAgICAg
ICBhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZp
bml0aW9uPihuYW1lZFR5cGUpOworICAgICAgICAgICAgYXV0byogc3RydWN0dXJlRWxlbWVudCA9
IHN0cnVjdHVyZURlZmluaXRpb24uZmluZChmaWVsZE5hbWUpOworICAgICAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZUVsZW1lbnQpOworICAgICAgICAgICAgbWV0YWxGaWVsZE5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KCpzdHJ1Y3R1cmVFbGVtZW50KTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtZXRhbEZpZWxkTmFtZSA9IGZpZWxkTmFtZTsKKwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwg
JyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHYpIHtc
biIpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVy
biAmKHYtPiIsIGZpZWxkTmFtZSwgIik7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gJih2LT4iLCBtZXRhbEZpZWxkTmFtZSwgIik7XG4i
KSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKICAgICAgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9CiAKICAgICBpZiAobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW10iKSB7CiAgICAgICAgIEFTU0VSVChu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAg
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0g
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7
CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+
dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0
cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwgbWV0YWxQ
YXJhbWV0ZXIyTmFtZSwgIiBpKSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbVtpXTtcbiIpKTsKQEAgLTIxMyw4ICsyNDMsOCBAQCBT
dHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0byBt
ZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAg
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwog
ICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBhdXRvIGZpZWxk
TmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0
b3ImW10uIl9zdHIubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0
YWxQYXJhbWV0ZXIxTmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtcbiIp
KTsKQEAgLTIyNSw5ICsyNTUsOSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYg
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpIHsKICAg
ICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUo
KSA9PSAzKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMV0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMl0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyM05h
bWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5h
bWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRh
bFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVy
MU5hbWUsICIgbSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFtZXRl
cjNOYW1lLCAiIHYpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiICAgIG1baV0gPSB2O1xuIikpOwpAQCAtMjM5LDcgKzI2OSw3IEBAIFN0cmluZyB3cml0
ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaXNPcGVyYXRv
cigpKSB7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3Ro
KCkpOwotICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUo
KSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0
dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1l
LCAiIHgpIHtcbiIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoIiAgICByZXR1cm4gIiwgb3BlcmF0b3JOYW1lLCAieDtcbiIpKTsKQEAgLTI0OSw4ICsyNzks
OCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CiAgICAgICAgIGF1dG8g
b3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5n
KCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFO
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
cjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1l
dGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0
YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIp
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiB4
ICIsIG9wZXJhdG9yTmFtZSwgIiB5O1xuIikpOwpAQCAtMjgzLDcgKzMxMyw3IEBAIFN0cmluZyB3
cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJhc3VpbnQiCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJhc2Zsb2F0IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxS
ZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBh
cmFtZXRlck5hbWUsICIgeCkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSksICIoeCk7XG4iKSk7CkBAIC0yOTMsOCArMzIzLDggQEAgU3RyaW5n
IHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAicG93IiB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRh
bjIiKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
Mk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVy
bk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
ZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1l
dGVyMU5hbWUsICIgeCwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iKSk7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksICIoeCwgeSk7XG4iKSk7CkBAIC0zMzYsMTQgKzM2
NiwxNCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJJbnRlcmxvY2tlZCJfc3RyKSkgewogICAgICAg
ICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkludGVybG9ja2VkQ29t
cGFyZUV4Y2hhbmdlIikgewogICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIEFTU0VSVChpczxB
U1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0udHlwZSgpKSk7Ci0gICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5
cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSk7
CisgICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZp
cnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAgYXV0byBmaXJz
dEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RBcmd1
bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3Vt
ZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gdGhpcmRBcmd1
bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8QVNU
OjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzNd
LnR5cGUoKSkpOwotICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0gZG93
bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzNdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnQgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50
ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5cGUo
KSkpOworICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8
QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzNdLT50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFj
ZSA9IGZvdXJ0aEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgICAgIGF1
dG8gZm91cnRoQXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShm
b3VydGhBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygn
LCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZp
cnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIGNvbXBh
cmUsICIsIHRoaXJkQXJndW1lbnQsICIgZGVzaXJlZCwgIiwgY29udmVydEFkZHJlc3NTcGFjZShm
b3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZm91cnRoQXJndW1lbnRQb2ludGVlLCAi
KiBvdXQpIHtcbiIpKTsKQEAgLTM1NCwxMyArMzg0LDEzIEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOwotICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2lu
dGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUo
KSkpOwotICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCkpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKTsKKyAgICAgICAgYXV0byYg
Zmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1
dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1lbnRQb2ludGVyLmFkZHJl
c3NTcGFjZSgpOwogICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsK
LSAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7Ci0g
ICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgpKSk7Ci0gICAgICAgIGF1dG8mIHRoaXJkQXJndW1l
bnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gc2Vjb25kQXJn
dW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6
UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+
dHlwZSgpKSk7CisgICAgICAgIGF1dG8mIHRoaXJkQXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8
QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzJdLT50eXBlKCkpOwogICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnRBZGRyZXNzU3BhY2UgPSB0
aGlyZEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgYXV0byB0aGlyZEFy
Z3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodGhpcmRBcmd1bWVu
dFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgIGF1dG8gbmFtZSA9IGF0b21pY05hbWUo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJJbnRlcmxvY2tlZCJf
c3RyLmxlbmd0aCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCmlu
ZGV4IDYxZDM0OGFmMTU5NjYyM2FmNGMzNzk4ZWE5OTgxZjk0YTQxNjk1NjUuLjQxZWJhZTZiNDBk
ZmVhMzBkYjEzNWVhM2ZlOWIxNGVjMTk3NzhlMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuY3BwCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIGJvb2wgc2FtZSA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBr
ID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsK
LSAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0
ZXJzKClba10udHlwZSgpLCAqZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBl
KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpW2tdLT50eXBlKCksICpmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygp
W2tdLT50eXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtODAsOCArODAsOCBA
QCBib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgp
ID09ICJvcGVyYXRvciZbXSIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXpl
KCkgPT0gMgotICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRp
Y19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFt
ZXRlcnMoKVswXS50eXBlKCkpKSkgewotICAgICAgICAgICAgYXV0byYgdHlwZSA9IHN0YXRpY19j
YXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRl
cnMoKVsxXS50eXBlKCkpOworICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGUg
PSBzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpUeXBl
UmVmZXJlbmNlPih0eXBlKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5
cGUgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlwZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4o
KnJlc29sdmVkVHlwZSkpIHsKQEAgLTkyLDE0ICs5MiwxNCBAQCBib29sIGNoZWNrRHVwbGljYXRl
RnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkg
PT0gIm9wZXJhdG9yLmxlbmd0aCIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMQotICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihz
dGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5w
YXJhbWV0ZXJzKClbMF0udHlwZSgpKSkKLSAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlUeXBl
PihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkpKQorICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1
bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpCisgICAgICAgICAgICB8
fCBpczxBU1Q6OkFycmF5VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+
KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5u
YW1lKCkgPT0gIm9wZXJhdG9yPT0iCiAgICAgICAgICAgICAmJiBmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpLnNpemUoKSA9PSAyCi0gICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5j
ZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQotICAgICAgICAgICAgJiYgaXM8QVNUOjpS
ZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0
aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKSkKLSAgICAgICAgICAgICYmIG1h
dGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCAqZnVuY3Rp
b25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpKQorICAgICAgICAgICAgJiYgaXM8
QVNUOjpSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4o
KmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpCisgICAgICAgICAg
ICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1l
ZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKSkKKyAg
ICAgICAgICAgICYmIG1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0t
PnR5cGUoKSwgKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAK
aW5kZXggMTM2NWYyNmQxMjM0ODIwMDBlZTc0MDQ3Y2IzMjFlODAyYjJjNjA4My4uNDY5ZmFjNmY4
ZmRiMzZmNWU3YzczMzQwOWViNWE0Y2JhMWNkY2NkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC0xMjIsOCArMTIy
LDggQEAgc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9w
ZXJhdG9yQW5kZXJJbmRleGVyKEFTVDo6Q2FsbEUKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3Ig
PSB0cnVlOwogICAgIGF1dG8gcmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVy
VHlwZT4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgZmlyc3RBcmd1bWVu
dC5hZGRyZXNzU3BhY2UoKSwgZmlyc3RBcmd1bWVudC5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwog
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJz
LmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNz
aW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgZmlyc3RBcmd1bWVudC5jbG9uZSgp
IH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwotICAgIHBhcmFtZXRl
cnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51
aW50VHlwZSgpKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIGZpcnN0QXJndW1lbnQuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpu
dWxsb3B0KSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJp
bnNpY3MudWludFR5cGUoKSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
KTsKICAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6
OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3Ry
aW5nKCJvcGVyYXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMTMyLDcg
KzEzMiw3IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdp
dGhPcGVyYXRvckxlbmd0aChBU1Q6OkNhbGxFeHByZXNzCiAgICAgY29uc3QgYm9vbCBpc09wZXJh
dG9yID0gdHJ1ZTsKICAgICBhdXRvIHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50
VHlwZSgpKTsKICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAg
cGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihj
YWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1l
bnQuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIGZpcnN0QXJndW1lbnQuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpu
dWxsb3B0KSk7CiAgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigp
KSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlw
ZSksIFN0cmluZygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQog
CkBAIC0xNTMsOCArMTUzLDggQEAgc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biByZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IoQVNUOjpDYWxsRXgKICAgICAgICAgfSkp
OwogICAgIH0pKTsKICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0g
ICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGFyZ3VtZW50
VHlwZS0+Y2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsK
LSAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RGTW92
ZShhcmd1bWVudFR5cGUpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkp
OworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgYXJndW1lbnRUeXBlLT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBX
VEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3Zl
KGFyZ3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsK
ICAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5n
KCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFy
YW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0yMDMsOCArMjAz
LDggQEAgc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVz
b2x2ZUJ5SW5zdGFudGlhdGlvbihBU1Q6OkNhbGwKICAgICAgICAgYXV0byByaWdodEFjY2VwdGFi
aWxpdHkgPSBhY2NlcHRhYmlsaXR5KHR5cGVzWzFdLmdldCgpKTsKICAgICAgICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7CiAgICAgICAgIGlmIChsZWZ0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmls
aXR5OjpZZXMgJiYgcmlnaHRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6Olllcykgewot
ICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUxID0gdHlwZXNbMF0uZ2V0KCkuZ2V0VW5uYW1l
ZFR5cGUoKTsKLSAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlMiA9IHR5cGVzWzFdLmdldCgp
LmdldFVubmFtZWRUeXBlKCk7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTEgPSAqdHlw
ZXNbMF0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRU
eXBlMiA9ICp0eXBlc1sxXS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgpOwogICAgICAgICAgICAgc3Vj
Y2VzcyA9IG1hdGNoZXModW5uYW1lZFR5cGUxLCB1bm5hbWVkVHlwZTIpOwogICAgICAgICB9IGVs
c2UgaWYgKChsZWZ0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXliZSAmJiByaWdo
dEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6WWVzKQogICAgICAgICAgICAgfHwgKGxl
ZnRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcyAmJiByaWdodEFjY2VwdGFiaWxp
dHkgPT0gQWNjZXB0YWJpbGl0eTo6TWF5YmUpKQpAQCAtMzA0LDE0ICszMDQsMTQgQEAgc3RhdGlj
IGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
JiBmdW5jdGlvbkRlZmluaXQKICAgICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVycyA9
IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCA/IDIgOiAxOwogICAgICAgICBpZiAoZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvJiBmaXJzdFBhcmFtZXRlclVu
aWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51
bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYgZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1
bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwog
ICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUp
KSB7CiAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1l
ZFR5cGU+KGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6
OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+
KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2luZCA9PSBD
aGVja0tpbmQ6OkluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlm
eU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKS0+dW5p
ZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAo
KmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgp
OwogICAgICAgICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5p
ZnlOb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRv
JiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5p
ZnlOb2RlKTsKQEAgLTMyOCwxNCArMzI4LDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JP
dmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAg
ICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6
SW5kZXggPyAzIDogMjsKICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAg
YXV0byYgZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgIGlmIChpczxBU1Q6OlVu
bmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKSkgewogICAgICAgICAgICAgYXV0byYg
dW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5p
ZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlw
ZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6
OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoa2luZCA9PSBDaGVja0tpbmQ6OkluZGV4KSB7Ci0gICAg
ICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBh
dXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpczxB
U1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxB
U1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKTsKQEAgLTM0NSw5ICszNDUs
OSBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICAgICAgaWYgKCFuYXRpdmVUeXBl
RGVjbGFyYXRpb24uaXNJbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksICpm
dW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpCisgICAgICAgIGlmICgh
bWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpLCAqZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVswXS0+dHlwZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgYXV0byYgdmFsdWVUeXBlID0gKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbbnVt
RXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMV0udHlwZSgpOworICAgICAgICBhdXRvJiB2YWx1ZVR5cGUg
PSAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtudW1FeHBlY3RlZFBhcmFtZXRlcnMg
LSAxXS0+dHlwZSgpOwogICAgICAgICBhdXRvIGdldHRlck5hbWUgPSBmdW5jdGlvbkRlZmluaXRp
b24ubmFtZSgpLnN1YnN0cmluZygwLCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLmxlbmd0aCgp
IC0gMSk7CiAgICAgICAgIGF1dG8qIGdldHRlckZ1bmNzID0gbmFtZUNvbnRleHQuZ2V0RnVuY3Rp
b25zKGdldHRlck5hbWUpOwogICAgICAgICBpZiAoIWdldHRlckZ1bmNzKQpAQCAtMzU1LDcgKzM1
NSw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgIFZlY3RvcjxSZXNvbHZpbmdU
eXBlPiBhcmd1bWVudFR5cGVzOwogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxSZXNvbHZpbmdUeXBlPj4gYXJndW1lbnRUeXBlUmVmZXJlbmNlczsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxOyArK2kpCi0gICAgICAg
ICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVu
ZCgoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSktPmNsb25lKCkp
OwogICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50VHlwZXMpCiAgICAg
ICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5cGUpOwogICAg
ICAgICBhdXRvKiBvdmVybG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgqZ2V0dGVy
RnVuY3MsIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMsIG51bGxwdHIpOwpAQCAtMzc4LDcgKzM3OCw3
IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9ICgq
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsK
KyAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFT
VDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRU
eXBlPih1bmlmeU5vZGUpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3Bl
cmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZp
bml0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFt
ZSgpID09ICJvcGVyYXRvcisrIiB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVy
YXRvci0tIikgewogICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMQotICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKVswXS50eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAg
ICAgICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpLCBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKICAgICB9CiAgICAgaWYgKGZ1bmN0
aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKyIgfHwgZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKSA9PSAib3BlcmF0b3ItIikKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEgfHwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMjsKQEAgLTQ0NywxOSArNDQ3LDE4IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBib29sIGNoZWNrU2hhZGVyVHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYpOwotICAgIHZvaWQgZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbiYsIEFTVDo6VW5uYW1lZFR5cGUmIHdyYXBwZWRCYXNlVHlwZSwgQVNU
OjpVbm5hbWVkVHlwZSogZXh0cmFBcmd1bWVudFR5cGUgPSBudWxscHRyKTsKICAgICBib29sIGlz
Qm9vbFR5cGUoUmVzb2x2aW5nVHlwZSYpOwogICAgIHN0cnVjdCBSZWN1cnNlSW5mbyB7CiAgICAg
ICAgIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGU7Ci0gICAgICAgIE9wdGlvbmFsPEFTVDo6
QWRkcmVzc1NwYWNlPiYgYWRkcmVzc1NwYWNlOworICAgICAgICBBU1Q6OlR5cGVBbm5vdGF0aW9u
JiB0eXBlQW5ub3RhdGlvbjsKICAgICB9OwotICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiByZWN1
cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTFZhbHVlID0gZmFs
c2UpOwotICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYs
IGJvb2wgcmVxdWlyZXNMVmFsdWUgPSBmYWxzZSk7CisgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+
IHJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMZWZ0VmFs
dWUgPSBmYWxzZSk7CisgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHBy
ZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSA9IGZhbHNlKTsKICAgICBPcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKICAgICBib29sIHJlY3Vyc2VBbmRSZXF1aXJlQm9v
bFR5cGUoQVNUOjpFeHByZXNzaW9uJik7Ci0gICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVz
c2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmLCBPcHRpb25hbDxBU1Q6OkFkZHJl
c3NTcGFjZT4gPSBXVEY6Om51bGxvcHQpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJl
c3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIE9wdGlvbmFsPEFTVDo6
QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBmb3J3YXJkVHlwZShBU1Q6
OkV4cHJlc3Npb24mLCBSZXNvbHZpbmdUeXBlJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+
ID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwg
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOworICAg
IHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOworICAgIHZvaWQgZm9yd2FyZFR5cGUo
QVNUOjpFeHByZXNzaW9uJiwgUmVzb2x2aW5nVHlwZSYsIEFTVDo6VHlwZUFubm90YXRpb24pOwog
CiAgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwogICAg
IHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKQEAgLTQ5
NCw3ICs0OTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lv
biYpIG92ZXJyaWRlOwogCiAgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBSZXNvbHZpbmdU
eXBlPiBtX3R5cGVNYXA7Ci0gICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBPcHRpb25hbDxB
U1Q6OkFkZHJlc3NTcGFjZT4+IG1fYWRkcmVzc1NwYWNlTWFwOworICAgIEhhc2hNYXA8QVNUOjpF
eHByZXNzaW9uKiwgQVNUOjpUeXBlQW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbnM7CiAgICAg
SGFzaFNldDxTdHJpbmc+IG1fdmVydGV4RW50cnlQb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+
IG1fZnJhZ21lbnRFbnRyeVBvaW50czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9jb21wdXRlRW50
cnlQb2ludHM7CkBAIC01MzgsOCArNTM3LDggQEAgYm9vbCBDaGVja2VyOjphc3NpZ25UeXBlcygp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBrZXlW
YWx1ZVBhaXIgOiBtX2FkZHJlc3NTcGFjZU1hcCkKLSAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+
c2V0QWRkcmVzc1NwYWNlKGtleVZhbHVlUGFpci52YWx1ZSk7CisgICAgZm9yIChhdXRvJiBrZXlW
YWx1ZVBhaXIgOiBtX3R5cGVBbm5vdGF0aW9ucykKKyAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+
c2V0VHlwZUFubm90YXRpb24oV1RGTW92ZShrZXlWYWx1ZVBhaXIudmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtNjIxLDYgKzYyMCwxNyBAQCBzdGF0aWMgT3B0aW9uYWw8VW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNv
bAogICAgIH0pKTsKIH0KIAorc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPj4gY29tbWl0KFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUpCit7CisgICAgcmV0dXJu
IHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+PiB7CisgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICB9
LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAg
ICBpZiAoIXJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVk
VHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbW1pdChyZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICB9KSk7
Cit9CisKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbikKIHsKICAgICBhdXRvKiBiYXNlVHlwZSA9IChbJl0oKSAtPiBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogewpAQCAtNzI4LDI2ICs3MzgsMjYgQEAgdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCiAgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOwogfQogCi1hdXRvIENoZWNrZXI6OnJl
Y3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJl
c0xWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OnJlY3Vyc2VB
bmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xlZnRW
YWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CiB7CiAgICAgVmlzaXRvcjo6dmlzaXQoZXhw
cmVzc2lvbik7CiAgICAgaWYgKGVycm9yKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgcmV0dXJuIGdldEluZm8oZXhwcmVzc2lvbiwgcmVxdWlyZXNMVmFsdWUpOworICAgIHJl
dHVybiBnZXRJbmZvKGV4cHJlc3Npb24sIHJlcXVpcmVzTGVmdFZhbHVlKTsKIH0KIAotYXV0byBD
aGVja2VyOjpnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJl
c0xWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CithdXRvIENoZWNrZXI6OmdldEluZm8o
QVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlKSAtPiBP
cHRpb25hbDxSZWN1cnNlSW5mbz4KIHsKICAgICBhdXRvIHR5cGVJdGVyYXRvciA9IG1fdHlwZU1h
cC5maW5kKCZleHByZXNzaW9uKTsKICAgICBBU1NFUlQodHlwZUl0ZXJhdG9yICE9IG1fdHlwZU1h
cC5lbmQoKSk7CiAKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUl0ZXJhdG9yID0gbV9hZGRyZXNzU3Bh
Y2VNYXAuZmluZCgmZXhwcmVzc2lvbik7Ci0gICAgQVNTRVJUKGFkZHJlc3NTcGFjZUl0ZXJhdG9y
ICE9IG1fYWRkcmVzc1NwYWNlTWFwLmVuZCgpKTsKLSAgICBpZiAocmVxdWlyZXNMVmFsdWUgJiYg
IWFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSkgeworICAgIGF1dG8gdHlwZUFubm90YXRpb25J
dGVyYXRvciA9IG1fdHlwZUFubm90YXRpb25zLmZpbmQoJmV4cHJlc3Npb24pOworICAgIEFTU0VS
VCh0eXBlQW5ub3RhdGlvbkl0ZXJhdG9yICE9IG1fdHlwZUFubm90YXRpb25zLmVuZCgpKTsKKyAg
ICBpZiAocmVxdWlyZXNMZWZ0VmFsdWUgJiYgdHlwZUFubm90YXRpb25JdGVyYXRvci0+dmFsdWUu
aXNSaWdodFZhbHVlKCkpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIHt7IHR5cGVJdGVyYXRvci0+dmFsdWUsIGFk
ZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSB9fTsKKyAgICByZXR1cm4ge3sgdHlwZUl0ZXJhdG9y
LT52YWx1ZSwgdHlwZUFubm90YXRpb25JdGVyYXRvci0+dmFsdWUgfX07CiB9CiAKIHZvaWQgQ2hl
Y2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9u
KQpAQCAtNzY3LDE5ICs3NzcsMzIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgfQogfQogCi12b2lkIENoZWNr
ZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVkVHlwZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+
IGFkZHJlc3NTcGFjZSkKK3ZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24m
IGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRUeXBlLCBB
U1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCiB7
CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZNb3Zl
KHVubmFtZWRUeXBlKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVzc1Nw
YWNlTWFwLmFkZCgmZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKKyAgICBhdXRvIGFkZHJlc3NT
cGFjZUFkZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92
ZSh0eXBlQW5ub3RhdGlvbikpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVz
dWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKLXZvaWQgQ2hlY2tl
cjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgT3B0aW9uYWw8QVNU
OjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKK3ZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShB
U1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5u
b3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90
eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkp
OwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0g
ICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4
cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQg
PSBtX3R5cGVBbm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRp
b24pKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1Nw
YWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIENoZWNrZXI6OmZvcndhcmRUeXBl
KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlw
ZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgp
KQoreworICAgIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOworICAgICAgICBB
U1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0sIFsm
XShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKKyAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJlZigp
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICB9KSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX3R5cGVBbm5v
dGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKICAgICBB
U1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0
LmlzTmV3RW50cnkpOwogfQogCkBAIC03ODksNiArODEyLDExIEBAIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCiAgICAg
aWYgKCFsZWZ0SW5mbykKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGxlZnRJbmZvLT50eXBl
QW5ub3RhdGlvbi5pc1JpZ2h0VmFsdWUoKSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgYXV0byByaWdodEluZm8gPSByZWN1cnNlQW5kR2V0SW5m
byhhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKICAgICBpZiAoIXJpZ2h0SW5mbykKICAg
ICAgICAgcmV0dXJuOwpAQCAtODAyLDIzICs4MzAsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKICAgICBhc3Np
Z25UeXBlKGFzc2lnbm1lbnRFeHByZXNzaW9uLCBXVEZNb3ZlKCpyZXN1bHRUeXBlKSk7CiB9CiAK
LXZvaWQgQ2hlY2tlcjo6Zm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBS
ZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4g
YWRkcmVzc1NwYWNlKQotewotICAgIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkp
OwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkp
OwotICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsK
LSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1
bHQuY29weVJlZigpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKLSAgICB9KSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQg
PSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7Ci0gICAg
QVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKLX0KLQogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBs
VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5s
VmFsdWUoKSwgdHJ1ZSk7Ci0gICAgaWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVl
SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZh
bHVlKCksIHRydWUpOworICAgIGlmICghbGVmdFZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSBSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uJ3MgQW5vbnltb3VzVmFyaWFibGVzLgpAQCAtODI3LDcgKzg0Miw3IEBA
IHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uKQogICAgIGlmICghbmV3VmFsdWVJbmZvKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5
cGUsIG5ld1ZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSkpIHsKKyAgICBpZiAoIW1hdGNoQW5kQ29t
bWl0KGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+cmVzb2x2aW5n
VHlwZSkpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTg3MywzNyArODg4LDQzIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGFzc2lnblR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+Y2xv
bmUoKSwgcG9pbnRlclR5cGUtPmFkZHJlc3NTcGFjZSgpKTsKKyAgICBhc3NpZ25UeXBlKGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmNsb25lKCksIEFTVDo6TGVmdFZhbHVlIHsg
cG9pbnRlclR5cGUtPmFkZHJlc3NTcGFjZSgpIH0pOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7Ci0g
ICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZVBvaW50ZXJFeHByZXNz
aW9uLmxWYWx1ZSgpLCB0cnVlKTsKLSAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgYXV0byBsZWZ0
VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRW
YWx1ZSgpLCB0cnVlKTsKKyAgICBpZiAoIWxlZnRWYWx1ZUluZm8pCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0
aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKKyAg
ICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGF1dG8qIGxW
YWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAg
ICBpZiAoIWxWYWx1ZVR5cGUpIHsKKyAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0VW5uYW1l
ZFR5cGUobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVU
eXBlKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhc3NpZ25UeXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBv
aW50ZXJUeXBlPihMZXhlcjo6VG9rZW4obWFrZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwg
KmxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSwgbFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAgIGFz
c2lnblR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRl
clR5cGU+KExleGVyOjpUb2tlbihtYWtlUG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVm
dEFkZHJlc3NTcGFjZSwgbGVmdFZhbHVlVHlwZS0+Y2xvbmUoKSkpOwogfQogCiB2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbikKIHsKLSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0
SW5mbyhtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICBpZiAoIWxW
YWx1ZUluZm8pCisgICAgYXV0byBsZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CisgICAgaWYgKCFsZWZ0VmFs
dWVJbmZvKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBsVmFsdWVUeXBlID0gZ2V0VW5u
YW1lZFR5cGUobFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFsVmFsdWVUeXBl
KSB7CisgICAgYXV0byogbGVmdFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxlZnRWYWx1ZUlu
Zm8tPnJlc29sdmluZ1R5cGUpOworICAgIGlmICghbGVmdFZhbHVlVHlwZSkgewogICAgICAgICBz
ZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byYgdW5pZnlOb2Rl
ID0gbFZhbHVlVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgYXV0byYgdW5pZnlOb2RlID0gbGVmdFZh
bHVlVHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5
Tm9kZSkpIHsKICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5u
YW1lZFR5cGUpKSB7CkBAIC05MTMsNyArOTM0LDggQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3MK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbFZhbHVlSW5m
by0+YWRkcmVzc1NwYWNlKSB7CisgICAgICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRW
YWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgaWYg
KCFsZWZ0QWRkcmVzc1NwYWNlKSB7CiAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC05MjEsMTgzICs5NDMsMTEyIEBAIHZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzCiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUp
KSB7CiAgICAgICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlw
ZT4odW5uYW1lZFR5cGUpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhlIG51bWJlciBv
ZiBlbGVtZW50cy4KLSAgICAgICAgICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRv
a2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+
YWRkcmVzc1NwYWNlLCBhcnJheVR5cGUudHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAgIGFz
c2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9u
ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
IWxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSkgeworICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9
IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBp
ZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
biwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVz
c1NwYWNlLCBsVmFsdWVUeXBlLT5jbG9uZSgpKSk7CisgICAgYXNzaWduVHlwZShtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICps
ZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKLXZvaWQgQ2hl
Y2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiB3cmFw
cGVkQmFzZVR5cGUsIEFTVDo6VW5uYW1lZFR5cGUqIGV4dHJhQXJndW1lbnRUeXBlKQordm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7Ci0gICAg
dXNpbmcgT3ZlcmxvYWRSZXNvbHV0aW9uID0gc3RkOjp0dXBsZTxBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qLCBBU1Q6OlVubmFtZWRUeXBlKj47Ci0KLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIGdldEZ1bmN0aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVyblR5cGU7Ci0g
ICAgc3RkOjp0aWUoZ2V0RnVuY3Rpb24sIGdldFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJs
b2FkUmVzb2x1dGlvbiB7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgZ2V0QXJndW1lbnRUeXBlMSh3
cmFwcGVkQmFzZVR5cGUuY2xvbmUoKSk7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+
IGdldEFyZ3VtZW50VHlwZTI7Ci0gICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAgICAg
ICAgICAgIGdldEFyZ3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBl
LT5jbG9uZSgpKTsKKyAgICBhdXRvIGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oZG90RXhw
cmVzc2lvbi5iYXNlKCkpOworICAgIGlmICghYmFzZUluZm8pCisgICAgICAgIHJldHVybjsKKyAg
ICBhdXRvIGJhc2VVbm5hbWVkVHlwZSA9IGNvbW1pdChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7
CisgICAgaWYgKCFiYXNlVW5uYW1lZFR5cGUpCisgICAgICAgIHJldHVybjsKIAorICAgIEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5u
YW1lZFR5cGUqIGdldFJldHVyblR5cGUgPSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGdldEFyZ3VtZW50VHlwZXM7
Ci0gICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGdldEFyZ3VtZW50VHlwZTEpOwotICAg
ICAgICBpZiAoZ2V0QXJndW1lbnRUeXBlMikKLSAgICAgICAgICAgIGdldEFyZ3VtZW50VHlwZXMu
YXBwZW5kKCpnZXRBcmd1bWVudFR5cGUyKTsKLQotICAgICAgICBhdXRvKiBnZXRGdW5jdGlvbiA9
IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9z
c2libGVHZXRPdmVybG9hZHMoKSwgZ2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAgICAg
IGlmICghZ2V0RnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVs
bHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihnZXRGdW5jdGlv
biwgJmdldEZ1bmN0aW9uLT50eXBlKCkpOwotICAgIH0pKCk7Ci0KLSAgICBBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qIGFuZEZ1bmN0aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVy
blR5cGU7Ci0gICAgc3RkOjp0aWUoYW5kRnVuY3Rpb24sIGFuZFJldHVyblR5cGUpID0gKFsmXSgp
IC0+IE92ZXJsb2FkUmVzb2x1dGlvbiB7Ci0gICAgICAgIGF1dG8gY29tcHV0ZUFuZEFyZ3VtZW50
VHlwZSA9IFsmXShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8UmVz
b2x2aW5nVHlwZT4gewotICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
Pih1bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgdW5uYW1lZFR5cGUuY2xv
bmUoKSB9OwotICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNUOjpB
cnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCkuY2xvbmUoKSkpIH07Ci0gICAgICAgICAgICBp
ZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4geyBSZXNvbHZpbmdUeXBlKG1h
a2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0
PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpLmNsb25lKCkpKSB9OwotICAgICAgICB9
OwotICAgICAgICBhdXRvIGNvbXB1dGVBbmRSZXR1cm5UeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5
cGUmIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7Ci0gICAgICAgICAgICBpZiAo
aXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVy
biAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCk7
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfTsKLQotICAgICAgICBhdXRv
IGFuZEFyZ3VtZW50VHlwZTEgPSBjb21wdXRlQW5kQXJndW1lbnRUeXBlKHdyYXBwZWRCYXNlVHlw
ZSk7Ci0gICAgICAgIGlmICghYW5kQXJndW1lbnRUeXBlMSkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgT3B0aW9uYWw8UmVzb2x2
aW5nVHlwZT4gYW5kQXJndW1lbnRUeXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBl
KQotICAgICAgICAgICAgYW5kQXJndW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1
bWVudFR5cGUtPmNsb25lKCkpOworICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNl
SW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0
aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwgZ2V0
QXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlmIChnZXRGdW5jdGlvbikKKyAgICAg
ICAgICAgIGdldFJldHVyblR5cGUgPSAmZ2V0RnVuY3Rpb24tPnR5cGUoKTsKKyAgICB9CiAKKyAg
ICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBB
U1Q6OlVubmFtZWRUeXBlKiBhbmRSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBs
ZWZ0QWRkcmVzc1NwYWNlID0gYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3Bh
Y2UoKSkgeworICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQ
b2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFk
ZHJlc3NTcGFjZSwgYmFzZVVubmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKICAgICAgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFuZEFyZ3VtZW50VHlw
ZXM7Ci0gICAgICAgIGFuZEFyZ3VtZW50VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5cGUxKTsK
LSAgICAgICAgaWYgKGFuZEFyZ3VtZW50VHlwZTIpCi0gICAgICAgICAgICBhbmRBcmd1bWVudFR5
cGVzLmFwcGVuZCgqYW5kQXJndW1lbnRUeXBlMik7Ci0KLSAgICAgICAgYXV0byogYW5kRnVuY3Rp
b24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LnBvc3NpYmxlQW5kT3ZlcmxvYWRzKCksIGFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAg
ICAgICBpZiAoIWFuZEZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYW5kRnVu
Y3Rpb24sIGNvbXB1dGVBbmRSZXR1cm5UeXBlKGFuZEZ1bmN0aW9uLT50eXBlKCkpKTsKLSAgICB9
KSgpOworICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5n
VHlwZSk7CisgICAgICAgIGFuZEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBs
KGRvdEV4cHJlc3Npb24ucG9zc2libGVBbmRPdmVybG9hZHMoKSwgYW5kQXJndW1lbnRUeXBlcywg
bnVsbHB0cik7CisgICAgICAgIGlmIChhbmRGdW5jdGlvbikKKyAgICAgICAgICAgIGFuZFJldHVy
blR5cGUgPSAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSku
ZWxlbWVudFR5cGUoKTsgLy8gRklYTUU6IEVuZm9yY2UgdGhlIHJldHVybiBvZiBhbmRlcnMgd2ls
bCBhbHdheXMgYmUgYSBwb2ludGVyCisgICAgfQorCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKiB0aHJlYWRBbmRGdW5jdGlvbiA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSog
dGhyZWFkQW5kUmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAgeworICAgICAgICBhdXRvIGFyZ3Vt
ZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRv
dEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlVW5u
YW1lZFR5cGUtPmdldCgpLmNsb25lKCkpOworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gdGhyZWFkQW5kQXJndW1lbnRUeXBlczsKKyAgICAgICAg
dGhyZWFkQW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOwor
ICAgICAgICB0aHJlYWRBbmRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChk
b3RFeHByZXNzaW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRzKCksIHRocmVhZEFuZEFyZ3VtZW50VHlw
ZXMsIG51bGxwdHIpOworICAgICAgICBpZiAodGhyZWFkQW5kRnVuY3Rpb24pCisgICAgICAgICAg
ICB0aHJlYWRBbmRSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHRocmVh
ZEFuZEZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBFbmZvcmNlIHRo
ZSByZXR1cm4gb2YgYW5kZXJzIHdpbGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgIH0KIAotICAg
IGlmICghZ2V0UmV0dXJuVHlwZSAmJiAhYW5kUmV0dXJuVHlwZSkgeworICAgIGlmICghZ2V0RnVu
Y3Rpb24gJiYgIWFuZEZ1bmN0aW9uKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0KLSAgICBpZiAoZ2V0UmV0dXJuVHlwZSAmJiBhbmRSZXR1cm5UeXBlICYm
ICFtYXRjaGVzKCpnZXRSZXR1cm5UeXBlLCAqYW5kUmV0dXJuVHlwZSkpIHsKKyAgICBpZiAoZ2V0
RnVuY3Rpb24gJiYgYW5kRnVuY3Rpb24pIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoYW5kRnVuY3Rpb24gJiYgdGhyZWFkQW5kRnVuY3Rpb24g
JiYgIW1hdGNoZXMoKmFuZFJldHVyblR5cGUsICp0aHJlYWRBbmRSZXR1cm5UeXBlKSkgewogICAg
ICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBzZXRS
ZXR1cm5UeXBlOwotICAgIHN0ZDo6dGllKHNldEZ1bmN0aW9uLCBzZXRSZXR1cm5UeXBlKSA9IChb
Jl0oKSAtPiBPdmVybG9hZFJlc29sdXRpb24gewotICAgICAgICBSZXNvbHZpbmdUeXBlIHNldEFy
Z3VtZW50MVR5cGUod3JhcHBlZEJhc2VUeXBlLmNsb25lKCkpOwotICAgICAgICBPcHRpb25hbDxS
ZXNvbHZpbmdUeXBlPiBzZXRBcmd1bWVudFR5cGUyOwotICAgICAgICBpZiAoZXh0cmFBcmd1bWVu
dFR5cGUpCi0gICAgICAgICAgICBzZXRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRy
YUFyZ3VtZW50VHlwZS0+Y2xvbmUoKSk7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgc2V0QXJndW1l
bnQzVHlwZShnZXRSZXR1cm5UeXBlID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVy
blR5cGUtPmNsb25lKCkpOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdldFJl
dHVyblR5cGUgPyBnZXRSZXR1cm5UeXBlIDogYW5kUmV0dXJuVHlwZTsKIAorICAgIEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiogc2V0RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1l
ZFR5cGUqIHNldFJldHVyblR5cGUgPSBudWxscHRyOworICAgIHsKICAgICAgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHNldEFyZ3VtZW50VHlwZXM7Ci0g
ICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKHNldEFyZ3VtZW50MVR5cGUpOwotICAgICAg
ICBpZiAoc2V0QXJndW1lbnRUeXBlMikKLSAgICAgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBw
ZW5kKCpzZXRBcmd1bWVudFR5cGUyKTsKLSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQo
c2V0QXJndW1lbnQzVHlwZSk7Ci0KLSAgICAgICAgYXV0byogc2V0RnVuY3Rpb24gPSByZXNvbHZl
RnVuY3Rpb25PdmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlU2V0
T3ZlcmxvYWRzKCksIHNldEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIXNl
dEZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51
bGxwdHIpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc2V0RnVuY3Rpb24sICZzZXRG
dW5jdGlvbi0+dHlwZSgpKTsKLSAgICB9KSgpOwotCi0gICAgaWYgKHNldEZ1bmN0aW9uKSB7Ci0g
ICAgICAgIGlmICghbWF0Y2hlcyhzZXRGdW5jdGlvbi0+dHlwZSgpLCB3cmFwcGVkQmFzZVR5cGUp
KSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFj
ZTsKLSAgICBpZiAoZ2V0UmV0dXJuVHlwZSB8fCBhbmRSZXR1cm5UeXBlKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBUaGUgcmVmZXJlbmNlIGNvbXBpbGVyIGhhcyAiZWxzZSBpZiAoIW5vZGUuYmFzZS5p
c0xWYWx1ZSAmJiAhYmFzZVR5cGUuaXNBcnJheVJlZikiLAotICAgICAgICAvLyBidXQgSSBkb24n
dCB1bmRlcnN0YW5kIHdoeSBpdCBleGlzdHMuIEkgaGF2ZW4ndCB3cml0dGVuIGl0IGhlcmUsIGFu
ZCBJJ2xsIGludmVzdGlnYXRlCi0gICAgICAgIC8vIGlmIHdlIGNhbiByZW1vdmUgaXQgZnJvbSB0
aGUgcmVmZXJlbmNlIGNvbXBpbGVyLgotICAgICAgICBpZiAoaXM8QVNUOjpSZWZlcmVuY2VUeXBl
Pih3cmFwcGVkQmFzZVR5cGUpKQotICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gZG93bmNhc3Q8
QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVkQmFzZVR5cGUpLmFkZHJlc3NTcGFjZSgpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2Fk
ZHJlc3NTcGFjZU1hcC5maW5kKCZwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChhZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1h
cC5lbmQoKSk7Ci0gICAgICAgICAgICBpZiAoYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKQot
ICAgICAgICAgICAgICAgIGFkZHJlc3NTcGFjZSA9ICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFs
dWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBz
ZXRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAg
IFJlc29sdmluZ1R5cGUgZmllbGRSZXNvbHZpbmdUeXBlKGZpZWxkVHlwZS0+Y2xvbmUoKSk7Cisg
ICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGZpZWxkUmVzb2x2aW5nVHlwZSk7CisgICAg
ICAgIHNldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Np
b24ucG9zc2libGVTZXRPdmVybG9hZHMoKSwgc2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Cisg
ICAgICAgIGlmIChzZXRGdW5jdGlvbikKKyAgICAgICAgICAgIHNldFJldHVyblR5cGUgPSAmc2V0
RnVuY3Rpb24tPnR5cGUoKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogR2VuZXJhdGUgdGhlIGNh
bGwgZXhwcmVzc2lvbnMKLQotICAgIGFzc2lnblR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LCBnZXRSZXR1cm5UeXBlID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUt
PmNsb25lKCksIGFkZHJlc3NTcGFjZSk7Ci19Ci0KLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPj4gQ2hlY2tlcjo6cmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQotewotICAgIGF1dG8g
YmFzZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFz
ZSgpKTsKLSAgICBpZiAoIWJhc2VJbmZvKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgYXV0byogYmFzZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShiYXNlSW5mby0+cmVzb2x2aW5n
VHlwZSk7Ci0gICAgaWYgKCFiYXNlVHlwZSkgeworICAgIGlmIChzZXRGdW5jdGlvbiAmJiBhbmRG
dW5jdGlvbikgewogICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIH0KLSAgICBhdXRvJiBiYXNlVW5pZnlOb2RlID0gYmFzZVR5cGUtPnVuaWZ5Tm9k
ZSgpOwotICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSkKLSAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpLmNsb25l
KCk7Ci0gICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSk7Ci0gICAg
cmV0dXJuIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVVu
aWZ5Tm9kZSkpIH07Ci19Ci0KLXZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9u
JiBkb3RFeHByZXNzaW9uKQotewotICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJh
c2VUeXBlKGRvdEV4cHJlc3Npb24pOwotICAgIGlmICghYmFzZVR5cGUpCiAgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKGRvdEV4cHJlc3Np
b24sICpiYXNlVHlwZSk7CisgICAgZG90RXhwcmVzc2lvbi5zZXRHZXRGdW5jdGlvbihnZXRGdW5j
dGlvbik7CisgICAgZG90RXhwcmVzc2lvbi5zZXRBbmRGdW5jdGlvbihhbmRGdW5jdGlvbik7Cisg
ICAgZG90RXhwcmVzc2lvbi5zZXRUaHJlYWRBbmRGdW5jdGlvbih0aHJlYWRBbmRGdW5jdGlvbik7
CisgICAgZG90RXhwcmVzc2lvbi5zZXRTZXRGdW5jdGlvbihzZXRGdW5jdGlvbik7CisKKyAgICBB
U1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCk7Cisg
ICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5s
ZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgaWYgKGFuZEZ1bmN0aW9uKQorICAgICAgICAg
ICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRkcmVzc1NwYWNlIH07
CisgICAgICAgIGVsc2UgaWYgKHNldEZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFubm90YXRp
b24gPSBBU1Q6OkFic3RyYWN0TGVmdFZhbHVlKCk7CisgICAgfSBlbHNlIGlmICghYmFzZUluZm8t
PnR5cGVBbm5vdGF0aW9uLmlzUmlnaHRWYWx1ZSgpICYmIChzZXRGdW5jdGlvbiB8fCBhbmRGdW5j
dGlvbikpCisgICAgICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgp
OworICAgIGFzc2lnblR5cGUoZG90RXhwcmVzc2lvbiwgZmllbGRUeXBlLT5jbG9uZSgpLCBXVEZN
b3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJbmRl
eEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJ
bmRleEV4cHJlc3Npb24mKQogewotICAgIGF1dG8gYmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJh
c2VUeXBlKGluZGV4RXhwcmVzc2lvbik7Ci0gICAgaWYgKCFiYXNlVHlwZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byBpbmRleEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhpbmRleEV4cHJl
c3Npb24uaW5kZXhFeHByZXNzaW9uKCkpOwotICAgIGlmICghaW5kZXhJbmZvKQotICAgICAgICBy
ZXR1cm47Ci0gICAgYXV0byBpbmRleEV4cHJlc3Npb25UeXBlID0gZ2V0VW5uYW1lZFR5cGUoaW5k
ZXhJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWluZGV4RXhwcmVzc2lvblR5cGUpIHsK
LSAgICAgICAgc2V0RXJyb3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmlz
aFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoaW5kZXhFeHByZXNzaW9uLCBXVEZNb3ZlKCpiYXNlVHlw
ZSksIGluZGV4RXhwcmVzc2lvblR5cGUpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4K
IH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJs
ZVJlZmVyZW5jZSkKQEAgLTExMDUsMTAgKzEwNTYsMTAgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKICAgICBBU1NFUlQodmFy
aWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CiAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNl
LnZhcmlhYmxlKCktPnR5cGUoKSk7CiAgICAgCi0gICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3Bh
Y2U+IGFkZHJlc3NTcGFjZTsKLSAgICBpZiAoIXZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkt
PmlzQW5vbnltb3VzKCkpCi0gICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQ7Ci0gICAgYXNzaWduVHlwZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZl
cmVuY2UudmFyaWFibGUoKS0+dHlwZSgpLT5jbG9uZSgpLCBhZGRyZXNzU3BhY2UpOworICAgIEFT
VDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKTsKKyAg
ICBpZiAoIXZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPmlzQW5vbnltb3VzKCkpIC8vIEZJ
WE1FOiBUaGlzIGRvZXNuJ3Qgc2VlbSByaWdodC4KKyAgICAgICAgdHlwZUFubm90YXRpb24gPSBB
U1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfTsKKyAgICBhc3NpZ25U
eXBlKHZhcmlhYmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBl
KCktPmNsb25lKCksIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0KIAogdm9pZCBDaGVja2Vy
Ojp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQpAQCAtMTQwNyw3ICsxMzU4LDcg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNz
aW9uKQogICAgIGlmIChlcnJvcigpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBsYXN0SW5m
byA9IGdldEluZm8oY29tbWFFeHByZXNzaW9uLmxpc3QoKS5sYXN0KCkpOwotICAgIGZvcndhcmRU
eXBlKGNvbW1hRXhwcmVzc2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGZvcndh
cmRUeXBlKGNvbW1hRXhwcmVzc2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUsIGxhc3RJbmZv
LT50eXBlQW5ub3RhdGlvbik7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5
RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCkBAIC0xNDU2LDcgKzE0MDcsNyBAQCB2b2lk
IENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQogICAg
IH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPnBhcmFtZXRlcnMoKS5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KHR5cGVzW2ldLmdldCgp
LCAqZnVuY3Rpb24tPnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKSB7CisgICAgICAgIGlmICghbWF0
Y2hBbmRDb21taXQodHlwZXNbaV0uZ2V0KCksICpmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLT50
eXBlKCkpKSB7CiAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEluZmVyVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbmZlclR5cGVzLmNwcAppbmRleCAyZmNjNmYxMzlkZTg0YTMyYzRjNzA3Y2EwNjBi
OWJlMWI0MmZkM2UwLi4xNThlMjNiNDcyZGU0OTkzMWViNzg0MmM5N2I4NGFhMjNkMDk3MGU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVy
VHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
SW5mZXJUeXBlcy5jcHAKQEAgLTIyNyw5ICsyMjcsOSBAQCBib29sIGluZmVyVHlwZXNGb3JDYWxs
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgcG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6
cgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3Nz
aWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvIHN1
Y2Nlc3MgPSBhcmd1bWVudFR5cGVzW2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZd
KFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgewotICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ld
LnR5cGUoKSwgdW5uYW1lZFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnBvc3Np
YmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCksIHVubmFtZWRUeXBlKTsKICAgICAg
ICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBl
UmVmZXJlbmNlKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZlKHBvc3NpYmxlRnVuY3Rpb24ucGFy
YW1ldGVycygpW2ldLnR5cGUoKS0+dW5pZnlOb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIHJl
c29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUocG9zc2li
bGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKS0+dW5pZnlOb2RlKCkpOwogICAgICAg
ICB9KSk7CiAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFt
ZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
TmFtZVJlc29sdmVyLmNwcAppbmRleCAwNTM1MGUwZGM5ODVlY2IzOTBmNTg2ZjBhMzRkMmE2ZWNm
ZWRjYTMyLi4zY2JlZGQ5YzI1Nzg4ZmU1ZGUwNTYxMmZmMGRkMjZkNGM4NTRmN2UzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
UmVzb2x2ZXIuY3BwCkBAIC0xOTcsOSArMTk3LDEwIEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNp
dChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8PSBz
aXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFi
bGUgdG8gYmVjb21lIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBi
YWNrcmVmZXJlbmNlcyIpOwogICAgICAgICAgICAgICAgICAgICBMZXhlcjo6VG9rZW4gb3JpZ2lu
ID0gZG90RXhwcmVzc2lvbi5vcmlnaW4oKTsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFBlcmhhcHMgZG8gdGhpcyB3aXRoIHZhcmlhbnRzIG9yIGEgUmV3cml0ZXIgaW5zdGVhZC4KKyAg
ICAgICAgICAgICAgICAgICAgdm9pZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKICAgICAg
ICAgICAgICAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOwogICAgICAgICAg
ICAgICAgICAgICBhdXRvIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCA9IEFTVDo6RW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsOjp3cmFwKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShiYXNlTmFtZSks
IFdURk1vdmUobWVtYmVyTmFtZSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbiwgKm1lbWJlcik7Ci0g
ICAgICAgICAgICAgICAgICAgIG5ldyAoJmRvdEV4cHJlc3Npb24pIEFTVDo6RW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsKFdURk1vdmUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSk7CisgICAgICAg
ICAgICAgICAgICAgIG5ldyAobG9jYXRpb24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
KFdURk1vdmUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFy
c2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2Vy
LmNwcAppbmRleCAzOWRkN2EyYTFiYWIwYTk3YjA5Mzk4ZTUwN2U0ODg3MTg3ZTlhZDZiLi5hOTc3
ODk3OTAzMDc0NjhjZjZmMGYzMGIxMDBkNWZmNWU5N2E2YjRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkBAIC0xMDgyLDEz
ICsxMDgyLDEzIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBlY3RlZDxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zLCBFcnJvcj4KICAgICBhdXRvIGZpcnN0UGFyYW1ldGVy
ID0gcGFyc2VQYXJhbWV0ZXIoKTsKICAgICBpZiAoIWZpcnN0UGFyYW1ldGVyKQogICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZmlyc3RQYXJhbWV0ZXIuZXJyb3IoKSk7Ci0gICAgcGFy
YW1ldGVycy5hcHBlbmQoV1RGTW92ZSgqZmlyc3RQYXJhbWV0ZXIpKTsKKyAgICBwYXJhbWV0ZXJz
LmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgq
Zmlyc3RQYXJhbWV0ZXIpKSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5
cGU6OkNvbW1hKSkgewogICAgICAgICBhdXRvIHBhcmFtZXRlciA9IHBhcnNlUGFyYW1ldGVyKCk7
CiAgICAgICAgIGlmICghcGFyYW1ldGVyKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KHBhcmFtZXRlci5lcnJvcigpKTsKLSAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RG
TW92ZSgqcGFyYW1ldGVyKSk7CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCpwYXJhbWV0ZXIpKSk7CiAgICAg
fQogCiAgICAgYXV0byByaWdodFBhcmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2Vu
OjpUeXBlOjpSaWdodFBhcmVudGhlc2lzKTsKQEAgLTE1NjcsMTQgKzE1NjcsMTQgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zU3QKICAgICBpZiAoIWZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikKICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbi5l
cnJvcigpKTsKIAotICAgIFZlY3RvcjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IHJlc3VsdDsK
LSAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikpOwor
ICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gcmVzdWx0Owor
ICAgIHJlc3VsdC5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+
KFdURk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikpKTsKIAogICAgIHdoaWxlICh0cnlU
eXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7CiAgICAgICAgIGF1dG8gdmFyaWFibGVE
ZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsK
ICAgICAgICAgaWYgKCF2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQoV1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICByZXN1
bHQuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3Zl
KCp2YXJpYWJsZURlY2xhcmF0aW9uKSkpOwogICAgIH0KIAogICAgIHJldHVybiBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocmVzdWx0
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByZXBhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVwYXJlLmNwcAppbmRleCA5YTEwMzVhNGI4Y2FkMzNhMjFlNjcwZjIyMDA1OTFjYzE0OGQ2YjEz
Li44NjliN2MzOGNkYjRhOWRjYzFiMjk0MTk2NGJlOWQ2ODFhZDhlMDg4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgogI2luY2x1ZGUg
IldITFNMUGFyc2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hM
U0xQcm9wZXJ0eVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV0hMU0xSZWN1cnNpb25DaGVja2VyLmgi
CiAjaW5jbHVkZSAiV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNM
U2VtYW50aWNNYXRjaGVyLmgiCkBAIC04Miw3ICs4Myw3IEBAIHN0YXRpYyBPcHRpb25hbDxQcm9n
cmFtPiBwcmVwYXJlU2hhcmVkKFN0cmluZyYgd2hsc2xTb3VyY2UpCiAgICAgaWYgKCFjaGVjayhw
cm9ncmFtKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBjaGVja0xpdGVyYWxU
eXBlcyhwcm9ncmFtKTsKLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NTc4OCBSZXNvbHZlIHByb3BlcnRpZXMgaGVyZQorICAgIHJlc29sdmVQ
cm9wZXJ0aWVzKHByb2dyYW0pOwogICAgIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKICAgICBp
ZiAoIWNoZWNrU3RhdGVtZW50QmVoYXZpb3IocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZGVhYTAyNzVm
ZDlmNzBhOGMxNDc5YjBjZDE1MmM4NzQ4MDRiNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcApA
QCAtMCwwICsxLDc2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDYWxs
RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29tbWFFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERvdEV4cHJl
c3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRl
ICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZVBvaW50ZXJF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldI
TFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVE
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKKyNpbmNs
dWRlICJXSExTTFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCitjbGFzcyBQcm9wZXJ0eVJlc29sdmVyIDogcHVibGljIFZpc2l0b3IgeworcHVi
bGljOgorcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwor
CisgICAgYm9vbCBzaW1wbGlmeVJpZ2h0VmFsdWUoQVNUOjpEb3RFeHByZXNzaW9uJik7CisgICAg
Ym9vbCBzaW1wbGlmeUFic3RyYWN0TGVmdFZhbHVlKEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24m
LCBBU1Q6OkRvdEV4cHJlc3Npb24mLCBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIHJpZ2h0
KTsKKyAgICB2b2lkIHNpbXBsaWZ5TGVmdFZhbHVlKEFTVDo6RXhwcmVzc2lvbiYpOworCisgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOworfTsKKwor
dm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJl
c3Npb24pCit7CisgICAgLy8gVW5sZXNzIHdlJ3JlIGluc2lkZSBhbiBBc3NpZ25tZW50RXhwcmVz
c2lvbiBvciBhIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24sIHdlJ3JlIGEgcmlnaHQgdmFsdWUu
CisgICAgaWYgKCFzaW1wbGlmeVJpZ2h0VmFsdWUoZG90RXhwcmVzc2lvbikpCisgICAgICAgIHNl
dEVycm9yKCk7Cit9CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBWaXNpdG9yOjp2aXNpdChm
dW5jdGlvbkRlZmluaXRpb24pOworICAgIGlmICghbV92YXJpYWJsZURlY2xhcmF0aW9ucy5pc0Vt
cHR5KCkpCisgICAgICAgIGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpLnN0YXRlbWVudHMoKS5p
bnNlcnQoMCwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
PihMZXhlcjo6VG9rZW4obV92YXJpYWJsZURlY2xhcmF0aW9uc1swXS0+b3JpZ2luKCkpLCBXVEZN
b3ZlKG1fdmFyaWFibGVEZWNsYXJhdGlvbnMpKSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gc2V0dGVyQ2FsbChBU1Q6OkRvdEV4cHJlc3Npb24mIGRv
dEV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgbmV3VmFsdWUsIGNvbnN0
IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIGxlZnRWYWx1ZUZh
Y3RvcnksIGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4m
IHBvaW50ZXJUb0xlZnRWYWx1ZUZhY3RvcnkpCit7CisgICAgaWYgKGRvdEV4cHJlc3Npb24uYW5k
RnVuY3Rpb24oKSkgeworICAgICAgICAvLyAqb3BlcmF0b3ImLmZvbygmdikgPSBuZXdWYWx1ZQor
ICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVu
ZChwb2ludGVyVG9MZWZ0VmFsdWVGYWN0b3J5KCkpOworICAgICAgICBhdXRvIGNhbGxFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90
RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0
aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgIGNhbGxFeHByZXNz
aW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlwZSgpLmNs
b25lKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpS
aWdodFZhbHVlKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmRvdEV4
cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSk7CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5j
ZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihM
ZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUoY2FsbEV4cHJlc3Np
b24pKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlwZSgp
KS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRo
cmVhZCB9KTsKKworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lv
bi5vcmlnaW4oKSksIFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSwgV1RGTW92ZShuZXdW
YWx1ZSkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPihkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUo
KSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICByZXR1cm4g
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikp
OworICAgIH0KKworICAgIC8vIHYgPSBvcGVyYXRvci5mb289KHYsIG5ld1ZhbHVlKQorICAgIEFT
U0VSVChkb3RFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCkpOworCisgICAgVmVjdG9yPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChsZWZ0
VmFsdWVGYWN0b3J5KCkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShuZXdWYWx1ZSkp
OworICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJl
c3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKGRvdEV4
cHJlc3Npb24uc2V0RnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAg
ICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCktPnR5
cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpSaWdodFZhbHVlKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90RXhw
cmVzc2lvbi5zZXRGdW5jdGlvbigpKTsKKworICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24g
PSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihk
b3RFeHByZXNzaW9uLm9yaWdpbigpKSwgbGVmdFZhbHVlRmFjdG9yeSgpLCBXVEZNb3ZlKGNhbGxF
eHByZXNzaW9uKSk7CisgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVz
c2lvbi5zZXRGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgYXNzaWdubWVudEV4cHJl
c3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgIHJldHVy
biBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9u
KSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZ2V0
dGVyQ2FsbChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24sIGNvbnN0IHN0ZDo6ZnVu
Y3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIGxlZnRWYWx1ZUZhY3RvcnksIGNv
bnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIHBvaW50ZXJU
b0xlZnRWYWx1ZUZhY3RvcnkpCit7CisgICAgaWYgKGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rpb24o
KSkgeworICAgICAgICAvLyAqb3BlcmF0b3ImLmZvbygmdikKKyAgICAgICAgaWYgKCFkb3RFeHBy
ZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
PiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocG9pbnRlclRvTGVmdFZhbHVl
RmFjdG9yeSgpKTsKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkp
LCBTdHJpbmcoZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpLT5uYW1lKCkpLCBXVEZN
b3ZlKGFyZ3VtZW50cykpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHBy
ZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY2Fs
bEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAg
ICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1
bmN0aW9uKCkpOworCisgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgICAgIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihkb3RF
eHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9u
ZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisKKyAgICAgICAg
cmV0dXJuIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uKSk7CisgICAgfQorCisgICAgLy8gb3BlcmF0b3IuZm9vKHYpCisgICAgQVNTRVJUKGRv
dEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKSk7CisgICAgCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChsZWZ0VmFs
dWVGYWN0b3J5KCkpOworICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFT
VDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwg
U3RyaW5nKGRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1
bWVudHMpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLmdldEZ1
bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5j
dGlvbigqZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpKTsKKworICAgIHJldHVybiBVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7Cit9CisKK3N0cnVj
dCBNb2RpZnlSZXN1bHQgeworICAgIEFTVDo6RXhwcmVzc2lvbiYgaW5uZXJMZWZ0VmFsdWU7Cisg
ICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKyAgICBW
ZWN0b3I8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+IHZhcmlhYmxlRGVjbGFy
YXRpb25zOworfTsKK3N0cnVjdCBNb2RpZmljYXRpb25SZXN1bHQgeworICAgIFZlY3RvcjxVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisgICAgVW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4gcmVzdWx0OworfTsKK3N0YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1v
ZGlmeShBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24sIHN0ZDo6ZnVuY3Rpb248T3B0
aW9uYWw8TW9kaWZpY2F0aW9uUmVzdWx0PihPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPj4mJik+IG1vZGlmaWNhdGlvbikKK3sKKyAgICAvLyBDb25zaWRlciBhLmIuYy5kKys7Cisg
ICAgLy8gVGhpcyB3b3VsZCBnZXQgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAvLworICAgIC8vIFN0
ZXAgMToKKyAgICAvLyBwID0gJmE7CisgICAgLy8KKyAgICAvLyBTdGVwIDI6CisgICAgLy8gcSA9
IG9wZXJhdG9yLmIoKnApOworICAgIC8vIHIgPSBvcGVyYXRvci5jKHEpOworICAgIC8vCisgICAg
Ly8gU3RlcCAzOgorICAgIC8vIG9sZFZhbHVlID0gb3BlcmF0b3IuZChyKTsKKyAgICAvLyBuZXdW
YWx1ZSA9IC4uLjsKKyAgICAvLworICAgIC8vIFN0ZXAgNDoKKyAgICAvLyByID0gb3BlcmF0b3Iu
ZD0ociwgbmV3VmFsdWUpOworICAgIC8vIHEgPSBvcGVyYXRvci5jPShxLCByKTsKKyAgICAvLwor
ICAgIC8vIFN0ZXAgNDoKKyAgICAvLyAqcCA9IG9wZXJhdG9yLmI9KCpwLCBxKTsKKworICAgIC8v
IElmIHRoZSBleHByZXNzaW9uIGlzIGEuYi5jLmQgPSBlLCBTdGVwIDMgZGlzYXBwZWFycyBhbmQg
Im5ld1ZhbHVlIiBpbiBzdGVwIDQgYmVjb21lcyAiZSIuCisgICAgCisKKyAgICAvLyBGaW5kIHRo
ZSAiLmIiICIuYyIgYW5kICIuZCIgZXhwcmVzc2lvbnMuCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpEb3RFeHByZXNzaW9uPj4gY2hhaW47CisgICAgQVNUOjpEb3RFeHBy
ZXNzaW9uKiBpdGVyYXRvciA9ICZkb3RFeHByZXNzaW9uOworICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgIGNoYWluLmFwcGVuZCgqaXRlcmF0b3IpOworICAgICAgICBBU1NFUlQoaXRlcmF0b3It
PmJhc2UoKS50eXBlQW5ub3RhdGlvbigpKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yLT5iYXNlKCku
dHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIEFTU0VSVCghaXRlcmF0b3ItPmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLT5pc1Jp
Z2h0VmFsdWUoKSk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGl0ZXJh
dG9yLT5iYXNlKCkpKTsgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIHdpdGggaW5kZXggZXhwcmVz
c2lvbnMKKyAgICAgICAgaXRlcmF0b3IgPSAmZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihp
dGVyYXRvci0+YmFzZSgpKTsKKyAgICB9CisgICAgYXV0byBsZWZ0RXhwcmVzc2lvbiA9IGl0ZXJh
dG9yLT50YWtlQmFzZSgpOworICAgIEFTVDo6RXhwcmVzc2lvbiYgaW5uZXJMZWZ0RXhwcmVzc2lv
biA9IGxlZnRFeHByZXNzaW9uOworCisgICAgLy8gQ3JlYXRlICJwIiB2YXJpYWJsZS4KKyAgICBB
U1NFUlQobGVmdEV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHBvaW50ZXJW
YXJpYWJsZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4obGVmdEV4cHJlc3Npb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExl
eGVyOjpUb2tlbihsZWZ0RXhwcmVzc2lvbi0+b3JpZ2luKCkpLCAqbGVmdEV4cHJlc3Npb24tPnR5
cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSwgbGVmdEV4cHJlc3Npb24tPnJlc29s
dmVkVHlwZSgpLT5jbG9uZSgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCk7CisKKyAgICAvLyBDcmVhdGUgInEiIGFuZCAiciIgdmFyaWFibGVzLgorICAgIFZlY3RvcjxV
bmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gaW50ZXJtZWRpYXRlVmFyaWFibGVz
OworICAgIGludGVybWVkaWF0ZVZhcmlhYmxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNoYWlu
LnNpemUoKSAtIDEpOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgY2hhaW4uc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgYXV0byYgZG90RXhwcmVzc2lvbiA9IHN0YXRpY19jYXN0PEFTVDo6RG90
RXhwcmVzc2lvbiY+KGNoYWluW2ldKTsKKyAgICAgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24ucmVz
b2x2ZWRUeXBlKCkpOworICAgICAgICBpbnRlcm1lZGlhdGVWYXJpYWJsZXMudW5jaGVja2VkQXBw
ZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4o
ZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBkb3RFeHByZXNzaW9u
LnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51
bGxvcHQpKTsKKyAgICB9CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+
IGV4cHJlc3Npb25zOworCisgICAgLy8gU3RlcCAxOgorICAgIHsKKyAgICAgICAgYXV0byBtYWtl
UG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNz
aW9uPihMZXhlcjo6VG9rZW4oaW5uZXJMZWZ0RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUo
bGVmdEV4cHJlc3Npb24pKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBl
KG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGlubmVyTGVmdEV4
cHJlc3Npb24ub3JpZ2luKCkpLCAqaW5uZXJMZWZ0RXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbigp
LT5sZWZ0QWRkcmVzc1NwYWNlKCksIGlubmVyTGVmdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkt
PmNsb25lKCkpKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5j
ZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJl
ZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgQVNTRVJUKHBvaW50ZXJW
YXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9p
bnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6
VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICBhdXRvIGFzc2ln
bm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9u
PihMZXhlcjo6VG9rZW4oaW5uZXJMZWZ0RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFy
aWFibGVSZWZlcmVuY2UpLCBXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOworICAgICAg
ICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+
Y2xvbmUoKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1v
dmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICB9CisKKyAgICAvLyBTdGVwIDI6CisgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiBwcmV2aW91cyA9IG51bGxwdHI7CisgICAgYXV0byBw
cmV2aW91c0xlZnRWYWx1ZSA9IFsmXSgpIC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsK
KyAgICAgICAgaWYgKHByZXZpb3VzKSB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJl
bmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlOjp3cmFwKCpwcmV2aW91cykpOworICAgICAgICAgICAgQVNTRVJUKHByZXZpb3Vz
LT50eXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocHJldmlv
dXMtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFk
IH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKyAgICAgICAgICAgIHJldHVybiB2YXJpYWJs
ZVJlZmVyZW5jZTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJl
bmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICBBU1NFUlQocG9pbnRl
clZhcmlhYmxlLT50eXBlKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShw
b2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgIGF1dG8gZGVy
ZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVz
c2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlh
YmxlUmVmZXJlbmNlKSk7CisgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7
CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBv
aW50ZXJUeXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUo
KSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRlclZhcmlhYmxl
LT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOworICAgICAgICByZXR1cm4gZGVyZWZlcmVuY2VF
eHByZXNzaW9uOworICAgIH07CisgICAgYXV0byBwb2ludGVyVG9QcmV2aW91c0xlZnRWYWx1ZSA9
IFsmXSgpIC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgaWYgKHByZXZp
b3VzKSB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKCpw
cmV2aW91cykpOworICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzLT50eXBlKCkpOworICAgICAg
ICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocHJldmlvdXMtPnR5cGUoKS0+Y2xvbmUo
KSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMg
dGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90
RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChwcmV2aW91cy0+dHlwZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVy
RXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVy
OjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZCwgcHJldmlvdXMtPnR5cGUoKS0+Y2xvbmUoKSkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJF
eHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgICAg
ICAgICByZXR1cm4gbWFrZVBvaW50ZXJFeHByZXNzaW9uOworICAgICAgICB9CisKKyAgICAgICAg
YXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAg
ICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAg
ICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUg
eyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8K
KyAgICAgICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJlbmNlOworICAgIH07CisgICAgZm9yIChzaXpl
X3QgaSA9IGNoYWluLnNpemUoKSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgQVNUOjpEb3RF
eHByZXNzaW9uJiBkb3RFeHByZXNzaW9uID0gY2hhaW5baV07CisgICAgICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbiA9IGludGVybWVkaWF0ZVZhcmlhYmxl
c1tpIC0gMV07CisKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IGdldHRlckNhbGwoZG90
RXhwcmVzc2lvbiwgcHJldmlvdXNMZWZ0VmFsdWUsIHBvaW50ZXJUb1ByZXZpb3VzTGVmdFZhbHVl
KTsKKworICAgICAgICBpZiAoIWNhbGxFeHByZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFw
KHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRp
b24udHlwZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUodmFyaWFibGVE
ZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICBhdXRvIGFzc2lnbm1l
bnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihM
ZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZl
cmVuY2UpLCBXVEZNb3ZlKCpjYWxsRXhwcmVzc2lvbikpOworICAgICAgICBhc3NpZ25tZW50RXhw
cmVzc2lvbi0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7Cisg
ICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0
VmFsdWUoKSk7CisKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVu
dEV4cHJlc3Npb24pKTsKKyAgICAgICAgCisgICAgICAgIHByZXZpb3VzID0gJnZhcmlhYmxlRGVj
bGFyYXRpb247CisgICAgfQorICAgIGF1dG8gbGFzdEdldHRlckNhbGxFeHByZXNzaW9uID0gZ2V0
dGVyQ2FsbChjaGFpblswXSwgcHJldmlvdXNMZWZ0VmFsdWUsIHBvaW50ZXJUb1ByZXZpb3VzTGVm
dFZhbHVlKTsKKworICAgIC8vIE1vZGlmaWNhdGlvblJlc3VsdChVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiYmKQorICAgIC8vIFN0ZXAgMzoKKyAgICBhdXRvIG1vZGlmaWNhdGlvblJlc3VsdCA9
IG1vZGlmaWNhdGlvbihXVEZNb3ZlKGxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikpOworICAgIGlm
ICghbW9kaWZpY2F0aW9uUmVzdWx0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uUmVzdWx0LT5leHByZXNzaW9ucy5z
aXplKCk7ICsraSkKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUobW9kaWZpY2F0
aW9uUmVzdWx0LT5leHByZXNzaW9uc1tpXSkpOworCisgICAgLy8gU3RlcCA0OgorICAgIFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHJpZ2h0VmFsdWUgPSBXVEZNb3ZlKG1vZGlmaWNhdGlvblJl
c3VsdC0+cmVzdWx0KTsKKyAgICBBU1NFUlQocmlnaHRWYWx1ZS0+cmVzb2x2ZWRUeXBlKCkpOwor
ICAgIGF1dG8gZXhwcmVzc2lvblR5cGUgPSByaWdodFZhbHVlLT5yZXNvbHZlZFR5cGUoKS0+Y2xv
bmUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYWluLnNpemUoKSAtIDE7ICsraSkg
eworICAgICAgICBBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24gPSBjaGFpbltpXTsK
KyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uID0g
aW50ZXJtZWRpYXRlVmFyaWFibGVzW2ldOworCisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJl
c3Npb24gPSBzZXR0ZXJDYWxsKGRvdEV4cHJlc3Npb24sIFdURk1vdmUocmlnaHRWYWx1ZSksIFsm
XSgpIC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgICAgIGF1dG8gdmFy
aWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAg
ICAgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgIHZh
cmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9u
ZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJ
cyB0aGlzIHJpZ2h0PworICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJlbmNlOworICAg
ICAgICB9LCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgICAg
ICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVm
ZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAg
ICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5
cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAv
LyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4
cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhl
cjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVu
Y2UpKTsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7Cisg
ICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxB
U1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFT
VDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9u
ZSgpKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlUG9pbnRlckV4
cHJlc3Npb247CisgICAgICAgIH0pOworCisgICAgICAgIGlmICghYXNzaWdubWVudEV4cHJlc3Np
b24pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGV4cHJlc3Np
b25zLmFwcGVuZChXVEZNb3ZlKCphc3NpZ25tZW50RXhwcmVzc2lvbikpOworCisgICAgICAgIHJp
Z2h0VmFsdWUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFy
aWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1NF
UlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICByaWdodFZhbHVlLT5zZXRU
eXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgcmlnaHRW
YWx1ZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKyAgICB9CisKKyAgICAvLyBT
dGVwIDU6CisgICAgeworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gc2V0dGVy
Q2FsbChjaGFpbltjaGFpbi5zaXplKCkgLSAxXSwgV1RGTW92ZShyaWdodFZhbHVlKSwgWyZdKCkg
LT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICAgICAgYXV0byB2YXJpYWJs
ZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpW
YXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgICAgIEFT
U0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVy
ZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAg
ICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUg
eyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8K
KworICAgICAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5v
cmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpKTsKKyAgICAgICAgICAgIEFTU0VS
VChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJl
c3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJs
ZS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZlcmVu
Y2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0
PEFTVDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuYWRkcmVzc1NwYWNl
KCkgfSk7CisgICAgICAgICAgICByZXR1cm4gZGVyZWZlcmVuY2VFeHByZXNzaW9uOworICAgICAg
ICB9LCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgICAgICBh
dXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAg
ICAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgICAgIHZh
cmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgp
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0
aGlzIHJpZ2h0PworICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJlbmNlOworICAgICAg
ICB9KTsKKworICAgICAgICBpZiAoIWFzc2lnbm1lbnRFeHByZXNzaW9uKQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92
ZSgqYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICB9CisKKyAgICBWZWN0b3I8VW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+IHZhcmlhYmxlRGVjbGFyYXRpb25zOworICAgIHZh
cmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHBvaW50ZXJWYXJpYWJsZSkpOworICAg
IGZvciAoYXV0byYgaW50ZXJtZWRpYXRlVmFyaWFibGUgOiBpbnRlcm1lZGlhdGVWYXJpYWJsZXMp
CisgICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKGludGVybWVkaWF0
ZVZhcmlhYmxlKSk7CisKKyAgICByZXR1cm4ge3sgaW5uZXJMZWZ0RXhwcmVzc2lvbiwgV1RGTW92
ZShleHByZXNzaW9ucyksIFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbnMpIH19OworfQorCit2
b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFz
c2lnbm1lbnRFeHByZXNzaW9uKQoreworICAgIEFTU0VSVChhc3NpZ25tZW50RXhwcmVzc2lvbi5s
ZWZ0KCkudHlwZUFubm90YXRpb24oKSk7CisgICAgaWYgKGFzc2lnbm1lbnRFeHByZXNzaW9uLmxl
ZnQoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgc2lt
cGxpZnlMZWZ0VmFsdWUoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIEFTU0VSVCghYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpLnR5
cGVBbm5vdGF0aW9uKCktPmlzUmlnaHRWYWx1ZSgpKTsKKyAgICBpZiAoIWlzPEFTVDo6RG90RXhw
cmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKSkgeworICAgICAgICBzZXRFcnJv
cigpOyAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgd2l0aCBpbmRleCBleHByZXNzaW9ucy4KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChhc3NpZ25tZW50RXhwcmVzc2lvbi5y
aWdodCgpLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHR5cGUgPSBhc3NpZ25tZW50RXhwcmVz
c2lvbi5yaWdodCgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpOworCisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworCisgICAgYXV0byBtb2RpZnlS
ZXN1bHQgPSBtb2RpZnkoZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihhc3NpZ25tZW50RXhw
cmVzc2lvbi5sZWZ0KCkpLCBbJl0oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+
JiYpIC0+IE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4geworICAgICAgICByZXR1cm4ge3sg
VmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PigpLCBhc3NpZ25tZW50RXhwcmVzc2lv
bi50YWtlUmlnaHQoKSB9fTsKKyAgICB9KTsKKworICAgIGlmICghbW9kaWZ5UmVzdWx0KSB7Cisg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2ltcGxpZnlM
ZWZ0VmFsdWUobW9kaWZ5UmVzdWx0LT5pbm5lckxlZnRWYWx1ZSk7CisKKyAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihBU1Q6OkNvbW1hRXhwcmVzc2lvbikgPD0gc2l6ZW9mKEFTVDo6QXNzaWdubWVu
dEV4cHJlc3Npb24pLCAiQXNzaWdubWVudCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8g
YmVjb21lIGNvbW1hIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMi
KTsKKyAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gYXNzaWdubWVudEV4cHJlc3Npb24ub3JpZ2lu
KCk7CisgICAgdm9pZCogbG9jYXRpb24gPSAmYXNzaWdubWVudEV4cHJlc3Npb247CisgICAgYXNz
aWdubWVudEV4cHJlc3Npb24ufkFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgYXV0byogY29t
bWFFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpDb21tYUV4cHJlc3Npb24oV1RGTW92
ZShvcmlnaW4pLCBXVEZNb3ZlKG1vZGlmeVJlc3VsdC0+ZXhwcmVzc2lvbnMpKTsKKyAgICBjb21t
YUV4cHJlc3Npb24tPnNldFR5cGUoV1RGTW92ZSh0eXBlKSk7CisgICAgY29tbWFFeHByZXNzaW9u
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICBmb3IgKGF1dG8m
IHZhcmlhYmxlRGVjbGFyYXRpb24gOiBtb2RpZnlSZXN1bHQtPnZhcmlhYmxlRGVjbGFyYXRpb25z
KQorICAgICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxl
RGVjbGFyYXRpb24pKTsKK30KKwordm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OlJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCit7Cisg
ICAgQVNTRVJUKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkudHlwZUFubm90
YXRpb24oKSk7CisgICAgaWYgKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCku
dHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgIC8vIENvbnNp
ZGVyIGErKzsKKyAgICAgICAgLy8gVGhpcyB3b3VsZCBnZXQgdHJhbnNmb3JtZWQgaW50bzoKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gcCA9ICZhOworICAgICAgICAvLyBvbGRWYWx1ZSA9ICpwOwor
ICAgICAgICAvLyBuZXdWYWx1ZSA9IC4uLjsKKyAgICAgICAgLy8gKnAgPSBuZXdWYWx1ZTsKKwor
ICAgICAgICBBU1NFUlQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNv
bHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gYmFzZVR5cGUgPSByZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpOworICAgICAgICBhdXRv
IHBvaW50ZXJUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9r
ZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5vcmlnaW4oKSksICpyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRB
ZGRyZXNzU3BhY2UoKSwgYmFzZVR5cGUtPmNsb25lKCkpOworCisgICAgICAgIGF1dG8gcG9pbnRl
clZhcmlhYmxlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVy
OjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihwb2ludGVyVHlw
ZS0+Y2xvbmUoKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisKKyAg
ICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKwor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvIG9yaWdpbiA9IExleGVyOjpUb2tlbihyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKTsKKyAgICAgICAgICAgIGF1
dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVy
RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24udGFrZUxlZnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+
c2V0VHlwZShwb2ludGVyVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4
cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAg
ICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUp
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJUeXBlLT5j
bG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1F
OiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9u
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVz
c2lvbikpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocG9pbnRl
clR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lv
bnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFw
KHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRU
eXBlKHBvaW50ZXJUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
MS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6
VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBk
ZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHBy
ZXNzaW9uPihMZXhlcjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKSks
IFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UxKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4
cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZl
cmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisK
KyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0gcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5vbGRWYXJpYWJsZVJlZmVyZW5jZSgpOworICAgICAgICAgICAgdmFyaWFibGVSZWZl
cmVuY2UyLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlMi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJl
c3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAg
ICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25t
ZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3Jp
Z2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMiksIFdURk1vdmUoZGVyZWZlcmVuY2VF
eHByZXNzaW9uKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShi
YXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBleHByZXNz
aW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IHJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVuY2UoKTsKKyAgICAgICAgICAgIHZh
cmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAg
IHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFT
VDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisg
ICAgICAgICAgICBhdXRvIG5ld1ZhbHVlRXhwcmVzc2lvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24udGFrZU5ld1ZhbHVlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgQVNTRVJUKG5ld1Zh
bHVlRXhwcmVzc2lvbik7IC8vIEZJWE1FOiBSZWxheCB0aGlzIGNvbnN0cmFpbnQuCisgICAgICAg
ICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2ln
bm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5v
cmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3ZlKCpuZXdWYWx1ZUV4
cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJh
c2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Np
b25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0
VHlwZShwb2ludGVyVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZTEtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6
OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8g
ZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhw
cmVzc2lvbj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkp
LCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMSkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VF
eHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwor
CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMiA9IHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVuY2UoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlMi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJs
ZVJlZmVyZW5jZTItPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRy
ZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAg
ICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9y
aWdpbigpKSwgV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pLCBXVEZNb3ZlKHZhcmlhYmxl
UmVmZXJlbmNlMikpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUo
YmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVz
c2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gcmVzdWx0RXhwcmVzc2lvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24udGFrZVJlc3VsdEV4cHJlc3Npb24oKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdEV4cHJlc3Np
b24pOyAvLyBGSVhNRTogQmUgcmVzaWxpZW50IHRvIHRoaXMgYmVpbmcgbnVsbC4KKyAgICAgICAg
QVNTRVJUKCgqcmVzdWx0RXhwcmVzc2lvbiktPnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0
byB0eXBlID0gKCpyZXN1bHRFeHByZXNzaW9uKS0+cmVzb2x2ZWRUeXBlKCktPmNsb25lKCk7Cisg
ICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKCpyZXN1bHRFeHByZXNzaW9uKSk7CisK
KyAgICAgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4gb2xkVmFyaWFibGVE
ZWNsYXJhdGlvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFrZU9sZFZhbHVlKCk7Cisg
ICAgICAgIFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IG5ld1ZhcmlhYmxlRGVj
bGFyYXRpb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VOZXdWYWx1ZSgpOworCisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHByZXNzaW9uKSA8PSBzaXpl
b2YoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKSwgIlJlYWRNb2RpZnlXcml0ZSBleHBy
ZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGNvbW1hIGV4cHJlc3Npb25zIHdpdGhv
dXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgTGV4ZXI6OlRva2VuIG9yaWdp
biA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgICAgIHZvaWQqIGxv
Y2F0aW9uID0gJnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb247CisgICAgICAgIHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24uflJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKTsKKyAgICAgICAgYXV0
byogY29tbWFFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpDb21tYUV4cHJlc3Npb24o
V1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSk7CisgICAgICAgIGNvbW1hRXhw
cmVzc2lvbi0+c2V0VHlwZShXVEZNb3ZlKHR5cGUpKTsKKyAgICAgICAgY29tbWFFeHByZXNzaW9u
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgbV92YXJp
YWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShwb2ludGVyVmFyaWFibGUpKTsKKyAgICAg
ICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShvbGRWYXJpYWJsZURlY2xh
cmF0aW9uKSk7CisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUo
bmV3VmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUKCFyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnR5cGVBbm5vdGF0
aW9uKCktPmlzUmlnaHRWYWx1ZSgpKTsKKyAgICBpZiAoIWlzPEFTVDo6RG90RXhwcmVzc2lvbj4o
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSkpIHsKKyAgICAgICAgc2V0RXJy
b3IoKTsgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIHdpdGggaW5kZXggZXhwcmVzc2lvbnMuCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXV0byBtb2RpZnlSZXN1bHQgPSBtb2RpZnkoZG93
bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRW
YWx1ZSgpKSwgWyZdKE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmIGxhc3RH
ZXR0ZXJDYWxsRXhwcmVzc2lvbikgLT4gT3B0aW9uYWw8TW9kaWZpY2F0aW9uUmVzdWx0PiB7Cisg
ICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7Cisg
ICAgICAgIGlmICghbGFzdEdldHRlckNhbGxFeHByZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVm
ZXJlbmNlID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYXJpYWJsZVJlZmVyZW5jZSgp
OworICAgICAgICAgICAgQVNTRVJUKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVl
KCkucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5
cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKS0+
Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhN
RTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkpLCBXVEZNb3Zl
KHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgqbGFzdEdldHRlckNhbGxFeHByZXNzaW9uKSk7
CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAg
ICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0
VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2ln
bm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJp
YWJsZVJlZmVyZW5jZSgpOworICAgICAgICAgICAgQVNTRVJUKHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5y
ZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBuZXdW
YWx1ZUV4cHJlc3Npb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VOZXdWYWx1ZUV4
cHJlc3Npb24oKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdWYWx1ZUV4cHJlc3Npb24pOyAvLyBG
SVhNRTogUmVsYXggdGhpcyBjb25zdHJhaW50CisgICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnRF
eHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhl
cjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5vcmlnaW4oKSks
IFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3ZlKCpuZXdWYWx1ZUV4cHJlc3Npb24p
KTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAg
ICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6Umln
aHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNz
aWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7eyBXVEZN
b3ZlKGV4cHJlc3Npb25zKSwgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJpYWJsZVJl
ZmVyZW5jZSgpIH19OworICAgIH0pOworCisgICAgaWYgKCFtb2RpZnlSZXN1bHQpIHsKKyAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzaW1wbGlmeUxlZnRW
YWx1ZShtb2RpZnlSZXN1bHQtPmlubmVyTGVmdFZhbHVlKTsKKworICAgIGF1dG8gcmVzdWx0RXhw
cmVzc2lvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFrZVJlc3VsdEV4cHJlc3Npb24o
KTsKKyAgICBBU1NFUlQocmVzdWx0RXhwcmVzc2lvbik7IC8vIEZJWE1FOiBCZSByZXNpbGllbnQg
dG8gdGhpcyBiZWluZyBudWxsLgorICAgIEFTU0VSVCgoKnJlc3VsdEV4cHJlc3Npb24pLT5yZXNv
bHZlZFR5cGUoKSk7CisgICAgYXV0byB0eXBlID0gKCpyZXN1bHRFeHByZXNzaW9uKS0+cmVzb2x2
ZWRUeXBlKCktPmNsb25lKCk7CisgICAgbW9kaWZ5UmVzdWx0LT5leHByZXNzaW9ucy5hcHBlbmQo
V1RGTW92ZSgqcmVzdWx0RXhwcmVzc2lvbikpOworCisgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4gb2xkVmFyaWFibGVEZWNsYXJhdGlvbiA9IHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24udGFrZU9sZFZhbHVlKCk7CisgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4gbmV3VmFyaWFibGVEZWNsYXJhdGlvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24udGFrZU5ld1ZhbHVlKCk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkNvbW1h
RXhwcmVzc2lvbikgPD0gc2l6ZW9mKEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiksICJS
ZWFkTW9kaWZ5V3JpdGUgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBjb21t
YSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgTGV4
ZXI6OlRva2VuIG9yaWdpbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCk7Cisg
ICAgdm9pZCogbG9jYXRpb24gPSAmcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjsKKyAgICByZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLn5SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCk7CisgICAg
YXV0byogY29tbWFFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpDb21tYUV4cHJlc3Np
b24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKG1vZGlmeVJlc3VsdC0+ZXhwcmVzc2lvbnMpKTsK
KyAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGUoV1RGTW92ZSh0eXBlKSk7CisgICAgY29tbWFF
eHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICBm
b3IgKGF1dG8mIHZhcmlhYmxlRGVjbGFyYXRpb24gOiBtb2RpZnlSZXN1bHQtPnZhcmlhYmxlRGVj
bGFyYXRpb25zKQorICAgICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3Zl
KHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVu
ZChXVEZNb3ZlKG9sZFZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICBtX3ZhcmlhYmxlRGVjbGFy
YXRpb25zLmFwcGVuZChXVEZNb3ZlKG5ld1ZhcmlhYmxlRGVjbGFyYXRpb24pKTsKK30KKworYm9v
bCBQcm9wZXJ0eVJlc29sdmVyOjpzaW1wbGlmeVJpZ2h0VmFsdWUoQVNUOjpEb3RFeHByZXNzaW9u
JiBkb3RFeHByZXNzaW9uKQoreworICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RFeHByZXNz
aW9uLm9yaWdpbigpOworCisgICAgaWYgKGF1dG8qIGFuZEZ1bmN0aW9uID0gZG90RXhwcmVzc2lv
bi5hbmRGdW5jdGlvbigpKSB7CisgICAgICAgIGF1dG8mIGJhc2UgPSBkb3RFeHByZXNzaW9uLmJh
c2UoKTsKKyAgICAgICAgQVNTRVJUKGJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBBU1NF
UlQoYmFzZS50eXBlQW5ub3RhdGlvbigpKTsKKyAgICAgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NT
cGFjZSA9IGJhc2UudHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAg
ICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpN
YWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBkb3RFeHByZXNzaW9u
LnRha2VCYXNlKCkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBl
KG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbiksICps
ZWZ0QWRkcmVzc1NwYWNlLCBiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKSk7CisgICAgICAg
ICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRW
YWx1ZSgpKTsKKworICAgICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
PiBhcmd1bWVudHM7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUobWFrZVBv
aW50ZXJFeHByZXNzaW9uKSk7CisgICAgICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgU3Ry
aW5nKGFuZEZ1bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgICAgICAg
ICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoYW5kRnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsK
KyAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0
VmFsdWUoKSk7CisgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZEZ1
bmN0aW9uKTsKKworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpEZXJlZmVy
ZW5jZUV4cHJlc3Npb24pIDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJl
c3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgZGVyZWZlcmVuY2UgZXhwcmVzc2lvbnMg
d2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgICAgICAgICAgdm9pZCogbG9j
YXRpb24gPSAmZG90RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4
cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGF1dG8qIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG5l
dyAobG9jYXRpb24pIEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSwg
V1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNz
aW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBl
KCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJl
c3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuYWRkcmVzc1NwYWNlKCkgfSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGhhdmUgYW4g
YW5kZXIsIGJ1dCBubyBsZWZ0IHZhbHVlIHRvIGNhbGwgaXQgb24uIExldCdzIHNhdmUgdGhlIHZh
bHVlIGludG8gYSB0ZW1wb3JhcnkgdmFyaWFibGUgdG8gY3JlYXRlIGEgbGVmdCB2YWx1ZS4KKyAg
ICAgICAgLy8gVGhpcyBpcyBlZmZlY3RpdmVseSBpbmxpbmluZyB0aGUgZnVuY3Rpb25zIHRoZSBz
cGVjIHNheXMgYXJlIGdlbmVyYXRlZC4KKyAgICAgICAgaWYgKCFkb3RFeHByZXNzaW9uLnRocmVh
ZEFuZEZ1bmN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0
byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMoKSwgYmFzZS5yZXNv
bHZlZFR5cGUoKS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMSA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJs
ZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZShiYXNl
LnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7CisKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFdURk1v
dmUodmFyaWFibGVSZWZlcmVuY2UxKSwgZG90RXhwcmVzc2lvbi50YWtlQmFzZSgpKTsKKyAgICAg
ICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZS5yZXNvbHZlZFR5cGUoKS0+Y2xv
bmUoKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTIgPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZTItPnNldFR5cGUoYmFzZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlh
YmxlUmVmZXJlbmNlMi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworCisgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRv
a2VuKG9yaWdpbiksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSk7CisgICAgICAgIG1ha2VQ
b2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+
KExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlLnJl
c29sdmVkVHlwZSgpLT5jbG9uZSgpKSk7CisgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgIFZlY3RvcjxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAgICAgIGF1dG8gY2Fs
bEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpU
b2tlbihvcmlnaW4pLCBTdHJpbmcoYW5kRnVuY3Rpb24tPm5hbWUoKSksIFdURk1vdmUoYXJndW1l
bnRzKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGFuZEZ1bmN0aW9uLT50eXBl
KCkuY2xvbmUoKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigq
YW5kRnVuY3Rpb24pOworCisgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oV1RGTW92ZShvcmlnaW4pLCBX
VEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+
c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5l
bGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZCB9KTsKKworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkNvbW1hRXhwcmVzc2lv
bikgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0
byBiZSBhYmxlIHRvIGJlY29tZSBjb21tYSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJh
Y2tyZWZlcmVuY2VzIik7CisgICAgICAgIHZvaWQqIGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247
CisgICAgICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsKKyAgICAgICAgVmVjdG9y
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKyAgICAgICAgZXhwcmVz
c2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgZXhw
cmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSk7CisgICAgICAg
IGF1dG8qIGNvbW1hRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q29tbWFFeHByZXNz
aW9uKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShleHByZXNzaW9ucykpOworICAgICAgICBjb21t
YUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rp
b24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY29tbWFFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7CisKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RG
TW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q2FsbEV4cHJlc3Npb24pIDw9IHNpemVv
ZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0
byBiZWNvbWUgY2FsbCBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2Vz
Iik7CisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKSk7CisgICAgYXV0byYg
Z2V0RnVuY3Rpb24gPSAqZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpOworICAgIFZlY3RvcjxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBl
bmQoZG90RXhwcmVzc2lvbi50YWtlQmFzZSgpKTsKKyAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RF
eHByZXNzaW9uOworICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsKKyAgICBhdXRv
KiBjYWxsRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q2FsbEV4cHJlc3Npb24oV1RG
TW92ZShvcmlnaW4pLCBTdHJpbmcoZ2V0RnVuY3Rpb24ubmFtZSgpKSwgV1RGTW92ZShhcmd1bWVu
dHMpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oZ2V0RnVuY3Rpb24pOworICAg
IGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGdldEZ1bmN0aW9uLnR5cGUoKS5jbG9uZSgpKTsKKyAg
ICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitjbGFzcyBMZWZ0VmFsdWVTaW1wbGlmaWVyIDogcHVibGlj
IFZpc2l0b3IgeworcHVibGljOgorICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpIG92
ZXJyaWRlOworCitwcml2YXRlOgorfTsKKwordm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVyOjp2aXNp
dChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgVmlzaXRvcjo6dmlz
aXQoZG90RXhwcmVzc2lvbik7CisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uYmFzZSgpLnR5cGVB
bm5vdGF0aW9uKCkpOworICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmJhc2UoKS50eXBlQW5ub3Rh
dGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpOworICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmFu
ZEZ1bmN0aW9uKCkpOworCisgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24u
b3JpZ2luKCk7CisgICAgYXV0byogYW5kRnVuY3Rpb24gPSBkb3RFeHByZXNzaW9uLmFuZEZ1bmN0
aW9uKCk7CisgICAgYXV0byYgYmFzZSA9IGRvdEV4cHJlc3Npb24uYmFzZSgpOworICAgIGF1dG8g
bGVmdEFkZHJlc3NTcGFjZSA9ICpkb3RFeHByZXNzaW9uLmJhc2UoKS50eXBlQW5ub3RhdGlvbigp
LT5sZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3Jp
Z2luKSwgZG90RXhwcmVzc2lvbi50YWtlQmFzZSgpKTsKKyAgICBtYWtlUG9pbnRlckV4cHJlc3Np
b24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4o
b3JpZ2luKSwgbGVmdEFkZHJlc3NTcGFjZSwgYmFzZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSkp
OworICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1
bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lv
bikpOworICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4
cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBTdHJpbmcoYW5kRnVuY3Rpb24tPm5hbWUo
KSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoYW5k
RnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5j
dGlvbigqYW5kRnVuY3Rpb24pOworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpEZXJl
ZmVyZW5jZUV4cHJlc3Npb24pIDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4
cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgZGVyZWZlcmVuY2UgZXhwcmVzc2lv
bnMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgIHZvaWQqIGxvY2F0aW9u
ID0gJmRvdEV4cHJlc3Npb247CisgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOwor
ICAgIGF1dG8qIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6RGVy
ZWZlcmVuY2VFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShjYWxsRXhwcmVzc2lv
bikpOworICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBv
aW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwor
ICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFs
dWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5hZGRy
ZXNzU3BhY2UoKSB9KTsKK30KKwordm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVyOjp2aXNpdChBU1Q6
OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIC8v
IERlcmVmZXJlbmNlIGV4cHJlc3Npb25zIGFyZSB0aGUgb25seSBleHByZXNzaW9ucyB3aGVyZSB0
aGUgY2hpbGRyZW4gbWlnaHQgYmUgbW9yZS1yaWdodCB0aGFuIHdlIGFyZS4KKyAgICAvLyBGb3Ig
ZXhhbXBsZSwgYSBkZXJlZmVyZW5jZSBleHByZXNzaW9uIG1heSBiZSBhIGxlZnQgdmFsdWUgYnV0
IGl0cyBjaGlsZCBtYXkgYmUgYSBjYWxsIGV4cHJlc3Npb24gd2hpY2ggaXMgYSByaWdodCB2YWx1
ZS4KKyAgICAvLyBMZWZ0VmFsdWVTaW1wbGlmaWVyIGRvZXNuJ3QgaGFuZGxlIHJpZ2h0IHZhbHVl
cywgc28gd2UgaW5zdGVhZCBuZWVkIHRvIHVzZSBQcm9wZXJ0eVJlc29sdmVyLgorICAgIC8vIEZJ
WE1FOiBXaGF0IGFib3V0IGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzPworICAgIFByb3BlcnR5UmVz
b2x2ZXIoKS5WaXNpdG9yOjp2aXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24pOworfQorCit2b2lk
IFByb3BlcnR5UmVzb2x2ZXI6OnNpbXBsaWZ5TGVmdFZhbHVlKEFTVDo6RXhwcmVzc2lvbiYgZXhw
cmVzc2lvbikKK3sKKyAgICBMZWZ0VmFsdWVTaW1wbGlmaWVyKCkuVmlzaXRvcjo6dmlzaXQoZXhw
cmVzc2lvbik7Cit9CisKK3ZvaWQgcmVzb2x2ZVByb3BlcnRpZXMoUHJvZ3JhbSYgcHJvZ3JhbSkK
K3sKKyAgICBQcm9wZXJ0eVJlc29sdmVyKCkuVmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyMjA1
ZjkwMmJjYzk0ZWNhOWVmMzNiNThkYTFjNzAxYWI3MmIzNDcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIu
aApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K2NsYXNzIFByb2dyYW07CisKK3ZvaWQgcmVzb2x2ZVByb3BlcnRpZXMoUHJvZ3JhbSYpOworCit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAppbmRleCBlNzgz
OGNlM2Y3MjVhZTA5YWJhMWVkYjUwYTY1OTJjMzQ2MzEzZWU1Li5kYzkzNGRiZjcyNmE4MTRhMDgw
NGI0Y2NiNTc1MmRiZWNiODFmMzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAK
QEAgLTQ0LDcgKzQ0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiYgY2FuZGlkYXRlLCBjb25zdCBWZWN0b3IKICAgICAgICAgY29udmVy
c2lvbkNvc3QgKz0gYXJndW1lbnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mKSAtPiB1bnNpZ25lZCB7CiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiB1bnNpZ25lZCB7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY29udmVy
c2lvbkNvc3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jb252ZXJz
aW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKTsKICAgICAgICAgfSkp
OwogICAgIH0KICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgY2FuIG5ldmVyIGJlIGEgbGl0ZXJhbCB0
eXBlLCBzbyBpdHMgY29udmVyc2lvbiBjb3N0IGlzIGFsd2F5cyAwLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaApp
bmRleCBjYTVjYmI1OTI5Y2Y5ZTE4MThjMmNkNzQxZTc5ZDkzNmNhYWM2OGVlLi41MGU1MzJiNmE2
ZTgyZjFlMDJhMDQ2NzkxYjhlNjY5NmQ1YjExZTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaApAQCAtNzIs
NiArNzIsNyBAQCBwcml2YXRlOgogCiAvLyBUaGlzIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBh
IFZhcmlhbnQuCiAvLyBJdCBleGlzdHMgc28gd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZh
dWx0IGNvbnN0cnVjdG9yIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorLy8gRklYTUU6IFRoaXMgd3Jh
cHBlciBtaWdodCBub3QgYmUgbmVjZXNzYXJ5LgogY2xhc3MgUmVzb2x2aW5nVHlwZSB7CiBwdWJs
aWM6CiAgICAgUmVzb2x2aW5nVHlwZSgpCkBAIC0xMDIsMTAgKzEwMywxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICBBU1Q6OlVubmFtZWRUeXBlJiBnZXRV
bm5hbWVkVHlwZSgpCisgICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0VW5uYW1lZFR5cGUoKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+PihtX2lubmVyKSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpOworICAgICAgICBpZiAoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpKQorICAgICAg
ICAgICAgcmV0dXJuICZXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5u
ZXIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVmlzaXRvcj4gYXV0byB2aXNpdChjb25zdCBWaXNpdG9yJiB2aXNpdG9yKSAtPiBkZWNs
dHlwZShXVEY6OnZpc2l0KHZpc2l0b3IsIHN0ZDo6ZGVjbHZhbDxWYXJpYW50PFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPj4mPigpKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3Rh
bmRhcmRMaWJyYXJ5LnR4dCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3RhbmRhcmRMaWJyYXJ5LnR4dAppbmRleCA3OWEyYzYwZTA2MDZiMTMyNjViYjIzMDM2N2Fj
Zjk3MjUwYmY5YTdmLi4wZmI1ZDM5MzJkNDVmYjBhZmRlMDk1OTYxNWViZDgxZmVhYTkxYzUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5k
YXJkTGlicmFyeS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CkBAIC0zOTAsNCArMzkwLDEzIEBAIG5hdGl2ZSB2b2lk
IEFsbE1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jKCk7CiBuYXRpdmUgdm9pZCBEZXZpY2VNZW1v
cnlCYXJyaWVyV2l0aEdyb3VwU3luYygpOwogbmF0aXZlIHZvaWQgR3JvdXBNZW1vcnlCYXJyaWVy
V2l0aEdyb3VwU3luYygpOwogCitvcGVyYXRvciBmbG9hdDQoZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgeiwgZmxvYXQgdykgeworICAgIGZsb2F0NCByZXN1bHQ7CisgICAgcmVzdWx0LnggPSB4Owor
ICAgIHJlc3VsdC55ID0geTsKKyAgICByZXN1bHQueiA9IHo7CisgICAgcmVzdWx0LncgPSB3Owor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkyODkwIEluc2VydCB0aGUgcmVzdCBvZiB0aGUgc3RhbmRhcmQg
bGlicmFyeSBvbmNlIHRoZSBwYXJzZXIgaXMgZmFzdCBlbm91Z2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0
b3JMZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKaW5kZXggYWUzY2E2NDIzOWUzYjU5ZDM2
YWFhYWVlYzdiYTQ3MWJjYjY3Y2ViOS4uNjVlZDdhY2Y0M2YyMDA0MDI1MGY5MDY2YTE0YjY0MGI1
N2JiZjBjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0
aC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0
aChQcm9ncmFtJiBwcm9ncmFtKQogICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAKICAgICBm
b3IgKGF1dG8mIGFycmF5VHlwZSA6IGFycmF5VHlwZXMpIHsKLSAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5n
ZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGFycmF5VHlwZS5nZXQoKS5jbG9u
ZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIGF1
dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIGFycmF5VHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQpOwogICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFt
ZXRlcnM7CiAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJh
dGlvbikpOwogICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGFy
cmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxs
b3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQo
KS5vcmlnaW4oKSksIHByb2dyYW0uaW50cmluc2ljcygpLnVpbnRUeXBlKCkpLCAib3BlcmF0b3Iu
bGVuZ3RoIl9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRv
cikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKaW5kZXggY2Q3YzM3MDJh
ZGJlYTI5YWMxOGM1Y2JlNmRiNjA4N2I5ZTAyZWQ4YS4uNzRjYzhmMTg0ZTgzNWIzY2UxYzQ5YjVj
ZTZlYzhkNmE0YTg2OGMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3Bw
CkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBzeW50aGVzaXplQ29uc3RydWN0b3JzKFByb2dyYW0m
IHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKIAogICAgIGZvciAoYXV0byYg
dW5uYW1lZFR5cGUgOiB1bm5hbWVkVHlwZXMpIHsKLSAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgp
Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUo
KSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICBhdXRv
IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xh
cmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29u
c3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlw
ZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1
bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKQEAgLTEyNyw3ICsxMjcsNyBA
QCBib29sIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAg
aWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVk
VHlwZSY+KG5hbWVkVHlwZSkpICYmIGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
PihzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSY+KG5hbWVkVHlwZSkpLmlzQXRvbWljKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24g
dmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpIH0sIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIGF1dG8gdmFyaWFibGVE
ZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhl
cjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5nZXQoKSkpLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1v
dmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBX
VEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRU
eXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgIm9wZXJhdG9yIGNhc3QiX3N0
ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKaW5kZXggMTc5
N2ZlNTM5NGM4MWVhY2QzOTU0YWJjNmE4YTY1YTZjOGZjOTZlMi4uZDc0YWYzM2ExZjA1YTY5MjIx
OWM4Y2NlNGFmZGNjOTI5NTEwOTcxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVu
dW1lcmF0aW9uRnVuY3Rpb25zLmNwcApAQCAtNDEsOCArNDEsOCBAQCBib29sIHN5bnRoZXNpemVF
bnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQogICAgIGJvb2wgaXNPcGVyYXRv
ciA9IHRydWU7CiAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFt
LmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAgICB7Ci0gICAgICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjEoTGV4ZXI6OlRva2VuKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCk7Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24g
dmFyaWFibGVEZWNsYXJhdGlvbjIoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAo
TGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlv
bkRlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Cisg
ICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24xID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24t
Pm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJh
dGlvbjIgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRv
a2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwg
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhl
cjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVm
aW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAg
ICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkpOwogICAgICAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOwpA
QCAtNTIsNyArNTIsNyBAQCBib29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9n
cmFtJiBwcm9ncmFtKQogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3Jp
Z2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikp
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRp
b25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgIm9wZXJhdG9yLnZhbHVlIl9zdHIsIFdURk1v
dmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpAQCAtNjEsNyArNjEs
NyBAQCBib29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFt
KQogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVt
ZXJhdGlvbkRlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCk7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25E
ZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RG
TW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBB
U1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9u
LT50eXBlKCkuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJz
KSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CkBAIC03MCwxMCArNzAsMTAgQEAgYm9vbCBz
eW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAg
fQogCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJp
YWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdp
bigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNs
b25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAg
ICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUo
KSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwotICAgICAgICAgICAgQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24t
Pm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHsgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9y
aWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSB9LCAib3BlcmF0b3IgY2FzdCJfc3RyLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKKyAgICAgICAg
ICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZp
bml0aW9uKSksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6
bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVB
Y2Nlc3NvcnMuY3BwCmluZGV4IDgyNjcyMjEzN2U0YzNlMzgyMjc3ODBkYWUxMmIyOWFhYmExYjcy
ZWUuLjk0NWQwY2VlZmFhMzljZTUwNzQ2MDdkMmM0NDkzY2YzOTdlOTgzZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVj
dHVyZUFjY2Vzc29ycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcApAQCAtNDYsNyArNDYsNyBA
QCBib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAg
ICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi0+
c3RydWN0dXJlRWxlbWVudHMoKSkgewogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8v
IFRoZSBnZXR0ZXI6IG9wZXJhdG9yLmZpZWxkCi0gICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVs
ZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVE
ZWZpbml0aW9uKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAg
ICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNU
OjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdp
bigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQpOwogICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0
ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSwg
bWFrZVN0cmluZygib3BlcmF0b3IuIiwgc3RydWN0dXJlRWxlbWVudC5uYW1lKCkpLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKQEAgLTU2LDggKzU2LDgg
QEAgYm9vbCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mIHByb2dyYW0pCiAK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgc2V0dGVyOiBvcGVyYXRvci5m
aWVsZD0KLSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVE
ZWNsYXJhdGlvbjEoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0
cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSB9LCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwotICAgICAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oc3RydWN0
dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IHN0cnVjdHVyZUVsZW1l
bnQudHlwZSgpLmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24xID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVt
ZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1l
bnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0
aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9r
ZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBzdHJ1Y3R1
cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51
bGxvcHQpOwogICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1l
dGVyczsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxl
RGVjbGFyYXRpb24xKSk7CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92
ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOwpAQCAtNjksNyArNjksNyBAQCBib29sIHN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgICAgIC8vIFRo
ZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCiAgICAgICAgICAgICBhdXRvIGNyZWF0ZUFuZGVyID0g
WyZdKEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkgLT4gQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uIHsKICAgICAgICAgICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQu
b3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pKTsK
LSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCB7IFdURk1vdmUoYXJndW1lbnRUeXBlKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4o
c3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4oV1RGTW92ZShhcmd1bWVudFR5cGUpKSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQo
V1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICAgICAgYXV0byByZXR1
cm5UeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgc3RydWN0dXJlRWxlbWVudC50
eXBlKCkuY2xvbmUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFZpc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xWaXNpdG9yLmNwcAppbmRleCBlZDJlOGMwMDUyZDZkZmU5YmQwN2JhZjc2NDlk
OGNlNDhjOWIwOWJiLi4yZjIwMTUyY2FiN2FkMWM3ODI2YmEzZDIxNTE3YTRlYzA5ZWFlZWFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlz
aXRvci5jcHAKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHJh
cCYpCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQogewogICAgIGZvciAoYXV0byYgdmFy
aWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LnZhcmlhYmxl
RGVjbGFyYXRpb25zKCkpCi0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xh
cmF0aW9uKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb24u
Z2V0KCkpOwogfQogCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxv
b3ApCkBAIC01ODksMTcgKzU4OSwxNyBAQCB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TG9naWNh
bE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQogCiB2b2lkIFZpc2l0b3I6OnZp
c2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogfQogCiB2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7Ci0g
ICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7
CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
JiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlz
aXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFsdWUoKSk7CiAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7CiAg
ICAgaWYgKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IDM2NzVlMDA0Yjg2NzNlOWQ2OGIxYzZiZDhkNDY4YTBkNGQ0MTI1N2Uu
LmNmNzQ2Y2VhMmU4Y2JkMWMxM2UyMGM5NjE1NTEwNjllNzMyMDNjMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CkBAIC0zNDgsNiArMzQ4LDcgQEAgTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJl
ZmVyZW5jZS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFs
LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKK01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQ
VS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUFkYXB0ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
ZWJHUFVCaW5kR3JvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjY5Y2ZmMjMyMTI4Y2JiZThlYTVjYzFkZWU4NDA3MGNi
NmY4NzAxZS4uMmVkNzdiMmE2MjI5MjFiY2E1MzIyYTliYWVjNGQ5ZmM2MGQ0NzFkNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NjM5MCw2ICs2MzkwLDggQEAKIAkJMUNBMEMyRUMyMUVFRDZGNjAwQTExODYwIC8qIFdITFNMTGl0
ZXJhbFR5cGVDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTGl0ZXJhbFR5cGVD
aGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMDMwREMyNTU5
NTAwNjVBOTk0IC8qIEV2ZW50TG9vcE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEV2ZW50TG9vcE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUNBMTlFMTUwREMyNTVDQTAwNjVBOTk0IC8qIEV2ZW50TG9vcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudExvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUNBQTgyRjYyMjQyQUUwNTAwRTg0QkJCIC8qIFdITFNMUHJvcGVydHlSZXNvbHZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQ0FBODJGNzIyNDJBRTA1MDBFODRCQkIgLyogV0hMU0xQ
cm9wZXJ0eVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUHJvcGVydHlSZXNvbHZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ3RTBBNkM0MDUyMDBBQkUwNkUg
LyogV2ViU2NyaXB0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlNjcmlwdE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ3RjBB
NkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQ0FGMzQ4MDBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmpl
Y3RQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTQwMiw2ICsyNTQw
NCw4IEBACiAJCQkJQzI0QTU3QkEyMUZFQUZFQTAwNEM2REQxIC8qIFdITFNMUHJlcGFyZS5jcHAg
Ki8sCiAJCQkJQzI0QTU3QkIyMUZFQUZFQTAwNEM2REQxIC8qIFdITFNMUHJlcGFyZS5oICovLAog
CQkJCUMyMUJGNzNBMjFDRDhENzAwMDIyNzk3OSAvKiBXSExTTFByb2dyYW0uaCAqLywKKwkJCQkx
Q0FBODJGNjIyNDJBRTA1MDBFODRCQkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcCAqLywK
KwkJCQkxQ0FBODJGNzIyNDJBRTA1MDBFODRCQkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmgg
Ki8sCiAJCQkJMUNBMEMyRTAyMUVFQjVGNTAwQTExODYwIC8qIFdITFNMUmVjdXJzaW9uQ2hlY2tl
ci5jcHAgKi8sCiAJCQkJMUNBMEMyREUyMUVFQjVGNDAwQTExODYwIC8qIFdITFNMUmVjdXJzaW9u
Q2hlY2tlci5oICovLAogCQkJCUMyMzRBOUFEMjFFOTJDMTkwMDNDOTg0RCAvKiBXSExTTFJlY3Vy
c2l2ZVR5cGVDaGVja2VyLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0
YWwubW0KaW5kZXggOGZiNGEyNmNhNDhiNTRjYWFiMTg3ZGIyOWUzNDY5YTM4NTA0NDA1Zi4uZTAy
OTJiOGY1NDRkNGVhY2RiYTE3OWZjMGIyMzRlNGVjM2FhNzNmZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0
YWwubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQ
VVJlbmRlclBpcGVsaW5lTWV0YWwubW0KQEAgLTI2Myw2ICsyNjMsOCBAQCBzdGF0aWMgYm9vbCB0
cnlTZXRXSExTTEZ1bmN0aW9uc0ZvclBpcGVsaW5lRGVzY3JpcHRvcihjb25zdCBjaGFyKiBjb25z
dCBmdW5jdGlvbgogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBXVEZMb2dBbHdheXMoIk1ldGFsIFNvdXJjZTogJXMiLCByZXN1bHQtPm1ldGFsU291cmNlLnV0
ZjgoKS5kYXRhKCkpOworCiAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CiAgICAgYXV0byBsaWJy
YXJ5ID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3TGlicmFyeVdpdGhTb3Vy
Y2U6cmVzdWx0LT5tZXRhbFNvdXJjZSBvcHRpb25zOm5pbCBlcnJvcjomZXJyb3JdKTsKICAgICBB
U1NFUlQobGlicmFyeSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90
LWV4cHJlc3Npb25zLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90LWV4cHJlc3Np
b25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ0YTBmNmZmODQ2ZmViZTMwNjkxMmQ3ODUyZWJmNDNmZDFj
ZTFlNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhw
cmVzc2lvbnMuaHRtbApAQCAtMCwwICsxLDEyOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAi
IGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBg
CitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsK
KyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91dCB2
ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisgICAgcmVzdWx0LnBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDog
YXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBz
aGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAg
Y29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAg
ICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNv
bnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRl
clNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3Qg
ZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdt
ZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3Ry
aXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1
bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBj
b2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4
dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNv
bG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAg
ICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBpbnB1dFNsb3Q6
IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9j
YXRpb246IDEsIGlucHV0U2xvdDogMSwgZm9ybWF0OiAiZmxvYXQifTsKKyAgICBjb25zdCBhdHRy
aWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtp
bnB1dFNsb3Q6IDAsIHN0cmlkZTogMTYgfTsKKyAgICBjb25zdCBpbnB1dDEgPSB7aW5wdXRTbG90
OiAxLCBzdHJpZGU6IDQgfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwLCBpbnB1dDFdOwor
ICAgIGNvbnN0IGlucHV0U3RhdGUgPSB7aW5kZXhGb3JtYXQ6ICJ1aW50MzIiLCBhdHRyaWJ1dGVz
LCBpbnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIi
fV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFz
dGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIGlucHV0U3Rh
dGUsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBy
ZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6
ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9y
KTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZm
ZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNf
UEVSX0VMRU1FTlQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVy
MUFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMS5tYXBXcml0ZUFzeW5jKCk7CisgICAg
Y29uc3QgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4
QnVmZmVyMUFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvclswXSA9IDE7
CisgICAgdmVydGV4QnVmZmVyMURlc2NyaXB0b3JbMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFE
ZXNjcmlwdG9yWzJdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvclszXSA9IDE7Cisg
ICAgdmVydGV4QnVmZmVyMS51bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNj
cmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRl
c2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBy
ZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIp
OworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1
ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291
cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRp
bmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNj
cmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJp
bmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJp
bmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4
dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1h
dDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3Vy
ZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJl
ID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBj
b21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAg
IGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0
dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdl
dDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiBy
ZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25z
dCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxB
dHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZl
cnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjAsIHZlcnRleEJ1ZmZlcjFdLCBbMCwgMF0pOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rl
ci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJd
KTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370338</attachid>
            <date>2019-05-21 13:48:32 -0700</date>
            <delta_ts>2019-05-21 17:56:26 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195925-20190521134831.patch</filename>
            <type>text/plain</type>
            <size>161761</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWRjNmYxZjdkM2RlMzEx
ZGRhYjA1YjNiY2E0MWViM2U5ODRmZWIzNS4uOGQ2NjBhYWY1Zjc5MmRhMzgyOTgyNDNhN2NmMjNm
Njg3NzQyN2MyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTA1LTIwICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OmxlZnRBZGRyZXNzU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246Omlz
UmlnaHRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlQW5u
b3RhdGlvbjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246
OnR5cGVBbm5vdGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OnNldFR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkV4cHJlc3Npb246OmFkZHJlc3NTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpzZXRBZGRyZXNzU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6
bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b246OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZvcndhcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTktMDUt
MjAgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIE1h
a2UgbG9zc3kgTGF5b3V0VW5pdCBjb25zdHJ1Y3RvcnMgZXhwbGljaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1Nw
YWNlLmgKaW5kZXggNGE2ZDdjNDY5NWRjNGNhYzgyOTA1NGU0MDU1NTc4NzY1MTc1Zjg2My4uZDQz
NmQ2ODljNzhlMDQwYzVmZGRjZTM5NjBmMzhmNDMwMTUwYjJiMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1Nw
YWNlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSA8
Y3N0ZGludD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQyLDYgKzQzLDcwIEBAIGVudW0gY2xhc3MgQWRkcmVzc1NwYWNlIDogdWludDhfdCB7
CiAgICAgVGhyZWFkCiB9OwogCitzdHJ1Y3QgTGVmdFZhbHVlIHsKKyAgICBBZGRyZXNzU3BhY2Ug
YWRkcmVzc1NwYWNlOworfTsKKworc3RydWN0IEFic3RyYWN0TGVmdFZhbHVlIHsKK307CisKK3N0
cnVjdCBSaWdodFZhbHVlIHsKK307CisKKy8vIEZJWE1FOiBUaGlzIHdyYXBwZXIgbWlnaHQgbm90
IGJlIG5lY2Vzc2FyeS4KK2NsYXNzIFR5cGVBbm5vdGF0aW9uIHsKK3B1YmxpYzoKKyAgICBUeXBl
QW5ub3RhdGlvbigpCisgICAgICAgIDogbV9lbXB0eSh0cnVlKQorICAgIHsKKyAgICB9CisKKyAg
ICBUeXBlQW5ub3RhdGlvbihMZWZ0VmFsdWUgdikKKyAgICAgICAgOiBtX2lubmVyKHYpCisgICAg
eworICAgIH0KKworICAgIFR5cGVBbm5vdGF0aW9uKEFic3RyYWN0TGVmdFZhbHVlIHYpCisgICAg
ICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBUeXBlQW5ub3RhdGlvbihSaWdo
dFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBUeXBl
QW5ub3RhdGlvbihjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBlQW5u
b3RhdGlvbihUeXBlQW5ub3RhdGlvbiYmIG90aGVyKSA9IGRlZmF1bHQ7CisKKyAgICBUeXBlQW5u
b3RhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IFR5cGVBbm5vdGF0aW9uJikgPSBkZWZhdWx0OworICAg
IFR5cGVBbm5vdGF0aW9uJiBvcGVyYXRvcj0oVHlwZUFubm90YXRpb24mJiBvdGhlcikgPSBkZWZh
dWx0OworCisgICAgT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiBsZWZ0QWRkcmVzc1NwYWNlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0eSk7CisgICAgICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPExlZnRWYWx1ZT4obV9pbm5lcikpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpnZXQ8TGVmdFZhbHVlPihtX2lubmVyKS5hZGRyZXNzU3BhY2U7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgYm9vbCBpc1JpZ2h0VmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2VtcHR5KTsKKyAgICAgICAgcmV0dXJuIFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmlnaHRWYWx1ZT4obV9pbm5lcik7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlzaXRvciYgdmlzaXRvcikg
LT4gZGVjbHR5cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFyaWFudDxMZWZ0
VmFsdWUsIEFic3RyYWN0TGVmdFZhbHVlLCBSaWdodFZhbHVlPiY+KCkpKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtX2VtcHR5KTsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwg
bV9pbm5lcik7CisgICAgfQorCitwcml2YXRlOgorICAgIFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0
cmFjdExlZnRWYWx1ZSwgUmlnaHRWYWx1ZT4gbV9pbm5lcjsKKyAgICBib29sIG1fZW1wdHkgeyBm
YWxzZSB9OworfTsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24u
aAppbmRleCBiMTIxZmI2YzFlMWQxNzkyNjE1ZDliYjAyNzRmZTIzNTg4YTdmMmI1Li43OTQxNWUy
ZmYzMDMwMjkxMDZiNWJmNDE5NzY3ZWI1OTk4ZjBlNGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFzc2ln
bm1lbnRFeHByZXNzaW9uLmgKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogCiAgICAgRXhwcmVz
c2lvbiYgbGVmdCgpIHsgcmV0dXJuIG1fbGVmdDsgfQogICAgIEV4cHJlc3Npb24mIHJpZ2h0KCkg
eyByZXR1cm4gbV9yaWdodDsgfQorICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIHRha2VSaWdo
dCgpIHsgcmV0dXJuIFdURk1vdmUobV9yaWdodCk7IH0KIAogcHJpdmF0ZToKICAgICBVbmlxdWVS
ZWY8RXhwcmVzc2lvbj4gbV9sZWZ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCmluZGV4IGI3YWIyMGNlZDJj
NDUzZjk1ZjFjMmUzZWZjMjgxZmRhNDhlNWMzYWQuLjMxOGE4MTA2MTYzZGI4N2U4NWVmNDgxZWM4
ODdkOWQ2YzVjMjljYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKQEAgLTY1LDEyICs2NSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fdHlwZSA9IFdURk1vdmUodHlwZSk7CiAgICAgfQogCi0gICAgY29u
c3QgT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiYgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4g
bV9hZGRyZXNzU3BhY2U7IH0KKyAgICBjb25zdCBUeXBlQW5ub3RhdGlvbiogdHlwZUFubm90YXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3R5cGVBbm5vdGF0aW9uID8gJiptX3R5cGVBbm5vdGF0aW9u
IDogbnVsbHB0cjsgfQogCi0gICAgdm9pZCBzZXRBZGRyZXNzU3BhY2UoT3B0aW9uYWw8QWRkcmVz
c1NwYWNlPiYgYWRkcmVzc1NwYWNlKQorICAgIHZvaWQgc2V0VHlwZUFubm90YXRpb24oVHlwZUFu
bm90YXRpb24mJiB0eXBlQW5ub3RhdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9hZGRy
ZXNzU3BhY2UpOwotICAgICAgICBtX2FkZHJlc3NTcGFjZSA9IGFkZHJlc3NTcGFjZTsKKyAgICAg
ICAgQVNTRVJUKCFtX3R5cGVBbm5vdGF0aW9uKTsKKyAgICAgICAgbV90eXBlQW5ub3RhdGlvbiA9
IFdURk1vdmUodHlwZUFubm90YXRpb24pOwogICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0Fz
c2lnbm1lbnRFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTk3LDcgKzk3
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAg
T3B0aW9uYWw8VW5pcXVlUmVmPFVubmFtZWRUeXBlPj4gbV90eXBlOwotICAgIE9wdGlvbmFsPEFk
ZHJlc3NTcGFjZT4gbV9hZGRyZXNzU3BhY2U7CisgICAgT3B0aW9uYWw8VHlwZUFubm90YXRpb24+
IG1fdHlwZUFubm90YXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaAppbmRleCA2MzE2ZjU0ZTE2
MzI2YjRhNDgzZmE4NzJlMWY0N2JiMDQ4ZWRmODhlLi43NzBjZjhiYTlmMjUyNzI2ZjY5YzFhZTZk
ZTVlYTRhNWIxMmJmNzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbi5oCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFz
cyBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVi
bGljOgotICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsVmFsdWUpCisgICAgTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9u
PiYmIGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKLSAg
ICAgICAgLCBtX2xWYWx1ZShXVEZNb3ZlKGxWYWx1ZSkpCisgICAgICAgICwgbV9sZWZ0VmFsdWUo
V1RGTW92ZShsZWZ0VmFsdWUpKQogICAgIHsKICAgICB9CiAKQEAgLTUyLDEwICs1MiwxMCBAQCBw
dWJsaWM6CiAKICAgICBib29sIGlzTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsg
cmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVlKCkgeyByZXR1cm4g
bV9sZWZ0VmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9s
VmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCmlu
ZGV4IDdiMDUyYjZkNWYyODg3ZjU5MmRmNDRmZDk0MDljNGZhOTUyMDNhYTguLjM0NjA0ZDU2YWVj
YzRiNjMwZDdhN2U2Zjc5NmI5Yzg1MzQ3Y2UxZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5oCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFz
cyBNYWtlUG9pbnRlckV4cHJlc3Npb24gOiBwdWJsaWMgRXhwcmVzc2lvbiB7CiBwdWJsaWM6Ci0g
ICAgTWFrZVBvaW50ZXJFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVm
PEV4cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VQb2ludGVyRXhwcmVzc2lvbihMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxlZnRWYWx1ZSkKICAgICAg
ICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShXVEZN
b3ZlKGxWYWx1ZSkpCisgICAgICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUpKQog
ICAgIHsKICAgICB9CiAKQEAgLTUyLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
TWFrZVBvaW50ZXJFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9sVmFsdWU7IH0KKyAgICBFeHBy
ZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogCiBwcml2YXRlOgot
ICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xWYWx1ZTsKKyAgICBVbmlxdWVSZWY8RXhwcmVz
c2lvbj4gbV9sZWZ0VmFsdWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKaW5kZXggMmVjMzRlMTVkOGE0MGU1YWQy
ZTJiZjg5NjgwYzIxYzMzNDRjOTk4OC4uMTU3MDkyZDY1MGZhY2VhMDI5YjliMTc3NjBkODA1MDU3
ZTFhZGQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgK
QEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIApAQCAtNTks
MjcgKzYwLDU2IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlR2V0T3ZlcmxvYWRzKCkgeyByZXR1cm4g
bV9wb3NzaWJsZUdldE92ZXJsb2FkczsgfQogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVTZXRPdmVybG9hZHMoKSB7IHJl
dHVybiBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzOyB9CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUFuZE92ZXJsb2Fkcygp
IHsgcmV0dXJuIG1fcG9zc2libGVBbmRPdmVybG9hZHM7IH0KKyAgICBGdW5jdGlvbkRlY2xhcmF0
aW9uKiBnZXRGdW5jdGlvbigpIHsgcmV0dXJuIG1fZ2V0RnVuY3Rpb247IH0KKyAgICBGdW5jdGlv
bkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbigpIHsgcmV0dXJuIG1fYW5kRnVuY3Rpb247IH0KKyAg
ICBGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRGdW5jdGlvbigpIHsgcmV0dXJuIG1fdGhy
ZWFkQW5kRnVuY3Rpb247IH0KKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5jdGlvbigp
IHsgcmV0dXJuIG1fc2V0RnVuY3Rpb247IH0KIAogICAgIHZvaWQgc2V0UG9zc2libGVHZXRPdmVy
bG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+JiBvdmVybG9hZHMpCiAgICAgewogICAgICAgICBtX3Bvc3NpYmxlR2V0T3Zlcmxv
YWRzID0gb3ZlcmxvYWRzOwogICAgIH0KKyAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRz
KGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+
LCAxPiYgb3ZlcmxvYWRzKQorICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9
IG92ZXJsb2FkczsKKyAgICB9CiAgICAgdm9pZCBzZXRQb3NzaWJsZVNldE92ZXJsb2Fkcyhjb25z
dCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IG92ZXJsb2FkcykKICAgICB7CiAgICAgICAgIG1fcG9zc2libGVTZXRPdmVybG9hZHMgPSBvdmVy
bG9hZHM7CiAgICAgfQotICAgIHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29uc3QgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVy
bG9hZHMpCisKKyAgICB2b2lkIHNldEdldEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIGdl
dEZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG92ZXJs
b2FkczsKKyAgICAgICAgbV9nZXRGdW5jdGlvbiA9IGdldEZ1bmN0aW9uOworICAgIH0KKworICAg
IHZvaWQgc2V0QW5kRnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb24pCisg
ICAgeworICAgICAgICBtX2FuZEZ1bmN0aW9uID0gYW5kRnVuY3Rpb247CisgICAgfQorCisgICAg
dm9pZCBzZXRUaHJlYWRBbmRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRG
dW5jdGlvbikKKyAgICB7CisgICAgICAgIG1fdGhyZWFkQW5kRnVuY3Rpb24gPSB0aHJlYWRBbmRG
dW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldFNldEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFy
YXRpb24qIHNldEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgbV9zZXRGdW5jdGlvbiA9IHNldEZ1
bmN0aW9uOwogICAgIH0KIAogICAgIEV4cHJlc3Npb24mIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7
IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiB0YWtlQmFzZSgpIHsgcmV0dXJuIFdURk1v
dmUobV9iYXNlKTsgfQogCiBwcml2YXRlOgogICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2Jh
c2U7CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlv
bj4sIDE+IG1fcG9zc2libGVHZXRPdmVybG9hZHM7CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVTZXRPdmVybG9hZHM7
CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+IG1fcG9zc2libGVBbmRPdmVybG9hZHM7CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9n
ZXRGdW5jdGlvbiB7IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX2FuZEZ1
bmN0aW9uIHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fdGhyZWFkQW5k
RnVuY3Rpb24geyBudWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9zZXRGdW5j
dGlvbiB7IG51bGxwdHIgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCmluZGV4IDc5ZDhkMGY3MDhlOGQwNTc4
MzEyYzgxNzk0ZTg4ZWRhZjM0ODdjZjkuLjIwOWE1MjY1MWU3ZWIzZWI1YTljYzFmNmJjMTcwMmJl
YjY1ODJiYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmgKQEAgLTQxLDExICs0MSwxMSBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7
CiAKIC8qCi0gKiAgMS4gRXZhbHVhdGUgbV9sVmFsdWUKKyAqICAxLiBFdmFsdWF0ZSBtX2xlZnRW
YWx1ZQogICogIDIuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1fb2xkVmFsdWUKICAqICAzLiBFdmFs
dWF0ZSBtX25ld1ZhbHVlRXhwcmVzc2lvbgogICogIDQuIEFzc2lnbiB0aGUgcmVzdWx0IHRvIG1f
bmV3VmFsdWUKLSAqICA1LiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX2xWYWx1ZQorICogIDUuIEFz
c2lnbiB0aGUgcmVzdWx0IHRvIG1fbGVmdFZhbHVlCiAgKiAgNi4gRXZhbHVhdGUgbV9yZXN1bHRF
eHByZXNzaW9uCiAgKiAgNy4gUmV0dXJuIHRoZSByZXN1bHQKICAqLwpAQCAtNzMsMzggKzczLDQx
IEBAIHB1YmxpYzoKIAogICAgIFVuaXF1ZVJlZjxWYXJpYWJsZVJlZmVyZW5jZT4gb2xkVmFyaWFi
bGVSZWZlcmVuY2UoKQogICAgIHsKLSAgICAgICAgLy8gVGhlIG9ubHkgcmVhc29uIHdlIGRvbid0
IGdldCB1c2UtYWZ0ZXItZnJlZXMgaXMgdGhlIGZhY3QgdGhhdCBldmVyeSBpbnN0YW5jZSBvZiBS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uIGlzIGFsbG9jYXRlZCBvbiB0aGUgaGVhcC4KICAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VmFyaWFibGVSZWZlcmVuY2U+KFZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKG1fb2xkVmFsdWUpKTsKICAgICB9CiAKICAgICBVbmlxdWVSZWY8VmFyaWFibGVS
ZWZlcmVuY2U+IG5ld1ZhcmlhYmxlUmVmZXJlbmNlKCkKICAgICB7Ci0gICAgICAgIC8vIFRoZSBv
bmx5IHJlYXNvbiB3ZSBkb24ndCBnZXQgdXNlLWFmdGVyLWZyZWVzIGlzIHRoZSBmYWN0IHRoYXQg
ZXZlcnkgaW5zdGFuY2Ugb2YgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiBpcyBhbGxvY2F0ZWQg
b24gdGhlIGhlYXAuCiAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJl
bmNlPihWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChtX25ld1ZhbHVlKSk7CiAgICAgfQogCiAgICAg
Ym9vbCBpc1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xWYWx1ZTsg
fQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9CiAg
ICAgVmFyaWFibGVEZWNsYXJhdGlvbiYgb2xkVmFsdWUoKSB7IHJldHVybiBtX29sZFZhbHVlOyB9
CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiYgbmV3VmFsdWUoKSB7IHJldHVybiBtX25ld1ZhbHVl
OyB9CiAgICAgRXhwcmVzc2lvbiogbmV3VmFsdWVFeHByZXNzaW9uKCkgeyByZXR1cm4gbV9uZXdW
YWx1ZUV4cHJlc3Npb24gPyAmKm1fbmV3VmFsdWVFeHByZXNzaW9uIDogbnVsbHB0cjsgfQogICAg
IEV4cHJlc3Npb24qIHJlc3VsdEV4cHJlc3Npb24oKSB7IHJldHVybiBtX3Jlc3VsdEV4cHJlc3Np
b24gPyAmKm1fcmVzdWx0RXhwcmVzc2lvbiA6IG51bGxwdHI7IH0KKyAgICBVbmlxdWVSZWY8RXhw
cmVzc2lvbj4mJiB0YWtlTGVmdFZhbHVlKCkgeyByZXR1cm4gV1RGTW92ZShtX2xlZnRWYWx1ZSk7
IH0KKyAgICBVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4mJiB0YWtlT2xkVmFsdWUoKSB7
IHJldHVybiBXVEZNb3ZlKG1fb2xkVmFsdWUpOyB9CisgICAgVW5pcXVlUmVmPFZhcmlhYmxlRGVj
bGFyYXRpb24+JiYgdGFrZU5ld1ZhbHVlKCkgeyByZXR1cm4gV1RGTW92ZShtX25ld1ZhbHVlKTsg
fQorICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mJiB0YWtlTmV3VmFsdWVFeHBy
ZXNzaW9uKCkgeyByZXR1cm4gV1RGTW92ZShtX25ld1ZhbHVlRXhwcmVzc2lvbik7IH0KKyAgICBP
cHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYgdGFrZVJlc3VsdEV4cHJlc3Npb24oKSB7
IHJldHVybiBXVEZNb3ZlKG1fcmVzdWx0RXhwcmVzc2lvbik7IH0KIAogcHJpdmF0ZToKICAgICB0
ZW1wbGF0ZTxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPiBmcmllbmQgVW5pcXVlUmVmPFU+IFdURjo6
bWFrZVVuaXF1ZVJlZihBcmdzJiYuLi4pOwogCi0gICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBsVmFsdWUpCisg
ICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihMZXhlcjo6
VG9rZW4ob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShXVEZNb3ZlKGxWYWx1ZSkpCi0gICAg
ICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6
Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKLSAgICAgICAg
LCBtX25ld1ZhbHVlKFdURk1vdmUob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQs
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKKyAgICAgICAgLCBtX2xlZnRW
YWx1ZShXVEZNb3ZlKGxlZnRWYWx1ZSkpCisgICAgICAgICwgbV9vbGRWYWx1ZShtYWtlVW5pcXVl
UmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBRdWFsaWZpZXJz
KCksIFdURjo6bnVsbG9wdCwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSkK
KyAgICAgICAgLCBtX25ld1ZhbHVlKG1ha2VVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4o
V1RGTW92ZShvcmlnaW4pLCBRdWFsaWZpZXJzKCksIFdURjo6bnVsbG9wdCwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSkKICAgICB7CiAgICAgfQogCi0gICAgVW5pcXVlUmVm
PEV4cHJlc3Npb24+IG1fbFZhbHVlOwotICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9vbGRWYWx1
ZTsKLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fbmV3VmFsdWU7CisgICAgVW5pcXVlUmVmPEV4
cHJlc3Npb24+IG1fbGVmdFZhbHVlOworICAgIFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9u
PiBtX29sZFZhbHVlOworICAgIFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPiBtX25ld1Zh
bHVlOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9uZXdWYWx1ZUV4cHJl
c3Npb247CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiBtX3Jlc3VsdEV4cHJl
c3Npb247CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCmluZGV4IDE5ODI0
Zjk0MDU0ZTRiM2I3ZDdjZjI0ZjYzYzAxMTliOGE2M2Y0ZmIuLmU1MGFhYWRkZTc4OGY0ZWQ4OWU5
YzI2YmY0NDYzOWMyMTQwNDljZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9u
LmgKQEAgLTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8RXhw
cmVzc2lvbj4+IG1faW5pdGlhbGl6ZXI7CiB9OwogCi11c2luZyBWYXJpYWJsZURlY2xhcmF0aW9u
cyA9IFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPjsKK3VzaW5nIFZhcmlhYmxlRGVjbGFyYXRp
b25zID0gVmVjdG9yPFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPj47CiAKIH0gLy8gbmFt
ZXNwYWNlIEFTVAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQuaAppbmRleCBlOGUxZmM3ZjViMjM4ZGJiMDQwM2U5ZjQwMjc4MDRhNzBhN2U4ODFj
Li4wOWEwMmQwMWY0OTY4NGFiOTYzZWY4NzI1YjA0NTJkNWEzOGVkZjRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgKQEAgLTQwLDcgKzQw
LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50IDogcHVibGljIFN0YXRlbWVudCB7CiBwdWJsaWM6Ci0gICAgVmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBWZWN0b3I8VmFyaWFibGVEZWNsYXJh
dGlvbj4mJiB2YXJpYWJsZURlY2xhcmF0aW9ucykKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFZhcmlhYmxlRGVjbGFyYXRpb25zJiYgdmFy
aWFibGVEZWNsYXJhdGlvbnMpCiAgICAgICAgIDogU3RhdGVtZW50KFdURk1vdmUob3JpZ2luKSkK
ICAgICAgICAgLCBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zKFdURk1vdmUodmFyaWFibGVEZWNsYXJh
dGlvbnMpKQogICAgIHsKQEAgLTUzLDEwICs1MywxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CiAKLSAgICBWZWN0b3I8VmFyaWFibGVEZWNsYXJhdGlvbj4mIHZhcmlhYmxlRGVjbGFy
YXRpb25zKCkgeyByZXR1cm4gbV92YXJpYWJsZURlY2xhcmF0aW9uczsgfQorICAgIFZlY3RvcjxV
bmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4+JiB2YXJpYWJsZURlY2xhcmF0aW9ucygpIHsg
cmV0dXJuIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7IH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8
VmFyaWFibGVEZWNsYXJhdGlvbj4gbV92YXJpYWJsZURlY2xhcmF0aW9uczsKKyAgICBWYXJpYWJs
ZURlY2xhcmF0aW9ucyBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKaW5k
ZXggNjI0YzU2MmU1MWNhNjBjNmVmOGRlMjhhZmViYWM1MTRmMmJlMGRiZC4uNTQ5ZDVkY2YxYjM3
YWZjYTNjZTY4MTFjNDVmM2M5YzRhYmE3MjI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50
cnlQb2ludFNjYWZmb2xkaW5nLmNwcApAQCAtODYsNyArODYsNyBAQCBzdGF0aWMgU3RyaW5nIGF0
dHJpYnV0ZUZvclNlbWFudGljKEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQogICAgIGlmIChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6QnVpbHRJblNlbWFudGljPihzZW1hbnRpYykpCiAgICAg
ICAgIHJldHVybiBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1h
bnRpYz4oc2VtYW50aWMpKTsKICAgICBhdXRvJiBzdGFnZUluT3V0U2VtYW50aWMgPSBXVEY6Omdl
dDxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2VtYW50aWMpOwotICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJbW3VzZXIoIiwgc3RhZ2VJbk91dFNlbWFudGljLmluZGV4KCksICIpXV0iKTsKKyAgICBy
ZXR1cm4gbWFrZVN0cmluZygiW1t1c2VyKHVzZXIiLCBzdGFnZUluT3V0U2VtYW50aWMuaW5kZXgo
KSwgIildXSIpOwogfQogCiBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9s
ZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uLCBJbnRyaW5z
aWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgRW50cnlQb2ludEl0ZW1zJiBl
bnRyeVBvaW50SXRlbXMsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBM
YXlvdXQmIGxheW91dCwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJp
YWJsZU5hbWUpCkBAIC0xODgsOSArMTg4LDkgQEAgU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGlu
Zzo6bWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkKICAgICBib29sIGZvdW5k
ID0gZmFsc2U7CiAgICAgQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uKiBzdHJ1Y3R1cmVEZWZpbml0
aW9uID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25EZWZp
bml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9mdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLm5hbWUoKSA9PSBwYXRoWzBdKSB7CisgICAgICAg
IGlmIChtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPm5hbWUoKSA9PSBwYXRo
WzBdKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtX3BhcmFtZXRlclZhcmlh
Ymxlc1tpXSk7Ci0gICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBtX2Z1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGF1
dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlw
ZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5p
ZnlOb2RlKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFT
VDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlN0
cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCkBAIC0yNDksNyArMjQ5LDcgQEAgU3RyaW5n
IEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucygp
CiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKQot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLnR5cGUo
KSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCptX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSksICcgJywgbV9w
YXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fbGF5b3V0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0g
bV9uYW1lZEJpbmRHcm91cHNbaV0udmFyaWFibGVOYW1lOwpAQCAtNDAzLDggKzQwMyw4IEBAIFN0
cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMoKQogICAgIGZv
ciAoYXV0byYgbmFtZWRTdGFnZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CiAgICAgICAgIGF1dG8g
bWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptX2VudHJ5
UG9pbnRJdGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnVu
bmFtZWRUeXBlKTsKICAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG5hbWVkU3RhZ2VJbi5lbGVt
ZW50TmFtZTsKLSAgICAgICAgYXV0byBhdHRyaWJ1dGVJbmRleCA9IG5hbWVkU3RhZ2VJbi5lbGVt
ZW50TmFtZTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIs
IG1hbmdsZWRUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgIiBbW3VzZXIoIiwgYXR0cmlidXRl
SW5kZXgsICIpXV07XG4iKSk7CisgICAgICAgIGF1dG8gYXR0cmlidXRlSW5kZXggPSBuYW1lZFN0
YWdlSW4uYXR0cmlidXRlSW5kZXg7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoIiAgICAiLCBtYW5nbGVkVHlwZU5hbWUsICcgJywgZWxlbWVudE5hbWUsICIgW1t1c2Vy
KHVzZXIiLCBhdHRyaWJ1dGVJbmRleCwgIildXTtcbiIpKTsKICAgICB9CiAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIn07XG5cbiIpOwogCkBAIC00NDYsNyArNDQ2LDcgQEAgU3RyaW5nIEZyYWdt
ZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2soKQogICAgIGZvciAoYXV0byYgbmFtZWRT
dGFnZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CiAgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5
UG9pbnRJdGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnBh
dGg7CiAgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbmFtZWRTdGFnZUluLmVsZW1lbnROYW1l
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRJbnB1dFBh
dGgocGF0aCksICIgPSAiLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lLCAnLicsIGVsZW1lbnROYW1lLCAi
O1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRJ
bnB1dFBhdGgocGF0aCksICIgPSAiLCBtX3N0YWdlSW5QYXJhbWV0ZXJOYW1lLCAnLicsIGVsZW1l
bnROYW1lLCAiO1xuIikpOwogICAgIH0KIAogICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCmluZGV4IDJmYzE0NjU4NjE2
Yzk4OWNhMjE3YzY5MjgyYWU4NmRjNDg3MTlmMDguLjA5ZDY5YjEwM2FkMTYzOWE1Mjk2NDIyZjZi
YmE0N2I1OGE5MjhhZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCkBAIC0x
MDcsNyArMTA3LDcgQEAgdm9pZCBGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXQKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAi
KTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKmZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSkpOwor
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSkpOwogICAg
IH0KICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CiB9CkBAIC0yMjcsNyArMjI3
LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24KICAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVy
TmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgICAgICAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX3ZhcmlhYmxlTWFwcGluZy5hZGQoJnBhcmFtZXRlciwgcGFyYW1ldGVyTmFtZSk7
CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50
cnkpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqcGFyYW1ldGVyLnR5cGUoKSksICcgJywgcGFyYW1l
dGVyTmFtZSkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqcGFyYW1ldGVyLT50eXBlKCkpLCAnICcs
IHBhcmFtZXRlck5hbWUpKTsKICAgICAgICAgfQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIpIHtcbiIpOwogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0
aW9uLmJsb2NrKCkpOwpAQCAtNDg2LDEyICs0ODYsMjEgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJh
dGkKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVu
dEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQogeworICAgIGlmIChpczxBU1Q6OkRl
cmVmZXJlbmNlRXhwcmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKSkgeworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Np
b24+KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSkucG9pbnRlcigpKTsKKyAgICAgICAgYXV0
byBsZWZ0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICBhdXRvIHJpZ2h0TmFt
ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCcqJywgbGVmdE5hbWUsICIgPSAiLCByaWdodE5hbWUsICI7XG4iKSk7CisgICAg
ICAgIG1fc3RhY2suYXBwZW5kKHJpZ2h0TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CiAgICAg
YXV0byBsZWZ0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7CiAgICAgYXV0byByaWdodE5hbWUgPSBt
X3N0YWNrLnRha2VMYXN0KCk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KGxlZnROYW1lLCAiID0gIiwgcmlnaHROYW1lLCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5k
KGxlZnROYW1lKTsKKyAgICBtX3N0YWNrLmFwcGVuZChyaWdodE5hbWUpOwogfQogCiB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4
cHJlc3Npb24pCkBAIC01NzAsNyArNTc5LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXMKIAog
dm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsKLSAgICBjaGVj
a0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZh
bHVlKCkpOwogICAgIGF1dG8gbFZhbHVlID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAgIEFTU0VS
VChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKICAgICBhdXRv
IHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwpAQCAtNTg3LDcgKzU5
Niw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJhCiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHBy
ZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24u
bFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24u
bGVmdFZhbHVlKCkpOwogICAgIGF1dG8gbFZhbHVlID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAg
IEFTU0VSVChtYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGF1dG8g
dmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0
aW9uV3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCmluZGV4IDY5NzJlOTg5MDUwYTlhMWI3ZGE4
MTFhODdjMzNjMzNkMWU0ZWQyOWMuLmVkZTU3NmZkYmIwNmQ1YTFkZTk0YWQzZWVkODJmMmY4MDcz
MDhhNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCkBA
IC0xMTEsOCArMTExLDggQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgfQogCiAg
ICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXpl
KCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0udHlwZSgpKTsKLSAgICAgICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAg
ICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgaWYgKGlzPEFTVDo6TmFt
ZWRUeXBlPihwYXJhbWV0ZXJUeXBlKSkgewogICAgICAgICAgICAgYXV0byYgcGFyYW1ldGVyTmFt
ZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHBhcmFtZXRlclR5cGUpOwogICAgICAg
ICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihwYXJhbWV0ZXJOYW1lZFR5
cGUpKSB7CkBAIC0xMzQsNyArMTM0LDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAg
IGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IudmFsdWUi
KSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgp
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5h
bWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4
KSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8IiwgbWV0YWxSZXR1cm5OYW1lLCAiPih4KTtcbiIpKTsKQEAgLTE0
MiwxMSArMTQyLDEyIEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgICAgIHJldHVybiBz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogCisgICAgLy8gRklYTUU6IEF1dGhvcnMg
Y2FuIG1ha2UgYSBzdHJ1Y3QgZmllbGQgbmFtZWQgImxlbmd0aCIgdG9vLiBBdXRvZ2VuZXJhdGVk
IGdldHRlcnMgZm9yIHRob3NlIHNob3VsZG4ndCB0YWtlIHRoaXMgY29kZXBhdGguCiAgICAgaWYg
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiKSB7
CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoaW50cmluc2ljcywgbWF0Y2hlcyhuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSk7CiAgICAgICAgIEFT
U0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7
Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgp
KTsKLSAgICAgICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzBdLnR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8m
IHBhcmFtZXRlclR5cGUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgQVNTRVJUKGlzPEFTVDo6VW5uYW1lZFR5
cGU+KHBhcmFtZXRlclR5cGUpKTsKICAgICAgICAgYXV0byYgdW5uYW1lZFBhcmFtZXRlclR5cGUg
PSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihwYXJhbWV0ZXJUeXBlKTsKICAgICAgICAgaWYg
KGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkUGFyYW1ldGVyVHlwZSkpIHsKQEAgLTE2NSw0NSAr
MTY2LDczIEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgfQogCiAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIm9wZXJhdG9yLiJfc3RyKSkg
eworICAgICAgICBhdXRvIG1hbmdsZWRGaWVsZE5hbWUgPSBbJl0oU3RyaW5nJiBmaWVsZE5hbWUp
IC0+IFN0cmluZyB7CisgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAg
ICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5v
ZGUpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRU
eXBlKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gPSBkb3du
Y2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAgICAgICAg
ICAgYXV0byogc3RydWN0dXJlRWxlbWVudCA9IHN0cnVjdHVyZURlZmluaXRpb24uZmluZChmaWVs
ZE5hbWUpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVFbGVtZW50KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVu
dCgqc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQo
aXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgICAgICAgICAg
cmV0dXJuIGZpZWxkTmFtZTsKKyAgICAgICAgfTsKKwogICAgICAgICBpZiAobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkuZW5kc1dpdGgoIj0iKSkgewogICAgICAgICAgICAgQVNTRVJU
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAg
ICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUo
KSk7Ci0gICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5O
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IuIl9zdHIubGVuZ3RoKCkpOwog
ICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGROYW1lLnN1YnN0cmluZygwLCBmaWVsZE5hbWUu
bGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxGaWVsZE5hbWUgPSBtYW5nbGVk
RmllbGROYW1lKGZpZWxkTmFtZSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtc
biIpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICB2
LiIsIGZpZWxkTmFtZSwgIiA9IG47XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCIgICAgdi4iLCBtZXRhbEZpZWxkTmFtZSwgIiA9IG47XG4iKSk7CiAg
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHY7
XG4iKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CiAgICAgICAg
ICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAgICAgICB9CiAKICAgICAg
ICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9
PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBh
dXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmlu
Zygib3BlcmF0b3IuIl9zdHIubGVuZ3RoKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUmV0dXJu
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsRmllbGROYW1lID0gbWFuZ2xlZEZpZWxk
TmFtZShmaWVsZE5hbWUpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJh
bWV0ZXJOYW1lLCAiIHYpIHtcbiIpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiICAgIHJldHVybiB2LiIsIGZpZWxkTmFtZSwgIjtcbiIpKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiB2LiIsIG1ldGFsRmllbGRO
YW1lLCAiO1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CiAgICAg
ICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogCiAgICAgaWYgKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIm9wZXJhdG9yJi4iX3N0
cikpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpLnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBl
KCkpOwogICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3ImLiJfc3RyLmxlbmd0aCgpKTsKKworICAgICAgICBT
dHJpbmcgbWV0YWxGaWVsZE5hbWU7CisgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCk7CisgICAgICAgIGF1
dG8mIHVuaWZ5Tm9kZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKS5l
bGVtZW50VHlwZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3du
Y2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkgeworICAgICAgICAgICAgYXV0byYgc3RydWN0
dXJlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRU
eXBlKTsKKyAgICAgICAgICAgIGF1dG8qIHN0cnVjdHVyZUVsZW1lbnQgPSBzdHJ1Y3R1cmVEZWZp
bml0aW9uLmZpbmQoZmllbGROYW1lKTsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVFbGVt
ZW50KTsKKyAgICAgICAgICAgIG1ldGFsRmllbGROYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yU3RydWN0dXJlRWxlbWVudCgqc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgbWV0YWxGaWVsZE5hbWUgPSBmaWVsZE5hbWU7CisKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVu
Y3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iKSk7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gJih2LT4iLCBmaWVs
ZE5hbWUsICIpO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCIgICAgcmV0dXJuICYodi0+IiwgbWV0YWxGaWVsZE5hbWUsICIpO1xuIikpOwogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CiAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJvcGVyYXRvcltdIikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOwotICAgICAgICBhdXRvIG1ldGFs
UGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICBhdXRvIG1l
dGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOworICAgICAgICBhdXRv
IG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAg
ICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFt
ZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIG0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUs
ICIgaSkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIg
ICAgcmV0dXJuIG1baV07XG4iKSk7CkBAIC0yMTMsOCArMjQyLDggQEAgU3RyaW5nIHdyaXRlTmF0
aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmEKIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3ImW10iKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIx
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0
ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFs
UGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBt
ZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yJltdLiJfc3RyLmxl
bmd0aCgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJl
dHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5h
bWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7CkBAIC0yMjUsOSAr
MjU0LDkgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKIAogICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7CiAgICAgICAgIEFTU0VSVChu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMyk7Ci0gICAg
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0g
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7
Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUo
KSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50
eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMl0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAn
ICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIG0sICIs
IG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSwgIiwgbWV0YWxQYXJhbWV0ZXIzTmFtZSwgIiB2KSB7
XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICBtW2ld
ID0gdjtcbiIpKTsKQEAgLTIzOSw3ICsyNjgsNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlv
bihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQog
ICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmlzT3BlcmF0b3IoKSkgewogICAgICAg
ICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEp
IHsKICAgICAgICAgICAgIGF1dG8gb3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAg
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAg
ICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUo
KSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywg
b3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iKSk7
CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJu
ICIsIG9wZXJhdG9yTmFtZSwgIng7XG4iKSk7CkBAIC0yNDksOCArMjc4LDggQEAgU3RyaW5nIHdy
aXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmEKIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOwogICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0
ci5sZW5ndGgoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
dHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJl
dHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5h
bWUsICIgeCwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iKSk7CiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4geCAiLCBvcGVyYXRvck5h
bWUsICIgeTtcbiIpKTsKQEAgLTI4Myw3ICszMTIsNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5j
dGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YQogICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXN1aW50
IgogICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXNmbG9h
dCIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpLnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBl
KCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJu
TmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAi
IHgpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAg
IHJldHVybiAiLCBtYXBGdW5jdGlvbk5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkpLCAiKHgpO1xuIikpOwpAQCAtMjkzLDggKzMyMiw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhCiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInBvdyIg
fHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0YW4yIikgewogICAgICAg
ICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09
IDIpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1l
LCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgs
ICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpLCAiKHgsIHkpO1xuIikpOwpAQCAtMzM2LDE0ICszNjUsMTQgQEAgU3RyaW5n
IHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmEKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkuc3RhcnRzV2l0aCgiSW50ZXJsb2NrZWQiX3N0cikpIHsKICAgICAgICAgaWYgKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSIp
IHsKICAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlw
ZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpOwot
ICAgICAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBv
aW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpOworICAgICAgICAgICAg
YXV0byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAg
ICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmaXJzdEFyZ3VtZW50UG9p
bnRlci5hZGRyZXNzU3BhY2UoKTsKICAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudFBvaW50
ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZpcnN0QXJndW1lbnRQb2ludGVyLmVs
ZW1lbnRUeXBlKCkpOwotICAgICAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzFdLnR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnQgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVsyXS50eXBlKCkpOwotICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS50eXBlKCkpKTsKLSAg
ICAgICAgICAgIGF1dG8mIGZvdXJ0aEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9p
bnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS50eXBl
KCkpOworICAgICAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50
eXBlKCkpOworICAgICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50ID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0t
PnR5cGUoKSk7CisgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzNdLT50eXBlKCkpKTsKKyAgICAgICAg
ICAgIGF1dG8mIGZvdXJ0aEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlwZSgpKTsK
ICAgICAgICAgICAgIGF1dG8gZm91cnRoQXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmb3VydGhBcmd1
bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAgICAgICAgICBhdXRvIGZvdXJ0aEFyZ3Vt
ZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZm91cnRoQXJndW1lbnRQ
b2ludGVyLmVsZW1lbnRUeXBlKCkpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgY29udmVydEFkZHJl
c3NTcGFjZShmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50UG9p
bnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBjb21wYXJlLCAiLCB0aGlyZEFy
Z3VtZW50LCAiIGRlc2lyZWQsICIsIGNvbnZlcnRBZGRyZXNzU3BhY2UoZm91cnRoQXJndW1lbnRB
ZGRyZXNzU3BhY2UpLCAnICcsIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSwgIiogb3V0KSB7XG4iKSk7
CkBAIC0zNTQsMTMgKzM4MywxMyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICB9
CiAKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
LnNpemUoKSA9PSAzKTsKLSAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+KCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKTsKLSAgICAgICAg
YXV0byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAg
ICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSk7CisgICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRQ
b2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBhdXRvIGZpcnN0QXJndW1l
bnRBZGRyZXNzU3BhY2UgPSBmaXJzdEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKICAg
ICAgICAgYXV0byBmaXJzdEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoZmlyc3RBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgIGF1dG8g
c2Vjb25kQXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOwotICAgICAgICBBU1NFUlQo
aXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzJdLnR5cGUoKSkpOwotICAgICAgICBhdXRvJiB0aGlyZEFyZ3VtZW50UG9pbnRlciA9IGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVsyXS50eXBlKCkpOworICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMV0tPnR5cGUoKSk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0tPnR5cGUoKSkpOworICAg
ICAgICBhdXRvJiB0aGlyZEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsK
ICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gdGhpcmRBcmd1bWVudFBv
aW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudFBvaW50ZWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRoaXJkQXJndW1lbnRQb2ludGVyLmVsZW1l
bnRUeXBlKCkpOwogICAgICAgICBhdXRvIG5hbWUgPSBhdG9taWNOYW1lKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygiSW50ZXJsb2NrZWQiX3N0ci5sZW5ndGgoKSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAppbmRleCA2MWQzNDhhZjE1
OTY2MjNhZjRjMzc5OGVhOTk4MWY5NGE0MTY5NTY1Li40MWViYWU2YjQwZGZlYTMwZGIxMzVlYTNm
ZTliMTRlYzE5Nzc4ZTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNw
cApAQCAtNzAsNyArNzAsNyBAQCBib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFBy
b2dyYW0mIHByb2dyYW0pCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBi
b29sIHNhbWUgPSB0cnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKTsgKytrKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUo
KSwgKmZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpKSkgeworICAgICAg
ICAgICAgICAgIGlmICghbWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVtr
XS0+dHlwZSgpLCAqZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS0+dHlwZSgpKSkg
ewogICAgICAgICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTgwLDggKzgwLDggQEAgYm9vbCBjaGVja0R1
cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3Im
W10iICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIKLSAgICAg
ICAgICAgICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBB
U1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKSkpIHsKLSAgICAgICAgICAgIGF1dG8mIHR5cGUgPSBzdGF0aWNfY2FzdDxjb25zdCBBU1Q6
OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgp
KTsKKyAgICAgICAgICAgICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2Fz
dDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMF0tPnR5cGUoKSkpKSB7CisgICAgICAgICAgICBhdXRvJiB0eXBlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygp
WzFdLT50eXBlKCkpOwogICAgICAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odHlw
ZSkpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKS5yZXNvbHZlZFR5cGUoKSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNvbHZlZFR5cGUp
KSB7CkBAIC05MiwxNCArOTIsMTQgQEAgYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25z
dCBQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvci5s
ZW5ndGgiICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEKLSAg
ICAgICAgICAgICYmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29u
c3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBd
LnR5cGUoKSkpCi0gICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlwZT4oc3RhdGljX2Nhc3Q8
Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygp
WzBdLnR5cGUoKSkpKSkKKyAgICAgICAgICAgICYmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKQorICAgICAgICAgICAgfHwgaXM8QVNUOjpBcnJh
eVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBlbHNlIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVy
YXRvcj09IgogICAgICAgICAgICAgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMgotICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihzdGF0aWNf
Y2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKSkKLSAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4o
c3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpWzFdLnR5cGUoKSkpCi0gICAgICAgICAgICAmJiBtYXRjaGVzKCpmdW5jdGlv
bnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgKmZ1bmN0aW9uc1tpXS5nZXQoKS5w
YXJhbWV0ZXJzKClbMV0udHlwZSgpKSkKKyAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNl
VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0u
Z2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKQorICAgICAgICAgICAgJiYgaXM8QVNUOjpS
ZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0
aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCisgICAgICAgICAgICAmJiBt
YXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCksICpmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLT50eXBlKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCmluZGV4IDEzNjVmMjZk
MTIzNDgyMDAwZWU3NDA0N2NiMzIxZTgwMmIyYzYwODMuLjQ2OWZhYzZmOGZkYjM2ZjVlN2M3MzM0
MDllYjVhNGNiYTFjZGNjZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApAQCAtMTIyLDggKzEyMiw4IEBAIHN0YXRpYyBB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5k
ZXhlcihBU1Q6OkNhbGxFCiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBh
dXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpU
b2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGZpcnN0QXJndW1lbnQuYWRkcmVzc1NwYWNl
KCksIGZpcnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKICAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUoKSB9LCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWludFR5cGUoKSkgfSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcGFyYW1ldGVycy5h
cHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tl
bihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBmaXJzdEFyZ3Vt
ZW50LmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAg
IHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
PihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMo
KSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBl
KCkpKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CiAgICAgcmV0dXJu
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3Im
W10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
V1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiB9CiAKQEAgLTEzMiw3ICsxMzIsNyBAQCBzdGF0
aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JMZW5n
dGgoQVNUOjpDYWxsRXhwcmVzcwogICAgIGNvbnN0IGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAg
ICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tl
bihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWludFR5cGUoKSk7CiAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBmaXJzdEFyZ3VtZW50LmNsb25lKCkgfSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcGFyYW1ldGVycy5h
cHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tl
bihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBmaXJzdEFyZ3Vt
ZW50LmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwogICAg
IHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QXR0cmli
dXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9w
ZXJhdG9yLmxlbmd0aCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMTUzLDggKzE1
Myw4IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhS
ZWZlcmVuY2VDb21wYXJhdG9yKEFTVDo6Q2FsbEV4CiAgICAgICAgIH0pKTsKICAgICB9KSk7CiAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwotICAgIHBhcmFtZXRlcnMu
YXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBhcmd1bWVudFR5cGUtPmNsb25lKCkg
fSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7Ci0gICAgcGFyYW1ldGVy
cy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVz
c2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IFdURk1vdmUoYXJndW1lbnRUeXBl
KSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0
ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6
OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGFyZ3Vt
ZW50VHlwZS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7
CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oV1RGTW92ZShhcmd1bWVudFR5cGUp
KSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CiAgICAgcmV0dXJuIEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3I9PSIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6
Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMjAzLDggKzIwMyw4IEBAIHN0YXRpYyBP
cHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVCeUluc3RhbnRp
YXRpb24oQVNUOjpDYWxsCiAgICAgICAgIGF1dG8gcmlnaHRBY2NlcHRhYmlsaXR5ID0gYWNjZXB0
YWJpbGl0eSh0eXBlc1sxXS5nZXQoKSk7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwog
ICAgICAgICBpZiAobGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6WWVzICYmIHJp
Z2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMpIHsKLSAgICAgICAgICAgIGF1
dG8mIHVubmFtZWRUeXBlMSA9IHR5cGVzWzBdLmdldCgpLmdldFVubmFtZWRUeXBlKCk7Ci0gICAg
ICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTIgPSB0eXBlc1sxXS5nZXQoKS5nZXRVbm5hbWVkVHlw
ZSgpOworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUxID0gKnR5cGVzWzBdLmdldCgpLmdl
dFVubmFtZWRUeXBlKCk7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTIgPSAqdHlwZXNb
MV0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBtYXRjaGVz
KHVubmFtZWRUeXBlMSwgdW5uYW1lZFR5cGUyKTsKICAgICAgICAgfSBlbHNlIGlmICgobGVmdEFj
Y2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6TWF5YmUgJiYgcmlnaHRBY2NlcHRhYmlsaXR5
ID09IEFjY2VwdGFiaWxpdHk6OlllcykKICAgICAgICAgICAgIHx8IChsZWZ0QWNjZXB0YWJpbGl0
eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMgJiYgcmlnaHRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFi
aWxpdHk6Ok1heWJlKSkKQEAgLTMwNCwxNCArMzA0LDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT3Bl
cmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZp
bml0CiAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNr
S2luZDo6SW5kZXggPyAyIDogMTsKICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYgZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1
bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+dW5pZnlOb2RlKCk7Cisg
ICAgICAgIGF1dG8mIGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpLT51bmlmeU5vZGUoKTsKICAgICAgICAgaWYgKGlz
PEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlKSkgewogICAgICAgICAg
ICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdFBh
cmFtZXRlclVuaWZ5Tm9kZSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkg
fHwgaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRl
eCkgewotICAgICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAg
ICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmlu
aXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAg
IGlmICghaXM8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0g
ZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSk7CkBAIC0z
MjgsMTQgKzMyOCwxNCBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3Qg
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICBzaXplX3Qg
bnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMyA6IDI7
CiAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBu
dW1FeHBlY3RlZFBhcmFtZXRlcnMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGF1dG8mIGZpcnN0QXJndW1lbnRVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIGF1dG8mIGZpcnN0QXJn
dW1lbnRVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5
cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oZmly
c3RBcmd1bWVudFVuaWZ5Tm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0g
ZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSk7CiAgICAg
ICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHVu
bmFtZWRUeXBlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCkgewotICAgICAgICAgICAgYXV0byYg
c2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVy
cygpWzFdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgYXV0byYgc2Vjb25kUGFy
YW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzFdLT50
eXBlKCkpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmICghaXM8QVNUOjpOYW1lZFR5cGU+
KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+
KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSk7CkBAIC0zNDUsOSArMzQ1LDkgQEAgc3RhdGljIGJv
b2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBm
dW5jdGlvbkRlZmluaXQKICAgICAgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlz
SW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAg
IGlmICghbWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpLCAqZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQorICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rp
b25EZWZpbml0aW9uLnR5cGUoKSwgKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0t
PnR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8mIHZhbHVl
VHlwZSA9ICpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW251bUV4cGVjdGVkUGFyYW1l
dGVycyAtIDFdLnR5cGUoKTsKKyAgICAgICAgYXV0byYgdmFsdWVUeXBlID0gKmZ1bmN0aW9uRGVm
aW5pdGlvbi5wYXJhbWV0ZXJzKClbbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMV0tPnR5cGUoKTsK
ICAgICAgICAgYXV0byBnZXR0ZXJOYW1lID0gZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdWJz
dHJpbmcoMCwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5sZW5ndGgoKSAtIDEpOwogICAgICAg
ICBhdXRvKiBnZXR0ZXJGdW5jcyA9IG5hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhnZXR0ZXJOYW1l
KTsKICAgICAgICAgaWYgKCFnZXR0ZXJGdW5jcykKQEAgLTM1NSw3ICszNTUsNyBAQCBzdGF0aWMg
Ym9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24m
IGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICBWZWN0b3I8UmVzb2x2aW5nVHlwZT4gYXJndW1lbnRU
eXBlczsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlw
ZT4+IGFyZ3VtZW50VHlwZVJlZmVyZW5jZXM7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMTsgKytpKQotICAgICAgICAgICAgYXJndW1lbnRU
eXBlcy5hcHBlbmQoKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSkt
PmNsb25lKCkpOworICAgICAgICAgICAgYXJndW1lbnRUeXBlcy5hcHBlbmQoKCpmdW5jdGlvbkRl
ZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpLT5jbG9uZSgpKTsKICAgICAgICAgZm9y
IChhdXRvJiBhcmd1bWVudFR5cGUgOiBhcmd1bWVudFR5cGVzKQogICAgICAgICAgICAgYXJndW1l
bnRUeXBlUmVmZXJlbmNlcy5hcHBlbmQoYXJndW1lbnRUeXBlKTsKICAgICAgICAgYXV0byogb3Zl
cmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoKmdldHRlckZ1bmNzLCBhcmd1bWVu
dFR5cGVSZWZlcmVuY2VzLCBudWxscHRyKTsKQEAgLTM3OCw3ICszNzgsNyBAQCBzdGF0aWMgYm9v
bCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1
bmN0aW9uRGVmaW5pdAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBh
dXRvJiB1bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5
cGUoKSktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBl
Pih1bmlmeU5vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2Rl
KTsKQEAgLTM5Miw3ICszOTIsNyBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQo
Y29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0
b3IrKyIgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ItLSIpIHsKICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEK
LSAgICAgICAgICAgICYmIG1hdGNoZXMoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClb
MF0udHlwZSgpLCBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgICYmIG1h
dGNoZXMoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSwgZnVuY3Rp
b25EZWZpbml0aW9uLnR5cGUoKSk7CiAgICAgfQogICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvcisiIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9w
ZXJhdG9yLSIpCiAgICAgICAgIHJldHVybiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
LnNpemUoKSA9PSAxIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09
IDI7CkBAIC00NDcsMTkgKzQ0NywxOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgYm9vbCBj
aGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKLSAgICB2b2lk
IGZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mLCBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5cGUsIEFTVDo6VW5uYW1lZFR5cGUq
IGV4dHJhQXJndW1lbnRUeXBlID0gbnVsbHB0cik7CiAgICAgYm9vbCBpc0Jvb2xUeXBlKFJlc29s
dmluZ1R5cGUmKTsKICAgICBzdHJ1Y3QgUmVjdXJzZUluZm8gewogICAgICAgICBSZXNvbHZpbmdU
eXBlJiByZXNvbHZpbmdUeXBlOwotICAgICAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4m
IGFkZHJlc3NTcGFjZTsKKyAgICAgICAgQVNUOjpUeXBlQW5ub3RhdGlvbiYgdHlwZUFubm90YXRp
b247CiAgICAgfTsKLSAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4gcmVjdXJzZUFuZEdldEluZm8o
QVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xWYWx1ZSA9IGZhbHNlKTsKLSAgICBPcHRp
b25hbDxSZWN1cnNlSW5mbz4gZ2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVz
TFZhbHVlID0gZmFsc2UpOworICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiByZWN1cnNlQW5kR2V0
SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlID0gZmFsc2UpOwor
ICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wg
cmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+PiByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uJik7CiAgICAgYm9vbCByZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKEFTVDo6RXhw
cmVzc2lvbiYpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RG
OjpudWxsb3B0KTsKLSAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVmUHRy
PFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4g
PSBXVEY6Om51bGxvcHQpOwotICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiwg
UmVzb2x2aW5nVHlwZSYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVsbG9w
dCk7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKKyAgICB2b2lkIGFzc2lnblR5
cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmLCBB
U1Q6OlR5cGVBbm5vdGF0aW9uKTsKKyAgICB2b2lkIGZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lv
biYsIFJlc29sdmluZ1R5cGUmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKIAogICAgIHZvaWQgdmlz
aXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CkBAIC00OTQsNyArNDkzLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mKSBvdmVycmlkZTsK
IAogICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgUmVzb2x2aW5nVHlwZT4gbV90eXBlTWFw
OwotICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3Bh
Y2U+PiBtX2FkZHJlc3NTcGFjZU1hcDsKKyAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIEFT
VDo6VHlwZUFubm90YXRpb24+IG1fdHlwZUFubm90YXRpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5n
PiBtX3ZlcnRleEVudHJ5UG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50
cnlQb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzOwpAQCAt
NTM4LDggKzUzNyw4IEBAIGJvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMoKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV9h
ZGRyZXNzU3BhY2VNYXApCi0gICAgICAgIGtleVZhbHVlUGFpci5rZXktPnNldEFkZHJlc3NTcGFj
ZShrZXlWYWx1ZVBhaXIudmFsdWUpOworICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV90
eXBlQW5ub3RhdGlvbnMpCisgICAgICAgIGtleVZhbHVlUGFpci5rZXktPnNldFR5cGVBbm5vdGF0
aW9uKFdURk1vdmUoa2V5VmFsdWVQYWlyLnZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTYyMSw2ICs2MjAsMTcgQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5nVHlwZSYgcmVzb2wKICAgICB9KSk7CiB9
CiAKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChS
ZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQoreworICAgIHJldHVybiByZXNvbHZpbmdUeXBl
LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYg
dW5uYW1lZFR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewor
ICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7CisgICAgfSwgWyZdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBPcHRp
b25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgaWYgKCFyZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBjb21taXQocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVU
eXBlKCkpOworICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFi
bGVUeXBlKCkucmVzb2x2ZWRUeXBlKCktPmNsb25lKCk7CisgICAgfSkpOworfQorCiB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmlu
aXRpb24pCiB7CiAgICAgYXV0byogYmFzZVR5cGUgPSAoWyZdKCkgLT4gQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIHsKQEAgLTcyOCwyNiArNzM4LDI2IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQogICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQodHlwZUFyZ3VtZW50KTsKIH0KIAotYXV0byBDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5m
byhBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMVmFsdWUpIC0+IE9w
dGlvbmFsPFJlY3Vyc2VJbmZvPgorYXV0byBDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5mbyhBU1Q6
OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUpIC0+IE9wdGlv
bmFsPFJlY3Vyc2VJbmZvPgogewogICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOwogICAg
IGlmIChlcnJvcigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBn
ZXRJbmZvKGV4cHJlc3Npb24sIHJlcXVpcmVzTFZhbHVlKTsKKyAgICByZXR1cm4gZ2V0SW5mbyhl
eHByZXNzaW9uLCByZXF1aXJlc0xlZnRWYWx1ZSk7CiB9CiAKLWF1dG8gQ2hlY2tlcjo6Z2V0SW5m
byhBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMVmFsdWUpIC0+IE9w
dGlvbmFsPFJlY3Vyc2VJbmZvPgorYXV0byBDaGVja2VyOjpnZXRJbmZvKEFTVDo6RXhwcmVzc2lv
biYgZXhwcmVzc2lvbiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJz
ZUluZm8+CiB7CiAgICAgYXV0byB0eXBlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmZXhwcmVz
c2lvbik7CiAgICAgQVNTRVJUKHR5cGVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOwogCi0g
ICAgYXV0byBhZGRyZXNzU3BhY2VJdGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFwLmZpbmQoJmV4
cHJlc3Npb24pOwotICAgIEFTU0VSVChhZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NT
cGFjZU1hcC5lbmQoKSk7Ci0gICAgaWYgKHJlcXVpcmVzTFZhbHVlICYmICFhZGRyZXNzU3BhY2VJ
dGVyYXRvci0+dmFsdWUpIHsKKyAgICBhdXRvIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3IgPSBtX3R5
cGVBbm5vdGF0aW9ucy5maW5kKCZleHByZXNzaW9uKTsKKyAgICBBU1NFUlQodHlwZUFubm90YXRp
b25JdGVyYXRvciAhPSBtX3R5cGVBbm5vdGF0aW9ucy5lbmQoKSk7CisgICAgaWYgKHJlcXVpcmVz
TGVmdFZhbHVlICYmIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3ItPnZhbHVlLmlzUmlnaHRWYWx1ZSgp
KSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQotICAgIHJldHVybiB7eyB0eXBlSXRlcmF0b3ItPnZhbHVlLCBhZGRyZXNzU3BhY2VJdGVy
YXRvci0+dmFsdWUgfX07CisgICAgcmV0dXJuIHt7IHR5cGVJdGVyYXRvci0+dmFsdWUsIHR5cGVB
bm5vdGF0aW9uSXRlcmF0b3ItPnZhbHVlIH19OwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKQEAgLTc2NywxOSAr
Nzc3LDMyIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2
YXJpYWJsZURlY2xhcmF0aW9uKQogICAgIH0KIH0KIAotdm9pZCBDaGVja2VyOjphc3NpZ25UeXBl
KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
JiYgdW5uYW1lZFR5cGUsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2Up
Cit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVkVHlwZSwgQVNUOjpUeXBlQW5ub3Rh
dGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewogICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh1bm5hbWVkVHlwZSkp
OwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0g
ICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4
cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQg
PSBtX3R5cGVBbm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRp
b24pKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1Nw
YWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCi12b2lkIENoZWNrZXI6OmFzc2lnblR5cGUo
QVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2U+JiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNl
PiBhZGRyZXNzU3BhY2UpCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9u
JiBleHByZXNzaW9uLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2UsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6
OlJpZ2h0VmFsdWUoKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4
cHJlc3Npb24sIFdURk1vdmUocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpKTsKICAgICBBU1NFUlRf
VU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIGF1dG8gYWRkcmVz
c1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZleHByZXNzaW9uLCBhZGRy
ZXNzU3BhY2UpOworICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV90eXBlQW5ub3Rh
dGlvbnMuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CisgICAgQVNT
RVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKK30KKwordm9pZCBDaGVja2VyOjpmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Np
b24mIGV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFTVDo6VHlwZUFu
bm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKK3sKKyAgICByZXNv
bHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYgcmVzdWx0KSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFk
ZCgmZXhwcmVzc2lvbiwgcmVzdWx0LT5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChh
ZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzdWx0KSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0LmNvcHlSZWYoKSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfSkpOwor
ICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV90eXBlQW5ub3RhdGlvbnMuYWRkKCZl
eHByZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiAgICAgQVNTRVJUX1VOVVNFRChh
ZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
IH0KIApAQCAtNzg5LDYgKzgxMiwxMSBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQogICAgIGlmICghbGVmdEluZm8p
CiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChsZWZ0SW5mby0+dHlwZUFubm90YXRpb24uaXNS
aWdodFZhbHVlKCkpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIGF1dG8gcmlnaHRJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oYXNzaWdubWVudEV4
cHJlc3Npb24ucmlnaHQoKSk7CiAgICAgaWYgKCFyaWdodEluZm8pCiAgICAgICAgIHJldHVybjsK
QEAgLTgwMiwyMyArODMwLDEwIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50
RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCiAgICAgYXNzaWduVHlwZShhc3NpZ25t
ZW50RXhwcmVzc2lvbiwgV1RGTW92ZSgqcmVzdWx0VHlwZSkpOwogfQogCi12b2lkIENoZWNrZXI6
OmZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYg
cmVzb2x2aW5nVHlwZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkK
LXsKLSAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0LT5jbG9uZSgpKTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9LCBbJl0o
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzdWx0KSB7Ci0gICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0LmNvcHlSZWYoKSk7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
Ci0gICAgfSkpOwotICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3Bh
Y2VNYXAuYWRkKCZleHByZXNzaW9uLCBhZGRyZXNzU3BhY2UpOwotICAgIEFTU0VSVF9VTlVTRUQo
YWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7
Ci19Ci0KIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
JiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQogewotICAgIGF1dG8gbFZhbHVlSW5mbyA9IHJl
Y3Vyc2VBbmRHZXRJbmZvKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCksIHRydWUp
OwotICAgIGlmICghbFZhbHVlSW5mbykKKyAgICBhdXRvIGxlZnRWYWx1ZUluZm8gPSByZWN1cnNl
QW5kR2V0SW5mbyhyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLCB0cnVlKTsK
KyAgICBpZiAoIWxlZnRWYWx1ZUluZm8pCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1F
OiBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCB0aGUgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bidzIEFub255bW91c1ZhcmlhYmxlcy4KQEAgLTgyNyw3ICs4NDIsNyBAQCB2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbikKICAgICBpZiAoIW5ld1ZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFtYXRjaEFuZENvbW1pdChsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUlu
Zm8tPnJlc29sdmluZ1R5cGUpKSB7CisgICAgaWYgKCFtYXRjaEFuZENvbW1pdChsZWZ0VmFsdWVJ
bmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpKSB7CiAgICAg
ICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04NzMsMzcgKzg4OCw0
MyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25U
eXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmNsb25lKCksIHBvaW50ZXJU
eXBlLT5hZGRyZXNzU3BhY2UoKSk7CisgICAgYXNzaWduVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Np
b24sIHBvaW50ZXJUeXBlLT5jbG9uZSgpLCBBU1Q6OkxlZnRWYWx1ZSB7IHBvaW50ZXJUeXBlLT5h
ZGRyZXNzU3BhY2UoKSB9KTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewotICAgIGF1dG8gbFZhbHVl
SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSwg
dHJ1ZSk7Ci0gICAgaWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJl
Y3Vyc2VBbmRHZXRJbmZvKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSwgdHJ1ZSk7
CisgICAgaWYgKCFsZWZ0VmFsdWVJbmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxl
ZnRBZGRyZXNzU3BhY2UgPSBsZWZ0VmFsdWVJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVz
c1NwYWNlKCk7CisgICAgaWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7CisgICAgICAgIHNldEVycm9y
KCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBhdXRvKiBsVmFsdWVUeXBlID0gZ2V0
VW5uYW1lZFR5cGUobFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFsVmFsdWVU
eXBlKSB7CisgICAgYXV0byogbGVmdFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxlZnRWYWx1
ZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGlmICghbGVmdFZhbHVlVHlwZSkgewogICAgICAg
ICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlwZSht
YWtlUG9pbnRlckV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4
ZXI6OlRva2VuKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsVmFsdWVJbmZvLT5h
ZGRyZXNzU3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25lKCkpKTsKKyAgICBhc3NpZ25UeXBlKG1ha2VQ
b2ludGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6
VG9rZW4obWFrZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2Us
IGxlZnRWYWx1ZVR5cGUtPmNsb25lKCkpKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8obWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgaWYgKCFsVmFsdWVJbmZvKQorICAg
IGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOworICAgIGlmICghbGVmdFZhbHVlSW5mbykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byogbFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxWYWx1
ZUluZm8tPnJlc29sdmluZ1R5cGUpOwotICAgIGlmICghbFZhbHVlVHlwZSkgeworICAgIGF1dG8q
IGxlZnRWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdU
eXBlKTsKKyAgICBpZiAoIWxlZnRWYWx1ZVR5cGUpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGxWYWx1ZVR5cGUt
PnVuaWZ5Tm9kZSgpOworICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGxlZnRWYWx1ZVR5cGUtPnVuaWZ5
Tm9kZSgpOwogICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CiAgICAg
ICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlO
b2RlKTsKICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkgewpA
QCAtOTEzLDcgKzkzNCw4IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWxWYWx1ZUluZm8tPmFkZHJlc3NTcGFj
ZSkgeworICAgICAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBsZWZ0VmFsdWVJbmZvLT50eXBl
QW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAgICAgIGlmICghbGVmdEFkZHJlc3NT
cGFjZSkgewogICAgICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtOTIxLDE4MyArOTQzLDExMiBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzcwog
ICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkgewogICAgICAgICAg
ICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBl
KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXZlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMuCi0g
ICAgICAgICAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VV
bmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSwg
YXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSk7CisgICAgICAgICAgICBhc3NpZ25UeXBlKG1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigp
KSwgKmxlZnRBZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50eXBlKCkuY2xvbmUoKSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFsVmFsdWVJbmZvLT5h
ZGRyZXNzU3BhY2UpIHsKKyAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBsZWZ0VmFsdWVJbmZv
LT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAgaWYgKCFsZWZ0QWRkcmVz
c1NwYWNlKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVS
ZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSwgbFZhbHVl
VHlwZS0+Y2xvbmUoKSkpOworICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2Vu
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFj
ZSwgbGVmdFZhbHVlVHlwZS0+Y2xvbmUoKSkpOwogfQogCi12b2lkIENoZWNrZXI6OmZpbmlzaFZp
c2l0aW5nUHJvcGVydHlBY2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiwgQVNUOjpVbm5hbWVkVHlwZSYgd3JhcHBlZEJhc2VUeXBlLCBB
U1Q6OlVubmFtZWRUeXBlKiBleHRyYUFyZ3VtZW50VHlwZSkKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQogewotICAgIHVzaW5nIE92ZXJsb2Fk
UmVzb2x1dGlvbiA9IHN0ZDo6dHVwbGU8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgQVNUOjpV
bm5hbWVkVHlwZSo+OwotCi0gICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBnZXRGdW5jdGlv
bjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBnZXRSZXR1cm5UeXBlOwotICAgIHN0ZDo6dGllKGdl
dEZ1bmN0aW9uLCBnZXRSZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBPdmVybG9hZFJlc29sdXRpb24g
ewotICAgICAgICBSZXNvbHZpbmdUeXBlIGdldEFyZ3VtZW50VHlwZTEod3JhcHBlZEJhc2VUeXBl
LmNsb25lKCkpOwotICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiBnZXRBcmd1bWVudFR5
cGUyOwotICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCi0gICAgICAgICAgICBnZXRBcmd1
bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50VHlwZS0+Y2xvbmUoKSk7Cisg
ICAgYXV0byBiYXNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGRvdEV4cHJlc3Npb24uYmFzZSgp
KTsKKyAgICBpZiAoIWJhc2VJbmZvKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBiYXNlVW5u
YW1lZFR5cGUgPSBjb21taXQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGlmICghYmFz
ZVVubmFtZWRUeXBlKQorICAgICAgICByZXR1cm47CiAKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIGdldEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBnZXRS
ZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICB7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBnZXRBcmd1bWVudFR5cGVzOwotICAgICAgICBnZXRB
cmd1bWVudFR5cGVzLmFwcGVuZChnZXRBcmd1bWVudFR5cGUxKTsKLSAgICAgICAgaWYgKGdldEFy
Z3VtZW50VHlwZTIpCi0gICAgICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZCgqZ2V0QXJn
dW1lbnRUeXBlMik7Ci0KLSAgICAgICAgYXV0byogZ2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rp
b25PdmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlR2V0T3Zlcmxv
YWRzKCksIGdldEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOwotICAgICAgICBpZiAoIWdldEZ1bmN0
aW9uKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIp
OwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZ2V0RnVuY3Rpb24sICZnZXRGdW5jdGlv
bi0+dHlwZSgpKTsKLSAgICB9KSgpOwotCi0gICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBh
bmRGdW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBhbmRSZXR1cm5UeXBlOwotICAgIHN0
ZDo6dGllKGFuZEZ1bmN0aW9uLCBhbmRSZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBPdmVybG9hZFJl
c29sdXRpb24gewotICAgICAgICBhdXRvIGNvbXB1dGVBbmRBcmd1bWVudFR5cGUgPSBbJl0oQVNU
OjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIC0+IE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IHsK
LSAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUp
KQotICAgICAgICAgICAgICAgIHJldHVybiB7IHVubmFtZWRUeXBlLmNsb25lKCkgfTsKLSAgICAg
ICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAg
ICAgIHJldHVybiB7IFJlc29sdmluZ1R5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSks
IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5h
bWVkVHlwZSkudHlwZSgpLmNsb25lKCkpKSB9OwotICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9p
bnRlclR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgICAgICAgICAgcmV0dXJuIHsgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFT
VDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3Jp
Z2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBkb3duY2FzdDxBU1Q6OlR5cGVSZWZl
cmVuY2U+KHVubmFtZWRUeXBlKS5jbG9uZSgpKSkgfTsKLSAgICAgICAgfTsKLSAgICAgICAgYXV0
byBjb21wdXRlQW5kUmV0dXJuVHlwZSA9IFsmXShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlw
ZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogewotICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRl
clR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpOwotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgYXV0byBhbmRBcmd1bWVudFR5
cGUxID0gY29tcHV0ZUFuZEFyZ3VtZW50VHlwZSh3cmFwcGVkQmFzZVR5cGUpOwotICAgICAgICBp
ZiAoIWFuZEFyZ3VtZW50VHlwZTEpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
bnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IGFuZEFy
Z3VtZW50VHlwZTI7Ci0gICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAgICAgICAgICAg
IGFuZEFyZ3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5jbG9u
ZSgpKTsKKyAgICAgICAgZ2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmlu
Z1R5cGUpOworICAgICAgICBnZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1w
bChkb3RFeHByZXNzaW9uLnBvc3NpYmxlR2V0T3ZlcmxvYWRzKCksIGdldEFyZ3VtZW50VHlwZXMs
IG51bGxwdHIpOworICAgICAgICBpZiAoZ2V0RnVuY3Rpb24pCisgICAgICAgICAgICBnZXRSZXR1
cm5UeXBlID0gJmdldEZ1bmN0aW9uLT50eXBlKCk7CisgICAgfQogCisgICAgQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbiA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlw
ZSogYW5kUmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFj
ZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAg
ICAgYXV0byBhcmd1bWVudFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExl
eGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGJh
c2VVbm5hbWVkVHlwZS0+Z2V0KCkuY2xvbmUoKSk7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhbmRBcmd1bWVudFR5cGVzOwotICAgICAgICBh
bmRBcmd1bWVudFR5cGVzLmFwcGVuZCgqYW5kQXJndW1lbnRUeXBlMSk7Ci0gICAgICAgIGlmIChh
bmRBcmd1bWVudFR5cGUyKQotICAgICAgICAgICAgYW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoKmFu
ZEFyZ3VtZW50VHlwZTIpOwotCi0gICAgICAgIGF1dG8qIGFuZEZ1bmN0aW9uID0gcmVzb2x2ZUZ1
bmN0aW9uT3ZlcmxvYWRJbXBsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZUFuZE92
ZXJsb2FkcygpLCBhbmRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFhbmRG
dW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxs
cHRyKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGFuZEZ1bmN0aW9uLCBjb21wdXRl
QW5kUmV0dXJuVHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpKSk7Ci0gICAgfSkoKTsKKyAgICAgICAg
YW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgICAg
ICBhbmRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9u
LnBvc3NpYmxlQW5kT3ZlcmxvYWRzKCksIGFuZEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAg
ICAgICBpZiAoYW5kRnVuY3Rpb24pCisgICAgICAgICAgICBhbmRSZXR1cm5UeXBlID0gJmRvd25j
YXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCk7
IC8vIEZJWE1FOiBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJzIHdpbGwgYWx3YXlzIGJlIGEg
cG9pbnRlcgorICAgIH0KKworICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogdGhyZWFkQW5k
RnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIHRocmVhZEFuZFJldHVy
blR5cGUgPSBudWxscHRyOworICAgIHsKKyAgICAgICAgYXV0byBhcmd1bWVudFR5cGUgPSBtYWtl
VW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9y
aWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgYmFzZVVubmFtZWRUeXBlLT5nZXQo
KS5jbG9uZSgpKTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2
aW5nVHlwZT4+IHRocmVhZEFuZEFyZ3VtZW50VHlwZXM7CisgICAgICAgIHRocmVhZEFuZEFyZ3Vt
ZW50VHlwZXMuYXBwZW5kKGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgdGhyZWFk
QW5kRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5w
b3NzaWJsZUFuZE92ZXJsb2FkcygpLCB0aHJlYWRBbmRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsK
KyAgICAgICAgaWYgKHRocmVhZEFuZEZ1bmN0aW9uKQorICAgICAgICAgICAgdGhyZWFkQW5kUmV0
dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih0aHJlYWRBbmRGdW5jdGlvbi0+
dHlwZSgpKS5lbGVtZW50VHlwZSgpOyAvLyBGSVhNRTogRW5mb3JjZSB0aGUgcmV0dXJuIG9mIGFu
ZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKKyAgICB9CiAKLSAgICBpZiAoIWdldFJldHVy
blR5cGUgJiYgIWFuZFJldHVyblR5cGUpIHsKKyAgICBpZiAoIWdldEZ1bmN0aW9uICYmICFhbmRG
dW5jdGlvbikgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
Ci0gICAgaWYgKGdldFJldHVyblR5cGUgJiYgYW5kUmV0dXJuVHlwZSAmJiAhbWF0Y2hlcygqZ2V0
UmV0dXJuVHlwZSwgKmFuZFJldHVyblR5cGUpKSB7CisgICAgaWYgKGdldEZ1bmN0aW9uICYmIGFu
ZEZ1bmN0aW9uKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKGFuZEZ1bmN0aW9uICYmIHRocmVhZEFuZEZ1bmN0aW9uICYmICFtYXRjaGVzKCph
bmRSZXR1cm5UeXBlLCAqdGhyZWFkQW5kUmV0dXJuVHlwZSkpIHsKICAgICAgICAgc2V0RXJyb3Io
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogc2V0RnVuY3Rpb247Ci0gICAgQVNUOjpVbm5hbWVkVHlwZSogc2V0UmV0dXJuVHlwZTsKLSAg
ICBzdGQ6OnRpZShzZXRGdW5jdGlvbiwgc2V0UmV0dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3Zlcmxv
YWRSZXNvbHV0aW9uIHsKLSAgICAgICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDFUeXBlKHdy
YXBwZWRCYXNlVHlwZS5jbG9uZSgpKTsKLSAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4g
c2V0QXJndW1lbnRUeXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAgICAg
ICAgICAgc2V0QXJndW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUt
PmNsb25lKCkpOwotICAgICAgICBSZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50M1R5cGUoZ2V0UmV0
dXJuVHlwZSA/IGdldFJldHVyblR5cGUtPmNsb25lKCkgOiBhbmRSZXR1cm5UeXBlLT5jbG9uZSgp
KTsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBmaWVsZFR5cGUgPSBnZXRSZXR1cm5UeXBlID8gZ2V0
UmV0dXJuVHlwZSA6IGFuZFJldHVyblR5cGU7CiAKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIHNldEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBzZXRSZXR1
cm5UeXBlID0gbnVsbHB0cjsKKyAgICB7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBzZXRBcmd1bWVudFR5cGVzOwotICAgICAgICBzZXRBcmd1
bWVudFR5cGVzLmFwcGVuZChzZXRBcmd1bWVudDFUeXBlKTsKLSAgICAgICAgaWYgKHNldEFyZ3Vt
ZW50VHlwZTIpCi0gICAgICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZCgqc2V0QXJndW1l
bnRUeXBlMik7Ci0gICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKHNldEFyZ3VtZW50M1R5
cGUpOwotCi0gICAgICAgIGF1dG8qIHNldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3Zlcmxv
YWRJbXBsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZVNldE92ZXJsb2FkcygpLCBz
ZXRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFzZXRGdW5jdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNldEZ1bmN0aW9uLCAmc2V0RnVuY3Rpb24tPnR5cGUo
KSk7Ci0gICAgfSkoKTsKLQotICAgIGlmIChzZXRGdW5jdGlvbikgewotICAgICAgICBpZiAoIW1h
dGNoZXMoc2V0RnVuY3Rpb24tPnR5cGUoKSwgd3JhcHBlZEJhc2VUeXBlKSkgewotICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2U7Ci0gICAgaWYgKGdl
dFJldHVyblR5cGUgfHwgYW5kUmV0dXJuVHlwZSkgewotICAgICAgICAvLyBGSVhNRTogVGhlIHJl
ZmVyZW5jZSBjb21waWxlciBoYXMgImVsc2UgaWYgKCFub2RlLmJhc2UuaXNMVmFsdWUgJiYgIWJh
c2VUeXBlLmlzQXJyYXlSZWYpIiwKLSAgICAgICAgLy8gYnV0IEkgZG9uJ3QgdW5kZXJzdGFuZCB3
aHkgaXQgZXhpc3RzLiBJIGhhdmVuJ3Qgd3JpdHRlbiBpdCBoZXJlLCBhbmQgSSdsbCBpbnZlc3Rp
Z2F0ZQotICAgICAgICAvLyBpZiB3ZSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlIHJlZmVyZW5jZSBj
b21waWxlci4KLSAgICAgICAgaWYgKGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4od3JhcHBlZEJhc2VU
eXBlKSkKLSAgICAgICAgICAgIGFkZHJlc3NTcGFjZSA9IGRvd25jYXN0PEFTVDo6UmVmZXJlbmNl
VHlwZT4od3JhcHBlZEJhc2VUeXBlKS5hZGRyZXNzU3BhY2UoKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBhdXRvIGFkZHJlc3NTcGFjZUl0ZXJhdG9yID0gbV9hZGRyZXNzU3BhY2VNYXAu
ZmluZCgmcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmJhc2UoKSk7Ci0gICAgICAgICAgICBBU1NF
UlQoYWRkcmVzc1NwYWNlSXRlcmF0b3IgIT0gbV9hZGRyZXNzU3BhY2VNYXAuZW5kKCkpOwotICAg
ICAgICAgICAgaWYgKGFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSkKLSAgICAgICAgICAgICAg
ICBhZGRyZXNzU3BhY2UgPSAqYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgc2V0QXJndW1lbnRUeXBl
cy5hcHBlbmQoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgICAgICBSZXNvbHZpbmdUeXBl
IGZpZWxkUmVzb2x2aW5nVHlwZShmaWVsZFR5cGUtPmNsb25lKCkpOworICAgICAgICBzZXRBcmd1
bWVudFR5cGVzLmFwcGVuZChmaWVsZFJlc29sdmluZ1R5cGUpOworICAgICAgICBzZXRGdW5jdGlv
biA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3NpYmxlU2V0
T3ZlcmxvYWRzKCksIHNldEFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAgICBpZiAoc2V0
RnVuY3Rpb24pCisgICAgICAgICAgICBzZXRSZXR1cm5UeXBlID0gJnNldEZ1bmN0aW9uLT50eXBl
KCk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEdlbmVyYXRlIHRoZSBjYWxsIGV4cHJlc3Npb25z
Ci0KLSAgICBhc3NpZ25UeXBlKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgZ2V0UmV0dXJuVHlw
ZSA/IGdldFJldHVyblR5cGUtPmNsb25lKCkgOiBhbmRSZXR1cm5UeXBlLT5jbG9uZSgpLCBhZGRy
ZXNzU3BhY2UpOwotfQotCi1PcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IENo
ZWNrZXI6OnJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKLXsKLSAgICBhdXRvIGJhc2VJbmZvID0gcmVj
dXJzZUFuZEdldEluZm8ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmJhc2UoKSk7Ci0gICAgaWYg
KCFiYXNlSW5mbykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGF1dG8qIGJh
c2VUeXBlID0gZ2V0VW5uYW1lZFR5cGUoYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOwotICAgIGlm
ICghYmFzZVR5cGUpIHsKKyAgICBpZiAoc2V0RnVuY3Rpb24gJiYgYW5kRnVuY3Rpb24pIHsKICAg
ICAgICAgc2V0RXJyb3IoKTsKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9Ci0g
ICAgYXV0byYgYmFzZVVuaWZ5Tm9kZSA9IGJhc2VUeXBlLT51bmlmeU5vZGUoKTsKLSAgICBpZiAo
aXM8QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkpCi0gICAgICAgIHJldHVybiBkb3du
Y2FzdDxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKS5jbG9uZSgpOwotICAgIEFTU0VS
VChpczxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkpOwotICAgIHJldHVybiB7IEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
Lm9yaWdpbigpKSwgZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpKSB9Owot
fQotCi12b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lv
bikKLXsKLSAgICBhdXRvIGJhc2VUeXBlID0gcmVjdXJzZUFuZFdyYXBCYXNlVHlwZShkb3RFeHBy
ZXNzaW9uKTsKLSAgICBpZiAoIWJhc2VUeXBlKQogICAgICAgICByZXR1cm47CisgICAgfQogCi0g
ICAgZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vzcyhkb3RFeHByZXNzaW9uLCAqYmFzZVR5cGUp
OworICAgIGRvdEV4cHJlc3Npb24uc2V0R2V0RnVuY3Rpb24oZ2V0RnVuY3Rpb24pOworICAgIGRv
dEV4cHJlc3Npb24uc2V0QW5kRnVuY3Rpb24oYW5kRnVuY3Rpb24pOworICAgIGRvdEV4cHJlc3Np
b24uc2V0VGhyZWFkQW5kRnVuY3Rpb24odGhyZWFkQW5kRnVuY3Rpb24pOworICAgIGRvdEV4cHJl
c3Npb24uc2V0U2V0RnVuY3Rpb24oc2V0RnVuY3Rpb24pOworCisgICAgQVNUOjpUeXBlQW5ub3Rh
dGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpOworICAgIGlmIChhdXRvIGxl
ZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFj
ZSgpKSB7CisgICAgICAgIGlmIChhbmRGdW5jdGlvbikKKyAgICAgICAgICAgIHR5cGVBbm5vdGF0
aW9uID0gQVNUOjpMZWZ0VmFsdWUgeyAqbGVmdEFkZHJlc3NTcGFjZSB9OworICAgICAgICBlbHNl
IGlmIChzZXRGdW5jdGlvbikKKyAgICAgICAgICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpBYnN0
cmFjdExlZnRWYWx1ZSgpOworICAgIH0gZWxzZSBpZiAoIWJhc2VJbmZvLT50eXBlQW5ub3RhdGlv
bi5pc1JpZ2h0VmFsdWUoKSAmJiAoc2V0RnVuY3Rpb24gfHwgYW5kRnVuY3Rpb24pKQorICAgICAg
ICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6QWJzdHJhY3RMZWZ0VmFsdWUoKTsKKyAgICBhc3NpZ25U
eXBlKGRvdEV4cHJlc3Npb24sIGZpZWxkVHlwZS0+Y2xvbmUoKSwgV1RGTW92ZSh0eXBlQW5ub3Rh
dGlvbikpOwogfQogCi12b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBp
bmRleEV4cHJlc3Npb24pCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9u
JikKIHsKLSAgICBhdXRvIGJhc2VUeXBlID0gcmVjdXJzZUFuZFdyYXBCYXNlVHlwZShpbmRleEV4
cHJlc3Npb24pOwotICAgIGlmICghYmFzZVR5cGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8gaW5kZXhJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oaW5kZXhFeHByZXNzaW9uLmluZGV4RXhw
cmVzc2lvbigpKTsKLSAgICBpZiAoIWluZGV4SW5mbykKLSAgICAgICAgcmV0dXJuOwotICAgIGF1
dG8gaW5kZXhFeHByZXNzaW9uVHlwZSA9IGdldFVubmFtZWRUeXBlKGluZGV4SW5mby0+cmVzb2x2
aW5nVHlwZSk7Ci0gICAgaWYgKCFpbmRleEV4cHJlc3Npb25UeXBlKSB7Ci0gICAgICAgIHNldEVy
cm9yKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmaW5pc2hWaXNpdGluZ1Byb3Bl
cnR5QWNjZXNzKGluZGV4RXhwcmVzc2lvbiwgV1RGTW92ZSgqYmFzZVR5cGUpLCBpbmRleEV4cHJl
c3Npb25UeXBlKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKIHZvaWQgQ2hl
Y2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpCkBA
IC0xMTA1LDEwICsxMDU2LDEwIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJl
ZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpCiAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNl
LnZhcmlhYmxlKCkpOwogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50
eXBlKCkpOwogICAgIAotICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3Bh
Y2U7Ci0gICAgaWYgKCF2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT5pc0Fub255bW91cygp
KQotICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkOwotICAg
IGFzc2lnblR5cGUodmFyaWFibGVSZWZlcmVuY2UsIHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxl
KCktPnR5cGUoKS0+Y2xvbmUoKSwgYWRkcmVzc1NwYWNlKTsKKyAgICBBU1Q6OlR5cGVBbm5vdGF0
aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCk7CisgICAgaWYgKCF2YXJpYWJs
ZVJlZmVyZW5jZS52YXJpYWJsZSgpLT5pc0Fub255bW91cygpKSAvLyBGSVhNRTogVGhpcyBkb2Vz
bid0IHNlZW0gcmlnaHQuCisgICAgICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpMZWZ0VmFsdWUg
eyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH07CisgICAgYXNzaWduVHlwZSh2YXJpYWJsZVJl
ZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgpLT5jbG9uZSgpLCBX
VEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpS
ZXR1cm4mIHJldHVyblN0YXRlbWVudCkKQEAgLTE0MDcsNyArMTM1OCw3IEBAIHZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKICAgICBpZiAo
ZXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gbGFzdEluZm8gPSBnZXRJbmZvKGNv
bW1hRXhwcmVzc2lvbi5saXN0KCkubGFzdCgpKTsKLSAgICBmb3J3YXJkVHlwZShjb21tYUV4cHJl
c3Npb24sIGxhc3RJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBmb3J3YXJkVHlwZShjb21tYUV4
cHJlc3Npb24sIGxhc3RJbmZvLT5yZXNvbHZpbmdUeXBlLCBsYXN0SW5mby0+dHlwZUFubm90YXRp
b24pOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRl
cm5hcnlFeHByZXNzaW9uKQpAQCAtMTQ1Niw3ICsxNDA3LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKICAgICB9CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLT5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1pdCh0eXBlc1tpXS5nZXQoKSwgKmZ1bmN0aW9uLT5w
YXJhbWV0ZXJzKClbaV0udHlwZSgpKSkgeworICAgICAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KHR5
cGVzW2ldLmdldCgpLCAqZnVuY3Rpb24tPnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKSkgewogICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5
cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJU
eXBlcy5jcHAKaW5kZXggMmZjYzZmMTM5ZGU4NGEzMmM0YzcwN2NhMDYwYjliZTFiNDJmZDNlMC4u
MTU4ZTIzYjQ3MmRlNDk5MzFlYjc4NDJjOTdiODRhYTIzZDA5NzBlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3Bw
CkBAIC0yMjcsOSArMjI3LDkgQEAgYm9vbCBpbmZlclR5cGVzRm9yQ2FsbChBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnIKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zc2libGVGdW5jdGlvbi5w
YXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byBzdWNjZXNzID0gYXJndW1l
bnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVy
biBtYXRjaGVzKCpwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCksIHVubmFt
ZWRUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKCpwb3NzaWJsZUZ1bmN0aW9uLnBh
cmFtZXRlcnMoKVtpXS0+dHlwZSgpLCB1bm5hbWVkVHlwZSk7CiAgICAgICAgIH0sIFsmXShSZWZQ
dHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4g
Ym9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29s
dmFibGVUeXBlKCkuY2FuUmVzb2x2ZShwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS50
eXBlKCktPnVuaWZ5Tm9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZlKHBvc3NpYmxlRnVuY3Rpb24ucGFy
YW1ldGVycygpW2ldLT50eXBlKCktPnVuaWZ5Tm9kZSgpKTsKICAgICAgICAgfSkpOwogICAgICAg
ICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5j
cHAKaW5kZXggMDUzNTBlMGRjOTg1ZWNiMzkwZjU4NmYwYTM0ZDJhNmVjZmVkY2EzMi4uM2NiZWRk
OWMyNTc4OGZlNWRlMDU2MTJmZjBkZDI2ZDRjODU0ZjdlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcApA
QCAtMTk3LDkgKzE5NywxMCBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHBy
ZXNzaW9uJiBkb3RFeHByZXNzaW9uKQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgPD0gc2l6ZW9mKEFTVDo6RG90
RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBF
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWxzIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMi
KTsKICAgICAgICAgICAgICAgICAgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Np
b24ub3JpZ2luKCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBQZXJoYXBzIGRvIHRo
aXMgd2l0aCB2YXJpYW50cyBvciBhIFJld3JpdGVyIGluc3RlYWQuCisgICAgICAgICAgICAgICAg
ICAgIHZvaWQqIGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247CiAgICAgICAgICAgICAgICAgICAg
IGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsKICAgICAgICAgICAgICAgICAgICAgYXV0
byBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwgPSBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bDo6d3JhcChXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoYmFzZU5hbWUpLCBXVEZNb3ZlKG1lbWJl
ck5hbWUpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24sICptZW1iZXIpOwotICAgICAgICAgICAgICAg
ICAgICBuZXcgKCZkb3RFeHByZXNzaW9uKSBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChX
VEZNb3ZlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkpOworICAgICAgICAgICAgICAgICAgICBu
ZXcgKGxvY2F0aW9uKSBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChXVEZNb3ZlKGVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKaW5kZXggMzlk
ZDdhMmExYmFiMGE5N2IwOTM5OGU1MDdlNDg4NzE4N2U5YWQ2Yi4uYTk3Nzg5NzkwMzA3NDY4Y2Y2
ZjBmMzBiMTAwZDVmZjVlOTdhNmI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApAQCAtMTA4MiwxMyArMTA4MiwxMyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJzKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9ucywgRXJyb3I+CiAgICAgYXV0byBmaXJzdFBhcmFtZXRlciA9IHBhcnNlUGFyYW1l
dGVyKCk7CiAgICAgaWYgKCFmaXJzdFBhcmFtZXRlcikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KGZpcnN0UGFyYW1ldGVyLmVycm9yKCkpOwotICAgIHBhcmFtZXRlcnMuYXBwZW5k
KFdURk1vdmUoKmZpcnN0UGFyYW1ldGVyKSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUoKmZpcnN0UGFyYW1ldGVy
KSkpOwogCiAgICAgd2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb21tYSkpIHsK
ICAgICAgICAgYXV0byBwYXJhbWV0ZXIgPSBwYXJzZVBhcmFtZXRlcigpOwogICAgICAgICBpZiAo
IXBhcmFtZXRlcikKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihwYXJhbWV0
ZXIuZXJyb3IoKSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUoKnBhcmFtZXRl
cikpOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqcGFyYW1ldGVyKSkpOwogICAgIH0KIAogICAgIGF1dG8g
cmlnaHRQYXJlbnRoZXNpcyA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRQ
YXJlbnRoZXNpcyk7CkBAIC0xNTY3LDE0ICsxNTY3LDE0IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
c1N0CiAgICAgaWYgKCFmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAKLSAg
ICBWZWN0b3I8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiByZXN1bHQ7Ci0gICAgcmVzdWx0LmFw
cGVuZChXVEZNb3ZlKCpmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICBWZWN0b3I8VW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBw
ZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCpmaXJz
dFZhcmlhYmxlRGVjbGFyYXRpb24pKSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9r
ZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBw
YXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKCp0eXBlKS0+Y2xvbmUoKSk7CiAgICAgICAgIGlmICgh
dmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
Pih2YXJpYWJsZURlY2xhcmF0aW9uLmVycm9yKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoKnZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtYWtl
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqdmFyaWFibGVEZWNs
YXJhdGlvbikpKTsKICAgICB9CiAKICAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHJlc3VsdCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKaW5k
ZXggOWExMDM1YTRiOGNhZDMzYTIxZTY3MGYyMjAwNTkxY2MxNDhkNmIxMy4uODY5YjdjMzhjZGI0
YTlkY2MxYjI5NDE5NjRiZTlkNjgxYWQ4ZTA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXSExTTFBhcnNlci5o
IgogI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlSZXNv
bHZlci5oIgogI2luY2x1ZGUgIldITFNMUmVjdXJzaW9uQ2hlY2tlci5oIgogI2luY2x1ZGUgIldI
TFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljTWF0Y2hl
ci5oIgpAQCAtODIsNyArODMsNyBAQCBzdGF0aWMgT3B0aW9uYWw8UHJvZ3JhbT4gcHJlcGFyZVNo
YXJlZChTdHJpbmcmIHdobHNsU291cmNlKQogICAgIGlmICghY2hlY2socHJvZ3JhbSkpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3JhbSk7
Ci0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTU3ODggUmVzb2x2ZSBwcm9wZXJ0aWVzIGhlcmUKKyAgICByZXNvbHZlUHJvcGVydGllcyhwcm9n
cmFtKTsKICAgICBmaW5kSGlnaFpvbWJpZXMocHJvZ3JhbSk7CiAgICAgaWYgKCFjaGVja1N0YXRl
bWVudEJlaGF2aW9yKHByb2dyYW0pKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0
eVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJvcGVydHlSZXNvbHZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RlYWEwMjc1ZmQ5ZjcwYThjMTQ3OWIw
Y2QxNTJjODc0ODA0YjQ1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAKQEAgLTAsMCArMSw3NjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9w
ZXJ0eVJlc29sdmVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xB
c3NpZ25tZW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRGVyZWZl
cmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlv
bkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIK
KyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNp
dG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xh
c3MgUHJvcGVydHlSZXNvbHZlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKK3ByaXZhdGU6
CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKworICAgIGJvb2wgc2lt
cGxpZnlSaWdodFZhbHVlKEFTVDo6RG90RXhwcmVzc2lvbiYpOworICAgIGJvb2wgc2ltcGxpZnlB
YnN0cmFjdExlZnRWYWx1ZShBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiwgQVNUOjpEb3RFeHBy
ZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiByaWdodCk7CisgICAgdm9pZCBz
aW1wbGlmeUxlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mKTsKKworICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnMgbV92YXJpYWJsZURlY2xhcmF0aW9uczsKK307CisKK3ZvaWQgUHJvcGVydHlS
ZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAg
IC8vIFVubGVzcyB3ZSdyZSBpbnNpZGUgYW4gQXNzaWdubWVudEV4cHJlc3Npb24gb3IgYSBSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLCB3ZSdyZSBhIHJpZ2h0IHZhbHVlLgorICAgIGlmICghc2lt
cGxpZnlSaWdodFZhbHVlKGRvdEV4cHJlc3Npb24pKQorICAgICAgICBzZXRFcnJvcigpOworfQor
Cit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBm
dW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgVmlzaXRvcjo6dmlzaXQoZnVuY3Rpb25EZWZpbml0
aW9uKTsKKyAgICBpZiAoIW1fdmFyaWFibGVEZWNsYXJhdGlvbnMuaXNFbXB0eSgpKQorICAgICAg
ICBmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKS5zdGF0ZW1lbnRzKCkuaW5zZXJ0KDAsIG1ha2VV
bmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oTGV4ZXI6OlRva2Vu
KG1fdmFyaWFibGVEZWNsYXJhdGlvbnNbMF0tPm9yaWdpbigpKSwgV1RGTW92ZShtX3ZhcmlhYmxl
RGVjbGFyYXRpb25zKSkpOworfQorCitzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4+IHNldHRlckNhbGwoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uLCBV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIG5ld1ZhbHVlLCBjb25zdCBzdGQ6OmZ1bmN0aW9u
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBsZWZ0VmFsdWVGYWN0b3J5LCBjb25zdCBz
dGQ6OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBwb2ludGVyVG9MZWZ0
VmFsdWVGYWN0b3J5KQoreworICAgIGlmIChkb3RFeHByZXNzaW9uLmFuZEZ1bmN0aW9uKCkpIHsK
KyAgICAgICAgLy8gKm9wZXJhdG9yJi5mb28oJnYpID0gbmV3VmFsdWUKKyAgICAgICAgaWYgKCFk
b3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+PiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocG9pbnRlclRvTGVm
dFZhbHVlRmFjdG9yeSgpKTsKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3Jp
Z2luKCkpLCBTdHJpbmcoZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpLT5uYW1lKCkp
LCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShk
b3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAg
ICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsK
KyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLnRocmVh
ZEFuZEZ1bmN0aW9uKCkpOworCisgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRv
dEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgICAg
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBl
Pihkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPnR5cGUoKSkuZWxlbWVudFR5cGUo
KS5jbG9uZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisKKyAg
ICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBX
VEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiksIFdURk1vdmUobmV3VmFsdWUpKTsKKyAgICAg
ICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlw
ZT4oZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpLT50eXBlKCkpLmVsZW1lbnRUeXBl
KCkuY2xvbmUoKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgcmV0dXJuIFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+KFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICB9CisKKyAg
ICAvLyB2ID0gb3BlcmF0b3IuZm9vPSh2LCBuZXdWYWx1ZSkKKyAgICBBU1NFUlQoZG90RXhwcmVz
c2lvbi5zZXRGdW5jdGlvbigpKTsKKworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPj4gYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQobGVmdFZhbHVlRmFjdG9yeSgp
KTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUobmV3VmFsdWUpKTsKKyAgICBhdXRvIGNh
bGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6
VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhkb3RFeHByZXNzaW9uLnNldEZ1
bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgY2FsbEV4cHJlc3Np
b24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi5zZXRGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7
CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgp
KTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmRvdEV4cHJlc3Npb24uc2V0RnVu
Y3Rpb24oKSk7CisKKyAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5v
cmlnaW4oKSksIGxlZnRWYWx1ZUZhY3RvcnkoKSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOwor
ICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24uc2V0RnVuY3Rp
b24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICByZXR1cm4gVW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4oV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworfQorCitzdGF0
aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGdldHRlckNhbGwoQVNUOjpE
b3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBsZWZ0VmFsdWVGYWN0b3J5LCBjb25zdCBzdGQ6OmZ1bmN0
aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBwb2ludGVyVG9MZWZ0VmFsdWVGYWN0
b3J5KQoreworICAgIGlmIChkb3RFeHByZXNzaW9uLmFuZEZ1bmN0aW9uKCkpIHsKKyAgICAgICAg
Ly8gKm9wZXJhdG9yJi5mb28oJnYpCisgICAgICAgIGlmICghZG90RXhwcmVzc2lvbi50aHJlYWRB
bmRGdW5jdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
CisgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOwor
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHBvaW50ZXJUb0xlZnRWYWx1ZUZhY3RvcnkoKSk7Cisg
ICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJl
c3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKGRvdEV4
cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMp
KTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi50aHJlYWRB
bmRGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgICAgIGNhbGxFeHByZXNz
aW9uLT5zZXRGdW5jdGlvbigqZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpKTsKKwor
ICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpE
ZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigp
KSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Np
b24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oZG90RXhwcmVzc2lvbi50aHJl
YWRBbmRGdW5jdGlvbigpLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAg
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUg
eyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworCisgICAgICAgIHJldHVybiBVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbikpOworICAg
IH0KKworICAgIC8vIG9wZXJhdG9yLmZvbyh2KQorICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmdl
dEZ1bmN0aW9uKCkpOworICAgIAorICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4gYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQobGVmdFZhbHVlRmFjdG9yeSgpKTsK
KyAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNz
aW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhkb3RFeHBy
ZXNzaW9uLmdldEZ1bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAg
Y2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpLT50eXBl
KCkuY2xvbmUoKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
UmlnaHRWYWx1ZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmRvdEV4cHJl
c3Npb24uZ2V0RnVuY3Rpb24oKSk7CisKKyAgICByZXR1cm4gVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4oV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworfQorCitzdHJ1Y3QgTW9kaWZ5UmVzdWx0
IHsKKyAgICBBU1Q6OkV4cHJlc3Npb24mIGlubmVyTGVmdFZhbHVlOworICAgIFZlY3RvcjxVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisgICAgVmVjdG9yPFVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+PiB2YXJpYWJsZURlY2xhcmF0aW9uczsKK307Citz
dHJ1Y3QgTW9kaWZpY2F0aW9uUmVzdWx0IHsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4+IGV4cHJlc3Npb25zOworICAgIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHJl
c3VsdDsKK307CitzdGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2RpZnkoQVNUOjpEb3RF
eHByZXNzaW9uJiBkb3RFeHByZXNzaW9uLCBzdGQ6OmZ1bmN0aW9uPE9wdGlvbmFsPE1vZGlmaWNh
dGlvblJlc3VsdD4oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYpPiBtb2Rp
ZmljYXRpb24pCit7CisgICAgLy8gQ29uc2lkZXIgYS5iLmMuZCsrOworICAgIC8vIFRoaXMgd291
bGQgZ2V0IHRyYW5zZm9ybWVkIGludG86CisgICAgLy8KKyAgICAvLyBTdGVwIDE6CisgICAgLy8g
cCA9ICZhOworICAgIC8vCisgICAgLy8gU3RlcCAyOgorICAgIC8vIHEgPSBvcGVyYXRvci5iKCpw
KTsKKyAgICAvLyByID0gb3BlcmF0b3IuYyhxKTsKKyAgICAvLworICAgIC8vIFN0ZXAgMzoKKyAg
ICAvLyBvbGRWYWx1ZSA9IG9wZXJhdG9yLmQocik7CisgICAgLy8gbmV3VmFsdWUgPSAuLi47Cisg
ICAgLy8KKyAgICAvLyBTdGVwIDQ6CisgICAgLy8gciA9IG9wZXJhdG9yLmQ9KHIsIG5ld1ZhbHVl
KTsKKyAgICAvLyBxID0gb3BlcmF0b3IuYz0ocSwgcik7CisgICAgLy8KKyAgICAvLyBTdGVwIDQ6
CisgICAgLy8gKnAgPSBvcGVyYXRvci5iPSgqcCwgcSk7CisKKyAgICAvLyBJZiB0aGUgZXhwcmVz
c2lvbiBpcyBhLmIuYy5kID0gZSwgU3RlcCAzIGRpc2FwcGVhcnMgYW5kICJuZXdWYWx1ZSIgaW4g
c3RlcCA0IGJlY29tZXMgImUiLgorICAgIAorCisgICAgLy8gRmluZCB0aGUgIi5iIiAiLmMiIGFu
ZCAiLmQiIGV4cHJlc3Npb25zLgorICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6RG90RXhwcmVzc2lvbj4+IGNoYWluOworICAgIEFTVDo6RG90RXhwcmVzc2lvbiogaXRlcmF0
b3IgPSAmZG90RXhwcmVzc2lvbjsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBjaGFpbi5h
cHBlbmQoKml0ZXJhdG9yKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yLT5iYXNlKCkudHlwZUFu
bm90YXRpb24oKSk7CisgICAgICAgIGlmIChpdGVyYXRvci0+YmFzZSgpLnR5cGVBbm5vdGF0aW9u
KCktPmxlZnRBZGRyZXNzU3BhY2UoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBBU1NF
UlQoIWl0ZXJhdG9yLT5iYXNlKCkudHlwZUFubm90YXRpb24oKS0+aXNSaWdodFZhbHVlKCkpOwor
ICAgICAgICBBU1NFUlQoaXM8QVNUOjpEb3RFeHByZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKSk7
IC8vIEZJWE1FOiBNYWtlIHRoaXMgd29yayB3aXRoIGluZGV4IGV4cHJlc3Npb25zCisgICAgICAg
IGl0ZXJhdG9yID0gJmRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4oaXRlcmF0b3ItPmJhc2Uo
KSk7CisgICAgfQorICAgIGF1dG8gbGVmdEV4cHJlc3Npb24gPSBpdGVyYXRvci0+dGFrZUJhc2Uo
KTsKKyAgICBBU1Q6OkV4cHJlc3Npb24mIGlubmVyTGVmdEV4cHJlc3Npb24gPSBsZWZ0RXhwcmVz
c2lvbjsKKworICAgIC8vIENyZWF0ZSAicCIgdmFyaWFibGUuCisgICAgQVNTRVJUKGxlZnRFeHBy
ZXNzaW9uLT5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byBwb2ludGVyVmFyaWFibGUgPSBtYWtl
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGxlZnRFeHBy
ZXNzaW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4obWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4obGVm
dEV4cHJlc3Npb24tPm9yaWdpbigpKSwgKmxlZnRFeHByZXNzaW9uLT50eXBlQW5ub3RhdGlvbigp
LT5sZWZ0QWRkcmVzc1NwYWNlKCksIGxlZnRFeHByZXNzaW9uLT5yZXNvbHZlZFR5cGUoKS0+Y2xv
bmUoKSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworCisgICAgLy8g
Q3JlYXRlICJxIiBhbmQgInIiIHZhcmlhYmxlcy4KKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbj4+IGludGVybWVkaWF0ZVZhcmlhYmxlczsKKyAgICBpbnRlcm1l
ZGlhdGVWYXJpYWJsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjaGFpbi5zaXplKCkgLSAxKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGNoYWluLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGF1dG8mIGRvdEV4cHJlc3Npb24gPSBzdGF0aWNfY2FzdDxBU1Q6OkRvdEV4cHJlc3Npb24mPihj
aGFpbltpXSk7CisgICAgICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsK
KyAgICAgICAgaW50ZXJtZWRpYXRlVmFyaWFibGVzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZG90RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUo
KS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAg
fQorCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsK
KworICAgIC8vIFN0ZXAgMToKKyAgICB7CisgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRv
a2VuKGlubmVyTGVmdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGxlZnRFeHByZXNzaW9u
KSk7CisgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVm
PEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihpbm5lckxlZnRFeHByZXNzaW9uLm9yaWdp
bigpKSwgKmlubmVyTGVmdEV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NT
cGFjZSgpLCBpbm5lckxlZnRFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKSk7Cisg
ICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAo
cG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUo
KSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+
dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8g
RklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KGlubmVyTGVmdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNl
KSwgV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAgICAgYXNzaWdubWVudEV4
cHJlc3Npb24tPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAg
ICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZh
bHVlKCkpOworCisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRF
eHByZXNzaW9uKSk7CisgICAgfQorCisgICAgLy8gU3RlcCAyOgorICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbiogcHJldmlvdXMgPSBudWxscHRyOworICAgIGF1dG8gcHJldmlvdXNMZWZ0VmFs
dWUgPSBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgIGlmIChw
cmV2aW91cykgeworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cCgqcHJldmlvdXMpKTsKKyAgICAgICAgICAgIEFTU0VSVChwcmV2aW91cy0+dHlwZSgpKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHByZXZpb3VzLT50eXBlKCktPmNs
b25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6
IElzIHRoaXMgcmlnaHQ/CisgICAgICAgICAgICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7Cisg
ICAgICAgIH0KKyAgICAKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlw
ZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclZhcmlhYmxl
LT50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAv
LyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVz
c2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpU
b2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkp
OworICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOworICAgICAgICBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBv
aW50ZXJWYXJpYWJsZS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBk
ZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsg
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKS5hZGRy
ZXNzU3BhY2UoKSB9KTsKKyAgICAgICAgcmV0dXJuIGRlcmVmZXJlbmNlRXhwcmVzc2lvbjsKKyAg
ICB9OworICAgIGF1dG8gcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUgPSBbJl0oKSAtPiBVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgIGlmIChwcmV2aW91cykgeworICAgICAg
ICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCgqcHJldmlvdXMpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChwcmV2aW91cy0+dHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlKHByZXZpb3VzLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICAg
ICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsg
QVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisK
KyAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3Jp
Z2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSk7CisgICAgICAgICAgICBBU1NFUlQo
cHJldmlvdXMtPnR5cGUoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNl
dFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhw
cmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIHByZXZpb3VzLT50
eXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIG1h
a2VQb2ludGVyRXhwcmVzc2lvbjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gdmFyaWFibGVS
ZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFy
aWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgIEFTU0VSVChw
b2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRU
eXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisgICAgICAgIHJldHVy
biB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSBjaGFpbi5z
aXplKCkgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgIEFTVDo6RG90RXhwcmVzc2lvbiYgZG90
RXhwcmVzc2lvbiA9IGNoYWluW2ldOworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24m
IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBpbnRlcm1lZGlhdGVWYXJpYWJsZXNbaSAtIDFdOworCisg
ICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBnZXR0ZXJDYWxsKGRvdEV4cHJlc3Npb24sIHBy
ZXZpb3VzTGVmdFZhbHVlLCBwb2ludGVyVG9QcmV2aW91c0xlZnRWYWx1ZSk7CisKKyAgICAgICAg
aWYgKCFjYWxsRXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xh
cmF0aW9uKSk7CisgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7Cisg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlw
ZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklY
TUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRv
dEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92
ZSgqY2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5
cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOworICAgICAgICBhc3NpZ25t
ZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisg
ICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7
CisgICAgICAgIAorICAgICAgICBwcmV2aW91cyA9ICZ2YXJpYWJsZURlY2xhcmF0aW9uOworICAg
IH0KKyAgICBhdXRvIGxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbiA9IGdldHRlckNhbGwoY2hhaW5b
MF0sIHByZXZpb3VzTGVmdFZhbHVlLCBwb2ludGVyVG9QcmV2aW91c0xlZnRWYWx1ZSk7CisKKyAg
ICAvLyBNb2RpZmljYXRpb25SZXN1bHQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJikKKyAg
ICAvLyBTdGVwIDM6CisgICAgYXV0byBtb2RpZmljYXRpb25SZXN1bHQgPSBtb2RpZmljYXRpb24o
V1RGTW92ZShsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24pKTsKKyAgICBpZiAoIW1vZGlmaWNhdGlv
blJlc3VsdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1vZGlmaWNhdGlvblJlc3VsdC0+ZXhwcmVzc2lvbnMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKG1vZGlmaWNhdGlvblJlc3VsdC0+ZXhw
cmVzc2lvbnNbaV0pKTsKKworICAgIC8vIFN0ZXAgNDoKKyAgICBVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiByaWdodFZhbHVlID0gV1RGTW92ZShtb2RpZmljYXRpb25SZXN1bHQtPnJlc3VsdCk7
CisgICAgQVNTRVJUKHJpZ2h0VmFsdWUtPnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIGV4cHJl
c3Npb25UeXBlID0gcmlnaHRWYWx1ZS0+cmVzb2x2ZWRUeXBlKCktPmNsb25lKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjaGFpbi5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgQVNU
OjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uID0gY2hhaW5baV07CisgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbiA9IGludGVybWVkaWF0ZVZh
cmlhYmxlc1tpXTsKKworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gc2V0dGVy
Q2FsbChkb3RFeHByZXNzaW9uLCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBbJl0oKSAtPiBVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNl
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVm
ZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIEFTU0VSVCh2
YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZS0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAg
ICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUg
eyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8K
KyAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAgICAgfSwgWyZdKCkg
LT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICAgICAgYXV0byB2YXJpYWJs
ZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpW
YXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAg
ICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2UtPnNldFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkp
OworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRo
aXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSk7CisgICAgICAg
ICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAgbWFr
ZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlw
ZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkLCB2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSkpOworICAgICAg
ICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0
VmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVBvaW50ZXJFeHByZXNzaW9uOworICAg
ICAgICB9KTsKKworICAgICAgICBpZiAoIWFzc2lnbm1lbnRFeHByZXNzaW9uKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RG
TW92ZSgqYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKworICAgICAgICByaWdodFZhbHVlID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
Ojp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVj
bGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgcmlnaHRWYWx1ZS0+c2V0VHlwZSh2YXJpYWJsZURl
Y2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJpZ2h0VmFsdWUtPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsg
Ly8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisgICAgfQorCisgICAgLy8gU3RlcCA1OgorICAgIHsK
KyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IHNldHRlckNhbGwoY2hhaW5bY2hh
aW4uc2l6ZSgpIC0gMV0sIFdURk1vdmUocmlnaHRWYWx1ZSksIFsmXSgpIC0+IFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgICAgICBBU1NFUlQocG9pbnRlclZh
cmlhYmxlLT50eXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUo
cG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAg
IGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJl
bmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZN
b3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSk7CisgICAgICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlh
YmxlLT50eXBlKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBl
KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuZWxl
bWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJU
eXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOworICAgICAg
ICAgICAgcmV0dXJuIGRlcmVmZXJlbmNlRXhwcmVzc2lvbjsKKyAgICAgICAgfSwgWyZdKCkgLT4g
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJl
ZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJp
YWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgICAgIEFTU0VS
VChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAg
ICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBB
U1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKyAg
ICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgaWYgKCFhc3NpZ25tZW50RXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoKmFzc2lnbm1lbnRF
eHByZXNzaW9uKSk7CisgICAgfQorCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24+PiB2YXJpYWJsZURlY2xhcmF0aW9uczsKKyAgICB2YXJpYWJsZURlY2xhcmF0
aW9ucy5hcHBlbmQoV1RGTW92ZShwb2ludGVyVmFyaWFibGUpKTsKKyAgICBmb3IgKGF1dG8mIGlu
dGVybWVkaWF0ZVZhcmlhYmxlIDogaW50ZXJtZWRpYXRlVmFyaWFibGVzKQorICAgICAgICB2YXJp
YWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnRlcm1lZGlhdGVWYXJpYWJsZSkpOwor
CisgICAgcmV0dXJuIHt7IGlubmVyTGVmdEV4cHJlc3Npb24sIFdURk1vdmUoZXhwcmVzc2lvbnMp
LCBXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb25zKSB9fTsKK30KKwordm9pZCBQcm9wZXJ0eVJl
c29sdmVyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVz
c2lvbikKK3sKKyAgICBBU1NFUlQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpLnR5cGVBbm5v
dGF0aW9uKCkpOworICAgIGlmIChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkudHlwZUFubm90
YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgIHNpbXBsaWZ5TGVmdFZhbHVl
KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBBU1NFUlQoIWFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKS50eXBlQW5ub3RhdGlvbigp
LT5pc1JpZ2h0VmFsdWUoKSk7CisgICAgaWYgKCFpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGFzc2ln
bm1lbnRFeHByZXNzaW9uLmxlZnQoKSkpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsgLy8gRklYTUU6
IE1ha2UgdGhpcyB3b3JrIHdpdGggaW5kZXggZXhwcmVzc2lvbnMuCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKS5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgYXV0byB0eXBlID0gYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKS5y
ZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25t
ZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKworICAgIGF1dG8gbW9kaWZ5UmVzdWx0ID0gbW9kaWZ5
KGRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgp
KSwgWyZdKE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmKSAtPiBPcHRpb25h
bDxNb2RpZmljYXRpb25SZXN1bHQ+IHsKKyAgICAgICAgcmV0dXJuIHt7IFZlY3RvcjxVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPj4oKSwgYXNzaWdubWVudEV4cHJlc3Npb24udGFrZVJpZ2h0KCkg
fX07CisgICAgfSk7CisKKyAgICBpZiAoIW1vZGlmeVJlc3VsdCkgeworICAgICAgICBzZXRFcnJv
cigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpbXBsaWZ5TGVmdFZhbHVlKG1vZGlm
eVJlc3VsdC0+aW5uZXJMZWZ0VmFsdWUpOworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNU
OjpDb21tYUV4cHJlc3Npb24pIDw9IHNpemVvZihBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uKSwg
IkFzc2lnbm1lbnQgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBjb21tYSBl
eHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgTGV4ZXI6
OlRva2VuIG9yaWdpbiA9IGFzc2lnbm1lbnRFeHByZXNzaW9uLm9yaWdpbigpOworICAgIHZvaWQq
IGxvY2F0aW9uID0gJmFzc2lnbm1lbnRFeHByZXNzaW9uOworICAgIGFzc2lnbm1lbnRFeHByZXNz
aW9uLn5Bc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgIGF1dG8qIGNvbW1hRXhwcmVzc2lvbiA9
IG5ldyAobG9jYXRpb24pIEFTVDo6Q29tbWFFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSwgV1RG
TW92ZShtb2RpZnlSZXN1bHQtPmV4cHJlc3Npb25zKSk7CisgICAgY29tbWFFeHByZXNzaW9uLT5z
ZXRUeXBlKFdURk1vdmUodHlwZSkpOworICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgZm9yIChhdXRvJiB2YXJpYWJsZURlY2xh
cmF0aW9uIDogbW9kaWZ5UmVzdWx0LT52YXJpYWJsZURlY2xhcmF0aW9ucykKKyAgICAgICAgbV92
YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
Cit9CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQoreworICAgIEFTU0VSVChyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnR5cGVBbm5vdGF0aW9uKCkpOworICAg
IGlmIChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnR5cGVBbm5vdGF0aW9u
KCktPmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAgICAvLyBDb25zaWRlciBhKys7CisgICAg
ICAgIC8vIFRoaXMgd291bGQgZ2V0IHRyYW5zZm9ybWVkIGludG86CisgICAgICAgIC8vCisgICAg
ICAgIC8vIHAgPSAmYTsKKyAgICAgICAgLy8gb2xkVmFsdWUgPSAqcDsKKyAgICAgICAgLy8gbmV3
VmFsdWUgPSAuLi47CisgICAgICAgIC8vICpwID0gbmV3VmFsdWU7CisKKyAgICAgICAgQVNTRVJU
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkpOwor
ICAgICAgICBhdXRvIGJhc2VUeXBlID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFs
dWUoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICAgICAgYXV0byBwb2ludGVyVHlwZSA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkpLCAqcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCks
IGJhc2VUeXBlLT5jbG9uZSgpKTsKKworICAgICAgICBhdXRvIHBvaW50ZXJWYXJpYWJsZSA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4ocmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVy
cygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4ocG9pbnRlclR5cGUtPmNsb25lKCkpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworCisgICAgICAgIFZlY3RvcjxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byBvcmlnaW4gPSBMZXhlcjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi5sZWZ0VmFsdWUoKS5vcmlnaW4oKSk7CisgICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVy
RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExl
eGVyOjpUb2tlbihvcmlnaW4pLCByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VMZWZ0VmFs
dWUoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUocG9pbnRl
clR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGF1dG8gdmFy
aWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgICAg
ICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVHlwZS0+Y2xvbmUoKSk7CisgICAg
ICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFs
dWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdo
dD8KKworICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKHZh
cmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAg
ICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9uZSgp
KTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZN
b3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFi
bGUpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZShwb2ludGVyVHlw
ZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8g
RklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6
OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlh
YmxlUmVmZXJlbmNlMSkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRU
eXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lv
bi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBh
dXRvIHZhcmlhYmxlUmVmZXJlbmNlMiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFy
aWFibGVSZWZlcmVuY2UoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlw
ZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gYXNzaWdu
bWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+
KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92
ZSh2YXJpYWJsZVJlZmVyZW5jZTIpLCBXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbikpOwor
ICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25l
KCkpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdU
Rk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZS0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVy
ZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0
byBuZXdWYWx1ZUV4cHJlc3Npb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VOZXdW
YWx1ZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdWYWx1ZUV4cHJlc3Npb24p
OyAvLyBGSVhNRTogUmVsYXggdGhpcyBjb25zdHJhaW50LgorICAgICAgICAgICAgYXV0byBhc3Np
Z25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lv
bj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZN
b3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgqbmV3VmFsdWVFeHByZXNzaW9uKSk7Cisg
ICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUo
KSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RG
TW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlh
YmxlKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGUocG9pbnRlclR5
cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8v
IEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhw
cmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVy
OjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJp
YWJsZVJlZmVyZW5jZTEpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0
VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAg
YXV0byB2YXJpYWJsZVJlZmVyZW5jZTIgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1Zh
cmlhYmxlUmVmZXJlbmNlKCk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5
cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGFzc2ln
bm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9u
PihMZXhlcjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1v
dmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTIpKTsK
KyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9u
ZSgpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChX
VEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IHJlc3VsdEV4cHJlc3Npb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VSZXN1bHRF
eHByZXNzaW9uKCk7CisgICAgICAgIEFTU0VSVChyZXN1bHRFeHByZXNzaW9uKTsgLy8gRklYTUU6
IEJlIHJlc2lsaWVudCB0byB0aGlzIGJlaW5nIG51bGwuCisgICAgICAgIEFTU0VSVCgoKnJlc3Vs
dEV4cHJlc3Npb24pLT5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdHlwZSA9ICgqcmVz
dWx0RXhwcmVzc2lvbiktPnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpOworICAgICAgICBleHByZXNz
aW9ucy5hcHBlbmQoV1RGTW92ZSgqcmVzdWx0RXhwcmVzc2lvbikpOworCisgICAgICAgIFVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IG9sZFZhcmlhYmxlRGVjbGFyYXRpb24gPSBy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VPbGRWYWx1ZSgpOworICAgICAgICBVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBuZXdWYXJpYWJsZURlY2xhcmF0aW9uID0gcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTmV3VmFsdWUoKTsKKworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihBU1Q6OkNvbW1hRXhwcmVzc2lvbikgPD0gc2l6ZW9mKEFTVDo6UmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbiksICJSZWFkTW9kaWZ5V3JpdGUgZXhwcmVzc2lvbnMgbmVlZCB0
byBiZSBhYmxlIHRvIGJlY29tZSBjb21tYSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJh
Y2tyZWZlcmVuY2VzIik7CisgICAgICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSByZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLm9yaWdpbigpOworICAgICAgICB2b2lkKiBsb2NhdGlvbiA9ICZyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uOworICAgICAgICByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
Ln5SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCk7CisgICAgICAgIGF1dG8qIGNvbW1hRXhwcmVz
c2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q29tbWFFeHByZXNzaW9uKFdURk1vdmUob3JpZ2lu
KSwgV1RGTW92ZShleHByZXNzaW9ucykpOworICAgICAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5
cGUoV1RGTW92ZSh0eXBlKSk7CisgICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlv
bnMuYXBwZW5kKFdURk1vdmUocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgIG1fdmFyaWFibGVE
ZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUob2xkVmFyaWFibGVEZWNsYXJhdGlvbikpOworICAg
ICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG5ld1ZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVCghcmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpLT5pc1JpZ2h0
VmFsdWUoKSk7CisgICAgaWYgKCFpczxBU1Q6OkRvdEV4cHJlc3Npb24+KHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpKSB7CisgICAgICAgIHNldEVycm9yKCk7IC8vIEZJWE1F
OiBNYWtlIHRoaXMgd29yayB3aXRoIGluZGV4IGV4cHJlc3Npb25zLgorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGF1dG8gbW9kaWZ5UmVzdWx0ID0gbW9kaWZ5KGRvd25jYXN0PEFTVDo6RG90
RXhwcmVzc2lvbj4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSksIFsmXShP
cHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4mJiBsYXN0R2V0dGVyQ2FsbEV4cHJl
c3Npb24pIC0+IE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4geworICAgICAgICBWZWN0b3I8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOworICAgICAgICBpZiAoIWxh
c3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFyaWFibGVSZWZlcmVuY2UoKTsKKyAgICAgICAgICAg
IEFTU0VSVChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlw
ZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAg
ICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZh
bHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmln
aHQ/CisKKyAgICAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVy
ZW5jZSksIFdURk1vdmUoKmxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikpOworICAgICAgICAgICAg
YXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5s
ZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhc3NpZ25t
ZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisg
ICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lv
bikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJl
ZmVyZW5jZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVuY2Uo
KTsKKyAgICAgICAgICAgIEFTU0VSVChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1
ZSgpLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRU
eXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkt
PmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklY
TUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gbmV3VmFsdWVFeHByZXNzaW9u
ID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTmV3VmFsdWVFeHByZXNzaW9uKCk7Cisg
ICAgICAgICAgICBBU1NFUlQobmV3VmFsdWVFeHByZXNzaW9uKTsgLy8gRklYTUU6IFJlbGF4IHRo
aXMgY29uc3RyYWludAorICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlh
YmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgqbmV3VmFsdWVFeHByZXNzaW9uKSk7CisgICAgICAgICAg
ICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFzc2ln
bm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisK
KyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNz
aW9uKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ge3sgV1RGTW92ZShleHByZXNzaW9u
cyksIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVuY2UoKSB9fTsK
KyAgICB9KTsKKworICAgIGlmICghbW9kaWZ5UmVzdWx0KSB7CisgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2ltcGxpZnlMZWZ0VmFsdWUobW9kaWZ5UmVz
dWx0LT5pbm5lckxlZnRWYWx1ZSk7CisKKyAgICBhdXRvIHJlc3VsdEV4cHJlc3Npb24gPSByZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VSZXN1bHRFeHByZXNzaW9uKCk7CisgICAgQVNTRVJU
KHJlc3VsdEV4cHJlc3Npb24pOyAvLyBGSVhNRTogQmUgcmVzaWxpZW50IHRvIHRoaXMgYmVpbmcg
bnVsbC4KKyAgICBBU1NFUlQoKCpyZXN1bHRFeHByZXNzaW9uKS0+cmVzb2x2ZWRUeXBlKCkpOwor
ICAgIGF1dG8gdHlwZSA9ICgqcmVzdWx0RXhwcmVzc2lvbiktPnJlc29sdmVkVHlwZSgpLT5jbG9u
ZSgpOworICAgIG1vZGlmeVJlc3VsdC0+ZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoKnJlc3Vs
dEV4cHJlc3Npb24pKTsKKworICAgIFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+
IG9sZFZhcmlhYmxlRGVjbGFyYXRpb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VP
bGRWYWx1ZSgpOworICAgIFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IG5ld1Zh
cmlhYmxlRGVjbGFyYXRpb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VOZXdWYWx1
ZSgpOworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpDb21tYUV4cHJlc3Npb24pIDw9
IHNpemVvZihBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pLCAiUmVhZE1vZGlmeVdyaXRl
IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMg
d2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgIExleGVyOjpUb2tlbiBvcmln
aW4gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigpOworICAgIHZvaWQqIGxvY2F0
aW9uID0gJnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb247CisgICAgcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5+UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbigpOworICAgIGF1dG8qIGNvbW1hRXhw
cmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q29tbWFFeHByZXNzaW9uKFdURk1vdmUob3Jp
Z2luKSwgV1RGTW92ZShtb2RpZnlSZXN1bHQtPmV4cHJlc3Npb25zKSk7CisgICAgY29tbWFFeHBy
ZXNzaW9uLT5zZXRUeXBlKFdURk1vdmUodHlwZSkpOworICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgZm9yIChhdXRvJiB2YXJp
YWJsZURlY2xhcmF0aW9uIDogbW9kaWZ5UmVzdWx0LT52YXJpYWJsZURlY2xhcmF0aW9ucykKKyAg
ICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xh
cmF0aW9uKSk7CisgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShvbGRW
YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQo
V1RGTW92ZShuZXdWYXJpYWJsZURlY2xhcmF0aW9uKSk7Cit9CisKK2Jvb2wgUHJvcGVydHlSZXNv
bHZlcjo6c2ltcGxpZnlSaWdodFZhbHVlKEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lv
bikKK3sKKyAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5vcmlnaW4oKTsK
KworICAgIGlmIChhdXRvKiBhbmRGdW5jdGlvbiA9IGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rpb24o
KSkgeworICAgICAgICBhdXRvJiBiYXNlID0gZG90RXhwcmVzc2lvbi5iYXNlKCk7CisgICAgICAg
IEFTU0VSVChiYXNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKGJhc2UudHlwZUFu
bm90YXRpb24oKSk7CisgICAgICAgIGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlLnR5
cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAgICAgICAgYXV0byBt
YWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHBy
ZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgZG90RXhwcmVzc2lvbi50YWtlQmFzZSgpKTsK
KyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVm
PEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4pLCAqbGVmdEFkZHJlc3NTcGFj
ZSwgYmFzZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSkpOworICAgICAgICAgICAgbWFrZVBvaW50
ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAg
ICAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOwor
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lv
bikpOworICAgICAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFN0cmluZyhhbmRGdW5jdGlv
bi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgICAgIGNhbGxFeHByZXNz
aW9uLT5zZXRUeXBlKGFuZEZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICBj
YWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAg
ICAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCphbmRGdW5jdGlvbik7CisKKyAg
ICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9u
KSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRv
IGJlIGFibGUgdG8gYmVjb21lIGRlcmVmZXJlbmNlIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRp
bmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgICAgIHZvaWQqIGxvY2F0aW9uID0gJmRvdEV4
cHJlc3Npb247CisgICAgICAgICAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7Cisg
ICAgICAgICAgICBhdXRvKiBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBB
U1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2FsbEV4
cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShk
b3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlw
ZSgpLmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFu
ZEZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBoYXZlIGFuIGFuZGVyLCBidXQgbm8g
bGVmdCB2YWx1ZSB0byBjYWxsIGl0IG9uLiBMZXQncyBzYXZlIHRoZSB2YWx1ZSBpbnRvIGEgdGVt
cG9yYXJ5IHZhcmlhYmxlIHRvIGNyZWF0ZSBhIGxlZnQgdmFsdWUuCisgICAgICAgIC8vIFRoaXMg
aXMgZWZmZWN0aXZlbHkgaW5saW5pbmcgdGhlIGZ1bmN0aW9ucyB0aGUgc3BlYyBzYXlzIGFyZSBn
ZW5lcmF0ZWQuCisgICAgICAgIGlmICghZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNs
YXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJzKCksIGJhc2UucmVzb2x2ZWRUeXBlKCktPmNs
b25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisKKyAgICAgICAg
YXV0byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZl
cmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikp
OworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGUoYmFzZS5yZXNvbHZlZFR5cGUo
KS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworCisgICAg
ICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBXVEZNb3ZlKHZhcmlhYmxlUmVm
ZXJlbmNlMSksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7CisgICAgICAgIGFzc2lnbm1lbnRF
eHByZXNzaW9uLT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAg
ICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVl
KCkpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlKGJh
c2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTIt
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRo
cmVhZCB9KTsKKworICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBX
VEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMikpOworICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Np
b24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4o
b3JpZ2luKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgYmFzZS5yZXNvbHZlZFR5cGUoKS0+
Y2xvbmUoKSkpOworICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3Zl
KG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOworICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwg
U3RyaW5nKGFuZEZ1bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgICAg
ICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOwor
ICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVl
KCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZEZ1bmN0aW9uKTsK
KworICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShjYWxsRXhw
cmVzc2lvbikpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5j
bG9uZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpDb21tYUV4cHJlc3Npb24pIDw9IHNpemVvZihB
U1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBi
ZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIp
OworICAgICAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOworICAgICAgICBkb3RF
eHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CisgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChX
VEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVu
ZChXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbikpOworICAgICAgICBhdXRvKiBjb21tYUV4
cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVzc2lvbihXVEZNb3ZlKG9y
aWdpbiksIFdURk1vdmUoZXhwcmVzc2lvbnMpKTsKKyAgICAgICAgY29tbWFFeHByZXNzaW9uLT5z
ZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmVs
ZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwor
CisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVE
ZWNsYXJhdGlvbikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihBU1Q6OkNhbGxFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpEb3RFeHBy
ZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGNhbGwg
ZXhwcmVzc2lvbnMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgIEFTU0VS
VChkb3RFeHByZXNzaW9uLmdldEZ1bmN0aW9uKCkpOworICAgIGF1dG8mIGdldEZ1bmN0aW9uID0g
KmRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKTsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGRvdEV4cHJlc3Np
b24udGFrZUJhc2UoKSk7CisgICAgdm9pZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKKyAg
ICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CisgICAgYXV0byogY2FsbEV4cHJlc3Np
b24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkNhbGxFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSwg
U3RyaW5nKGdldEZ1bmN0aW9uLm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgY2Fs
bEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKGdldEZ1bmN0aW9uKTsKKyAgICBjYWxsRXhwcmVzc2lv
bi0+c2V0VHlwZShnZXRGdW5jdGlvbi50eXBlKCkuY2xvbmUoKSk7CisgICAgY2FsbEV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworY2xhc3MgTGVmdFZhbHVlU2ltcGxpZmllciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1
YmxpYzoKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKworcHJp
dmF0ZToKK307CisKK3ZvaWQgTGVmdFZhbHVlU2ltcGxpZmllcjo6dmlzaXQoQVNUOjpEb3RFeHBy
ZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIFZpc2l0b3I6OnZpc2l0KGRvdEV4cHJlc3Np
b24pOworICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmJhc2UoKS50eXBlQW5ub3RhdGlvbigpKTsK
KyAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5iYXNlKCkudHlwZUFubm90YXRpb24oKS0+bGVmdEFk
ZHJlc3NTcGFjZSgpKTsKKyAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5hbmRGdW5jdGlvbigpKTsK
KworICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RFeHByZXNzaW9uLm9yaWdpbigpOworICAg
IGF1dG8qIGFuZEZ1bmN0aW9uID0gZG90RXhwcmVzc2lvbi5hbmRGdW5jdGlvbigpOworICAgIGF1
dG8mIGJhc2UgPSBkb3RFeHByZXNzaW9uLmJhc2UoKTsKKyAgICBhdXRvIGxlZnRBZGRyZXNzU3Bh
Y2UgPSAqZG90RXhwcmVzc2lvbi5iYXNlKCkudHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NT
cGFjZSgpOworICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIGRvdEV4cHJl
c3Npb24udGFrZUJhc2UoKSk7CisgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1h
a2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIGxlZnRB
ZGRyZXNzU3BhY2UsIGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpKTsKKyAgICBtYWtlUG9p
bnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKwor
ICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgIGFy
Z3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICBhdXRv
IGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhl
cjo6VG9rZW4ob3JpZ2luKSwgU3RyaW5nKGFuZEZ1bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFy
Z3VtZW50cykpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGFuZEZ1bmN0aW9uLT50eXBl
KCkuY2xvbmUoKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
UmlnaHRWYWx1ZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZEZ1bmN0
aW9uKTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVk
IHRvIGJlIGFibGUgdG8gYmVjb21lIGRlcmVmZXJlbmNlIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBk
YXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNz
aW9uOworICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsKKyAgICBhdXRvKiBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkRlcmVmZXJlbmNlRXhwcmVz
c2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5k
RnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICBkZXJlZmVyZW5j
ZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8
QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuYWRkcmVzc1NwYWNlKCkgfSk7
Cit9CisKK3ZvaWQgTGVmdFZhbHVlU2ltcGxpZmllcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKK3sKKyAgICAvLyBEZXJlZmVyZW5jZSBl
eHByZXNzaW9ucyBhcmUgdGhlIG9ubHkgZXhwcmVzc2lvbnMgd2hlcmUgdGhlIGNoaWxkcmVuIG1p
Z2h0IGJlIG1vcmUtcmlnaHQgdGhhbiB3ZSBhcmUuCisgICAgLy8gRm9yIGV4YW1wbGUsIGEgZGVy
ZWZlcmVuY2UgZXhwcmVzc2lvbiBtYXkgYmUgYSBsZWZ0IHZhbHVlIGJ1dCBpdHMgY2hpbGQgbWF5
IGJlIGEgY2FsbCBleHByZXNzaW9uIHdoaWNoIGlzIGEgcmlnaHQgdmFsdWUuCisgICAgLy8gTGVm
dFZhbHVlU2ltcGxpZmllciBkb2Vzbid0IGhhbmRsZSByaWdodCB2YWx1ZXMsIHNvIHdlIGluc3Rl
YWQgbmVlZCB0byB1c2UgUHJvcGVydHlSZXNvbHZlci4KKyAgICAvLyBGSVhNRTogV2hhdCBhYm91
dCBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cz8KKyAgICBQcm9wZXJ0eVJlc29sdmVyKCkuVmlzaXRv
cjo6dmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9uKTsKK30KKwordm9pZCBQcm9wZXJ0eVJlc29s
dmVyOjpzaW1wbGlmeUxlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCit7Cisg
ICAgTGVmdFZhbHVlU2ltcGxpZmllcigpLlZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOworfQor
Cit2b2lkIHJlc29sdmVQcm9wZXJ0aWVzKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgUHJvcGVy
dHlSZXNvbHZlcigpLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXSExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
R1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcm9wZXJ0eVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjIwNWY5MDJiY2M5NGVjYTll
ZjMzYjU4ZGExYzcwMWFiNzJiMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmgKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFt
OworCit2b2lkIHJlc29sdmVQcm9wZXJ0aWVzKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xS
ZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKaW5kZXggZTc4MzhjZTNmNzI1YWUwOWFi
YTFlZGI1MGE2NTkyYzM0NjMxM2VlNS4uZGM5MzRkYmY3MjZhODE0YTA4MDRiNGNjYjU3NTJkYmVj
YjgxZjM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCkBAIC00NCw3ICs0NCw3
IEBAIHN0YXRpYyB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24mIGNhbmRpZGF0ZSwgY29uc3QgVmVjdG9yCiAgICAgICAgIGNvbnZlcnNpb25Db3N0ICs9IGFy
Z3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+JikgLT4gdW5zaWduZWQgewogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZSkgLT4gdW5zaWduZWQgewotICAgICAgICAgICAgcmV0dXJuIHJlc29s
dmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNvbnZlcnNpb25Db3N0KCpjYW5k
aWRhdGUucGFyYW1ldGVycygpW2ldLnR5cGUoKSk7CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY29udmVyc2lvbkNvc3QoKmNhbmRp
ZGF0ZS5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSk7CiAgICAgICAgIH0pKTsKICAgICB9CiAgICAg
Ly8gVGhlIHJldHVybiB0eXBlIGNhbiBuZXZlciBiZSBhIGxpdGVyYWwgdHlwZSwgc28gaXRzIGNv
bnZlcnNpb24gY29zdCBpcyBhbHdheXMgMC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKaW5kZXggY2E1Y2JiNTky
OWNmOWUxODE4YzJjZDc0MWU3OWQ5MzZjYWFjNjhlZS4uNTBlNTMyYjZhNmU4MmYxZTAyYTA0Njc5
MWI4ZTY2OTZkNWIxMWUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKQEAgLTcyLDYgKzcyLDcgQEAgcHJp
dmF0ZToKIAogLy8gVGhpcyBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQgYSBWYXJpYW50LgogLy8g
SXQgZXhpc3RzIHNvIHdlIGNhbiBtYWtlIHN1cmUgdGhhdCB0aGUgZGVmYXVsdCBjb25zdHJ1Y3Rv
ciBkb2VzIHRoZSByaWdodCB0aGluZy4KKy8vIEZJWE1FOiBUaGlzIHdyYXBwZXIgbWlnaHQgbm90
IGJlIG5lY2Vzc2FyeS4KIGNsYXNzIFJlc29sdmluZ1R5cGUgewogcHVibGljOgogICAgIFJlc29s
dmluZ1R5cGUoKQpAQCAtMTAyLDEwICsxMDMsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgfQogCi0gICAgQVNUOjpVbm5hbWVkVHlwZSYgZ2V0VW5uYW1lZFR5cGUoKQor
ICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFVubmFtZWRUeXBlKCkKICAgICB7Ci0gICAgICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4o
bV9pbm5lcikpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+PihtX2lubmVyKTsKKyAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKSkKKyAgICAgICAgICAgIHJldHVybiAm
V1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+
IGF1dG8gdmlzaXQoY29uc3QgVmlzaXRvciYgdmlzaXRvcikgLT4gZGVjbHR5cGUoV1RGOjp2aXNp
dCh2aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFyaWFudDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+Jj4oKSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGli
cmFyeS50eHQKaW5kZXggNzlhMmM2MGUwNjA2YjEzMjY1YmIyMzAzNjdhY2Y5NzI1MGJmOWE3Zi4u
MGZiNWQzOTMyZDQ1ZmIwYWZkZTA5NTk2MTVlYmQ4MWZlYWE5MWM1MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRM
aWJyYXJ5LnR4dApAQCAtMzkwLDQgKzM5MCwxMyBAQCBuYXRpdmUgdm9pZCBBbGxNZW1vcnlCYXJy
aWVyV2l0aEdyb3VwU3luYygpOwogbmF0aXZlIHZvaWQgRGV2aWNlTWVtb3J5QmFycmllcldpdGhH
cm91cFN5bmMoKTsKIG5hdGl2ZSB2b2lkIEdyb3VwTWVtb3J5QmFycmllcldpdGhHcm91cFN5bmMo
KTsKIAorb3BlcmF0b3IgZmxvYXQ0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcp
IHsKKyAgICBmbG9hdDQgcmVzdWx0OworICAgIHJlc3VsdC54ID0geDsKKyAgICByZXN1bHQueSA9
IHk7CisgICAgcmVzdWx0LnogPSB6OworICAgIHJlc3VsdC53ID0gdzsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5Mjg5MCBJbnNlcnQgdGhlIHJlc3Qgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkgb25jZSB0
aGUgcGFyc2VyIGlzIGZhc3QgZW5vdWdoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5
T3BlcmF0b3JMZW5ndGguY3BwCmluZGV4IGFlM2NhNjQyMzllM2I1OWQzNmFhYWFlZWM3YmE0NzFi
Y2I2N2NlYjkuLjY1ZWQ3YWNmNDNmMjAwNDAyNTBmOTA2NmExNGI2NDBiNTdiYmYwY2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCkBAIC02NSw3
ICs2NSw3IEBAIGJvb2wgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYgcHJv
Z3JhbSkKICAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogCiAgICAgZm9yIChhdXRvJiBhcnJh
eVR5cGUgOiBhcnJheVR5cGVzKSB7Ci0gICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2
YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBhcnJheVR5cGUuZ2V0KCkuY2xvbmUoKSB9LCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICBhdXRvIHZhcmlhYmxlRGVj
bGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6
OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBhcnJh
eVR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAg
ICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCku
b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBl
UmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBw
cm9ncmFtLmludHJpbnNpY3MoKS51aW50VHlwZSgpKSwgIm9wZXJhdG9yLmxlbmd0aCJfc3RyLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNv
bnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCmluZGV4IGNkN2MzNzAyYWRiZWEyOWFjMThjNWNi
ZTZkYjYwODdiOWUwMmVkOGEuLjc0Y2M4ZjE4NGU4MzViM2NlMWM0OWI1Y2U2ZWM4ZDZhNGE4Njhj
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcApAQCAtMTEwLDcgKzEx
MCw3IEBAIGJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAg
IGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAKICAgICBmb3IgKGF1dG8mIHVubmFtZWRUeXBlIDog
dW5uYW1lZFR5cGVzKSB7Ci0gICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJs
ZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCB7IHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCkgfSwgU3RyaW5nKCks
IFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xh
cmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpU
b2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB1bm5h
bWVkVHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOwogICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2lu
KCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUuZ2V0
KCkuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RG
OjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CkBAIC0xMjcsNyArMTI3LDcgQEAgYm9vbCBzeW50aGVz
aXplQ29uc3RydWN0b3JzKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIGlmIChpczxBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbj4oc3RhdGljX2Nhc3Q8QVNUOjpOYW1lZFR5cGUmPihuYW1lZFR5
cGUpKSAmJiBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oc3RhdGljX2Nhc3Q8
QVNUOjpOYW1lZFR5cGUmPihuYW1lZFR5cGUpKS5pc0F0b21pYygpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBl
LmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKG5hbWVk
VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5
cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpKSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBw
YXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlD
b25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG5hbWVkVHlw
ZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmln
aW4oKSksIG5hbWVkVHlwZS5nZXQoKSksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFy
YW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25G
dW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCmluZGV4IDE3OTdmZTUzOTRjODFlYWNk
Mzk1NGFiYzZhOGE2NWE2YzhmYzk2ZTIuLmQ3NGFmMzNhMWYwNWE2OTIyMTljOGNjZTRhZmRjYzky
OTUxMDk3MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0
aW9ucy5jcHAKQEAgLTQxLDggKzQxLDggQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAg
IGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRl
ZmluaXRpb25zKCkpIHsKICAgICAgICAgewotICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24xKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51
bWVyYXRpb25EZWZpbml0aW9uKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOwotICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFy
YXRpb24yKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNU
OjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihl
bnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSB9
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgYXV0
byB2YXJpYWJsZURlY2xhcmF0aW9uMSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigp
KSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCk7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24yID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKICAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKQEAgLTUyLDcgKzUyLDcg
QEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSkK
ICAgICAgICAgfQogCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRp
b24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVy
YXRpb25EZWZpbml0aW9uKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
OworICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRp
b24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1v
dmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNU
OjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
dHlwZSgpLmNsb25lKCksICJvcGVyYXRvci52YWx1ZSJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
LCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBzeW50
aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgfQog
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJs
ZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0
aW9uKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAg
ICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3Jp
Z2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwg
V1RGOjpudWxsb3B0KTsKICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVE
ZWNsYXJhdGlvbikpOwogICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVy
OjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25l
KCksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgaXNPcGVyYXRvcikpOwpAQCAtNzAsMTAgKzcwLDEwIEBAIGJvb2wgc3ludGhlc2l6ZUVudW1l
cmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0KIAogICAgICAgICB7
Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgYXV0byB2YXJpYWJs
ZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExl
eGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZN
b3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1l
cmF0aW9uRGVmaW5pdGlvbikgfSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0
ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2lu
KCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCAib3Bl
cmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3Bl
cmF0b3IpKTsKICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcApp
bmRleCA4MjY3MjIxMzdlNGMzZTM4MjI3NzgwZGFlMTJiMjlhYWJhMWI3MmVlLi45NDVkMGNlZWZh
YTM5Y2U1MDc0NjA3ZDJjNDQ5M2NmMzk3ZTk4M2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBzeW50aGVz
aXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIGZvciAoYXV0
byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24tPnN0cnVjdHVyZUVsZW1l
bnRzKCkpIHsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgZ2V0dGVyOiBv
cGVyYXRvci5maWVsZAotICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2
YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikgfSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAgICBh
dXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1
YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVy
ZURlZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAg
ICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAg
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7CiAgICAgICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6
Om51bGxvcHQsIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIG1ha2VTdHJpbmcoIm9w
ZXJhdG9yLiIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
V1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CkBAIC01Niw4ICs1Niw4IEBAIGJvb2wgc3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQogCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgLy8gVGhlIHNldHRlcjogb3BlcmF0b3IuZmllbGQ9Ci0gICAgICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24xKExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50
Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0KTsKLSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24gdmFyaWFibGVEZWNsYXJhdGlvbjIoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9u
ZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAg
ICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBl
UmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwg
c3RydWN0dXJlRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjIgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVs
ZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgc3RydWN0dXJlRWxlbWVudC50eXBl
KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAg
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkp
OwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNs
YXJhdGlvbjIpKTsKQEAgLTY5LDcgKzY5LDcgQEAgYm9vbCBzeW50aGVzaXplU3RydWN0dXJlQWNj
ZXNzb3JzKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJh
dG9yJi5maWVsZAogICAgICAgICAgICAgYXV0byBjcmVhdGVBbmRlciA9IFsmXShBU1Q6OkFkZHJl
c3NTcGFjZSBhZGRyZXNzU3BhY2UpIC0+IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiB7
CiAgICAgICAgICAgICAgICAgYXV0byBhcmd1bWVudFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6
UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRk
cmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVy
ZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7Ci0gICAgICAgICAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBXVEZN
b3ZlKGFyZ3VtZW50VHlwZSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1l
bnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+KFdURk1vdmUoYXJndW1lbnRUeXBlKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCk7CiAgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFi
bGVEZWNsYXJhdGlvbikpOwogICAgICAgICAgICAgICAgIGF1dG8gcmV0dXJuVHlwZSA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQu
b3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UsIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xW
aXNpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlz
aXRvci5jcHAKaW5kZXggZWQyZThjMDA1MmQ2ZGZlOWJkMDdiYWY3NjQ5ZDhjZTQ4YzliMDliYi4u
MmYyMDE1MmNhYjdhZDFjNzgyNmJhM2QyMTUxN2E0ZWMwOWVhZWVhZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCkBAIC01
MzIsNyArNTMyLDcgQEAgdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlRyYXAmKQogdm9pZCBWaXNp
dG9yOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudCkKIHsKICAgICBmb3IgKGF1dG8mIHZhcmlhYmxlRGVjbGFyYXRp
b24gOiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC52YXJpYWJsZURlY2xhcmF0aW9ucygp
KQotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uLmdldCgpKTsKIH0KIAog
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQpAQCAtNTg5LDE3
ICs1ODksMTcgQEAgdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9u
JiBsb2dpY2FsTm90RXhwcmVzc2lvbikKIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCiB7
Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZh
bHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLmxlZnRWYWx1ZSgpKTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogfQogCiB2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhbHVlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkpOwogICAgIGlmIChyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRl
eCAzNjc1ZTAwNGI4NjczZTlkNjhiMWM2YmQ4ZDQ2OGEwZDRkNDEyNTdlLi5jZjc0NmNlYTJlOGNi
ZDFjMTNlMjBjOTYxNTUxMDY5ZTczMjAzYzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMzQ4LDYgKzM0
OCw3IEBAIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAKIE1vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwCiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByb3BlcnR5UmVzb2x2ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFUuY3BwCiBNb2R1bGVz
L3dlYmdwdS9XZWJHUFVBZGFwdGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3Vw
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGY2OWNmZjIzMjEyOGNiYmU4ZWE1Y2MxZGVlODQwNzBjYjZmODcwMWUuLjJlZDc3
YjJhNjIyOTIxYmNhNTMyMmE5YmFlYzRkOWZjNjBkNDcxZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYzOTAsNiArNjM5MCw4
IEBACiAJCTFDQTBDMkVDMjFFRUQ2RjYwMEExMTg2MCAvKiBXSExTTExpdGVyYWxUeXBlQ2hlY2tl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTExpdGVyYWxUeXBlQ2hlY2tlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQTE5RTAzMERDMjU1OTUwMDY1QTk5NCAvKiBF
dmVudExvb3BNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBF
dmVudExvb3BNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQTE5RTE1MERD
MjU1Q0EwMDY1QTk5NCAvKiBFdmVudExvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXZlbnRMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQUE4MkY2
MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUNBQTgyRjcyMjQyQUUwNTAwRTg0QkJCIC8qIFdITFNMUHJvcGVydHlSZXNvbHZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFByb3BlcnR5UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0N0UwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9i
amVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0N0YwQTZDNDA1MjAwQUJFMDZF
IC8qIFdlYlNjcmlwdE9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYlNjcmlwdE9iamVjdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUNBRjM0ODAwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU0MDIsNiArMjU0MDQsOCBAQAogCQkJCUMy
NEE1N0JBMjFGRUFGRUEwMDRDNkREMSAvKiBXSExTTFByZXBhcmUuY3BwICovLAogCQkJCUMyNEE1
N0JCMjFGRUFGRUEwMDRDNkREMSAvKiBXSExTTFByZXBhcmUuaCAqLywKIAkJCQlDMjFCRjczQTIx
Q0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCisJCQkJMUNBQTgyRjYyMjQyQUUw
NTAwRTg0QkJCIC8qIFdITFNMUHJvcGVydHlSZXNvbHZlci5jcHAgKi8sCisJCQkJMUNBQTgyRjcy
MjQyQUUwNTAwRTg0QkJCIC8qIFdITFNMUHJvcGVydHlSZXNvbHZlci5oICovLAogCQkJCTFDQTBD
MkUwMjFFRUI1RjUwMEExMTg2MCAvKiBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3BwICovLAogCQkJ
CTFDQTBDMkRFMjFFRUI1RjQwMEExMTg2MCAvKiBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuaCAqLywK
IAkJCQlDMjM0QTlBRDIxRTkyQzE5MDAzQzk4NEQgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tl
ci5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCmluZGV4IDhm
YjRhMjZjYTQ4YjU0Y2FhYjE4N2RiMjllMzQ2OWEzODUwNDQwNWYuLmUwMjkyYjhmNTQ0ZDRlYWNk
YmExNzlmYzBiMjM0ZTRlYzNhYTczZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGlu
ZU1ldGFsLm1tCkBAIC0yNjMsNiArMjYzLDggQEAgc3RhdGljIGJvb2wgdHJ5U2V0V0hMU0xGdW5j
dGlvbnNGb3JQaXBlbGluZURlc2NyaXB0b3IoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb24KICAg
ICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgV1RGTG9nQWx3YXlz
KCJNZXRhbCBTb3VyY2U6ICVzIiwgcmVzdWx0LT5tZXRhbFNvdXJjZS51dGY4KCkuZGF0YSgpKTsK
KwogICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwogICAgIGF1dG8gbGlicmFyeSA9IGFkb3B0TlMo
W2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5ld0xpYnJhcnlXaXRoU291cmNlOnJlc3VsdC0+bWV0
YWxTb3VyY2Ugb3B0aW9uczpuaWwgZXJyb3I6JmVycm9yXSk7CiAgICAgQVNTRVJUKGxpYnJhcnkp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdC1leHByZXNzaW9ucy5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdC1leHByZXNzaW9ucy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlmM2RiN2I5MmUwYTE5OTJmZGNlNTVmM2ZiMzU3YzhkMmM4MGU5MGQKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90LWV4cHJlc3Npb25zLmh0bWwK
QEAgLTAsMCArMSwxMjQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRl
eE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hh
ZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZs
b2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkp
IHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9u
OworICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Zy
YWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkg
OiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAx
LjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIg
PSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNl
ID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1
bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hM
U0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2Ug
PSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9Owor
ICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25z
dCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUi
fTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9
OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFC
bGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5B
TEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3Qg
YXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgaW5wdXRTbG90OiAwLCBmb3JtYXQ6ICJm
bG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRp
b246IDEsIGlucHV0U2xvdDogMCwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBj
b25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlu
cHV0MCA9IHtpbnB1dFNsb3Q6IDAsIHN0cmlkZTogMjAgfTsKKyAgICBjb25zdCBpbnB1dHMgPSBb
aW5wdXQwXTsKKyAgICBjb25zdCBpbnB1dFN0YXRlID0ge2luZGV4Rm9ybWF0OiAidWludDMyIiwg
YXR0cmlidXRlcywgaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0
b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZv
cm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5
b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9w
b2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRl
LCBpbnB1dFN0YXRlLCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Cisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlw
dG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2Fn
ZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIw
RGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQg
dmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbOV0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7
CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6
ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2Uu
VU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVy
Lm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3Vy
Y2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7
CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNp
emU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3Vy
Y2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5
b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAg
IGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAg
ICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9y
bSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3
YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4u
Z2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1
dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVy
ID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0g
e3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBb
e2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2Fk
T3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNv
bnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NE
ZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9Owor
ICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQ
YXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBl
bGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3Vw
KDAsIGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygw
LCBbdmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdygzLCAx
LCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29t
bWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1
ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370361</attachid>
            <date>2019-05-21 17:56:27 -0700</date>
            <delta_ts>2019-05-21 18:34:39 -0700</delta_ts>
            <desc>Simple dot expressions work</desc>
            <filename>bug-195925-20190521175626.patch</filename>
            <type>text/plain</type>
            <size>163447</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDcwNzViODZlMzBmMjk0
ZjYxODM2YjM5NThkZTEzYjQ4MDI4MzA0MS4uZjhkZDE0YmYzYmRjODE3MWU1ZDI0MTZlNWI2NGNh
ZjkwZTU2MWRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE5LTA1LTIxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBwcm9wZXJ0eSByZXNvbHZlciBpcyB0aGUgdGhpbmcgdGhh
dCByZXBsYWNlcyBkb3QgZXhwcmVzc2lvbnMsIGluZGV4IGV4cHJlc3Npb25zLCBhbmQKKyAgICAg
ICAgcmVhZC1tb2RpZnktd3JpdGUgZXhwcmVzc2lvbnMgd2l0aCBjYWxscyB0byBnZXR0ZXJzLCBz
ZXR0ZXJzLCBhbmQgYW5kZXJzLiBUaGlzIHBhdGNoIGRvZXNuJ3QKKyAgICAgICAgZnVsbHkgaW1w
bGVtZW50IHRoZSBwcm9wZXJ0eSByZXNvbHZlciwgYnV0IGltcGxlbWVudHMgZW5vdWdoIGZvciBz
aW1wbGUgZG90IGV4cHJlc3Npb25zIHRvCisgICAgICAgIHdvcmsuIFRoaXMgaXMgZW5vdWdoIGZv
ciB1cyB0byBiZSBhYmxlIHRvIHRlc3QgbW9zdCBvZiB0aGUgcmVzdCBvZiB0aGUgY29tcGlsZXIu
IEluZGV4CisgICAgICAgIGV4cHJlc3Npb25zIGFuZCByZWFkLW1vZGlmeS13cml0ZSBleHByZXNz
aW9ucyBhcmUgbm90IGZ1bGx5IGluY2x1ZGVkIGluIHRoaXMgcGF0Y2gsIGFuZCB3aWxsCisgICAg
ICAgIGJlIGZpbmlzaGVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWxzbyBhZGRzIHRoZSB0aGlyZCBjb25jZXB0IG9mIHZhbHVlLW5lc3MuIFdlIG5vdyBoYXZl
IHJpZ2h0IHZhbHVlcywgbGVmdCB2YWx1ZXMsCisgICAgICAgIGFuZCBhYnN0cmFjdCBsZWZ0IHZh
bHVlcyAoZm9yIHRoaW5ncyB3aGljaCBoYXZlIHNldHRlcnMgYnV0IGhhdmUgbm8gYWRkcmVzcyku
IFRoaXMgYWRkaXRpb24KKyAgICAgICAgaXMgcmVxdWlyZWQgZm9yIHRoZSBhbmFseXNpcyB0aGUg
cHJvcGVydHkgcmVzb2x2ZXIgcGVyZm9ybXMuIFRoaXMgY29uY2VwdCBpcyBhbHNvIHByZXNlbnQg
aW4KKyAgICAgICAgdGhlIHNwZWMuCisKKyAgICAgICAgVGVzdDogd2ViZ3B1L3dobHNsLWRvdC1l
eHByZXNzaW9ucy5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xBZGRyZXNzU3BhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGVBbm5v
dGF0aW9uOjpUeXBlQW5ub3RhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpU
eXBlQW5ub3RhdGlvbjo6bGVmdEFkZHJlc3NTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6aXNSaWdodFZhbHVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGVBbm5vdGF0aW9uOjp2aXNpdCk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6dHlwZUFubm90YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6c2V0VHlwZUFubm90YXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6YWRkcmVzc1Nw
YWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJl
c3Npb246OnNldEFkZHJlc3NTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6TWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNU
OjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uOjpsZWZ0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6bFZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9p
bnRlckV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbjo6TWFrZVBvaW50ZXJFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uOjpsZWZ0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uOjpsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkNoZWNrZXI6OmFzc2lnblR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2Vy
OjpyZWN1cnNlQW5kR2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6
Z2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6YXNzaWduVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6Zm9yd2FyZFR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpDaGVja2VyOjpmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaDoKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OlZpc2l0b3I6OnZpc2l0KToKKwogMjAxOS0wNS0yMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIGZvbnQtb3B0aWNhbC1zaXppbmcgYXBwbGll
cyB0aGUgd3JvbmcgdmFyaWF0aW9uIHZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCmluZGV4IDRh
NmQ3YzQ2OTVkYzRjYWM4MjkwNTRlNDA1NTU3ODc2NTE3NWY4NjMuLmQ0MzZkNjg5Yzc4ZTA0MGM1
ZmRkY2UzOTYwZjM4ZjQzMDE1MGIyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICs0
Myw3MCBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAog
fTsKIAorc3RydWN0IExlZnRWYWx1ZSB7CisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsK
K307CisKK3N0cnVjdCBBYnN0cmFjdExlZnRWYWx1ZSB7Cit9OworCitzdHJ1Y3QgUmlnaHRWYWx1
ZSB7Cit9OworCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3Nhcnku
CitjbGFzcyBUeXBlQW5ub3RhdGlvbiB7CitwdWJsaWM6CisgICAgVHlwZUFubm90YXRpb24oKQor
ICAgICAgICA6IG1fZW1wdHkodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRp
b24oTGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAg
ICBUeXBlQW5ub3RhdGlvbihBYnN0cmFjdExlZnRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIo
dikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oUmlnaHRWYWx1ZSB2KQorICAg
ICAgICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oY29u
c3QgVHlwZUFubm90YXRpb24mKSA9IGRlZmF1bHQ7CisgICAgVHlwZUFubm90YXRpb24oVHlwZUFu
bm90YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgVHlwZUFubm90YXRpb24mIG9wZXJh
dG9yPShjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBlQW5ub3RhdGlv
biYgb3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9uJiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIE9w
dGlvbmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFkZHJlc3NTcGFjZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoIW1fZW1wdHkpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxMZWZ0VmFsdWU+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PExlZnRW
YWx1ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIH0KKworICAgIGJvb2wgaXNSaWdodFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJpZ2h0VmFsdWU+KG1faW5uZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBW
aXNpdG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdU
Rjo6dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0cmFj
dExlZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigpKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9l
bXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW5uZXIpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBWYXJpYW50PExlZnRWYWx1ZSwgQWJzdHJhY3RMZWZ0VmFsdWUs
IFJpZ2h0VmFsdWU+IG1faW5uZXI7CisgICAgYm9vbCBtX2VtcHR5IHsgZmFsc2UgfTsKK307CisK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgKaW5kZXggYjEyMWZi
NmMxZTFkMTc5MjYxNWQ5YmIwMjc0ZmUyMzU4OGE3ZjJiNS4uNzk0MTVlMmZmMzAzMDI5MTA2YjVi
ZjQxOTc2N2ViNTk5OGYwZTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lv
bi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24mIGxlZnQoKSB7
IHJldHVybiBtX2xlZnQ7IH0KICAgICBFeHByZXNzaW9uJiByaWdodCgpIHsgcmV0dXJuIG1fcmln
aHQ7IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiB0YWtlUmlnaHQoKSB7IHJldHVybiBX
VEZNb3ZlKG1fcmlnaHQpOyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+
IG1fbGVmdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBiN2FiMjBjZWQyYzQ1M2Y5NWYxYzJlM2Vm
YzI4MWZkYTQ4ZTVjM2FkLi4zMThhODEwNjE2M2RiODdlODVlZjQ4MWVjODg3ZDlkNmM1YzI5Y2Mx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC02NSwxMiArNjUsMTIgQEAgcHVibGljOgogICAgICAg
ICBtX3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAgIH0KIAotICAgIGNvbnN0IE9wdGlvbmFsPEFk
ZHJlc3NTcGFjZT4mIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNl
OyB9CisgICAgY29uc3QgVHlwZUFubm90YXRpb24qIHR5cGVBbm5vdGF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlQW5ub3RhdGlvbiA/ICYqbV90eXBlQW5ub3RhdGlvbiA6IG51bGxwdHI7IH0K
IAotICAgIHZvaWQgc2V0QWRkcmVzc1NwYWNlKE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFkZHJl
c3NTcGFjZSkKKyAgICB2b2lkIHNldFR5cGVBbm5vdGF0aW9uKFR5cGVBbm5vdGF0aW9uJiYgdHlw
ZUFubm90YXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoIW1fYWRkcmVzc1NwYWNlKTsKLSAg
ICAgICAgbV9hZGRyZXNzU3BhY2UgPSBhZGRyZXNzU3BhY2U7CisgICAgICAgIEFTU0VSVCghbV90
eXBlQW5ub3RhdGlvbik7CisgICAgICAgIG1fdHlwZUFubm90YXRpb24gPSBXVEZNb3ZlKHR5cGVB
bm5vdGF0aW9uKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBc3NpZ25tZW50RXhwcmVz
c2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIE9wdGlvbmFsPFVuaXF1
ZVJlZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsKLSAgICBPcHRpb25hbDxBZGRyZXNzU3BhY2U+IG1f
YWRkcmVzc1NwYWNlOworICAgIE9wdGlvbmFsPFR5cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5vdGF0
aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKaW5kZXggNjMxNmY1NGUxNjMyNmI0YTQ4M2ZhODcy
ZTFmNDdiYjA0OGVkZjg4ZS4uNzcwY2Y4YmE5ZjI1MjcyNmY2OWMxYWU2ZGU1ZWE0YTViMTJiZjc3
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24u
aApAQCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBNYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVm
PEV4cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24o
TGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUp
CiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFs
dWUoV1RGTW92ZShsVmFsdWUpKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZh
bHVlKSkKICAgICB7CiAgICAgfQogCkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBpc01ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xWYWx1
ZTsgfQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9
CiAKIHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAgIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFT
VApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAppbmRleCA3YjA1MmI2ZDVm
Mjg4N2Y1OTJkZjQ0ZmQ5NDA5YzRmYTk1MjAzYWE4Li4zNDYwNGQ1NmFlY2M0YjYzMGQ3YTdlNmY3
OTZiOWM4NTM0N2NlMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24u
aApAQCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZVBvaW50ZXJF
eHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIE1ha2VQb2ludGVy
RXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYm
IGxWYWx1ZSkKKyAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
LCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lv
bihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQor
ICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVlKSkKICAgICB7CiAgICAgfQog
CkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01ha2VQb2ludGVyRXhw
cmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Np
b24mIGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhwcmVzc2lvbiYgbGVmdFZh
bHVlKCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8
RXhwcmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdFZh
bHVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5oCmluZGV4IDJlYzM0ZTE1ZDhhNDBlNWFkMmUyYmY4OTY4MGMyMWMz
MzQ0Yzk5ODguLjE1NzA5MmQ2NTBmYWNlYTAyOWI5YjE3NzYwZDgwNTA1N2UxYWRkOTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4
ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKQEAgLTU5LDI3ICs2MCw1NiBAQCBw
dWJsaWM6CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+JiBwb3NzaWJsZUdldE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9zc2libGVHZXRP
dmVybG9hZHM7IH0KICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRl
Y2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlU2V0T3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9wb3NzaWJs
ZVNldE92ZXJsb2FkczsgfQogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVBbmRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bv
c3NpYmxlQW5kT3ZlcmxvYWRzOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rp
b24oKSB7IHJldHVybiBtX2dldEZ1bmN0aW9uOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiog
YW5kRnVuY3Rpb24oKSB7IHJldHVybiBtX2FuZEZ1bmN0aW9uOyB9CisgICAgRnVuY3Rpb25EZWNs
YXJhdGlvbiogdGhyZWFkQW5kRnVuY3Rpb24oKSB7IHJldHVybiBtX3RocmVhZEFuZEZ1bmN0aW9u
OyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0RnVuY3Rpb24oKSB7IHJldHVybiBtX3Nl
dEZ1bmN0aW9uOyB9CiAKICAgICB2b2lkIHNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKGNvbnN0IFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3Zl
cmxvYWRzKQogICAgIHsKICAgICAgICAgbV9wb3NzaWJsZUdldE92ZXJsb2FkcyA9IG92ZXJsb2Fk
czsKICAgICB9CisgICAgdm9pZCBzZXRQb3NzaWJsZUFuZE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2Fk
cykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVBbmRPdmVybG9hZHMgPSBvdmVybG9hZHM7Cisg
ICAgfQogICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCiAg
ICAgewogICAgICAgICBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzID0gb3ZlcmxvYWRzOwogICAgIH0K
LSAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQorCisgICAg
dm9pZCBzZXRHZXRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBnZXRGdW5jdGlvbikKICAg
ICB7Ci0gICAgICAgIG1fcG9zc2libGVBbmRPdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgICAg
IG1fZ2V0RnVuY3Rpb24gPSBnZXRGdW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldEFuZEZ1
bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAg
bV9hbmRGdW5jdGlvbiA9IGFuZEZ1bmN0aW9uOworICAgIH0KKworICAgIHZvaWQgc2V0VGhyZWFk
QW5kRnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogdGhyZWFkQW5kRnVuY3Rpb24pCisgICAg
eworICAgICAgICBtX3RocmVhZEFuZEZ1bmN0aW9uID0gdGhyZWFkQW5kRnVuY3Rpb247CisgICAg
fQorCisgICAgdm9pZCBzZXRTZXRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5j
dGlvbikKKyAgICB7CisgICAgICAgIG1fc2V0RnVuY3Rpb24gPSBzZXRGdW5jdGlvbjsKICAgICB9
CiAKICAgICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gbV9iYXNlOyB9CisgICAgVW5pcXVl
UmVmPEV4cHJlc3Npb24+JiYgdGFrZUJhc2UoKSB7IHJldHVybiBXVEZNb3ZlKG1fYmFzZSk7IH0K
IAogcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9iYXNlOwogICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3Np
YmxlR2V0T3ZlcmxvYWRzOwogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzOwogICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxl
QW5kT3ZlcmxvYWRzOworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fZ2V0RnVuY3Rpb24geyBu
dWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9hbmRGdW5jdGlvbiB7IG51bGxw
dHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX3RocmVhZEFuZEZ1bmN0aW9uIHsgbnVs
bHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fc2V0RnVuY3Rpb24geyBudWxscHRy
IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24uaAppbmRleCA3OWQ4ZDBmNzA4ZThkMDU3ODMxMmM4MTc5NGU4OGVk
YWYzNDg3Y2Y5Li4yMDlhNTI2NTFlN2ViM2ViNWE5Y2MxZjZiYzE3MDJiZWI2NTgyYmM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCkBAIC00MSwxMSAr
NDEsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1QgewogCiAvKgotICogIDEu
IEV2YWx1YXRlIG1fbFZhbHVlCisgKiAgMS4gRXZhbHVhdGUgbV9sZWZ0VmFsdWUKICAqICAyLiBB
c3NpZ24gdGhlIHJlc3VsdCB0byBtX29sZFZhbHVlCiAgKiAgMy4gRXZhbHVhdGUgbV9uZXdWYWx1
ZUV4cHJlc3Npb24KICAqICA0LiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX25ld1ZhbHVlCi0gKiAg
NS4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9sVmFsdWUKKyAqICA1LiBBc3NpZ24gdGhlIHJlc3Vs
dCB0byBtX2xlZnRWYWx1ZQogICogIDYuIEV2YWx1YXRlIG1fcmVzdWx0RXhwcmVzc2lvbgogICog
IDcuIFJldHVybiB0aGUgcmVzdWx0CiAgKi8KQEAgLTczLDM4ICs3Myw0MSBAQCBwdWJsaWM6CiAK
ICAgICBVbmlxdWVSZWY8VmFyaWFibGVSZWZlcmVuY2U+IG9sZFZhcmlhYmxlUmVmZXJlbmNlKCkK
ICAgICB7Ci0gICAgICAgIC8vIFRoZSBvbmx5IHJlYXNvbiB3ZSBkb24ndCBnZXQgdXNlLWFmdGVy
LWZyZWVzIGlzIHRoZSBmYWN0IHRoYXQgZXZlcnkgaW5zdGFuY2Ugb2YgUmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbiBpcyBhbGxvY2F0ZWQgb24gdGhlIGhlYXAuCiAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJlbmNlPihWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChtX29s
ZFZhbHVlKSk7CiAgICAgfQogCiAgICAgVW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJlbmNlPiBuZXdW
YXJpYWJsZVJlZmVyZW5jZSgpCiAgICAgewotICAgICAgICAvLyBUaGUgb25seSByZWFzb24gd2Ug
ZG9uJ3QgZ2V0IHVzZS1hZnRlci1mcmVlcyBpcyB0aGUgZmFjdCB0aGF0IGV2ZXJ5IGluc3RhbmNl
IG9mIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24gaXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLgog
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxWYXJpYWJsZVJlZmVyZW5jZT4oVmFyaWFibGVS
ZWZlcmVuY2U6OndyYXAobV9uZXdWYWx1ZSkpOwogICAgIH0KIAogICAgIGJvb2wgaXNSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9sVmFsdWU7IH0KKyAgICBFeHByZXNz
aW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogICAgIFZhcmlhYmxlRGVj
bGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQogICAgIFZhcmlhYmxl
RGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9uZXdWYWx1ZTsgfQogICAgIEV4cHJl
c3Npb24qIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJuIG1fbmV3VmFsdWVFeHByZXNzaW9u
ID8gJiptX25ld1ZhbHVlRXhwcmVzc2lvbiA6IG51bGxwdHI7IH0KICAgICBFeHByZXNzaW9uKiBy
ZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gbV9yZXN1bHRFeHByZXNzaW9uID8gJiptX3Jlc3Vs
dEV4cHJlc3Npb24gOiBudWxscHRyOyB9CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgdGFr
ZUxlZnRWYWx1ZSgpIHsgcmV0dXJuIFdURk1vdmUobV9sZWZ0VmFsdWUpOyB9CisgICAgVW5pcXVl
UmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+JiYgdGFrZU9sZFZhbHVlKCkgeyByZXR1cm4gV1RGTW92
ZShtX29sZFZhbHVlKTsgfQorICAgIFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPiYmIHRh
a2VOZXdWYWx1ZSgpIHsgcmV0dXJuIFdURk1vdmUobV9uZXdWYWx1ZSk7IH0KKyAgICBPcHRpb25h
bDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYgdGFrZU5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0
dXJuIFdURk1vdmUobV9uZXdWYWx1ZUV4cHJlc3Npb24pOyB9CisgICAgT3B0aW9uYWw8VW5pcXVl
UmVmPEV4cHJlc3Npb24+PiYmIHRha2VSZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gV1RGTW92
ZShtX3Jlc3VsdEV4cHJlc3Npb24pOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8Y2xhc3Mg
VSwgY2xhc3MuLi4gQXJncz4gZnJpZW5kIFVuaXF1ZVJlZjxVPiBXVEY6Om1ha2VVbmlxdWVSZWYo
QXJncyYmLi4uKTsKIAotICAgIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2Vu
JiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbFZhbHVlKQorICAgIFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lv
bj4gbGVmdFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oTGV4ZXI6OlRva2VuKG9yaWdpbikp
Ci0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQotICAgICAgICAsIG1fb2xkVmFs
dWUoTGV4ZXI6OlRva2VuKG9yaWdpbiksIFF1YWxpZmllcnMoKSwgV1RGOjpudWxsb3B0LCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpCi0gICAgICAgICwgbV9uZXdWYWx1ZShX
VEZNb3ZlKG9yaWdpbiksIFF1YWxpZmllcnMoKSwgV1RGOjpudWxsb3B0LCBTdHJpbmcoKSwgV1RG
OjpudWxsb3B0LCBXVEY6Om51bGxvcHQpCisgICAgICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShs
ZWZ0VmFsdWUpKQorICAgICAgICAsIG1fb2xkVmFsdWUobWFrZVVuaXF1ZVJlZjxWYXJpYWJsZURl
Y2xhcmF0aW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxv
cHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpCisgICAgICAgICwgbV9u
ZXdWYWx1ZShtYWtlVW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUob3JpZ2lu
KSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCkpCiAgICAgewogICAgIH0KIAotICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBt
X2xWYWx1ZTsKLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7Ci0gICAgVmFyaWFi
bGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xl
ZnRWYWx1ZTsKKyAgICBVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4gbV9vbGRWYWx1ZTsK
KyAgICBVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4gbV9uZXdWYWx1ZTsKICAgICBPcHRp
b25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IG1fbmV3VmFsdWVFeHByZXNzaW9uOwogICAgIE9w
dGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9yZXN1bHRFeHByZXNzaW9uOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZh
cmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAppbmRleCAxOTgyNGY5NDA1NGU0YjNiN2Q3
Y2YyNGY2M2MwMTE5YjhhNjNmNGZiLi5lNTBhYWFkZGU3ODhmNGVkODllOWMyNmJmNDQ2MzljMjE0
MDQ5Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCkBAIC03OSw3ICs3
OSw3IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiBtX2lu
aXRpYWxpemVyOwogfTsKIAotdXNpbmcgVmFyaWFibGVEZWNsYXJhdGlvbnMgPSBWZWN0b3I8VmFy
aWFibGVEZWNsYXJhdGlvbj47Cit1c2luZyBWYXJpYWJsZURlY2xhcmF0aW9ucyA9IFZlY3RvcjxV
bmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4+OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgKaW5k
ZXggZThlMWZjN2Y1YjIzOGRiYjA0MDNlOWY0MDI3ODA0YTcwYTdlODgxYy4uMDlhMDJkMDFmNDk2
ODRhYjk2M2VmODcyNWIwNDUyZDVhMzhlZGY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xW
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFj
ZSBBU1QgewogCiBjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCA6IHB1YmxpYyBT
dGF0ZW1lbnQgewogcHVibGljOgotICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KExl
eGVyOjpUb2tlbiYmIG9yaWdpbiwgVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+JiYgdmFyaWFi
bGVEZWNsYXJhdGlvbnMpCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoTGV4ZXI6
OlRva2VuJiYgb3JpZ2luLCBWYXJpYWJsZURlY2xhcmF0aW9ucyYmIHZhcmlhYmxlRGVjbGFyYXRp
b25zKQogICAgICAgICA6IFN0YXRlbWVudChXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV92
YXJpYWJsZURlY2xhcmF0aW9ucyhXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb25zKSkKICAgICB7
CkBAIC01MywxMCArNTMsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1ZhcmlhYmxlRGVjbGFy
YXRpb25zU3RhdGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
VmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+JiB2YXJpYWJsZURlY2xhcmF0aW9ucygpIHsgcmV0
dXJuIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7IH0KKyAgICBWZWN0b3I8VW5pcXVlUmVmPFZhcmlh
YmxlRGVjbGFyYXRpb24+PiYgdmFyaWFibGVEZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX3Zhcmlh
YmxlRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFZhcmlhYmxlRGVjbGFy
YXRpb24+IG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnMg
bV92YXJpYWJsZURlY2xhcmF0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRy
eVBvaW50U2NhZmZvbGRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCmluZGV4IDYyNGM1NjJlNTFj
YTYwYzZlZjhkZTI4YWZlYmFjNTE0ZjJiZTBkYmQuLjU0OWQ1ZGNmMWIzN2FmY2EzY2U2ODExYzQ1
ZjNjOWM0YWJhNzIyNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9s
ZGluZy5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVGb3JTZW1h
bnRpYyhBU1Q6OlNlbWFudGljJiBzZW1hbnRpYykKICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oc2VtYW50aWMpKQogICAgICAgICByZXR1cm4gYXR0
cmlidXRlRm9yU2VtYW50aWMoV1RGOjpnZXQ8QVNUOjpCdWlsdEluU2VtYW50aWM+KHNlbWFudGlj
KSk7CiAgICAgYXV0byYgc3RhZ2VJbk91dFNlbWFudGljID0gV1RGOjpnZXQ8QVNUOjpTdGFnZUlu
T3V0U2VtYW50aWM+KHNlbWFudGljKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiW1t1c2VyKCIs
IHN0YWdlSW5PdXRTZW1hbnRpYy5pbmRleCgpLCAiKV1dIik7CisgICAgcmV0dXJuIG1ha2VTdHJp
bmcoIltbdXNlcih1c2VyIiwgc3RhZ2VJbk91dFNlbWFudGljLmluZGV4KCksICIpXV0iKTsKIH0K
IAogRW50cnlQb2ludFNjYWZmb2xkaW5nOjpFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50cmluc2lj
cywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEVudHJ5UG9pbnRJdGVtcyYgZW50cnlQb2ludEl0ZW1z
LCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBsYXlvdXQs
IHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKQpAQCAt
MTg4LDkgKzE4OCw5IEBAIFN0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6Om1hbmdsZWRJbnB1
dFBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGgpCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAg
IEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiogc3RydWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVtpXS5uYW1lKCkgPT0gcGF0aFswXSkgeworICAgICAgICBpZiAobV9mdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLT5uYW1lKCkgPT0gcGF0aFswXSkgewogICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0pOwotICAg
ICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVy
cygpW2ldLnR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUg
PSBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKS0+dW5pZnlOb2Rl
KCk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKICAg
ICAgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4o
dW5pZnlOb2RlKTsKICAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0
aW9uPihuYW1lZFR5cGUpKQpAQCAtMjQ5LDcgKzI0OSw3IEBAIFN0cmluZyBFbnRyeVBvaW50U2Nh
ZmZvbGRpbmc6OnVucGFja1Jlc291cmNlc0FuZE5hbWVkQnVpbHRJbnMoKQogewogICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVu
Y3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Km1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpLCAnICcsIG1fcGFy
YW1ldGVyVmFyaWFibGVzW2ldLCAiO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRl
ZmluaXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpLCAnICcsIG1fcGFyYW1ldGVyVmFyaWFi
bGVzW2ldLCAiO1xuIikpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheW91dC5z
aXplKCk7ICsraSkgewogICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IG1fbmFtZWRCaW5kR3Jv
dXBzW2ldLnZhcmlhYmxlTmFtZTsKQEAgLTQwMyw4ICs0MDMsOCBAQCBTdHJpbmcgRnJhZ21lbnRF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5cGVzKCkKICAgICBmb3IgKGF1dG8mIG5hbWVk
U3RhZ2VJbiA6IG1fbmFtZWRTdGFnZUlucykgewogICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFt
ZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbV9lbnRyeVBvaW50SXRlbXMuaW5w
dXRzW25hbWVkU3RhZ2VJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zXS51bm5hbWVkVHlwZSk7CiAg
ICAgICAgIGF1dG8gZWxlbWVudE5hbWUgPSBuYW1lZFN0YWdlSW4uZWxlbWVudE5hbWU7Ci0gICAg
ICAgIGF1dG8gYXR0cmlidXRlSW5kZXggPSBuYW1lZFN0YWdlSW4uZWxlbWVudE5hbWU7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtYW5nbGVkVHlwZU5h
bWUsICcgJywgZWxlbWVudE5hbWUsICIgW1t1c2VyKCIsIGF0dHJpYnV0ZUluZGV4LCAiKV1dO1xu
IikpOworICAgICAgICBhdXRvIGF0dHJpYnV0ZUluZGV4ID0gbmFtZWRTdGFnZUluLmF0dHJpYnV0
ZUluZGV4OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwg
bWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAiIFtbdXNlcih1c2VyIiwgYXR0cmli
dXRlSW5kZXgsICIpXV07XG4iKSk7CiAgICAgfQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9
O1xuXG4iKTsKIApAQCAtNDQ2LDcgKzQ0Niw3IEBAIFN0cmluZyBGcmFnbWVudEVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6dW5wYWNrKCkKICAgICBmb3IgKGF1dG8mIG5hbWVkU3RhZ2VJbiA6IG1fbmFt
ZWRTdGFnZUlucykgewogICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMuaW5w
dXRzW25hbWVkU3RhZ2VJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zXS5wYXRoOwogICAgICAgICBh
dXRvJiBlbGVtZW50TmFtZSA9IG5hbWVkU3RhZ2VJbi5lbGVtZW50TmFtZTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAiID0g
IiwgbV9zdGFnZUluU3RydWN0TmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIpKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkSW5wdXRQYXRoKHBhdGgp
LCAiID0gIiwgbV9zdGFnZUluUGFyYW1ldGVyTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIp
KTsKICAgICB9CiAKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5j
dGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAppbmRleCAyZmMxNDY1ODYxNmM5ODljYTIxN2M2OTI4
MmFlODZkYzQ4NzE5ZjA4Li4wOWQ2OWIxMDNhZDE2MzlhNTI5NjQyMmY2YmJhNDdiNThhOTI4YWQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEZ1bmN0aW9uV3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAo
aSkKICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKTsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpKTsKICAgICB9CiAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwogfQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uCiAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlck5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJp
YWJsZU1hcHBpbmcuYWRkKCZwYXJhbWV0ZXIsIHBhcmFtZXRlck5hbWUpOwogICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKnBhcmFtZXRlci50eXBlKCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKnBhcmFtZXRlci0+dHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJOYW1l
KSk7CiAgICAgICAgIH0KICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7XG4iKTsK
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsK
QEAgLTQ4NiwxMiArNDg2LDIxIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpCiAKIHZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBh
c3NpZ25tZW50RXhwcmVzc2lvbikKIHsKKyAgICBpZiAoaXM8QVNUOjpEZXJlZmVyZW5jZUV4cHJl
c3Npb24+KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSkpIHsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihhc3NpZ25tZW50
RXhwcmVzc2lvbi5sZWZ0KCkpLnBvaW50ZXIoKSk7CisgICAgICAgIGF1dG8gbGVmdE5hbWUgPSBt
X3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50
RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgYXV0byByaWdodE5hbWUgPSBtX3N0YWNrLnRh
a2VMYXN0KCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygnKics
IGxlZnROYW1lLCAiID0gIiwgcmlnaHROYW1lLCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFw
cGVuZChyaWdodE5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOwogICAgIGF1dG8gbGVmdE5hbWUg
PSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRF
eHByZXNzaW9uLnJpZ2h0KCkpOwogICAgIGF1dG8gcmlnaHROYW1lID0gbV9zdGFjay50YWtlTGFz
dCgpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhsZWZ0TmFtZSwgIiA9
ICIsIHJpZ2h0TmFtZSwgIjtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZChsZWZ0TmFtZSk7Cisg
ICAgbV9zdGFjay5hcHBlbmQocmlnaHROYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQpAQCAt
NTcwLDcgKzU3OSw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzCiAKIHZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24m
IG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICBh
dXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICBBU1NFUlQobWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUg
PSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKQEAgLTU4Nyw3ICs1OTYsNyBAQCB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uJiBtYWtlQXJyYQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsKLSAg
ICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsK
ICAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICBBU1NFUlQobWFrZVBv
aW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9
IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1
bmN0aW9uV3JpdGVyLmNwcAppbmRleCA2OTcyZTk4OTA1MGE5YTFiN2RhODExYTg3YzMzYzMzZDFl
NGVkMjljLi5lZGU1NzZmZGJiMDZkNWExZGU5NGFkM2VlZDgyZjJmODA3MzA4YTY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2
ZUZ1bmN0aW9uV3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMTExLDggKzExMSw4
IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0g
ICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCktPnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvJiBwYXJh
bWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5
cGUoKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4ocGFyYW1l
dGVyVHlwZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHBhcmFtZXRlck5hbWVkVHlwZSA9IGRvd25j
YXN0PEFTVDo6TmFtZWRUeXBlPihwYXJhbWV0ZXJUeXBlKTsKICAgICAgICAgICAgIGlmIChpczxB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocGFyYW1ldGVyTmFtZWRUeXBlKSkgewpAQCAtMTM0
LDcgKzEzNCw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLnZhbHVlIikgewogICAgICAgICBB
U1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEp
OwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUo
KSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5
cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1
dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIikpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHN0YXRpY19j
YXN0PCIsIG1ldGFsUmV0dXJuTmFtZSwgIj4oeCk7XG4iKSk7CkBAIC0xNDIsMTEgKzE0MiwxMiBA
QCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBBdXRob3JzIGNhbiBtYWtlIGEgc3Ry
dWN0IGZpZWxkIG5hbWVkICJsZW5ndGgiIHRvby4gQXV0b2dlbmVyYXRlZCBnZXR0ZXJzIGZvciB0
aG9zZSBzaG91bGRuJ3QgdGFrZSB0aGlzIGNvZGVwYXRoLgogICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIikgewogICAgICAgICBBU1NF
UlRfVU5VU0VEKGludHJpbnNpY3MsIG1hdGNoZXMobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCksIGludHJpbnNpY3MudWludFR5cGUoKSkpOwogICAgICAgICBBU1NFUlQobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRv
IG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1
dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCktPnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBl
ID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5p
ZnlOb2RlKCk7CiAgICAgICAgIEFTU0VSVChpczxBU1Q6OlVubmFtZWRUeXBlPihwYXJhbWV0ZXJU
eXBlKSk7CiAgICAgICAgIGF1dG8mIHVubmFtZWRQYXJhbWV0ZXJUeXBlID0gZG93bmNhc3Q8QVNU
OjpVbm5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5
VHlwZT4odW5uYW1lZFBhcmFtZXRlclR5cGUpKSB7CkBAIC0xNjUsNDUgKzE2Niw3MyBAQCBTdHJp
bmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvci4iX3N0cikpIHsKKyAgICAgICAgYXV0
byBtYW5nbGVkRmllbGROYW1lID0gWyZdKFN0cmluZyYgZmllbGROYW1lKSAtPiBTdHJpbmcgewor
ICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiBu
YW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAg
ICAgIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgICAgICAgICAgICAgIGF1dG8qIHN0cnVj
dHVyZUVsZW1lbnQgPSBzdHJ1Y3R1cmVEZWZpbml0aW9uLmZpbmQoZmllbGROYW1lKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKnN0cnVjdHVyZUVs
ZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgICAgIHJldHVybiBmaWVsZE5h
bWU7CisgICAgICAgIH07CisKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKICAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBhdXRv
IG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAg
ICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwog
ICAgICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgICAgIGZp
ZWxkTmFtZSA9IGZpZWxkTmFtZS5zdWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0aCgpIC0gMSk7
CisgICAgICAgICAgICBhdXRvIG1ldGFsRmllbGROYW1lID0gbWFuZ2xlZEZpZWxkTmFtZShmaWVs
ZE5hbWUpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRh
bFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVy
MU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgdi4iLCBmaWVsZE5hbWUs
ICIgPSBuO1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygiICAgIHYuIiwgbWV0YWxGaWVsZE5hbWUsICIgPSBuO1xuIikpOwogICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiB2O1xuIikpOwogICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwogICAgICAgICAgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAg
ICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUg
PSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJf
c3RyLmxlbmd0aCgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsK
KyAgICAgICAgYXV0byBtZXRhbEZpZWxkTmFtZSA9IG1hbmdsZWRGaWVsZE5hbWUoZmllbGROYW1l
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5h
bWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2
KSB7XG4iKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICBy
ZXR1cm4gdi4iLCBmaWVsZE5hbWUsICI7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gdi4iLCBtZXRhbEZpZWxkTmFtZSwgIjtcbiIpKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwogICAgICAgICByZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIl9zdHIpKSB7CiAgICAgICAg
IEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAg
YXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJp
bmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CisKKyAgICAgICAgU3RyaW5nIG1ldGFsRmll
bGROYW1lOworICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9ICpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpOworICAgICAgICBhdXRvJiB1bmlmeU5vZGUg
PSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKS51
bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1l
ZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24+KG5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24g
PSBkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAg
ICAgICBhdXRvKiBzdHJ1Y3R1cmVFbGVtZW50ID0gc3RydWN0dXJlRGVmaW5pdGlvbi5maW5kKGZp
ZWxkTmFtZSk7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAg
ICAgICBtZXRhbEZpZWxkTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVs
ZW1lbnQoKnN0cnVjdHVyZUVsZW1lbnQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1l
dGFsRmllbGROYW1lID0gZmllbGROYW1lOworCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygn
LCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIikpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICYodi0+IiwgZmllbGROYW1lLCAiKTtcbiIp
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAm
KHYtPiIsIG1ldGFsRmllbGROYW1lLCAiKTtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoIn1cbiIpOwogICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwog
ICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3JbXSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJO
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
cjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFs
UmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQ
YXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGkpIHtcbiIpKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBtW2ld
O1xuIikpOwpAQCAtMjEzLDggKzI0Miw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAg
ICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJltdIikg
ewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpID09IDIpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnR5cGUoKSk7CiAgICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvciZbXS4iX3N0ci5sZW5ndGgoKSk7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcs
IG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHYsICIsIG1l
dGFsUGFyYW1ldGVyMk5hbWUsICIgbikge1xuIikpOwpAQCAtMjI1LDkgKzI1NCw5IEBAIFN0cmlu
ZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkgPT0gIm9wZXJhdG9yW109IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOwotICAgICAgICBhdXRvIG1ldGFs
UGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICBhdXRvIG1l
dGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOwotICAgICAgICBhdXRv
IG1ldGFsUGFyYW1ldGVyM05hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBlKCkpOworICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7Cisg
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkp
OwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5j
dGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRl
cjJOYW1lLCAiIGksICIsIG1ldGFsUGFyYW1ldGVyM05hbWUsICIgdikge1xuIikpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgbVtpXSA9IHY7XG4iKSk7CkBA
IC0yMzksNyArMjY4LDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICBpZiAobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5pc09wZXJhdG9yKCkpIHsKICAgICAgICAgaWYgKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAg
ICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1
YnN0cmluZygib3BlcmF0b3IiX3N0ci5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBhdXRvIG1ldGFs
UGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRv
IG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICAg
ICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9u
TmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIikpOwogICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAiLCBvcGVyYXRvck5h
bWUsICJ4O1xuIikpOwpAQCAtMjQ5LDggKzI3OCw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0
aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
CiAKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
LnNpemUoKSA9PSAyKTsKICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkpOwot
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
OwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBl
KCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MV0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcs
IG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgsICIsIG1l
dGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHggIiwgb3BlcmF0b3JOYW1lLCAiIHk7XG4iKSk7
CkBAIC0yODMsNyArMzEyLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgfHwg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFzdWludCIKICAgICAgICAgfHwg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFzZmxvYXQiKSB7CiAgICAgICAg
IEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0
cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iKSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbWFw
RnVuY3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSwgIih4KTtcbiIp
KTsKQEAgLTI5Myw4ICszMjIsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYg
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJwb3ciIHx8IG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhdGFuMiIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7
CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBl
KCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRG
dW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBhcmFt
ZXRlcjJOYW1lLCAiIHkpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiICAgIHJldHVybiAiLCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSwg
Iih4LCB5KTtcbiIpKTsKQEAgLTMzNiwxNCArMzY1LDE0IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgo
IkludGVybG9ja2VkIl9zdHIpKSB7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UiKSB7CiAgICAgICAgICAg
ICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09
IDQpOwotICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKTsKLSAgICAgICAgICAgIGF1
dG8mIGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAg
ICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKTsKKyAgICAgICAgICAgIGF1dG8mIGZpcnN0QXJn
dW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBm
aXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZmlyc3RBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1Nw
YWNlKCk7CiAgICAgICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsK
LSAgICAgICAgICAgIGF1dG8gc2Vjb25kQXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkp
OwotICAgICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10udHlwZSgpKSk7Ci0gICAgICAgICAgICBhdXRv
JiBmb3VydGhBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10udHlwZSgpKTsKKyAgICAgICAg
ICAgIGF1dG8gc2Vjb25kQXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAgICAg
ICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkpOworICAg
ICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlwZSgpKSk7CisgICAgICAgICAgICBhdXRvJiBmb3Vy
dGhBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5cGUoKSk7CiAgICAgICAgICAgICBh
dXRvIGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZm91cnRoQXJndW1lbnRQb2ludGVyLmFk
ZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1bWVudFBvaW50ZWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZvdXJ0aEFyZ3VtZW50UG9pbnRlci5lbGVtZW50
VHlwZSgpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInZv
aWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIGNvbnZlcnRBZGRyZXNzU3BhY2UoZmlyc3RB
cmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZmlyc3RBcmd1bWVudFBvaW50ZWUsICIqIG9iamVj
dCwgIiwgc2Vjb25kQXJndW1lbnQsICIgY29tcGFyZSwgIiwgdGhpcmRBcmd1bWVudCwgIiBkZXNp
cmVkLCAiLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwg
JyAnLCBmb3VydGhBcmd1bWVudFBvaW50ZWUsICIqIG91dCkge1xuIikpOwpAQCAtMzU0LDEzICsz
ODMsMTMgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgfQogCiAgICAgICAgIEFT
U0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMyk7
Ci0gICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSk7Ci0gICAgICAgIGF1dG8mIGZpcnN0QXJn
dW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIEFTU0VSVChpczxB
U1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0tPnR5cGUoKSkpOworICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25j
YXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNl
ID0gZmlyc3RBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAgICAgIGF1dG8gZmly
c3RBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZpcnN0QXJn
dW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwotICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRl
clR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBlKCkp
KTsKLSAgICAgICAgYXV0byYgdGhpcmRBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBv
aW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlw
ZSgpKTsKKyAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBl
KCkpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkpKTsKKyAgICAgICAgYXV0byYgdGhp
cmRBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8g
dGhpcmRBcmd1bWVudEFkZHJlc3NTcGFjZSA9IHRoaXJkQXJndW1lbnRQb2ludGVyLmFkZHJlc3NT
cGFjZSgpOwogICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSh0aGlyZEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsKICAg
ICAgICAgYXV0byBuYW1lID0gYXRvbWljTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKS5zdWJzdHJpbmcoIkludGVybG9ja2VkIl9zdHIubGVuZ3RoKCkpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKaW5kZXggNjFkMzQ4YWYxNTk2NjIzYWY0YzM3OThl
YTk5ODFmOTRhNDE2OTU2NS4uNDFlYmFlNmI0MGRmZWEzMGRiMTM1ZWEzZmU5YjE0ZWMxOTc3OGUz
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKQEAgLTcwLDcgKzcw
LDcgQEAgYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9ncmFt
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYm9vbCBzYW1lID0gdHJ1
ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraykgewotICAgICAgICAgICAgICAgIGlmICghbWF0Y2hl
cygqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCksICpmdW5jdGlvbnNb
al0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClba10tPnR5cGUoKSwgKmZ1
bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10tPnR5cGUoKSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgc2FtZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CkBAIC04MCw4ICs4MCw4IEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlv
bnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
aWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yJltdIiAmJiBmdW5jdGlv
bnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCi0gICAgICAgICAgICAmJiBpczxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlw
ZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiB0eXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+
KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgICAg
ICAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpV
bm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
KSkgeworICAgICAgICAgICAgYXV0byYgdHlwZSA9IHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5u
YW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsK
ICAgICAgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVy
ZW5jZT4odHlwZSkucmVzb2x2ZWRUeXBlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKSkgewpAQCAtOTIsMTQg
KzkyLDE0IEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJv
Z3JhbSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiBmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAxCi0gICAgICAgICAgICAmJiAo
aXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1l
ZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQotICAg
ICAgICAgICAgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5u
YW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKSkp
CisgICAgICAgICAgICAmJiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0
PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpKSkKKyAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlUeXBlPihzdGF0aWNf
Y2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0
ZXJzKClbMF0tPnR5cGUoKSkpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIKICAgICAg
ICAgICAgICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIKLSAg
ICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNU
OjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUo
KSkpCi0gICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNv
bnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsx
XS50eXBlKCkpKQotICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVswXS50eXBlKCksICpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFd
LnR5cGUoKSkpCisgICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19j
YXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRl
cnMoKVswXS0+dHlwZSgpKSkKKyAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4o
c3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpWzFdLT50eXBlKCkpKQorICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rp
b25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLCAqZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAppbmRleCAxMzY1ZjI2ZDEyMzQ4MjAwMGVlNzQw
NDdjYjMyMWU4MDJiMmM2MDgzLi40NjlmYWM2ZjhmZGIzNmY1ZTdjNzMzNDA5ZWI1YTRjYmExY2Rj
Y2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMQ2hlY2tlci5jcHAKQEAgLTEyMiw4ICsxMjIsOCBAQCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoQVNUOjpDYWxs
RQogICAgIGNvbnN0IGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAgICAgYXV0byByZXR1cm5UeXBl
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBmaXJzdEFyZ3VtZW50LmFkZHJlc3NTcGFjZSgpLCBmaXJzdEFyZ3Vt
ZW50LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
cyBwYXJhbWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgeyBmaXJzdEFyZ3VtZW50LmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwg
V1RGOjpudWxsb3B0KSk7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpIH0sIFN0cmluZygpLCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFw
cGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2Vu
KGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNh
bGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSksIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwogICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihj
YWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxs
b3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwg
aXNPcGVyYXRvcikpOwogfQogCkBAIC0xMzIsNyArMTMyLDcgQEAgc3RhdGljIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKEFTVDo6Q2FsbEV4
cHJlc3MKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAgIGF1dG8gcmV0dXJu
VHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOwogICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNU
OjpRdWFsaWZpZXJzKCksIHsgZmlyc3RBcmd1bWVudC5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKICAgICByZXR1cm4gQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5ndGgi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RG
OjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiB9CiAKQEAgLTE1Myw4ICsxNTMsOCBAQCBzdGF0aWMg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoUmVmZXJlbmNlQ29tcGFy
YXRvcihBU1Q6OkNhbGxFeAogICAgICAgICB9KSk7CiAgICAgfSkpOwogICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIHsgYXJndW1lbnRUeXBlLT5jbG9uZSgpIH0sIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBXVEZNb3ZlKGFyZ3VtZW50VHlwZSkgfSwgU3RyaW5nKCks
IFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihjYWxsRXhw
cmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBhcmd1bWVudFR5cGUtPmNsb25l
KCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRl
cnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+KFdURk1vdmUoYXJndW1lbnRUeXBlKSksIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwogICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxs
RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0
LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09w
ZXJhdG9yKSk7CiB9CiAKQEAgLTIwMyw4ICsyMDMsOCBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlQnlJbnN0YW50aWF0aW9uKEFTVDo6Q2Fs
bAogICAgICAgICBhdXRvIHJpZ2h0QWNjZXB0YWJpbGl0eSA9IGFjY2VwdGFiaWxpdHkodHlwZXNb
MV0uZ2V0KCkpOwogICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgaWYgKGxl
ZnRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcyAmJiByaWdodEFjY2VwdGFiaWxp
dHkgPT0gQWNjZXB0YWJpbGl0eTo6WWVzKSB7Ci0gICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlw
ZTEgPSB0eXBlc1swXS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgpOwotICAgICAgICAgICAgYXV0byYg
dW5uYW1lZFR5cGUyID0gdHlwZXNbMV0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKKyAgICAgICAg
ICAgIGF1dG8mIHVubmFtZWRUeXBlMSA9ICp0eXBlc1swXS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgp
OworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUyID0gKnR5cGVzWzFdLmdldCgpLmdldFVu
bmFtZWRUeXBlKCk7CiAgICAgICAgICAgICBzdWNjZXNzID0gbWF0Y2hlcyh1bm5hbWVkVHlwZTEs
IHVubmFtZWRUeXBlMik7CiAgICAgICAgIH0gZWxzZSBpZiAoKGxlZnRBY2NlcHRhYmlsaXR5ID09
IEFjY2VwdGFiaWxpdHk6Ok1heWJlICYmIHJpZ2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmls
aXR5OjpZZXMpCiAgICAgICAgICAgICB8fCAobGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJp
bGl0eTo6WWVzICYmIHJpZ2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXliZSkp
CkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQo
Y29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICBz
aXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8g
MiA6IDE7CiAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUo
KSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGF1dG8mIGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvJiBm
aXJzdFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRU
eXBlPihmaXJzdFBhcmFtZXRlclVuaWZ5Tm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHVubmFt
ZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5v
ZGUpOwogICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSB8
fCBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6QXJy
YXlUeXBlPih1bm5hbWVkVHlwZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChraW5kID09IENoZWNrS2luZDo6SW5kZXgpIHsKLSAgICAgICAg
ICAgIGF1dG8mIHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGF1dG8m
IHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKVsxXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6
TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6
TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUpOwpAQCAtMzI4LDE0ICszMjgsMTQg
QEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAgICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFy
YW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCA/IDMgOiAyOwogICAgICAgICBpZiAo
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJh
bWV0ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvJiBmaXJzdEFy
Z3VtZW50VW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50VW5pZnlOb2Rl
ID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpLT51bmlmeU5v
ZGUoKTsKICAgICAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRVbmlm
eU5vZGUpKSB7CiAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6
VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRVbmlmeU5vZGUpOwogICAgICAgICAgICAgaWYgKGlz
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmIChraW5k
ID09IENoZWNrS2luZDo6SW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8mIHNlY29uZFBhcmFtZXRl
clVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkp
LT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9k
ZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKS0+dW5pZnlO
b2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0
ZXJVbmlmeU5vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0
ZXJVbmlmeU5vZGUpOwpAQCAtMzQ1LDkgKzM0NSw5IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0
b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0
CiAgICAgICAgICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc0ludCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIW1hdGNoZXMo
ZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSwgKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKSkKKyAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50
eXBlKCksICpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvJiB2YWx1ZVR5cGUgPSAqZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxXS50eXBl
KCk7CisgICAgICAgIGF1dG8mIHZhbHVlVHlwZSA9ICpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpW251bUV4cGVjdGVkUGFyYW1ldGVycyAtIDFdLT50eXBlKCk7CiAgICAgICAgIGF1dG8g
Z2V0dGVyTmFtZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuc3Vic3RyaW5nKDAsIGZ1bmN0
aW9uRGVmaW5pdGlvbi5uYW1lKCkubGVuZ3RoKCkgLSAxKTsKICAgICAgICAgYXV0byogZ2V0dGVy
RnVuY3MgPSBuYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoZ2V0dGVyTmFtZSk7CiAgICAgICAgIGlm
ICghZ2V0dGVyRnVuY3MpCkBAIC0zNTUsNyArMzU1LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVy
YXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmlu
aXQKICAgICAgICAgVmVjdG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7CiAgICAgICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVudFR5
cGVSZWZlcmVuY2VzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUV4cGVjdGVk
UGFyYW1ldGVycyAtIDE7ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKCgq
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT5jbG9uZSgpKTsKKyAg
ICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKS0+Y2xvbmUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgYXJndW1l
bnRUeXBlIDogYXJndW1lbnRUeXBlcykKICAgICAgICAgICAgIGFyZ3VtZW50VHlwZVJlZmVyZW5j
ZXMuYXBwZW5kKGFyZ3VtZW50VHlwZSk7CiAgICAgICAgIGF1dG8qIG92ZXJsb2FkID0gcmVzb2x2
ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNl
cywgbnVsbHB0cik7CkBAIC0zNzgsNyArMzc4LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRv
ck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgewotICAg
ICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVy
cygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2Rl
ID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpLT51bmlmeU5v
ZGUoKTsKICAgICAgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiB1bm5hbWVk
VHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CkBAIC0zOTIsNyAr
MzkyLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKysiIHx8IGZ1bmN0
aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLS0iKSB7CiAgICAgICAgIHJldHVybiBm
dW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxCi0gICAgICAgICAgICAm
JiBtYXRjaGVzKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgZnVu
Y3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAgICAgICAgICAmJiBtYXRjaGVzKCpmdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlvbi50
eXBlKCkpOwogICAgIH0KICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3IrIiB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvci0iKQogICAg
ICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSB8
fCBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyOwpAQCAtNDQ3LDE5
ICs0NDcsMTggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGJvb2wgY2hlY2tTaGFkZXJUeXBl
KGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7Ci0gICAgdm9pZCBmaW5pc2hWaXNpdGlu
Z1Byb3BlcnR5QWNjZXNzKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiwgQVNUOjpVbm5h
bWVkVHlwZSYgd3JhcHBlZEJhc2VUeXBlLCBBU1Q6OlVubmFtZWRUeXBlKiBleHRyYUFyZ3VtZW50
VHlwZSA9IG51bGxwdHIpOwogICAgIGJvb2wgaXNCb29sVHlwZShSZXNvbHZpbmdUeXBlJik7CiAg
ICAgc3RydWN0IFJlY3Vyc2VJbmZvIHsKICAgICAgICAgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5n
VHlwZTsKLSAgICAgICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+JiBhZGRyZXNzU3BhY2U7
CisgICAgICAgIEFTVDo6VHlwZUFubm90YXRpb24mIHR5cGVBbm5vdGF0aW9uOwogICAgIH07Ci0g
ICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lv
biYsIGJvb2wgcmVxdWlyZXNMVmFsdWUgPSBmYWxzZSk7Ci0gICAgT3B0aW9uYWw8UmVjdXJzZUlu
Zm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xWYWx1ZSA9IGZhbHNl
KTsKKyAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4gcmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHBy
ZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSA9IGZhbHNlKTsKKyAgICBPcHRpb25hbDxS
ZWN1cnNlSW5mbz4gZ2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTGVmdFZh
bHVlID0gZmFsc2UpOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4g
cmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpOwog
ICAgIGJvb2wgcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZShBU1Q6OkV4cHJlc3Npb24mKTsKLSAg
ICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+JiYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVsbG9wdCk7Ci0g
ICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpudWxsb3B0
KTsKLSAgICB2b2lkIGZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlc29sdmluZ1R5cGUm
LCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBXVEY6Om51bGxvcHQpOworICAgIHZvaWQg
YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
JiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVz
c2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiwgQVNUOjpUeXBlQW5ub3Rh
dGlvbik7CisgICAgdm9pZCBmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZXNvbHZpbmdU
eXBlJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbiYpIG92ZXJyaWRlOwpAQCAtNDk0LDcgKzQ5Myw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJikgb3ZlcnJpZGU7CiAKICAgICBIYXNoTWFw
PEFTVDo6RXhwcmVzc2lvbiosIFJlc29sdmluZ1R5cGU+IG1fdHlwZU1hcDsKLSAgICBIYXNoTWFw
PEFTVDo6RXhwcmVzc2lvbiosIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPj4gbV9hZGRyZXNz
U3BhY2VNYXA7CisgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBBU1Q6OlR5cGVBbm5vdGF0
aW9uPiBtX3R5cGVBbm5vdGF0aW9uczsKICAgICBIYXNoU2V0PFN0cmluZz4gbV92ZXJ0ZXhFbnRy
eVBvaW50czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9mcmFnbWVudEVudHJ5UG9pbnRzOwogICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX2NvbXB1dGVFbnRyeVBvaW50czsKQEAgLTUzOCw4ICs1MzcsOCBA
QCBib29sIENoZWNrZXI6OmFzc2lnblR5cGVzKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IG1fYWRkcmVzc1NwYWNlTWFw
KQotICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5zZXRBZGRyZXNzU3BhY2Uoa2V5VmFsdWVQYWly
LnZhbHVlKTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IG1fdHlwZUFubm90YXRpb25z
KQorICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5zZXRUeXBlQW5ub3RhdGlvbihXVEZNb3ZlKGtl
eVZhbHVlUGFpci52YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC02MjEsNiArNjIw
LDE3IEBAIHN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNo
QW5kQ29tbWl0KFJlc29sdmluZ1R5cGUmIHJlc29sCiAgICAgfSkpOwogfQogCitzdGF0aWMgT3B0
aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBjb21taXQoUmVzb2x2aW5nVHlwZSYg
cmVzb2x2aW5nVHlwZSkKK3sKKyAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAt
PiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgcmV0dXJu
IHVubmFtZWRUeXBlLT5jbG9uZSgpOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgIGlmICghcmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgICAgICByZXR1cm4g
Y29tbWl0KHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29s
dmVkVHlwZSgpLT5jbG9uZSgpOworICAgIH0pKTsKK30KKwogdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQogewogICAg
IGF1dG8qIGJhc2VUeXBlID0gKFsmXSgpIC0+IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiB7
CkBAIC03MjgsMjYgKzczOCwyNiBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VHlwZVJlZmVy
ZW5jZSYgdHlwZVJlZmVyZW5jZSkKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1
bWVudCk7CiB9CiAKLWF1dG8gQ2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHByZXNz
aW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVpcmVzTFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNl
SW5mbz4KK2F1dG8gQ2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBl
eHByZXNzaW9uLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5m
bz4KIHsKICAgICBWaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKICAgICBpZiAoZXJyb3IoKSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gZ2V0SW5mbyhleHByZXNz
aW9uLCByZXF1aXJlc0xWYWx1ZSk7CisgICAgcmV0dXJuIGdldEluZm8oZXhwcmVzc2lvbiwgcmVx
dWlyZXNMZWZ0VmFsdWUpOwogfQogCi1hdXRvIENoZWNrZXI6OmdldEluZm8oQVNUOjpFeHByZXNz
aW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVpcmVzTFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNl
SW5mbz4KK2F1dG8gQ2hlY2tlcjo6Z2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24s
IGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgogewogICAg
IGF1dG8gdHlwZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmV4cHJlc3Npb24pOwogICAgIEFT
U0VSVCh0eXBlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKIAotICAgIGF1dG8gYWRkcmVz
c1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFjZU1hcC5maW5kKCZleHByZXNzaW9uKTsKLSAg
ICBBU1NFUlQoYWRkcmVzc1NwYWNlSXRlcmF0b3IgIT0gbV9hZGRyZXNzU3BhY2VNYXAuZW5kKCkp
OwotICAgIGlmIChyZXF1aXJlc0xWYWx1ZSAmJiAhYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVl
KSB7CisgICAgYXV0byB0eXBlQW5ub3RhdGlvbkl0ZXJhdG9yID0gbV90eXBlQW5ub3RhdGlvbnMu
ZmluZCgmZXhwcmVzc2lvbik7CisgICAgQVNTRVJUKHR5cGVBbm5vdGF0aW9uSXRlcmF0b3IgIT0g
bV90eXBlQW5ub3RhdGlvbnMuZW5kKCkpOworICAgIGlmIChyZXF1aXJlc0xlZnRWYWx1ZSAmJiB0
eXBlQW5ub3RhdGlvbkl0ZXJhdG9yLT52YWx1ZS5pc1JpZ2h0VmFsdWUoKSkgewogICAgICAgICBz
ZXRFcnJvcigpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KLSAgICByZXR1
cm4ge3sgdHlwZUl0ZXJhdG9yLT52YWx1ZSwgYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlIH19
OworICAgIHJldHVybiB7eyB0eXBlSXRlcmF0b3ItPnZhbHVlLCB0eXBlQW5ub3RhdGlvbkl0ZXJh
dG9yLT52YWx1ZSB9fTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCkBAIC03NjcsMTkgKzc3NywzMiBAQCB2b2lk
IENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJh
dGlvbikKICAgICB9CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Np
b24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRUeXBl
LCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlKQordm9pZCBDaGVja2Vy
Ojphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiYgdW5uYW1lZFR5cGUsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90
YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlw
ZU1hcC5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodW5uYW1lZFR5cGUpKTsKICAgICBBU1NFUlRf
VU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIGF1dG8gYWRkcmVz
c1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZleHByZXNzaW9uLCBhZGRy
ZXNzU3BhY2UpOworICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV90eXBlQW5ub3Rh
dGlvbnMuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiAgICAgQVNT
RVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKIH0KIAotdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lv
biYgZXhwcmVzc2lvbiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNl
KQordm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwg
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkp
CiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZN
b3ZlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1
bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3Vs
dCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKKyAg
ICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgmZXhw
cmVzc2lvbiwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOworICAgIEFTU0VSVF9VTlVTRUQoYWRk
cmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9
CisKK3ZvaWQgQ2hlY2tlcjo6Zm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9u
LCBSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVB
bm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCit7CisgICAgcmVzb2x2aW5nVHlwZS52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc3Vs
dCkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24s
IHJlc3VsdC0+Y2xvbmUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4mIHJlc3VsdCkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQo
JmV4cHJlc3Npb24sIHJlc3VsdC5jb3B5UmVmKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0pKTsKKyAgICBhdXRvIGFkZHJl
c3NTcGFjZUFkZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RG
TW92ZSh0eXBlQW5ub3RhdGlvbikpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRk
UmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKQEAgLTc4OSw2
ICs4MTIsMTEgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9u
JiBhc3NpZ25tZW50RXhwcmVzc2lvbikKICAgICBpZiAoIWxlZnRJbmZvKQogICAgICAgICByZXR1
cm47CiAKKyAgICBpZiAobGVmdEluZm8tPnR5cGVBbm5vdGF0aW9uLmlzUmlnaHRWYWx1ZSgpKSB7
CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBhdXRv
IHJpZ2h0SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0
KCkpOwogICAgIGlmICghcmlnaHRJbmZvKQogICAgICAgICByZXR1cm47CkBAIC04MDIsMjMgKzgz
MCwxMCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFz
c2lnbm1lbnRFeHByZXNzaW9uKQogICAgIGFzc2lnblR5cGUoYXNzaWdubWVudEV4cHJlc3Npb24s
IFdURk1vdmUoKnJlc3VsdFR5cGUpKTsKIH0KIAotdm9pZCBDaGVja2VyOjpmb3J3YXJkVHlwZShB
U1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUs
IE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2UpCi17Ci0gICAgcmVzb2x2
aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mIHJlc3VsdCkgewotICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQo
JmV4cHJlc3Npb24sIHJlc3VsdC0+Y2xvbmUoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHJlc3VsdCkgewotICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHJlc3VsdC5jb3B5UmVmKCkpOwotICAgICAgICBBU1NF
UlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0pKTsKLSAg
ICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgmZXhw
cmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKLSAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFk
ZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOwotfQotCiB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbikKIHsKLSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5m
byhyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpLCB0cnVlKTsKLSAgICBpZiAoIWxW
YWx1ZUluZm8pCisgICAgYXV0byBsZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSwgdHJ1ZSk7CisgICAgaWYgKCFsZWZ0
VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3
aGF0IHRvIGRvIHdpdGggdGhlIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ncyBBbm9ueW1vdXNW
YXJpYWJsZXMuCkBAIC04MjcsNyArODQyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiAgICAg
aWYgKCFuZXdWYWx1ZUluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbWF0Y2hBbmRD
b21taXQobFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdU
eXBlKSkgeworICAgIGlmICghbWF0Y2hBbmRDb21taXQobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5n
VHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKSkgewogICAgICAgICBzZXRFcnJvcigp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODczLDM3ICs4ODgsNDMgQEAgdm9pZCBDaGVj
a2VyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNz
aW9uKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlwZShkZXJlZmVyZW5j
ZUV4cHJlc3Npb24sIHBvaW50ZXJUeXBlLT5jbG9uZSgpLCBwb2ludGVyVHlwZS0+YWRkcmVzc1Nw
YWNlKCkpOworICAgIGFzc2lnblR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlw
ZS0+Y2xvbmUoKSwgQVNUOjpMZWZ0VmFsdWUgeyBwb2ludGVyVHlwZS0+YWRkcmVzc1NwYWNlKCkg
fSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24m
IG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsKLSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNl
QW5kR2V0SW5mbyhtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCksIHRydWUpOwotICAgIGlm
ICghbFZhbHVlSW5mbykKKyAgICBhdXRvIGxlZnRWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5m
byhtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCksIHRydWUpOworICAgIGlmICghbGVm
dFZhbHVlSW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNl
ID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOworICAg
IGlmICghbGVmdEFkZHJlc3NTcGFjZSkgeworICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgYXV0byogbFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxW
YWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOwotICAgIGlmICghbFZhbHVlVHlwZSkgeworICAgIGF1
dG8qIGxlZnRWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsZWZ0VmFsdWVJbmZvLT5yZXNvbHZp
bmdUeXBlKTsKKyAgICBpZiAoIWxlZnRWYWx1ZVR5cGUpIHsKICAgICAgICAgc2V0RXJyb3IoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUobWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihtYWtl
UG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBs
VmFsdWVUeXBlLT5jbG9uZSgpKSk7CisgICAgYXNzaWduVHlwZShtYWtlUG9pbnRlckV4cHJlc3Np
b24sIG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBl
LT5jbG9uZSgpKSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGF1
dG8gbFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ubFZhbHVlKCkpOwotICAgIGlmICghbFZhbHVlSW5mbykKKyAgICBhdXRvIGxlZnRWYWx1
ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxl
ZnRWYWx1ZSgpKTsKKyAgICBpZiAoIWxlZnRWYWx1ZUluZm8pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8qIGxWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsVmFsdWVJbmZvLT5yZXNvbHZp
bmdUeXBlKTsKLSAgICBpZiAoIWxWYWx1ZVR5cGUpIHsKKyAgICBhdXRvKiBsZWZ0VmFsdWVUeXBl
ID0gZ2V0VW5uYW1lZFR5cGUobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYg
KCFsZWZ0VmFsdWVUeXBlKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhdXRvJiB1bmlmeU5vZGUgPSBsVmFsdWVUeXBlLT51bmlmeU5vZGUoKTsK
KyAgICBhdXRvJiB1bmlmeU5vZGUgPSBsZWZ0VmFsdWVUeXBlLT51bmlmeU5vZGUoKTsKICAgICBp
ZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewogICAgICAgICBhdXRvJiB1bm5h
bWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAgICAgICAg
IGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsKQEAgLTkxMyw3ICs5MzQs
OCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
biYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzcwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKCFsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UpIHsKKyAgICAgICAg
YXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVm
dEFkZHJlc3NTcGFjZSgpOworICAgICAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKICAgICAg
ICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTky
MSwxODMgKzk0MywxMTIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3MKICAgICAgICAgaWYgKGlz
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpIHsKICAgICAgICAgICAgIGF1dG8mIGFycmF5
VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogU2F2ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgotICAgICAgICAgICAgYXNz
aWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbi5vcmlnaW4oKSksICpsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50eXBl
KCkuY2xvbmUoKSkpOworICAgICAgICAgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6
VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVz
c1NwYWNlLCBhcnJheVR5cGUudHlwZSgpLmNsb25lKCkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlKSB7
CisgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRp
b24ubGVmdEFkZHJlc3NTcGFjZSgpOworICAgIGlmICghbGVmdEFkZHJlc3NTcGFjZSkgewogICAg
ICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlw
ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5v
cmlnaW4oKSksICpsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25lKCkp
KTsKKyAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlx
dWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGxlZnRWYWx1ZVR5
cGUtPmNsb25lKCkpKTsKIH0KIAotdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZ1Byb3BlcnR5
QWNjZXNzKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24sIEFTVDo6VW5uYW1lZFR5cGUmIHdyYXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVkVHlw
ZSogZXh0cmFBcmd1bWVudFR5cGUpCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVz
c2lvbiYgZG90RXhwcmVzc2lvbikKIHsKLSAgICB1c2luZyBPdmVybG9hZFJlc29sdXRpb24gPSBz
dGQ6OnR1cGxlPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIEFTVDo6VW5uYW1lZFR5cGUqPjsK
LQotICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb247Ci0gICAgQVNUOjpV
bm5hbWVkVHlwZSogZ2V0UmV0dXJuVHlwZTsKLSAgICBzdGQ6OnRpZShnZXRGdW5jdGlvbiwgZ2V0
UmV0dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsKLSAgICAgICAgUmVz
b2x2aW5nVHlwZSBnZXRBcmd1bWVudFR5cGUxKHdyYXBwZWRCYXNlVHlwZS5jbG9uZSgpKTsKLSAg
ICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gZ2V0QXJndW1lbnRUeXBlMjsKLSAgICAgICAg
aWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAgICAgICAgICAgZ2V0QXJndW1lbnRUeXBlMiA9IFJl
c29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOworICAgIGF1dG8gYmFzZUlu
Zm8gPSByZWN1cnNlQW5kR2V0SW5mbyhkb3RFeHByZXNzaW9uLmJhc2UoKSk7CisgICAgaWYgKCFi
YXNlSW5mbykKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gYmFzZVVubmFtZWRUeXBlID0gY29t
bWl0KGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBpZiAoIWJhc2VVbm5hbWVkVHlwZSkK
KyAgICAgICAgcmV0dXJuOwogCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBnZXRGdW5j
dGlvbiA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0UmV0dXJuVHlwZSA9IG51
bGxwdHI7CisgICAgewogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNv
bHZpbmdUeXBlPj4gZ2V0QXJndW1lbnRUeXBlczsKLSAgICAgICAgZ2V0QXJndW1lbnRUeXBlcy5h
cHBlbmQoZ2V0QXJndW1lbnRUeXBlMSk7Ci0gICAgICAgIGlmIChnZXRBcmd1bWVudFR5cGUyKQot
ICAgICAgICAgICAgZ2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoKmdldEFyZ3VtZW50VHlwZTIpOwot
Ci0gICAgICAgIGF1dG8qIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBs
KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZUdldE92ZXJsb2FkcygpLCBnZXRBcmd1
bWVudFR5cGVzLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFnZXRGdW5jdGlvbikKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKGdldEZ1bmN0aW9uLCAmZ2V0RnVuY3Rpb24tPnR5cGUoKSk7Ci0g
ICAgfSkoKTsKLQotICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb247Ci0g
ICAgQVNUOjpVbm5hbWVkVHlwZSogYW5kUmV0dXJuVHlwZTsKLSAgICBzdGQ6OnRpZShhbmRGdW5j
dGlvbiwgYW5kUmV0dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsKLSAg
ICAgICAgYXV0byBjb21wdXRlQW5kQXJndW1lbnRUeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUm
IHVubmFtZWRUeXBlKSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7Ci0gICAgICAgICAgICBp
ZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4geyB1bm5hbWVkVHlwZS5jbG9uZSgpIH07Ci0gICAgICAgICAgICBpZiAoaXM8
QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4geyBS
ZXNvbHZpbmdUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVy
OjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkLCBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUo
KS5jbG9uZSgpKSkgfTsKLSAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5h
bWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
ICAgIHJldHVybiB7IFJlc29sdmluZ1R5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBl
PihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVk
VHlwZSkuY2xvbmUoKSkpIH07Ci0gICAgICAgIH07Ci0gICAgICAgIGF1dG8gY29tcHV0ZUFuZFJl
dHVyblR5cGUgPSBbJl0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6VW5u
YW1lZFR5cGUqIHsKLSAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBl
Pih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICB9OwotCi0gICAgICAgIGF1dG8gYW5kQXJndW1lbnRUeXBlMSA9IGNvbXB1dGVB
bmRBcmd1bWVudFR5cGUod3JhcHBlZEJhc2VUeXBlKTsKLSAgICAgICAgaWYgKCFhbmRBcmd1bWVu
dFR5cGUxKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxw
dHIpOwotICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiBhbmRBcmd1bWVudFR5cGUyOwot
ICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCi0gICAgICAgICAgICBhbmRBcmd1bWVudFR5
cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50VHlwZS0+Y2xvbmUoKSk7CisgICAgICAg
IGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAg
ICAgZ2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lv
bi5wb3NzaWJsZUdldE92ZXJsb2FkcygpLCBnZXRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKKyAg
ICAgICAgaWYgKGdldEZ1bmN0aW9uKQorICAgICAgICAgICAgZ2V0UmV0dXJuVHlwZSA9ICZnZXRG
dW5jdGlvbi0+dHlwZSgpOworICAgIH0KIAorICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiog
YW5kRnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVyblR5
cGUgPSBudWxscHRyOworICAgIGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5mby0+
dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgIGF1dG8gYXJndW1l
bnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90
RXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBiYXNlVW5uYW1lZFR5cGUt
PmdldCgpLmNsb25lKCkpOwogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxS
ZXNvbHZpbmdUeXBlPj4gYW5kQXJndW1lbnRUeXBlczsKLSAgICAgICAgYW5kQXJndW1lbnRUeXBl
cy5hcHBlbmQoKmFuZEFyZ3VtZW50VHlwZTEpOwotICAgICAgICBpZiAoYW5kQXJndW1lbnRUeXBl
MikKLSAgICAgICAgICAgIGFuZEFyZ3VtZW50VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5cGUy
KTsKLQotICAgICAgICBhdXRvKiBhbmRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2Fk
SW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVBbmRPdmVybG9hZHMoKSwgYW5k
QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAgICAgIGlmICghYW5kRnVuY3Rpb24pCi0gICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihhbmRGdW5jdGlvbiwgY29tcHV0ZUFuZFJldHVyblR5cGUo
YW5kRnVuY3Rpb24tPnR5cGUoKSkpOwotICAgIH0pKCk7CisgICAgICAgIGFuZEFyZ3VtZW50VHlw
ZXMuYXBwZW5kKGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgYW5kRnVuY3Rpb24g
PSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFuZE92
ZXJsb2FkcygpLCBhbmRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGFuZEZ1
bmN0aW9uKQorICAgICAgICAgICAgYW5kUmV0dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50
ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpOyAvLyBGSVhNRTogRW5m
b3JjZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKKyAgICB9
CisKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uID0gbnVs
bHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiB0aHJlYWRBbmRSZXR1cm5UeXBlID0gbnVsbHB0
cjsKKyAgICB7CisgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGJhc2VVbm5hbWVkVHlwZS0+Z2V0KCkuY2xvbmUoKSk7Cisg
ICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiB0aHJl
YWRBbmRBcmd1bWVudFR5cGVzOworICAgICAgICB0aHJlYWRBbmRBcmd1bWVudFR5cGVzLmFwcGVu
ZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIHRocmVhZEFuZEZ1bmN0aW9uID0g
cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVBbmRPdmVy
bG9hZHMoKSwgdGhyZWFkQW5kQXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlmICh0
aHJlYWRBbmRGdW5jdGlvbikKKyAgICAgICAgICAgIHRocmVhZEFuZFJldHVyblR5cGUgPSAmZG93
bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odGhyZWFkQW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVu
dFR5cGUoKTsgLy8gRklYTUU6IEVuZm9yY2UgdGhlIHJldHVybiBvZiBhbmRlcnMgd2lsbCBhbHdh
eXMgYmUgYSBwb2ludGVyCisgICAgfQogCi0gICAgaWYgKCFnZXRSZXR1cm5UeXBlICYmICFhbmRS
ZXR1cm5UeXBlKSB7CisgICAgaWYgKCFnZXRGdW5jdGlvbiAmJiAhYW5kRnVuY3Rpb24pIHsKICAg
ICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlmIChnZXRS
ZXR1cm5UeXBlICYmIGFuZFJldHVyblR5cGUgJiYgIW1hdGNoZXMoKmdldFJldHVyblR5cGUsICph
bmRSZXR1cm5UeXBlKSkgeworICAgIGlmIChnZXRGdW5jdGlvbiAmJiBhbmRGdW5jdGlvbikgewor
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhbmRG
dW5jdGlvbiAmJiB0aHJlYWRBbmRGdW5jdGlvbiAmJiAhbWF0Y2hlcygqYW5kUmV0dXJuVHlwZSwg
KnRocmVhZEFuZFJldHVyblR5cGUpKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHNldEZ1bmN0aW9u
OwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNldFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUoc2V0
RnVuY3Rpb24sIHNldFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlvbiB7
Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgc2V0QXJndW1lbnQxVHlwZSh3cmFwcGVkQmFzZVR5cGUu
Y2xvbmUoKSk7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IHNldEFyZ3VtZW50VHlw
ZTI7Ci0gICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAgICAgICAgICAgIHNldEFyZ3Vt
ZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgpKTsKLSAg
ICAgICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDNUeXBlKGdldFJldHVyblR5cGUgPyBnZXRS
ZXR1cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlwZS0+Y2xvbmUoKSk7CisgICAgQVNUOjpV
bm5hbWVkVHlwZSogZmllbGRUeXBlID0gZ2V0UmV0dXJuVHlwZSA/IGdldFJldHVyblR5cGUgOiBh
bmRSZXR1cm5UeXBlOwogCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5jdGlv
biA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogc2V0UmV0dXJuVHlwZSA9IG51bGxw
dHI7CisgICAgewogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZp
bmdUeXBlPj4gc2V0QXJndW1lbnRUeXBlczsKLSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBl
bmQoc2V0QXJndW1lbnQxVHlwZSk7Ci0gICAgICAgIGlmIChzZXRBcmd1bWVudFR5cGUyKQotICAg
ICAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoKnNldEFyZ3VtZW50VHlwZTIpOwotICAg
ICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChzZXRBcmd1bWVudDNUeXBlKTsKLQotICAgICAg
ICBhdXRvKiBzZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVTZXRPdmVybG9hZHMoKSwgc2V0QXJndW1lbnRUeXBl
cywgbnVsbHB0cik7Ci0gICAgICAgIGlmICghc2V0RnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihzZXRGdW5jdGlvbiwgJnNldEZ1bmN0aW9uLT50eXBlKCkpOwotICAgIH0pKCk7
Ci0KLSAgICBpZiAoc2V0RnVuY3Rpb24pIHsKLSAgICAgICAgaWYgKCFtYXRjaGVzKHNldEZ1bmN0
aW9uLT50eXBlKCksIHdyYXBwZWRCYXNlVHlwZSkpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBPcHRpb25hbDxB
U1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOwotICAgIGlmIChnZXRSZXR1cm5UeXBlIHx8
IGFuZFJldHVyblR5cGUpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoZSByZWZlcmVuY2UgY29tcGls
ZXIgaGFzICJlbHNlIGlmICghbm9kZS5iYXNlLmlzTFZhbHVlICYmICFiYXNlVHlwZS5pc0FycmF5
UmVmKSIsCi0gICAgICAgIC8vIGJ1dCBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IGl0IGV4aXN0cy4g
SSBoYXZlbid0IHdyaXR0ZW4gaXQgaGVyZSwgYW5kIEknbGwgaW52ZXN0aWdhdGUKLSAgICAgICAg
Ly8gaWYgd2UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZSByZWZlcmVuY2UgY29tcGlsZXIuCi0gICAg
ICAgIGlmIChpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHdyYXBwZWRCYXNlVHlwZSkpCi0gICAgICAg
ICAgICBhZGRyZXNzU3BhY2UgPSBkb3duY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGU+KHdyYXBwZWRC
YXNlVHlwZSkuYWRkcmVzc1NwYWNlKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0
byBhZGRyZXNzU3BhY2VJdGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFwLmZpbmQoJnByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAgICAgICAgICAgQVNTRVJUKGFkZHJlc3NTcGFj
ZUl0ZXJhdG9yICE9IG1fYWRkcmVzc1NwYWNlTWFwLmVuZCgpKTsKLSAgICAgICAgICAgIGlmIChh
ZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUpCi0gICAgICAgICAgICAgICAgYWRkcmVzc1NwYWNl
ID0gKmFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGJhc2VJ
bmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgUmVzb2x2aW5nVHlwZSBmaWVsZFJlc29sdmlu
Z1R5cGUoZmllbGRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBl
bmQoZmllbGRSZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgc2V0RnVuY3Rpb24gPSByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5wb3NzaWJsZVNldE92ZXJsb2FkcygpLCBz
ZXRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKHNldEZ1bmN0aW9uKQorICAg
ICAgICAgICAgc2V0UmV0dXJuVHlwZSA9ICZzZXRGdW5jdGlvbi0+dHlwZSgpOwogICAgIH0KIAot
ICAgIC8vIEZJWE1FOiBHZW5lcmF0ZSB0aGUgY2FsbCBleHByZXNzaW9ucwotCi0gICAgYXNzaWdu
VHlwZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5U
eXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlwZS0+Y2xvbmUoKSwgYWRkcmVzc1NwYWNlKTsKLX0K
LQotT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBDaGVja2VyOjpyZWN1cnNl
QW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24pCi17Ci0gICAgYXV0byBiYXNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZv
KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAgIGlmICghYmFzZUluZm8pCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBhdXRvKiBiYXNlVHlwZSA9IGdldFVu
bmFtZWRUeXBlKGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWJhc2VUeXBlKSB7
CisgICAgaWYgKHNldEZ1bmN0aW9uICYmIGFuZEZ1bmN0aW9uKSB7CiAgICAgICAgIHNldEVycm9y
KCk7Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfQotICAgIGF1dG8mIGJhc2VV
bmlmeU5vZGUgPSBiYXNlVHlwZS0+dW5pZnlOb2RlKCk7Ci0gICAgaWYgKGlzPEFTVDo6VW5uYW1l
ZFR5cGU+KGJhc2VVbmlmeU5vZGUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpVbm5h
bWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkuY2xvbmUoKTsKLSAgICBBU1NFUlQoaXM8QVNUOjpOYW1l
ZFR5cGU+KGJhc2VVbmlmeU5vZGUpKTsKLSAgICByZXR1cm4geyBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIGRv
d25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSkgfTsKLX0KLQotdm9pZCBDaGVj
a2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCi17Ci0gICAgYXV0
byBiYXNlVHlwZSA9IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoZG90RXhwcmVzc2lvbik7Ci0gICAg
aWYgKCFiYXNlVHlwZSkKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGZpbmlzaFZpc2l0
aW5nUHJvcGVydHlBY2Nlc3MoZG90RXhwcmVzc2lvbiwgKmJhc2VUeXBlKTsKKyAgICBkb3RFeHBy
ZXNzaW9uLnNldEdldEZ1bmN0aW9uKGdldEZ1bmN0aW9uKTsKKyAgICBkb3RFeHByZXNzaW9uLnNl
dEFuZEZ1bmN0aW9uKGFuZEZ1bmN0aW9uKTsKKyAgICBkb3RFeHByZXNzaW9uLnNldFRocmVhZEFu
ZEZ1bmN0aW9uKHRocmVhZEFuZEZ1bmN0aW9uKTsKKyAgICBkb3RFeHByZXNzaW9uLnNldFNldEZ1
bmN0aW9uKHNldEZ1bmN0aW9uKTsKKworICAgIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90
YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKTsKKyAgICBpZiAoYXV0byBsZWZ0QWRkcmVzc1NwYWNl
ID0gYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAg
ICBpZiAoYW5kRnVuY3Rpb24pCisgICAgICAgICAgICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6TGVm
dFZhbHVlIHsgKmxlZnRBZGRyZXNzU3BhY2UgfTsKKyAgICAgICAgZWxzZSBpZiAoc2V0RnVuY3Rp
b24pCisgICAgICAgICAgICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6QWJzdHJhY3RMZWZ0VmFsdWUo
KTsKKyAgICB9IGVsc2UgaWYgKCFiYXNlSW5mby0+dHlwZUFubm90YXRpb24uaXNSaWdodFZhbHVl
KCkgJiYgKHNldEZ1bmN0aW9uIHx8IGFuZEZ1bmN0aW9uKSkKKyAgICAgICAgdHlwZUFubm90YXRp
b24gPSBBU1Q6OkFic3RyYWN0TGVmdFZhbHVlKCk7CisgICAgYXNzaWduVHlwZShkb3RFeHByZXNz
aW9uLCBmaWVsZFR5cGUtPmNsb25lKCksIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0KIAot
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9u
KQordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpCiB7Ci0gICAgYXV0
byBiYXNlVHlwZSA9IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoaW5kZXhFeHByZXNzaW9uKTsKLSAg
ICBpZiAoIWJhc2VUeXBlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGluZGV4SW5mbyA9
IHJlY3Vyc2VBbmRHZXRJbmZvKGluZGV4RXhwcmVzc2lvbi5pbmRleEV4cHJlc3Npb24oKSk7Ci0g
ICAgaWYgKCFpbmRleEluZm8pCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIGluZGV4RXhwcmVz
c2lvblR5cGUgPSBnZXRVbm5hbWVkVHlwZShpbmRleEluZm8tPnJlc29sdmluZ1R5cGUpOwotICAg
IGlmICghaW5kZXhFeHByZXNzaW9uVHlwZSkgewotICAgICAgICBzZXRFcnJvcigpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhpbmRl
eEV4cHJlc3Npb24sIFdURk1vdmUoKmJhc2VUeXBlKSwgaW5kZXhFeHByZXNzaW9uVHlwZSk7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFT
VDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQpAQCAtMTEwNSwxMCArMTA1
NiwxMCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlh
YmxlUmVmZXJlbmNlKQogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsK
ICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgpKTsKICAgICAK
LSAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOwotICAgIGlmICgh
dmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+aXNBbm9ueW1vdXMoKSkKLSAgICAgICAgYWRk
cmVzc1NwYWNlID0gQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKLSAgICBhc3NpZ25UeXBlKHZh
cmlhYmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCktPmNs
b25lKCksIGFkZHJlc3NTcGFjZSk7CisgICAgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3Rh
dGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpOworICAgIGlmICghdmFyaWFibGVSZWZlcmVuY2UudmFy
aWFibGUoKS0+aXNBbm9ueW1vdXMoKSkgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBzZWVtIHJpZ2h0
LgorICAgICAgICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9OworICAgIGFzc2lnblR5cGUodmFyaWFibGVSZWZlcmVuY2UsIHZhcmlh
YmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKS0+Y2xvbmUoKSwgV1RGTW92ZSh0eXBlQW5u
b3RhdGlvbikpOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5T
dGF0ZW1lbnQpCkBAIC0xNDA3LDcgKzEzNTgsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6
Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCiAgICAgaWYgKGVycm9yKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBhdXRvIGxhc3RJbmZvID0gZ2V0SW5mbyhjb21tYUV4cHJlc3Npb24u
bGlzdCgpLmxhc3QoKSk7Ci0gICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBsYXN0SW5m
by0+cmVzb2x2aW5nVHlwZSk7CisgICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBsYXN0
SW5mby0+cmVzb2x2aW5nVHlwZSwgbGFzdEluZm8tPnR5cGVBbm5vdGF0aW9uKTsKIH0KIAogdm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lv
bikKQEAgLTE0NTYsNyArMTQwNyw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDYWxsRXhw
cmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmdW5jdGlvbi0+cGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICgh
bWF0Y2hBbmRDb21taXQodHlwZXNbaV0uZ2V0KCksICpmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ld
LnR5cGUoKSkpIHsKKyAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1pdCh0eXBlc1tpXS5nZXQoKSwg
KmZ1bmN0aW9uLT5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSkpIHsKICAgICAgICAgICAgIHNldEVy
cm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCmluZGV4
IDJmY2M2ZjEzOWRlODRhMzJjNGM3MDdjYTA2MGI5YmUxYjQyZmQzZTAuLjE1OGUyM2I0NzJkZTQ5
OTMxZWI3ODQyYzk3Yjg0YWEyM2QwOTcwZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcApAQCAtMjI3LDkgKzIy
Nyw5IEBAIGJvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBw
b3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gc3VjY2VzcyA9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0
KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqcG9z
c2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLCB1bm5hbWVkVHlwZSk7CisgICAg
ICAgICAgICByZXR1cm4gbWF0Y2hlcygqcG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0t
PnR5cGUoKSwgdW5uYW1lZFR5cGUpOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgewotICAgICAg
ICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNh
blJlc29sdmUocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLT51bmlmeU5v
ZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29s
dmFibGVUeXBlKCkuY2FuUmVzb2x2ZShwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+
dHlwZSgpLT51bmlmeU5vZGUoKSk7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYgKCFzdWNjZXNz
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDA1MzUw
ZTBkYzk4NWVjYjM5MGY1ODZmMGEzNGQyYTZlY2ZlZGNhMzIuLjNjYmVkZDljMjU3ODhmZTVkZTA1
NjEyZmYwZGQyNmQ0Yzg1NGY3ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTE5Nyw5ICsxOTcs
MTAgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhw
cmVzc2lvbikKICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpF
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAi
RG90IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgRW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFscyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CiAgICAgICAgICAg
ICAgICAgICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RFeHByZXNzaW9uLm9yaWdpbigpOwog
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogUGVyaGFwcyBkbyB0aGlzIHdpdGggdmFyaWFu
dHMgb3IgYSBSZXdyaXRlciBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICB2b2lkKiBsb2Nh
dGlvbiA9ICZkb3RFeHByZXNzaW9uOwogICAgICAgICAgICAgICAgICAgICBkb3RFeHByZXNzaW9u
Ln5Eb3RFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsID0gQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWw6OndyYXAoV1RGTW92
ZShvcmlnaW4pLCBXVEZNb3ZlKGJhc2VOYW1lKSwgV1RGTW92ZShtZW1iZXJOYW1lKSwgZW51bWVy
YXRpb25EZWZpbml0aW9uLCAqbWVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3ICgmZG90
RXhwcmVzc2lvbikgQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShlbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWwpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3IChsb2NhdGlvbikg
QVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShlbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWwpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCmluZGV4IDM5ZGQ3YTJhMWJhYjBhOTdi
MDkzOThlNTA3ZTQ4ODcxODdlOWFkNmIuLmE5Nzc4OTc5MDMwNzQ2OGNmNmYwZjMwYjEwMGQ1ZmY1
ZTk3YTZiNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFBhcnNlci5jcHAKQEAgLTEwODIsMTMgKzEwODIsMTMgQEAgYXV0byBQYXJzZXI6OnBh
cnNlUGFyYW1ldGVycygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVy
cm9yPgogICAgIGF1dG8gZmlyc3RQYXJhbWV0ZXIgPSBwYXJzZVBhcmFtZXRlcigpOwogICAgIGlm
ICghZmlyc3RQYXJhbWV0ZXIpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmaXJz
dFBhcmFtZXRlci5lcnJvcigpKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKCpmaXJz
dFBhcmFtZXRlcikpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCpmaXJzdFBhcmFtZXRlcikpKTsKIAogICAgIHdo
aWxlICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7CiAgICAgICAgIGF1dG8g
cGFyYW1ldGVyID0gcGFyc2VQYXJhbWV0ZXIoKTsKICAgICAgICAgaWYgKCFwYXJhbWV0ZXIpCiAg
ICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocGFyYW1ldGVyLmVycm9yKCkpOwot
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKCpwYXJhbWV0ZXIpKTsKKyAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+
KFdURk1vdmUoKnBhcmFtZXRlcikpKTsKICAgICB9CiAKICAgICBhdXRvIHJpZ2h0UGFyZW50aGVz
aXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0UGFyZW50aGVzaXMpOwpA
QCAtMTU2NywxNCArMTU2NywxNCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0
aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdAogICAgIGlmICgh
Zmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uLmVycm9yKCkpOwogCi0gICAgVmVjdG9yPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbj4gcmVzdWx0OwotICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgq
Zmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqZmlyc3RWYXJpYWJsZURlY2xh
cmF0aW9uKSkpOwogCiAgICAgd2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb21t
YSkpIHsKICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURl
Y2xhcmF0aW9uKCgqdHlwZSktPmNsb25lKCkpOwogICAgICAgICBpZiAoIXZhcmlhYmxlRGVjbGFy
YXRpb24pCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFyaWFibGVEZWNs
YXJhdGlvbi5lcnJvcigpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCp2YXJpYWJs
ZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUoKnZhcmlhYmxlRGVjbGFyYXRpb24pKSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoV1RG
TW92ZSgqb3JpZ2luKSwgV1RGTW92ZShyZXN1bHQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCmluZGV4IDlhMTAzNWE0Yjhj
YWQzM2EyMWU2NzBmMjIwMDU5MWNjMTQ4ZDZiMTMuLjg2OWI3YzM4Y2RiNGE5ZGNjMWIyOTQxOTY0
YmU5ZDY4MWFkOGUwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUHJlcGFyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIldI
TFNMTmFtZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJX
SExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCIKICNpbmNs
dWRlICJXSExTTFJlY3Vyc2lvbkNoZWNrZXIuaCIKICNpbmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5
cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpY01hdGNoZXIuaCIKQEAgLTgyLDcg
KzgzLDcgQEAgc3RhdGljIE9wdGlvbmFsPFByb2dyYW0+IHByZXBhcmVTaGFyZWQoU3RyaW5nJiB3
aGxzbFNvdXJjZSkKICAgICBpZiAoIWNoZWNrKHByb2dyYW0pKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0pOwotICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlc29sdmUg
cHJvcGVydGllcyBoZXJlCisgICAgcmVzb2x2ZVByb3BlcnRpZXMocHJvZ3JhbSk7CiAgICAgZmlu
ZEhpZ2hab21iaWVzKHByb2dyYW0pOwogICAgIGlmICghY2hlY2tTdGF0ZW1lbnRCZWhhdmlvcihw
cm9ncmFtKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNkZWFhMDI3NWZkOWY3MGE4YzE0NzliMGNkMTUyYzg3NDgwNGI0
NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEsNzYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlSZXNvbHZlci5o
IgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJl
c3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xDb21tYUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lv
bi5oIgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRnVu
Y3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xWYXJpYWJsZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb3BlcnR5UmVz
b2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6Citwcml2YXRlOgorICAgIHZvaWQgdmlz
aXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpBc3NpZ25t
ZW50RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisKKyAgICBib29sIHNpbXBsaWZ5UmlnaHRWYWx1
ZShBU1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAgICBib29sIHNpbXBsaWZ5QWJzdHJhY3RMZWZ0VmFs
dWUoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYsIEFTVDo6RG90RXhwcmVzc2lvbiYsIFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgcmlnaHQpOworICAgIHZvaWQgc2ltcGxpZnlMZWZ0VmFs
dWUoQVNUOjpFeHByZXNzaW9uJik7CisKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIG1f
dmFyaWFibGVEZWNsYXJhdGlvbnM7Cit9OworCit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0
KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICAvLyBVbmxlc3Mgd2Un
cmUgaW5zaWRlIGFuIEFzc2lnbm1lbnRFeHByZXNzaW9uIG9yIGEgUmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbiwgd2UncmUgYSByaWdodCB2YWx1ZS4KKyAgICBpZiAoIXNpbXBsaWZ5UmlnaHRWYWx1
ZShkb3RFeHByZXNzaW9uKSkKKyAgICAgICAgc2V0RXJyb3IoKTsKK30KKwordm9pZCBQcm9wZXJ0
eVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0
aW9uKQoreworICAgIFZpc2l0b3I6OnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgaWYg
KCFtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgZnVuY3Rpb25EZWZp
bml0aW9uLmJsb2NrKCkuc3RhdGVtZW50cygpLmluc2VydCgwLCBtYWtlVW5pcXVlUmVmPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KExleGVyOjpUb2tlbihtX3ZhcmlhYmxlRGVj
bGFyYXRpb25zWzBdLT5vcmlnaW4oKSksIFdURk1vdmUobV92YXJpYWJsZURlY2xhcmF0aW9ucykp
KTsKK30KKworc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBzZXR0
ZXJDYWxsKEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4mJiBuZXdWYWx1ZSwgY29uc3Qgc3RkOjpmdW5jdGlvbjxVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPigpPiYgbGVmdFZhbHVlRmFjdG9yeSwgY29uc3Qgc3RkOjpmdW5jdGlvbjxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPigpPiYgcG9pbnRlclRvTGVmdFZhbHVlRmFjdG9yeSkK
K3sKKyAgICBpZiAoZG90RXhwcmVzc2lvbi5hbmRGdW5jdGlvbigpKSB7CisgICAgICAgIC8vICpv
cGVyYXRvciYuZm9vKCZ2KSA9IG5ld1ZhbHVlCisgICAgICAgIGlmICghZG90RXhwcmVzc2lvbi50
aHJlYWRBbmRGdW5jdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAgICAgCisgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1l
bnRzOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHBvaW50ZXJUb0xlZnRWYWx1ZUZhY3Rvcnko
KSk7CisgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2Fs
bEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5n
KGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1
bWVudHMpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi50
aHJlYWRBbmRGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGNhbGxFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgICAgIGNhbGxF
eHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigp
KTsKKworICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9y
aWdpbigpKSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworICAgICAgICBkZXJlZmVyZW5jZUV4
cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oZG90RXhwcmVzc2lv
bi50aHJlYWRBbmRGdW5jdGlvbigpLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7Cisg
ICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0
VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworCisgICAgICAgIGF1dG8gYXNz
aWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Np
b24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZShkZXJlZmVy
ZW5jZUV4cHJlc3Npb24pLCBXVEZNb3ZlKG5ld1ZhbHVlKSk7CisgICAgICAgIGFzc2lnbm1lbnRF
eHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGRvdEV4cHJlc3Np
b24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwor
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworCisgICAgICAgIHJldHVybiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihX
VEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgfQorCisgICAgLy8gdiA9IG9wZXJh
dG9yLmZvbz0odiwgbmV3VmFsdWUpCisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uc2V0RnVuY3Rp
b24oKSk7CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50
czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGxlZnRWYWx1ZUZhY3RvcnkoKSk7CisgICAgYXJndW1l
bnRzLmFwcGVuZChXVEZNb3ZlKG5ld1ZhbHVlKSk7CisgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBTdHJpbmcoZG90RXhwcmVzc2lvbi5zZXRGdW5jdGlvbigpLT5uYW1l
KCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGRv
dEV4cHJlc3Npb24uc2V0RnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHBy
ZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgY2FsbEV4
cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCkpOworCisg
ICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25t
ZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBsZWZ0
VmFsdWVGYWN0b3J5KCksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICBhc3NpZ25tZW50
RXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCktPnR5cGUoKS5j
bG9uZSgpKTsKKyAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpSaWdodFZhbHVlKCkpOworCisgICAgcmV0dXJuIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
KFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKK30KKworc3RhdGljIE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBnZXR0ZXJDYWxsKEFTVDo6RG90RXhwcmVzc2lvbiYg
ZG90RXhwcmVzc2lvbiwgY29uc3Qgc3RkOjpmdW5jdGlvbjxVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPigpPiYgbGVmdFZhbHVlRmFjdG9yeSwgY29uc3Qgc3RkOjpmdW5jdGlvbjxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPigpPiYgcG9pbnRlclRvTGVmdFZhbHVlRmFjdG9yeSkKK3sKKyAgICBp
ZiAoZG90RXhwcmVzc2lvbi5hbmRGdW5jdGlvbigpKSB7CisgICAgICAgIC8vICpvcGVyYXRvciYu
Zm9vKCZ2KQorICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBWZWN0
b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChwb2ludGVyVG9MZWZ0VmFsdWVGYWN0b3J5KCkpOworICAgICAgICBhdXRvIGNh
bGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6
VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhkb3RFeHByZXNzaW9uLnRocmVh
ZEFuZEZ1bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgIGNh
bGxFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+
dHlwZSgpLmNsb25lKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rp
b24oKmRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSk7CisKKyAgICAgICAgYXV0byBk
ZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHBy
ZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUoY2Fs
bEV4cHJlc3Npb24pKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24o
KS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBkZXJlZmVyZW5jZUV4
cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9KTsKKworICAgICAgICByZXR1cm4gVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4oV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pKTsKKyAgICB9CisKKyAgICAvLyBv
cGVyYXRvci5mb28odikKKyAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpKTsK
KyAgICAKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsK
KyAgICBhcmd1bWVudHMuYXBwZW5kKGxlZnRWYWx1ZUZhY3RvcnkoKSk7CisgICAgYXV0byBjYWxs
RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRv
a2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJpbmcoZG90RXhwcmVzc2lvbi5nZXRGdW5j
dGlvbigpLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIGNhbGxFeHByZXNzaW9u
LT5zZXRUeXBlKGRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOwor
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7
CisgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLmdldEZ1bmN0
aW9uKCkpOworCisgICAgcmV0dXJuIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUo
Y2FsbEV4cHJlc3Npb24pKTsKK30KKworc3RydWN0IE1vZGlmeVJlc3VsdCB7CisgICAgQVNUOjpF
eHByZXNzaW9uJiBpbm5lckxlZnRWYWx1ZTsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4+IGV4cHJlc3Npb25zOworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPj4gdmFyaWFibGVEZWNsYXJhdGlvbnM7Cit9Oworc3RydWN0IE1vZGlmaWNh
dGlvblJlc3VsdCB7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHBy
ZXNzaW9uczsKKyAgICBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiByZXN1bHQ7Cit9Oworc3Rh
dGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90
RXhwcmVzc2lvbiwgc3RkOjpmdW5jdGlvbjxPcHRpb25hbDxNb2RpZmljYXRpb25SZXN1bHQ+KE9w
dGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmKT4gbW9kaWZpY2F0aW9uKQorewor
ICAgIC8vIENvbnNpZGVyIGEuYi5jLmQrKzsKKyAgICAvLyBUaGlzIHdvdWxkIGdldCB0cmFuc2Zv
cm1lZCBpbnRvOgorICAgIC8vCisgICAgLy8gU3RlcCAxOgorICAgIC8vIHAgPSAmYTsKKyAgICAv
LworICAgIC8vIFN0ZXAgMjoKKyAgICAvLyBxID0gb3BlcmF0b3IuYigqcCk7CisgICAgLy8gciA9
IG9wZXJhdG9yLmMocSk7CisgICAgLy8KKyAgICAvLyBTdGVwIDM6CisgICAgLy8gb2xkVmFsdWUg
PSBvcGVyYXRvci5kKHIpOworICAgIC8vIG5ld1ZhbHVlID0gLi4uOworICAgIC8vCisgICAgLy8g
U3RlcCA0OgorICAgIC8vIHIgPSBvcGVyYXRvci5kPShyLCBuZXdWYWx1ZSk7CisgICAgLy8gcSA9
IG9wZXJhdG9yLmM9KHEsIHIpOworICAgIC8vCisgICAgLy8gU3RlcCA0OgorICAgIC8vICpwID0g
b3BlcmF0b3IuYj0oKnAsIHEpOworCisgICAgLy8gSWYgdGhlIGV4cHJlc3Npb24gaXMgYS5iLmMu
ZCA9IGUsIFN0ZXAgMyBkaXNhcHBlYXJzIGFuZCAibmV3VmFsdWUiIGluIHN0ZXAgNCBiZWNvbWVz
ICJlIi4KKyAgICAKKworICAgIC8vIEZpbmQgdGhlICIuYiIgIi5jIiBhbmQgIi5kIiBleHByZXNz
aW9ucy4KKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkRvdEV4cHJlc3Np
b24+PiBjaGFpbjsKKyAgICBBU1Q6OkRvdEV4cHJlc3Npb24qIGl0ZXJhdG9yID0gJmRvdEV4cHJl
c3Npb247CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgY2hhaW4uYXBwZW5kKCppdGVyYXRv
cik7CisgICAgICAgIEFTU0VSVChpdGVyYXRvci0+YmFzZSgpLnR5cGVBbm5vdGF0aW9uKCkpOwor
ICAgICAgICBpZiAoaXRlcmF0b3ItPmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVz
c1NwYWNlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgQVNTRVJUKCFpdGVyYXRvci0+
YmFzZSgpLnR5cGVBbm5vdGF0aW9uKCktPmlzUmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJU
KGlzPEFTVDo6RG90RXhwcmVzc2lvbj4oaXRlcmF0b3ItPmJhc2UoKSkpOyAvLyBGSVhNRTogTWFr
ZSB0aGlzIHdvcmsgd2l0aCBpbmRleCBleHByZXNzaW9ucworICAgICAgICBpdGVyYXRvciA9ICZk
b3duY2FzdDxBU1Q6OkRvdEV4cHJlc3Npb24+KGl0ZXJhdG9yLT5iYXNlKCkpOworICAgIH0KKyAg
ICBhdXRvIGxlZnRFeHByZXNzaW9uID0gaXRlcmF0b3ItPnRha2VCYXNlKCk7CisgICAgQVNUOjpF
eHByZXNzaW9uJiBpbm5lckxlZnRFeHByZXNzaW9uID0gbGVmdEV4cHJlc3Npb247CisKKyAgICAv
LyBDcmVhdGUgInAiIHZhcmlhYmxlLgorICAgIEFTU0VSVChsZWZ0RXhwcmVzc2lvbi0+cmVzb2x2
ZWRUeXBlKCkpOworICAgIGF1dG8gcG9pbnRlclZhcmlhYmxlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihsZWZ0RXhwcmVzc2lvbi0+b3JpZ2lu
KCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KG1ha2VV
bmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGxlZnRFeHByZXNzaW9uLT5v
cmlnaW4oKSksICpsZWZ0RXhwcmVzc2lvbi0+dHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NT
cGFjZSgpLCBsZWZ0RXhwcmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpKSwgU3RyaW5n
KCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKworICAgIC8vIENyZWF0ZSAicSIgYW5k
ICJyIiB2YXJpYWJsZXMuCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24+PiBpbnRlcm1lZGlhdGVWYXJpYWJsZXM7CisgICAgaW50ZXJtZWRpYXRlVmFyaWFibGVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2hhaW4uc2l6ZSgpIC0gMSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBjaGFpbi5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBkb3RFeHBy
ZXNzaW9uID0gc3RhdGljX2Nhc3Q8QVNUOjpEb3RFeHByZXNzaW9uJj4oY2hhaW5baV0pOworICAg
ICAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGludGVy
bWVkaWF0ZVZhcmlhYmxlcy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNU
OjpRdWFsaWZpZXJzKCksIGRvdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCktPmNsb25lKCksIFN0
cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIH0KKworICAgIFZlY3Rv
cjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisKKyAgICAvLyBTdGVw
IDE6CisgICAgeworICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihpbm5lckxlZnRF
eHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZShsZWZ0RXhwcmVzc2lvbikpOworICAgICAgICBt
YWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJU
eXBlPihMZXhlcjo6VG9rZW4oaW5uZXJMZWZ0RXhwcmVzc2lvbi5vcmlnaW4oKSksICppbm5lckxl
ZnRFeHByZXNzaW9uLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSwgaW5uZXJM
ZWZ0RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSkpOworICAgICAgICBtYWtlUG9p
bnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKwor
ICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJs
ZSkpOworICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOworICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUo
KSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlz
IHJpZ2h0PworCisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihpbm5lckxlZnRFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSksIFdURk1vdmUobWFr
ZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRU
eXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVu
dEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAg
ICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOwor
ICAgIH0KKworICAgIC8vIFN0ZXAgMjoKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIHBy
ZXZpb3VzID0gbnVsbHB0cjsKKyAgICBhdXRvIHByZXZpb3VzTGVmdFZhbHVlID0gWyZdKCkgLT4g
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICBpZiAocHJldmlvdXMpIHsKKyAg
ICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAoKnByZXZpb3VzKSk7
CisgICAgICAgICAgICBBU1NFUlQocHJldmlvdXMtPnR5cGUoKSk7CisgICAgICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwcmV2aW91cy0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1
ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0
PworICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJlbmNlOworICAgICAgICB9CisgICAg
CisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlh
YmxlKSk7CisgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAg
IHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9u
ZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRo
aXMgcmlnaHQ/CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVz
c2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpKTsKKyAgICAgICAgQVNT
RVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNz
aW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUt
PnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuYWRkcmVzc1NwYWNlKCkgfSk7
CisgICAgICAgIHJldHVybiBkZXJlZmVyZW5jZUV4cHJlc3Npb247CisgICAgfTsKKyAgICBhdXRv
IHBvaW50ZXJUb1ByZXZpb3VzTGVmdFZhbHVlID0gWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4geworICAgICAgICBpZiAocHJldmlvdXMpIHsKKyAgICAgICAgICAgIGF1dG8gdmFy
aWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAoKnByZXZpb3VzKSk7CisgICAgICAgICAgICBBU1NF
UlQocHJldmlvdXMtPnR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0
VHlwZShwcmV2aW91cy0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1Nw
YWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBh
dXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92
ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOworICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzLT50eXBl
KCkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlx
dWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2lu
KCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBwcmV2aW91cy0+dHlwZSgpLT5jbG9uZSgp
KSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlUG9pbnRlckV4cHJl
c3Npb247CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
Ojp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxl
LT50eXBlKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFy
aWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQg
fSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworICAgICAgICByZXR1cm4gdmFyaWFibGVSZWZl
cmVuY2U7CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gY2hhaW4uc2l6ZSgpIC0gMTsgaSA+
IDA7IC0taSkgeworICAgICAgICBBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24gPSBj
aGFpbltpXTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xh
cmF0aW9uID0gaW50ZXJtZWRpYXRlVmFyaWFibGVzW2kgLSAxXTsKKworICAgICAgICBhdXRvIGNh
bGxFeHByZXNzaW9uID0gZ2V0dGVyQ2FsbChkb3RFeHByZXNzaW9uLCBwcmV2aW91c0xlZnRWYWx1
ZSwgcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUpOworCisgICAgICAgIGlmICghY2FsbEV4cHJl
c3Npb24pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8g
dmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+
KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAg
ICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICB2YXJpYWJs
ZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7
CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJp
Z2h0PworCisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9y
aWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSksIFdURk1vdmUoKmNhbGxFeHByZXNz
aW9uKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHZhcmlhYmxlRGVj
bGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBleHByZXNz
aW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICAKKyAg
ICAgICAgcHJldmlvdXMgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKKyAgICB9CisgICAgYXV0byBs
YXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24gPSBnZXR0ZXJDYWxsKGNoYWluWzBdLCBwcmV2aW91c0xl
ZnRWYWx1ZSwgcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUpOworCisgICAgLy8gTW9kaWZpY2F0
aW9uUmVzdWx0KFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYpCisgICAgLy8gU3RlcCAzOgor
ICAgIGF1dG8gbW9kaWZpY2F0aW9uUmVzdWx0ID0gbW9kaWZpY2F0aW9uKFdURk1vdmUobGFzdEdl
dHRlckNhbGxFeHByZXNzaW9uKSk7CisgICAgaWYgKCFtb2RpZmljYXRpb25SZXN1bHQpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtb2Rp
ZmljYXRpb25SZXN1bHQtPmV4cHJlc3Npb25zLnNpemUoKTsgKytpKQorICAgICAgICBleHByZXNz
aW9ucy5hcHBlbmQoV1RGTW92ZShtb2RpZmljYXRpb25SZXN1bHQtPmV4cHJlc3Npb25zW2ldKSk7
CisKKyAgICAvLyBTdGVwIDQ6CisgICAgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gcmlnaHRW
YWx1ZSA9IFdURk1vdmUobW9kaWZpY2F0aW9uUmVzdWx0LT5yZXN1bHQpOworICAgIEFTU0VSVChy
aWdodFZhbHVlLT5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byBleHByZXNzaW9uVHlwZSA9IHJp
Z2h0VmFsdWUtPnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY2hhaW4uc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIEFTVDo6RG90RXhwcmVzc2lv
biYgZG90RXhwcmVzc2lvbiA9IGNoYWluW2ldOworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBpbnRlcm1lZGlhdGVWYXJpYWJsZXNbaV07CisK
KyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IHNldHRlckNhbGwoZG90RXhwcmVz
c2lvbiwgV1RGTW92ZShyaWdodFZhbHVlKSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4geworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2
YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJh
dGlvbi50eXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUodmFy
aWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisgICAgICAgICAgICBy
ZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CisgICAgICAgIH0sIFsmXSgpIC0+IFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgQVNTRVJUKHZhcmlh
YmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5z
ZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAg
IHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFT
VDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisg
ICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdp
bigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOworICAgICAgICAgICAgQVNTRVJUKHZh
cmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVz
c2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tl
bihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgdmFy
aWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgICAgIG1ha2VQb2lu
dGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VQb2ludGVyRXhwcmVzc2lvbjsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgaWYgKCFhc3NpZ25tZW50RXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoKmFzc2lnbm1l
bnRFeHByZXNzaW9uKSk7CisKKyAgICAgICAgcmlnaHRWYWx1ZSA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJs
ZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUo
KSk7CisgICAgICAgIHJpZ2h0VmFsdWUtPnNldFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBl
KCktPmNsb25lKCkpOworICAgICAgICByaWdodFZhbHVlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0
aGlzIHJpZ2h0PworICAgIH0KKworICAgIC8vIFN0ZXAgNToKKyAgICB7CisgICAgICAgIGF1dG8g
YXNzaWdubWVudEV4cHJlc3Npb24gPSBzZXR0ZXJDYWxsKGNoYWluW2NoYWluLnNpemUoKSAtIDFd
LCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
PiB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50
ZXJWYXJpYWJsZSkpOworICAgICAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgp
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJs
ZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQg
fSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGRlcmVmZXJl
bmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+
KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJl
ZmVyZW5jZSkpOworICAgICAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsK
KyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6
OlBvaW50ZXJUeXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xv
bmUoKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJW
YXJpYWJsZS0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKKyAgICAgICAgICAgIHJldHVybiBk
ZXJlZmVyZW5jZUV4cHJlc3Npb247CisgICAgICAgIH0sIFsmXSgpIC0+IFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+IHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtl
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6
OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlh
YmxlLT50eXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9p
bnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZl
cmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisgICAgICAgICAgICByZXR1
cm4gdmFyaWFibGVSZWZlcmVuY2U7CisgICAgICAgIH0pOworCisgICAgICAgIGlmICghYXNzaWdu
bWVudEV4cHJlc3Npb24pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
ICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKCphc3NpZ25tZW50RXhwcmVzc2lvbikpOwor
ICAgIH0KKworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4g
dmFyaWFibGVEZWNsYXJhdGlvbnM7CisgICAgdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdU
Rk1vdmUocG9pbnRlclZhcmlhYmxlKSk7CisgICAgZm9yIChhdXRvJiBpbnRlcm1lZGlhdGVWYXJp
YWJsZSA6IGludGVybWVkaWF0ZVZhcmlhYmxlcykKKyAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlv
bnMuYXBwZW5kKFdURk1vdmUoaW50ZXJtZWRpYXRlVmFyaWFibGUpKTsKKworICAgIHJldHVybiB7
eyBpbm5lckxlZnRFeHByZXNzaW9uLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSwgV1RGTW92ZSh2YXJp
YWJsZURlY2xhcmF0aW9ucykgfX07Cit9CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQo
QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAg
QVNTRVJUKGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKS50eXBlQW5ub3RhdGlvbigpKTsKKyAg
ICBpZiAoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRB
ZGRyZXNzU3BhY2UoKSkgeworICAgICAgICBzaW1wbGlmeUxlZnRWYWx1ZShhc3NpZ25tZW50RXhw
cmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4
cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCFh
c3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkudHlwZUFubm90YXRpb24oKS0+aXNSaWdodFZhbHVl
KCkpOworICAgIGlmICghaXM8QVNUOjpEb3RFeHByZXNzaW9uPihhc3NpZ25tZW50RXhwcmVzc2lv
bi5sZWZ0KCkpKSB7CisgICAgICAgIHNldEVycm9yKCk7IC8vIEZJWE1FOiBNYWtlIHRoaXMgd29y
ayB3aXRoIGluZGV4IGV4cHJlc3Npb25zLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUKGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkucmVzb2x2ZWRUeXBlKCkpOworICAg
IGF1dG8gdHlwZSA9IGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkucmVzb2x2ZWRUeXBlKCkt
PmNsb25lKCk7CisKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24u
cmlnaHQoKSk7CisKKyAgICBhdXRvIG1vZGlmeVJlc3VsdCA9IG1vZGlmeShkb3duY2FzdDxBU1Q6
OkRvdEV4cHJlc3Npb24+KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSksIFsmXShPcHRpb25h
bDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4mJikgLT4gT3B0aW9uYWw8TW9kaWZpY2F0aW9u
UmVzdWx0PiB7CisgICAgICAgIHJldHVybiB7eyBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4+KCksIGFzc2lnbm1lbnRFeHByZXNzaW9uLnRha2VSaWdodCgpIH19OworICAgIH0pOwor
CisgICAgaWYgKCFtb2RpZnlSZXN1bHQpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBzaW1wbGlmeUxlZnRWYWx1ZShtb2RpZnlSZXN1bHQtPmlubmVy
TGVmdFZhbHVlKTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHByZXNz
aW9uKSA8PSBzaXplb2YoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiksICJBc3NpZ25tZW50IGV4
cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMgd2l0
aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgIExleGVyOjpUb2tlbiBvcmlnaW4g
PSBhc3NpZ25tZW50RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICB2b2lkKiBsb2NhdGlvbiA9ICZh
c3NpZ25tZW50RXhwcmVzc2lvbjsKKyAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi5+QXNzaWdubWVu
dEV4cHJlc3Npb24oKTsKKyAgICBhdXRvKiBjb21tYUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9u
KSBBU1Q6OkNvbW1hRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobW9kaWZ5UmVz
dWx0LT5leHByZXNzaW9ucykpOworICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZShXVEZNb3Zl
KHR5cGUpKTsKKyAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6Umln
aHRWYWx1ZSgpKTsKKworICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IG1vZGlm
eVJlc3VsdC0+dmFyaWFibGVEZWNsYXJhdGlvbnMpCisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJh
dGlvbnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworfQorCit2b2lkIFBy
b3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKK3sKKyAgICBBU1NFUlQocmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpKTsKKyAgICBpZiAocmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVz
c1NwYWNlKCkpIHsKKyAgICAgICAgLy8gQ29uc2lkZXIgYSsrOworICAgICAgICAvLyBUaGlzIHdv
dWxkIGdldCB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAgICAvLworICAgICAgICAvLyBwID0gJmE7
CisgICAgICAgIC8vIG9sZFZhbHVlID0gKnA7CisgICAgICAgIC8vIG5ld1ZhbHVlID0gLi4uOwor
ICAgICAgICAvLyAqcCA9IG5ld1ZhbHVlOworCisgICAgICAgIEFTU0VSVChyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byBi
YXNlVHlwZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRU
eXBlKCktPmNsb25lKCk7CisgICAgICAgIGF1dG8gcG9pbnRlclR5cGUgPSBtYWtlVW5pcXVlUmVm
PEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmxlZnRWYWx1ZSgpLm9yaWdpbigpKSwgKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZh
bHVlKCkudHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpLCBiYXNlVHlwZS0+Y2xv
bmUoKSk7CisKKyAgICAgICAgYXV0byBwb2ludGVyVmFyaWFibGUgPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+KHBvaW50ZXJUeXBlLT5jbG9uZSgpKSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKworICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8g
b3JpZ2luID0gTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVl
KCkub3JpZ2luKCkpOworICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3Jp
Z2luKSwgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTGVmdFZhbHVlKCkpOworICAgICAg
ICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9uZSgp
KTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNl
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVm
ZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZl
cmVuY2UtPnNldFR5cGUocG9pbnRlclR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRy
ZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAg
ICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24+KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5j
ZSksIFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAgICAgICAgICBhc3NpZ25t
ZW50RXhwcmVzc2lvbi0+c2V0VHlwZShwb2ludGVyVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAg
ICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVl
KCkpOworCisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50
RXhwcmVzc2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byB2
YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+
KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAg
ICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGUocG9pbnRlclR5cGUtPmNsb25lKCkpOwor
ICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlz
IHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbihyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTEp
KTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS0+
Y2xvbmUoKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJl
ZmVyZW5jZTIgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhcmlhYmxlUmVmZXJlbmNl
KCk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGUoYmFzZVR5cGUtPmNs
b25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1F
OiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9u
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4o
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZl
cmVuY2UyKSwgV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGFz
c2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAg
ICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFs
dWUoKSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1l
bnRFeHByZXNzaW9uKSk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRv
IHZhcmlhYmxlUmVmZXJlbmNlID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJpYWJs
ZVJlZmVyZW5jZSgpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUoYmFz
ZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsg
Ly8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gbmV3VmFsdWVFeHBy
ZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTmV3VmFsdWVFeHByZXNzaW9u
KCk7CisgICAgICAgICAgICBBU1NFUlQobmV3VmFsdWVFeHByZXNzaW9uKTsgLy8gRklYTUU6IFJl
bGF4IHRoaXMgY29uc3RyYWludC4KKyAgICAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Np
b24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tl
bihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJl
ZmVyZW5jZSksIFdURk1vdmUoKm5ld1ZhbHVlRXhwcmVzc2lvbikpOworICAgICAgICAgICAgYXNz
aWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAg
ICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1
ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVu
dEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8g
dmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
PihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAg
ICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9uZSgpKTsK
KyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpM
ZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhp
cyByaWdodD8KKworICAgICAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2Ux
KSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUt
PmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVS
ZWZlcmVuY2UyID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJpYWJsZVJlZmVyZW5j
ZSgpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlKGJhc2VUeXBlLT5j
bG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhN
RTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGRlcmVmZXJlbmNl
RXhwcmVzc2lvbiksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSk7CisgICAgICAgICAgICBh
c3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAg
ICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZh
bHVlKCkpOworCisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25t
ZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXN1bHRFeHByZXNz
aW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlUmVzdWx0RXhwcmVzc2lvbigpOwor
ICAgICAgICBBU1NFUlQocmVzdWx0RXhwcmVzc2lvbik7IC8vIEZJWE1FOiBCZSByZXNpbGllbnQg
dG8gdGhpcyBiZWluZyBudWxsLgorICAgICAgICBBU1NFUlQoKCpyZXN1bHRFeHByZXNzaW9uKS0+
cmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHR5cGUgPSAoKnJlc3VsdEV4cHJlc3Npb24p
LT5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdU
Rk1vdmUoKnJlc3VsdEV4cHJlc3Npb24pKTsKKworICAgICAgICBVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uPiBvbGRWYXJpYWJsZURlY2xhcmF0aW9uID0gcmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi50YWtlT2xkVmFsdWUoKTsKKyAgICAgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4gbmV3VmFyaWFibGVEZWNsYXJhdGlvbiA9IHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24udGFrZU5ld1ZhbHVlKCk7CisKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
QVNUOjpDb21tYUV4cHJlc3Npb24pIDw9IHNpemVvZihBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24pLCAiUmVhZE1vZGlmeVdyaXRlIGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBi
ZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIp
OworICAgICAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5vcmlnaW4oKTsKKyAgICAgICAgdm9pZCogbG9jYXRpb24gPSAmcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbjsKKyAgICAgICAgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5+UmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbigpOworICAgICAgICBhdXRvKiBjb21tYUV4cHJlc3Npb24gPSBuZXcgKGxv
Y2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoZXhw
cmVzc2lvbnMpKTsKKyAgICAgICAgY29tbWFFeHByZXNzaW9uLT5zZXRUeXBlKFdURk1vdmUodHlw
ZSkpOworICAgICAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6Umln
aHRWYWx1ZSgpKTsKKworICAgICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZN
b3ZlKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFw
cGVuZChXVEZNb3ZlKG9sZFZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgbV92YXJpYWJs
ZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShuZXdWYXJpYWJsZURlY2xhcmF0aW9uKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoIXJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24ubGVmdFZhbHVlKCkudHlwZUFubm90YXRpb24oKS0+aXNSaWdodFZhbHVlKCkpOworICAg
IGlmICghaXM8QVNUOjpEb3RFeHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxl
ZnRWYWx1ZSgpKSkgeworICAgICAgICBzZXRFcnJvcigpOyAvLyBGSVhNRTogTWFrZSB0aGlzIHdv
cmsgd2l0aCBpbmRleCBleHByZXNzaW9ucy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBh
dXRvIG1vZGlmeVJlc3VsdCA9IG1vZGlmeShkb3duY2FzdDxBU1Q6OkRvdEV4cHJlc3Npb24+KHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpLCBbJl0oT3B0aW9uYWw8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYgbGFzdEdldHRlckNhbGxFeHByZXNzaW9uKSAtPiBPcHRp
b25hbDxNb2RpZmljYXRpb25SZXN1bHQ+IHsKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKyAgICAgICAgaWYgKCFsYXN0R2V0dGVyQ2FsbEV4
cHJlc3Npb24pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSByZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLm9sZFZhcmlhYmxlUmVmZXJlbmNlKCk7CisgICAgICAgICAgICBBU1NFUlQocmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAg
ICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlh
YmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAg
ICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2ln
bm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5s
ZWZ0VmFsdWUoKS5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3Zl
KCpsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHBy
ZXNzaW9uLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVz
b2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhw
cmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAg
fQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSByZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCk7CisgICAgICAgICAg
ICBBU1NFUlQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5
cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJp
Z2h0PworCisgICAgICAgICAgICBhdXRvIG5ld1ZhbHVlRXhwcmVzc2lvbiA9IHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24udGFrZU5ld1ZhbHVlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgQVNT
RVJUKG5ld1ZhbHVlRXhwcmVzc2lvbik7IC8vIEZJWE1FOiBSZWxheCB0aGlzIGNvbnN0cmFpbnQK
KyAgICAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFT
VDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSks
IFdURk1vdmUoKm5ld1ZhbHVlRXhwcmVzc2lvbikpOworICAgICAgICAgICAgYXNzaWdubWVudEV4
cHJlc3Npb24tPnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5y
ZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lv
bi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBl
eHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHt7IFdURk1vdmUoZXhwcmVzc2lvbnMpLCByZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCkgfX07CisgICAgfSk7CisKKyAg
ICBpZiAoIW1vZGlmeVJlc3VsdCkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIHNpbXBsaWZ5TGVmdFZhbHVlKG1vZGlmeVJlc3VsdC0+aW5uZXJMZWZ0
VmFsdWUpOworCisgICAgYXV0byByZXN1bHRFeHByZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi50YWtlUmVzdWx0RXhwcmVzc2lvbigpOworICAgIEFTU0VSVChyZXN1bHRFeHByZXNz
aW9uKTsgLy8gRklYTUU6IEJlIHJlc2lsaWVudCB0byB0aGlzIGJlaW5nIG51bGwuCisgICAgQVNT
RVJUKCgqcmVzdWx0RXhwcmVzc2lvbiktPnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHR5cGUg
PSAoKnJlc3VsdEV4cHJlc3Npb24pLT5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICBtb2Rp
ZnlSZXN1bHQtPmV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKCpyZXN1bHRFeHByZXNzaW9uKSk7
CisKKyAgICBVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBvbGRWYXJpYWJsZURl
Y2xhcmF0aW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlT2xkVmFsdWUoKTsKKyAg
ICBVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBuZXdWYXJpYWJsZURlY2xhcmF0
aW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTmV3VmFsdWUoKTsKKworICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKSwgIlJlYWRNb2RpZnlXcml0ZSBleHByZXNzaW9ucyBu
ZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGNvbW1hIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRp
bmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gcmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICB2b2lkKiBsb2NhdGlvbiA9ICZyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uOworICAgIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uflJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24oKTsKKyAgICBhdXRvKiBjb21tYUV4cHJlc3Npb24gPSBuZXcg
KGxvY2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUo
bW9kaWZ5UmVzdWx0LT5leHByZXNzaW9ucykpOworICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlw
ZShXVEZNb3ZlKHR5cGUpKTsKKyAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlv
biA6IG1vZGlmeVJlc3VsdC0+dmFyaWFibGVEZWNsYXJhdGlvbnMpCisgICAgICAgIG1fdmFyaWFi
bGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAg
IG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUob2xkVmFyaWFibGVEZWNsYXJh
dGlvbikpOworICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobmV3VmFy
aWFibGVEZWNsYXJhdGlvbikpOworfQorCitib29sIFByb3BlcnR5UmVzb2x2ZXI6OnNpbXBsaWZ5
UmlnaHRWYWx1ZShBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgTGV4
ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CisKKyAgICBpZiAoYXV0
byogYW5kRnVuY3Rpb24gPSBkb3RFeHByZXNzaW9uLmFuZEZ1bmN0aW9uKCkpIHsKKyAgICAgICAg
YXV0byYgYmFzZSA9IGRvdEV4cHJlc3Npb24uYmFzZSgpOworICAgICAgICBBU1NFUlQoYmFzZS5y
ZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VSVChiYXNlLnR5cGVBbm5vdGF0aW9uKCkpOwor
ICAgICAgICBpZiAoYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gYmFzZS50eXBlQW5ub3RhdGlvbigp
LT5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHBy
ZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6
OlRva2VuKG9yaWdpbiksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7CisgICAgICAgICAgICBt
YWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJU
eXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGJhc2UucmVzb2x2
ZWRUeXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBWZWN0
b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAgICAg
ICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Np
b24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBTdHJpbmcoYW5kRnVuY3Rpb24tPm5hbWUoKSksIFdU
Rk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShh
bmRGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGNhbGxF
eHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kRnVuY3Rpb24pOworCisgICAgICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbikgPD0gc2l6ZW9mKEFT
VDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJl
Y29tZSBkZXJlZmVyZW5jZSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVu
Y2VzIik7CisgICAgICAgICAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOworICAg
ICAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgICAgICAgICAgYXV0
byogZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpEZXJlZmVyZW5j
ZUV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7Cisg
ICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsK
KyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlw
ZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gV2UgaGF2ZSBhbiBhbmRlciwgYnV0IG5vIGxlZnQgdmFsdWUgdG8g
Y2FsbCBpdCBvbi4gTGV0J3Mgc2F2ZSB0aGUgdmFsdWUgaW50byBhIHRlbXBvcmFyeSB2YXJpYWJs
ZSB0byBjcmVhdGUgYSBsZWZ0IHZhbHVlLgorICAgICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5
IGlubGluaW5nIHRoZSBmdW5jdGlvbnMgdGhlIHNwZWMgc2F5cyBhcmUgZ2VuZXJhdGVkLgorICAg
ICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiks
IEFTVDo6UXVhbGlmaWVycygpLCBiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpLCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVS
ZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZh
cmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgdmFy
aWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOwor
ICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZh
bHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKworICAgICAgICBhdXRvIGFzc2ln
bm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9u
PihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTEpLCBkb3RF
eHByZXNzaW9uLnRha2VCYXNlKCkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0
VHlwZShiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVudEV4
cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAg
ICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJl
ZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlwZShiYXNlLnJlc29sdmVkVHlw
ZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisKKyAg
ICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFr
ZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgV1RGTW92ZSh2YXJpYWJs
ZVJlZmVyZW5jZTIpKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1h
a2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpKTsKKyAg
ICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0
VmFsdWUoKSk7CisKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBh
cmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9pbnRlckV4
cHJlc3Npb24pKTsKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFN0cmluZyhhbmRGdW5j
dGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Np
b24tPnNldFR5cGUoYW5kRnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY2FsbEV4
cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAg
Y2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCphbmRGdW5jdGlvbik7CisKKyAgICAgICAgYXV0
byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VF
eHByZXNzaW9uPihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAg
ICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRl
clR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAg
ICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFs
dWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworCisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNz
aW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGNvbW1hIGV4
cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgdm9p
ZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKKyAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90
RXhwcmVzc2lvbigpOworICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+
IGV4cHJlc3Npb25zOworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25t
ZW50RXhwcmVzc2lvbikpOworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShkZXJl
ZmVyZW5jZUV4cHJlc3Npb24pKTsKKyAgICAgICAgYXV0byogY29tbWFFeHByZXNzaW9uID0gbmV3
IChsb2NhdGlvbikgQVNUOjpDb21tYUV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3Zl
KGV4cHJlc3Npb25zKSk7CisgICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNs
b25lKCkpOworICAgICAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKworICAgICAgICBtX3Zh
cmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
QVNUOjpDYWxsRXhwcmVzc2lvbikgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3Qg
ZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBjYWxsIGV4cHJlc3Npb25zIHdp
dGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICBBU1NFUlQoZG90RXhwcmVzc2lv
bi5nZXRGdW5jdGlvbigpKTsKKyAgICBhdXRvJiBnZXRGdW5jdGlvbiA9ICpkb3RFeHByZXNzaW9u
LmdldEZ1bmN0aW9uKCk7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBh
cmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChkb3RFeHByZXNzaW9uLnRha2VCYXNlKCkp
OworICAgIHZvaWQqIGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247CisgICAgZG90RXhwcmVzc2lv
bi5+RG90RXhwcmVzc2lvbigpOworICAgIGF1dG8qIGNhbGxFeHByZXNzaW9uID0gbmV3IChsb2Nh
dGlvbikgQVNUOjpDYWxsRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFN0cmluZyhnZXRGdW5j
dGlvbi5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIGNhbGxFeHByZXNzaW9uLT5z
ZXRGdW5jdGlvbihnZXRGdW5jdGlvbik7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZ2V0
RnVuY3Rpb24udHlwZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2NsYXNz
IExlZnRWYWx1ZVNpbXBsaWZpZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgdm9p
ZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cit9OworCit2
b2lkIExlZnRWYWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhw
cmVzc2lvbikKK3sKKyAgICBWaXNpdG9yOjp2aXNpdChkb3RFeHByZXNzaW9uKTsKKyAgICBBU1NF
UlQoZG90RXhwcmVzc2lvbi5iYXNlKCkudHlwZUFubm90YXRpb24oKSk7CisgICAgQVNTRVJUKGRv
dEV4cHJlc3Npb24uYmFzZSgpLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSk7
CisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rpb24oKSk7CisKKyAgICBMZXhlcjo6
VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICBhdXRvKiBhbmRGdW5j
dGlvbiA9IGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rpb24oKTsKKyAgICBhdXRvJiBiYXNlID0gZG90
RXhwcmVzc2lvbi5iYXNlKCk7CisgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gKmRvdEV4cHJl
c3Npb24uYmFzZSgpLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBh
dXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBkb3RFeHByZXNzaW9uLnRha2VCYXNl
KCkpOworICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFT
VDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4pLCBsZWZ0QWRkcmVzc1NwYWNlLCBi
YXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKSk7CisgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9u
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICBWZWN0b3I8VW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5k
KFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAgYXV0byBjYWxsRXhwcmVzc2lv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdp
biksIFN0cmluZyhhbmRGdW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAg
ICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOwor
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7
CisgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCphbmRGdW5jdGlvbik7CisKKyAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbikgPD0gc2l6ZW9m
KEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRv
IGJlY29tZSBkZXJlZmVyZW5jZSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZl
cmVuY2VzIik7CisgICAgdm9pZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKKyAgICBkb3RF
eHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CisgICAgYXV0byogZGVyZWZlcmVuY2VFeHByZXNz
aW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24oV1RGTW92ZShv
cmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgZGVyZWZlcmVuY2VFeHByZXNz
aW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBl
KCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOworfQorCit2b2lkIExl
ZnRWYWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgLy8gRGVyZWZlcmVuY2UgZXhwcmVzc2lvbnMgYXJl
IHRoZSBvbmx5IGV4cHJlc3Npb25zIHdoZXJlIHRoZSBjaGlsZHJlbiBtaWdodCBiZSBtb3JlLXJp
Z2h0IHRoYW4gd2UgYXJlLgorICAgIC8vIEZvciBleGFtcGxlLCBhIGRlcmVmZXJlbmNlIGV4cHJl
c3Npb24gbWF5IGJlIGEgbGVmdCB2YWx1ZSBidXQgaXRzIGNoaWxkIG1heSBiZSBhIGNhbGwgZXhw
cmVzc2lvbiB3aGljaCBpcyBhIHJpZ2h0IHZhbHVlLgorICAgIC8vIExlZnRWYWx1ZVNpbXBsaWZp
ZXIgZG9lc24ndCBoYW5kbGUgcmlnaHQgdmFsdWVzLCBzbyB3ZSBpbnN0ZWFkIG5lZWQgdG8gdXNl
IFByb3BlcnR5UmVzb2x2ZXIuCisgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgZnVuY3Rpb24gY2Fs
bCBhcmd1bWVudHM/CisgICAgUHJvcGVydHlSZXNvbHZlcigpLlZpc2l0b3I6OnZpc2l0KGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6c2ltcGxpZnlM
ZWZ0VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIExlZnRWYWx1ZVNp
bXBsaWZpZXIoKS5WaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKK30KKwordm9pZCByZXNvbHZl
UHJvcGVydGllcyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFByb3BlcnR5UmVzb2x2ZXIoKS5W
aXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNv
bHZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0
eVJlc29sdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIyMDVmOTAyYmNjOTRlY2E5ZWYzM2I1OGRhMWM3MDFh
YjcyYjM0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCByZXNv
bHZlUHJvcGVydGllcyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2Fk
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29s
dmVPdmVybG9hZEltcGwuY3BwCmluZGV4IGU3ODM4Y2UzZjcyNWFlMDlhYmExZWRiNTBhNjU5MmMz
NDYzMTNlZTUuLmRjOTM0ZGJmNzI2YTgxNGEwODA0YjRjY2I1NzUyZGJlY2I4MWYzOGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92
ZXJsb2FkSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApAQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgdW5z
aWduZWQgY29udmVyc2lvbkNvc3QoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBjYW5kaWRhdGUs
IGNvbnN0IFZlY3RvcgogICAgICAgICBjb252ZXJzaW9uQ29zdCArPSBhcmd1bWVudFR5cGVzW2ld
LmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiYpIC0+IHVuc2lnbmVkIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9LCBb
Jl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UpIC0+IHVuc2lnbmVkIHsKLSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jb252ZXJzaW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRl
cnMoKVtpXS50eXBlKCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJl
bmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNvbnZlcnNpb25Db3N0KCpjYW5kaWRhdGUucGFyYW1ldGVy
cygpW2ldLT50eXBlKCkpOwogICAgICAgICB9KSk7CiAgICAgfQogICAgIC8vIFRoZSByZXR1cm4g
dHlwZSBjYW4gbmV2ZXIgYmUgYSBsaXRlcmFsIHR5cGUsIHNvIGl0cyBjb252ZXJzaW9uIGNvc3Qg
aXMgYWx3YXlzIDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFJlc29sdmluZ1R5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCmluZGV4IGNhNWNiYjU5MjljZjllMTgxOGMyY2Q3
NDFlNzlkOTM2Y2FhYzY4ZWUuLjUwZTUzMmI2YTZlODJmMWUwMmEwNDY3OTFiOGU2Njk2ZDViMTFl
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2aW5nVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUmVzb2x2aW5nVHlwZS5oCkBAIC03Miw2ICs3Miw3IEBAIHByaXZhdGU6CiAKIC8vIFRo
aXMgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGEgVmFyaWFudC4KIC8vIEl0IGV4aXN0cyBzbyB3
ZSBjYW4gbWFrZSBzdXJlIHRoYXQgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZG9lcyB0aGUgcmln
aHQgdGhpbmcuCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3Nhcnku
CiBjbGFzcyBSZXNvbHZpbmdUeXBlIHsKIHB1YmxpYzoKICAgICBSZXNvbHZpbmdUeXBlKCkKQEAg
LTEwMiwxMCArMTAzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0K
IAotICAgIEFTVDo6VW5uYW1lZFR5cGUmIGdldFVubmFtZWRUeXBlKCkKKyAgICBBU1Q6OlVubmFt
ZWRUeXBlKiBnZXRVbm5hbWVkVHlwZSgpCiAgICAgewotICAgICAgICBBU1NFUlQoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpKTsKLSAg
ICAgICAgcmV0dXJuIFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5l
cik7CisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPj4obV9pbm5lcikpCisgICAgICAgICAgICByZXR1cm4gJldURjo6Z2V0PFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcik7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yPiBhdXRvIHZpc2l0KGNv
bnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6dmlzaXQodmlzaXRvciwgc3Rk
OjpkZWNsdmFsPFZhcmlhbnQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBSZWZQdHI8UmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2U+PiY+KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0IGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CmluZGV4
IDc5YTJjNjBlMDYwNmIxMzI2NWJiMjMwMzY3YWNmOTcyNTBiZjlhN2YuLjBmYjVkMzkzMmQ0NWZi
MGFmZGUwOTU5NjE1ZWJkODFmZWFhOTFjNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQKQEAg
LTM5MCw0ICszOTAsMTMgQEAgbmF0aXZlIHZvaWQgQWxsTWVtb3J5QmFycmllcldpdGhHcm91cFN5
bmMoKTsKIG5hdGl2ZSB2b2lkIERldmljZU1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jKCk7CiBu
YXRpdmUgdm9pZCBHcm91cE1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jKCk7CiAKK29wZXJhdG9y
IGZsb2F0NChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSB7CisgICAgZmxvYXQ0
IHJlc3VsdDsKKyAgICByZXN1bHQueCA9IHg7CisgICAgcmVzdWx0LnkgPSB5OworICAgIHJlc3Vs
dC56ID0gejsKKyAgICByZXN1bHQudyA9IHc7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI4OTAgSW5z
ZXJ0IHRoZSByZXN0IG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uY2UgdGhlIHBhcnNlciBpcyBm
YXN0IGVub3VnaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3Ro
LmNwcAppbmRleCBhZTNjYTY0MjM5ZTNiNTlkMzZhYWFhZWVjN2JhNDcxYmNiNjdjZWI5Li42NWVk
N2FjZjQzZjIwMDQwMjUwZjkwNjZhMTRiNjQwYjU3YmJmMGNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9y
TGVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcApAQCAtNjUsNyArNjUsNyBAQCBib29s
IHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mIHByb2dyYW0pCiAgICAgYm9v
bCBpc09wZXJhdG9yID0gdHJ1ZTsKIAogICAgIGZvciAoYXV0byYgYXJyYXlUeXBlIDogYXJyYXlU
eXBlcykgewotICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIHsgYXJyYXlUeXBlLmdldCgpLmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihhcnJheVR5
cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgYXJyYXlUeXBlLmdldCgpLmNs
b25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNU
OjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRyaW5z
aWNzKCkudWludFR5cGUoKSksICJvcGVyYXRvci5sZW5ndGgiX3N0ciwgV1RGTW92ZShwYXJhbWV0
ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29u
c3RydWN0b3JzLmNwcAppbmRleCBjZDdjMzcwMmFkYmVhMjlhYzE4YzVjYmU2ZGI2MDg3YjllMDJl
ZDhhLi43NGNjOGYxODRlODM1YjNjZTFjNDliNWNlNmVjOGQ2YTRhODY4YzFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCBib29sIHN5
bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICBib29sIGlzT3BlcmF0
b3IgPSB0cnVlOwogCiAgICAgZm9yIChhdXRvJiB1bm5hbWVkVHlwZSA6IHVubmFtZWRUeXBlcykg
ewotICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMo
KSwgeyB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4odW5uYW1lZFR5
cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUuZ2V0KCku
Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJz
LmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRy
aWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksICJv
cGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNP
cGVyYXRvcikpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9y
cyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24+KHN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4obmFtZWRUeXBlKSkgJiYgZG93bmNh
c3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBl
Jj4obmFtZWRUeXBlKSkuaXNBdG9taWMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4o
KSksIG5hbWVkVHlwZS5nZXQoKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdp
bigpKSwgbmFtZWRUeXBlLmdldCgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCk7CiAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAg
ICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2lu
KCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5
cGUuZ2V0KCkpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6
Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1l
cmF0aW9uRnVuY3Rpb25zLmNwcAppbmRleCAxNzk3ZmU1Mzk0YzgxZWFjZDM5NTRhYmM2YThhNjVh
NmM4ZmM5NmUyLi5kNzRhZjMzYTFmMDVhNjkyMjE5YzhjY2U0YWZkY2M5Mjk1MTA5NzFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCkBAIC00
MSw4ICs0MSw4IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0m
IHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJs
ZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKLSAgICAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6
VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNs
YXJhdGlvbjEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMo
KSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9u
RGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAg
ICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5v
cmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4o
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRp
b24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51
bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZh
cmlhYmxlRGVjbGFyYXRpb24xKSk7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZN
b3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CkBAIC01Miw3ICs1Miw3IEBAIGJvb2wgc3ludGhl
c2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0KIAog
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVE
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9r
ZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlv
bikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAg
IGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBl
UmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdp
bigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFt
ZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgp
LCAib3BlcmF0b3IudmFsdWUiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0
LCBpc09wZXJhdG9yKSk7CkBAIC02MSw3ICs2MSw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0
aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0KIAogICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRp
b25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5n
KCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVy
YXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7
CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAg
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsK
ICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpu
dWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3Ig
Y2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3Ip
KTsKQEAgLTcwLDEwICs3MCwxMCBAQCBib29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9u
cyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
KGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51
bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBlbnVtZXJh
dGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBX
VEY6Om51bGxvcHQpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURl
Y2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRv
a2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRp
b24pIH0sICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVs
bG9wdCwgaXNPcGVyYXRvcikpOworICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRy
aWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgIm9wZXJhdG9yIGNhc3QiX3N0
ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiAgICAg
ICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
U3RydWN0dXJlQWNjZXNzb3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKaW5kZXggODI2NzIyMTM3
ZTRjM2UzODIyNzc4MGRhZTEyYjI5YWFiYTFiNzJlZS4uOTQ1ZDBjZWVmYWEzOWNlNTA3NDYwN2Qy
YzQ0OTNjZjM5N2U5ODNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVB
Y2Nlc3NvcnMuY3BwCkBAIC00Niw3ICs0Niw3IEBAIGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFj
Y2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVs
ZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQK
LSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZURl
Y2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVy
OjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSks
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICAg
ICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxl
bWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBzdHJ1
Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBtYWtlU3RyaW5nKCJvcGVyYXRvci4iLCBzdHJ1
Y3R1cmVFbGVtZW50Lm5hbWUoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwg
aXNPcGVyYXRvcikpOwpAQCAtNTYsOCArNTYsOCBAQCBib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVB
Y2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKIAogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQotICAgICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0
cnVjdHVyZURlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCk7Ci0gICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVj
bGFyYXRpb24yKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIHsgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSB9LCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIGF1dG8gdmFy
aWFibGVEZWNsYXJhdGlvbjEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bj4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmlu
aXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
ICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24yID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0
cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CkBA
IC02OSw3ICs2OSw3IEBAIGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFt
JiBwcm9ncmFtKQogICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQKICAg
ICAgICAgICAgIGF1dG8gY3JlYXRlQW5kZXIgPSBbJl0oQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVz
c1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gewogICAgICAgICAgICAg
ICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihM
ZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgQVNU
OjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdp
bigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikpOwotICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVF
bGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RGTW92ZShhcmd1bWVudFR5
cGUpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAg
ICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFy
Z3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAg
ICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKICAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6
UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRk
cmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCmluZGV4
IGVkMmU4YzAwNTJkNmRmZTliZDA3YmFmNzY0OWQ4Y2U0OGM5YjA5YmIuLjJmMjAxNTJjYWI3YWQx
Yzc4MjZiYTNkMjE1MTdhNGVjMDllYWVlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtNTMyLDcgKzUzMiw3IEBA
IHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUcmFwJikKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYWJsZURlY2xhcmF0aW9uIDogdmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQudmFyaWFibGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb24pOworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbi5nZXQoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKQEAgLTU4OSwxNyArNTg5LDE3IEBAIHZv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4
cHJlc3Npb24pCiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24m
IG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBv
aW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBv
aW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24p
CiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZh
bHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmxlZnRWYWx1ZSgpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5vbGRWYWx1ZSgpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsKICAgICBpZiAocmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMzY3NWUwMDRiODY3
M2U5ZDY4YjFjNmJkOGQ0NjhhMGQ0ZDQxMjU3ZS4uY2Y3NDZjZWEyZThjYmQxYzEzZTIwYzk2MTU1
MTA2OWU3MzIwM2MxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTM0OCw2ICszNDgsNyBAQCBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcAogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29s
dmVyLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BV
QWRhcHRlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNjlj
ZmYyMzIxMjhjYmJlOGVhNWNjMWRlZTg0MDcwY2I2Zjg3MDFlLi4yZWQ3N2IyYTYyMjkyMWJjYTUz
MjJhOWJhZWM0ZDlmYzYwZDQ3MWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzkwLDYgKzYzOTAsOCBAQAogCQkxQ0EwQzJF
QzIxRUVENkY2MDBBMTE4NjAgLyogV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQ0ExOUUwMzBEQzI1NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRXZlbnRMb29wTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUxNTBEQzI1NUNBMDA2NUE5OTQg
LyogRXZlbnRMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50TG9v
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0FBODJGNjIyNDJBRTA1MDBFODRC
QkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNM
UHJvcGVydHlSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQUE4
MkY3MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDQUYzNDdFMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDdGMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRP
YmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3Jp
cHRPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDgwMEE2QzQw
NTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI1NDAyLDYgKzI1NDA0LDggQEAKIAkJCQlDMjRBNTdCQTIxRkVBRkVB
MDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmNwcCAqLywKIAkJCQlDMjRBNTdCQjIxRkVBRkVBMDA0
QzZERDEgLyogV0hMU0xQcmVwYXJlLmggKi8sCiAJCQkJQzIxQkY3M0EyMUNEOEQ3MDAwMjI3OTc5
IC8qIFdITFNMUHJvZ3JhbS5oICovLAorCQkJCTFDQUE4MkY2MjI0MkFFMDUwMEU4NEJCQiAvKiBX
SExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwICovLAorCQkJCTFDQUE4MkY3MjI0MkFFMDUwMEU4NEJC
QiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCAqLywKIAkJCQkxQ0EwQzJFMDIxRUVCNUY1MDBB
MTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2VyLmNwcCAqLywKIAkJCQkxQ0EwQzJERTIxRUVC
NUY0MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2VyLmggKi8sCiAJCQkJQzIzNEE5QUQy
MUU5MkMxOTAwM0M5ODREIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJl
bmRlclBpcGVsaW5lTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQppbmRleCA4ZmI0YTI2Y2E0OGI1NGNh
YWIxODdkYjI5ZTM0NjlhMzg1MDQ0MDVmLi5lMDI5MmI4ZjU0NGQ0ZWFjZGJhMTc5ZmMwYjIzNGU0
ZWMzYWE3M2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQpAQCAt
MjYzLDYgKzI2Myw4IEBAIHN0YXRpYyBib29sIHRyeVNldFdITFNMRnVuY3Rpb25zRm9yUGlwZWxp
bmVEZXNjcmlwdG9yKGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uCiAgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFdURkxvZ0Fsd2F5cygiTWV0YWwgU291cmNl
OiAlcyIsIHJlc3VsdC0+bWV0YWxTb3VyY2UudXRmOCgpLmRhdGEoKSk7CisKICAgICBOU0Vycm9y
ICplcnJvciA9IG5pbDsKICAgICBhdXRvIGxpYnJhcnkgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZv
cm1EZXZpY2UoKSBuZXdMaWJyYXJ5V2l0aFNvdXJjZTpyZXN1bHQtPm1ldGFsU291cmNlIG9wdGlv
bnM6bmlsIGVycm9yOiZlcnJvcl0pOwogICAgIEFTU0VSVChsaWJyYXJ5KTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNDE3MDUwZjlhNzQzZjA1ZTkwMDZmYzkxYWM2NGQ1MDJkYWRkNjMzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdC1leHByZXNzaW9ucy1l
eHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7
CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0
LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAw
KTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVj
dCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOGFjOWU2NGU0NzE4
OWU3NjA2YTE1MDZhMmE2OGFjMDFjYjI3OGVjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWRvdC1leHByZXNzaW9ucy5odG1sCkBAIC0wLDAgKzEsMTI0IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0NCBw
b3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwor
fQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRy
aWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJl
c3VsdDsKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUg
PSBzaGFkZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21l
bnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAg
IHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7Cithc3luYyBm
dW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdw
dS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVx
dWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNo
YWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29u
c3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2Nh
dGlvbjogMCwgaW5wdXRTbG90OiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAg
IGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGlucHV0U2xvdDogMCwgZm9y
bWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJp
YnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtpbnB1dFNsb3Q6IDAsIHN0
cmlkZTogMjAgfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCBpbnB1
dFN0YXRlID0ge2luZGV4Rm9ybWF0OiAidWludDMyIiwgYXR0cmlidXRlcywgaW5wdXRzfTsKKwor
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGlu
ZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25z
dCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91
cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhT
dGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0
ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCBpbnB1dFN0YXRlLCBzYW1wbGVDb3Vu
dDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUg
PSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsK
KworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVY
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFz
eW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41Owor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzhd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7CisKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJB
cnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBj
b25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3Vy
Y2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5k
aW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRH
cm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAg
IGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJp
bmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlw
dG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFp
biA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZp
ZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9
OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1
cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJz
dG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNo
bWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9y
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNv
ZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZl
cl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370366</attachid>
            <date>2019-05-21 18:34:41 -0700</date>
            <delta_ts>2019-05-21 18:46:22 -0700</delta_ts>
            <desc>Simple dot expressions work</desc>
            <filename>bug-195925-20190521183440.patch</filename>
            <type>text/plain</type>
            <size>163477</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDcwNzViODZlMzBmMjk0
ZjYxODM2YjM5NThkZTEzYjQ4MDI4MzA0MS4uZjhkZDE0YmYzYmRjODE3MWU1ZDI0MTZlNWI2NGNh
ZjkwZTU2MWRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE5LTA1LTIxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBwcm9wZXJ0eSByZXNvbHZlciBpcyB0aGUgdGhpbmcgdGhh
dCByZXBsYWNlcyBkb3QgZXhwcmVzc2lvbnMsIGluZGV4IGV4cHJlc3Npb25zLCBhbmQKKyAgICAg
ICAgcmVhZC1tb2RpZnktd3JpdGUgZXhwcmVzc2lvbnMgd2l0aCBjYWxscyB0byBnZXR0ZXJzLCBz
ZXR0ZXJzLCBhbmQgYW5kZXJzLiBUaGlzIHBhdGNoIGRvZXNuJ3QKKyAgICAgICAgZnVsbHkgaW1w
bGVtZW50IHRoZSBwcm9wZXJ0eSByZXNvbHZlciwgYnV0IGltcGxlbWVudHMgZW5vdWdoIGZvciBz
aW1wbGUgZG90IGV4cHJlc3Npb25zIHRvCisgICAgICAgIHdvcmsuIFRoaXMgaXMgZW5vdWdoIGZv
ciB1cyB0byBiZSBhYmxlIHRvIHRlc3QgbW9zdCBvZiB0aGUgcmVzdCBvZiB0aGUgY29tcGlsZXIu
IEluZGV4CisgICAgICAgIGV4cHJlc3Npb25zIGFuZCByZWFkLW1vZGlmeS13cml0ZSBleHByZXNz
aW9ucyBhcmUgbm90IGZ1bGx5IGluY2x1ZGVkIGluIHRoaXMgcGF0Y2gsIGFuZCB3aWxsCisgICAg
ICAgIGJlIGZpbmlzaGVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWxzbyBhZGRzIHRoZSB0aGlyZCBjb25jZXB0IG9mIHZhbHVlLW5lc3MuIFdlIG5vdyBoYXZl
IHJpZ2h0IHZhbHVlcywgbGVmdCB2YWx1ZXMsCisgICAgICAgIGFuZCBhYnN0cmFjdCBsZWZ0IHZh
bHVlcyAoZm9yIHRoaW5ncyB3aGljaCBoYXZlIHNldHRlcnMgYnV0IGhhdmUgbm8gYWRkcmVzcyku
IFRoaXMgYWRkaXRpb24KKyAgICAgICAgaXMgcmVxdWlyZWQgZm9yIHRoZSBhbmFseXNpcyB0aGUg
cHJvcGVydHkgcmVzb2x2ZXIgcGVyZm9ybXMuIFRoaXMgY29uY2VwdCBpcyBhbHNvIHByZXNlbnQg
aW4KKyAgICAgICAgdGhlIHNwZWMuCisKKyAgICAgICAgVGVzdDogd2ViZ3B1L3dobHNsLWRvdC1l
eHByZXNzaW9ucy5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xBZGRyZXNzU3BhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGVBbm5v
dGF0aW9uOjpUeXBlQW5ub3RhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpU
eXBlQW5ub3RhdGlvbjo6bGVmdEFkZHJlc3NTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6aXNSaWdodFZhbHVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGVBbm5vdGF0aW9uOjp2aXNpdCk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6dHlwZUFubm90YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6c2V0VHlwZUFubm90YXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6YWRkcmVzc1Nw
YWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJl
c3Npb246OnNldEFkZHJlc3NTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6TWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNU
OjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uOjpsZWZ0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6bFZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9p
bnRlckV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbjo6TWFrZVBvaW50ZXJFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uOjpsZWZ0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uOjpsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkNoZWNrZXI6OmFzc2lnblR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2Vy
OjpyZWN1cnNlQW5kR2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6
Z2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6YXNzaWduVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6Zm9yd2FyZFR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpDaGVja2VyOjpmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaDoKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OlZpc2l0b3I6OnZpc2l0KToKKwogMjAxOS0wNS0yMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIGZvbnQtb3B0aWNhbC1zaXppbmcgYXBwbGll
cyB0aGUgd3JvbmcgdmFyaWF0aW9uIHZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCmluZGV4IDRh
NmQ3YzQ2OTVkYzRjYWM4MjkwNTRlNDA1NTU3ODc2NTE3NWY4NjMuLjYxYjRlZGRhMmZlNmE3ZTlk
MGQ0ODA5ODdjNTJmNDdkMWI4MjQyYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICs0
Myw3MiBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAog
fTsKIAorc3RydWN0IExlZnRWYWx1ZSB7CisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsK
K307CisKK3N0cnVjdCBBYnN0cmFjdExlZnRWYWx1ZSB7Cit9OworCitzdHJ1Y3QgUmlnaHRWYWx1
ZSB7Cit9OworCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3Nhcnku
CitjbGFzcyBUeXBlQW5ub3RhdGlvbiB7CitwdWJsaWM6CisgICAgVHlwZUFubm90YXRpb24oKQor
ICAgICAgICA6IG1fZW1wdHkodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRp
b24oTGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAg
ICBUeXBlQW5ub3RhdGlvbihBYnN0cmFjdExlZnRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIo
dikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oUmlnaHRWYWx1ZSB2KQorICAg
ICAgICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oY29u
c3QgVHlwZUFubm90YXRpb24mKSA9IGRlZmF1bHQ7CisgICAgVHlwZUFubm90YXRpb24oVHlwZUFu
bm90YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgVHlwZUFubm90YXRpb24mIG9wZXJh
dG9yPShjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBlQW5ub3RhdGlv
biYgb3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9uJiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIE9w
dGlvbmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFkZHJlc3NTcGFjZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoIW1fZW1wdHkpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxMZWZ0VmFsdWU+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PExlZnRW
YWx1ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIH0KKworICAgIGJvb2wgaXNSaWdodFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJpZ2h0VmFsdWU+KG1faW5uZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBW
aXNpdG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdU
Rjo6dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0cmFj
dExlZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigpKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9l
bXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW5uZXIpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBWYXJpYW50PExlZnRWYWx1ZSwgQWJzdHJhY3RMZWZ0VmFsdWUs
IFJpZ2h0VmFsdWU+IG1faW5uZXI7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgbV9l
bXB0eSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFzc2ln
bm1lbnRFeHByZXNzaW9uLmgKaW5kZXggYjEyMWZiNmMxZTFkMTc5MjYxNWQ5YmIwMjc0ZmUyMzU4
OGE3ZjJiNS4uNzk0MTVlMmZmMzAzMDI5MTA2YjViZjQxOTc2N2ViNTk5OGYwZTRlNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdu
bWVudEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1Ymxp
YzoKIAogICAgIEV4cHJlc3Npb24mIGxlZnQoKSB7IHJldHVybiBtX2xlZnQ7IH0KICAgICBFeHBy
ZXNzaW9uJiByaWdodCgpIHsgcmV0dXJuIG1fcmlnaHQ7IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVz
c2lvbj4mJiB0YWtlUmlnaHQoKSB7IHJldHVybiBXVEZNb3ZlKG1fcmlnaHQpOyB9CiAKIHByaXZh
dGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaApp
bmRleCBiN2FiMjBjZWQyYzQ1M2Y5NWYxYzJlM2VmYzI4MWZkYTQ4ZTVjM2FkLi4zMThhODEwNjE2
M2RiODdlODVlZjQ4MWVjODg3ZDlkNmM1YzI5Y2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC02
NSwxMiArNjUsMTIgQEAgcHVibGljOgogICAgICAgICBtX3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwog
ICAgIH0KIAotICAgIGNvbnN0IE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFkZHJlc3NTcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9CisgICAgY29uc3QgVHlwZUFubm90YXRp
b24qIHR5cGVBbm5vdGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlQW5ub3RhdGlvbiA/ICYq
bV90eXBlQW5ub3RhdGlvbiA6IG51bGxwdHI7IH0KIAotICAgIHZvaWQgc2V0QWRkcmVzc1NwYWNl
KE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFkZHJlc3NTcGFjZSkKKyAgICB2b2lkIHNldFR5cGVB
bm5vdGF0aW9uKFR5cGVBbm5vdGF0aW9uJiYgdHlwZUFubm90YXRpb24pCiAgICAgewotICAgICAg
ICBBU1NFUlQoIW1fYWRkcmVzc1NwYWNlKTsKLSAgICAgICAgbV9hZGRyZXNzU3BhY2UgPSBhZGRy
ZXNzU3BhY2U7CisgICAgICAgIEFTU0VSVCghbV90eXBlQW5ub3RhdGlvbik7CisgICAgICAgIG1f
dHlwZUFubm90YXRpb24gPSBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNBc3NpZ25tZW50RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2Vu
IG1fb3JpZ2luOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsK
LSAgICBPcHRpb25hbDxBZGRyZXNzU3BhY2U+IG1fYWRkcmVzc1NwYWNlOworICAgIE9wdGlvbmFs
PFR5cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5vdGF0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
QVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgK
aW5kZXggNjMxNmY1NGUxNjMyNmI0YTQ4M2ZhODcyZTFmNDdiYjA0OGVkZjg4ZS4uNzcwY2Y4YmE5
ZjI1MjcyNmY2OWMxYWU2ZGU1ZWE0YTViMTJiZjc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaApAQCAtMzksOSArMzksOSBAQCBuYW1lc3Bh
Y2UgQVNUIHsKIAogY2xhc3MgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiA6IHB1YmxpYyBF
eHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKExl
eGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgbFZhbHVlKQorICAg
IE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlx
dWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZN
b3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQorICAgICAg
ICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVlKSkKICAgICB7CiAgICAgfQogCkBAIC01
MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBFeHByZXNz
aW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xWYWx1ZTsgfQorICAgIEV4cHJlc3Npb24mIGxlZnRW
YWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9CiAKIHByaXZhdGU6Ci0gICAgVW5pcXVlUmVm
PEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRW
YWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRl
ckV4cHJlc3Npb24uaAppbmRleCA3YjA1MmI2ZDVmMjg4N2Y1OTJkZjQ0ZmQ5NDA5YzRmYTk1MjAz
YWE4Li4zNDYwNGQ1NmFlY2M0YjYzMGQ3YTdlNmY3OTZiOWM4NTM0N2NlMWZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRl
ckV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaApAQCAtMzksOSArMzksOSBAQCBuYW1lc3Bh
Y2UgQVNUIHsKIAogY2xhc3MgTWFrZVBvaW50ZXJFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Np
b24gewogcHVibGljOgotICAgIE1ha2VQb2ludGVyRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxWYWx1ZSkKKyAgICBNYWtlUG9pbnRlckV4
cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBs
ZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAg
ICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1v
dmUobGVmdFZhbHVlKSkKICAgICB7CiAgICAgfQogCkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc01ha2VQb2ludGVyRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZh
bHVlOyB9CisgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVlKCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7
IH0KIAogcHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sVmFsdWU7CisgICAg
VW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
QVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCmluZGV4IDJl
YzM0ZTE1ZDhhNDBlNWFkMmUyYmY4OTY4MGMyMWMzMzQ0Yzk5ODguLjE1NzA5MmQ2NTBmYWNlYTAy
OWI5YjE3NzYwZDgwNTA1N2UxYWRkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAog
I2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNs
YXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVl
UmVmLmg+CiAKQEAgLTU5LDI3ICs2MCw1NiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUdldE92ZXJs
b2FkcygpIHsgcmV0dXJuIG1fcG9zc2libGVHZXRPdmVybG9hZHM7IH0KICAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlU2V0
T3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsgfQogICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2li
bGVBbmRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzOyB9CisgICAg
RnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb24oKSB7IHJldHVybiBtX2dldEZ1bmN0aW9u
OyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb24oKSB7IHJldHVybiBtX2Fu
ZEZ1bmN0aW9uOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogdGhyZWFkQW5kRnVuY3Rpb24o
KSB7IHJldHVybiBtX3RocmVhZEFuZEZ1bmN0aW9uOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlv
biogc2V0RnVuY3Rpb24oKSB7IHJldHVybiBtX3NldEZ1bmN0aW9uOyB9CiAKICAgICB2b2lkIHNl
dFBvc3NpYmxlR2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQogICAgIHsKICAgICAgICAgbV9w
b3NzaWJsZUdldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKICAgICB9CisgICAgdm9pZCBzZXRQb3Nz
aWJsZUFuZE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5j
dGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2li
bGVBbmRPdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgfQogICAgIHZvaWQgc2V0UG9zc2libGVT
ZXRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCiAgICAgewogICAgICAgICBtX3Bvc3NpYmxlU2V0
T3ZlcmxvYWRzID0gb3ZlcmxvYWRzOwogICAgIH0KLSAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3Zl
cmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFy
YXRpb24+LCAxPiYgb3ZlcmxvYWRzKQorCisgICAgdm9pZCBzZXRHZXRGdW5jdGlvbihGdW5jdGlv
bkRlY2xhcmF0aW9uKiBnZXRGdW5jdGlvbikKICAgICB7Ci0gICAgICAgIG1fcG9zc2libGVBbmRP
dmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgICAgIG1fZ2V0RnVuY3Rpb24gPSBnZXRGdW5jdGlv
bjsKKyAgICB9CisKKyAgICB2b2lkIHNldEFuZEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24q
IGFuZEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgbV9hbmRGdW5jdGlvbiA9IGFuZEZ1bmN0aW9u
OworICAgIH0KKworICAgIHZvaWQgc2V0VGhyZWFkQW5kRnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJh
dGlvbiogdGhyZWFkQW5kRnVuY3Rpb24pCisgICAgeworICAgICAgICBtX3RocmVhZEFuZEZ1bmN0
aW9uID0gdGhyZWFkQW5kRnVuY3Rpb247CisgICAgfQorCisgICAgdm9pZCBzZXRTZXRGdW5jdGlv
bihGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIG1fc2V0
RnVuY3Rpb24gPSBzZXRGdW5jdGlvbjsKICAgICB9CiAKICAgICBFeHByZXNzaW9uJiBiYXNlKCkg
eyByZXR1cm4gbV9iYXNlOyB9CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgdGFrZUJhc2Uo
KSB7IHJldHVybiBXVEZNb3ZlKG1fYmFzZSk7IH0KIAogcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8
RXhwcmVzc2lvbj4gbV9iYXNlOwogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlR2V0T3ZlcmxvYWRzOwogICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3Np
YmxlU2V0T3ZlcmxvYWRzOwogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzOworICAgIEZ1bmN0aW9u
RGVjbGFyYXRpb24qIG1fZ2V0RnVuY3Rpb24geyBudWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNs
YXJhdGlvbiogbV9hbmRGdW5jdGlvbiB7IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0
aW9uKiBtX3RocmVhZEFuZEZ1bmN0aW9uIHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFy
YXRpb24qIG1fc2V0RnVuY3Rpb24geyBudWxscHRyIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBB
U1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAppbmRleCA3
OWQ4ZDBmNzA4ZThkMDU3ODMxMmM4MTc5NGU4OGVkYWYzNDg3Y2Y5Li4yMDlhNTI2NTFlN2ViM2Vi
NWE5Y2MxZjZiYzE3MDJiZWI2NTgyYmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5oCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsK
IG5hbWVzcGFjZSBBU1QgewogCiAvKgotICogIDEuIEV2YWx1YXRlIG1fbFZhbHVlCisgKiAgMS4g
RXZhbHVhdGUgbV9sZWZ0VmFsdWUKICAqICAyLiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX29sZFZh
bHVlCiAgKiAgMy4gRXZhbHVhdGUgbV9uZXdWYWx1ZUV4cHJlc3Npb24KICAqICA0LiBBc3NpZ24g
dGhlIHJlc3VsdCB0byBtX25ld1ZhbHVlCi0gKiAgNS4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9s
VmFsdWUKKyAqICA1LiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX2xlZnRWYWx1ZQogICogIDYuIEV2
YWx1YXRlIG1fcmVzdWx0RXhwcmVzc2lvbgogICogIDcuIFJldHVybiB0aGUgcmVzdWx0CiAgKi8K
QEAgLTczLDM4ICs3Myw0MSBAQCBwdWJsaWM6CiAKICAgICBVbmlxdWVSZWY8VmFyaWFibGVSZWZl
cmVuY2U+IG9sZFZhcmlhYmxlUmVmZXJlbmNlKCkKICAgICB7Ci0gICAgICAgIC8vIFRoZSBvbmx5
IHJlYXNvbiB3ZSBkb24ndCBnZXQgdXNlLWFmdGVyLWZyZWVzIGlzIHRoZSBmYWN0IHRoYXQgZXZl
cnkgaW5zdGFuY2Ugb2YgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiBpcyBhbGxvY2F0ZWQgb24g
dGhlIGhlYXAuCiAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJlbmNl
PihWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChtX29sZFZhbHVlKSk7CiAgICAgfQogCiAgICAgVW5p
cXVlUmVmPFZhcmlhYmxlUmVmZXJlbmNlPiBuZXdWYXJpYWJsZVJlZmVyZW5jZSgpCiAgICAgewot
ICAgICAgICAvLyBUaGUgb25seSByZWFzb24gd2UgZG9uJ3QgZ2V0IHVzZS1hZnRlci1mcmVlcyBp
cyB0aGUgZmFjdCB0aGF0IGV2ZXJ5IGluc3RhbmNlIG9mIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24gaXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLgogICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJl
ZjxWYXJpYWJsZVJlZmVyZW5jZT4oVmFyaWFibGVSZWZlcmVuY2U6OndyYXAobV9uZXdWYWx1ZSkp
OwogICAgIH0KIAogICAgIGJvb2wgaXNSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyBy
ZXR1cm4gbV9sVmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBt
X2xlZnRWYWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1
cm4gbV9vbGRWYWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyBy
ZXR1cm4gbV9uZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24qIG5ld1ZhbHVlRXhwcmVzc2lvbigp
IHsgcmV0dXJuIG1fbmV3VmFsdWVFeHByZXNzaW9uID8gJiptX25ld1ZhbHVlRXhwcmVzc2lvbiA6
IG51bGxwdHI7IH0KICAgICBFeHByZXNzaW9uKiByZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4g
bV9yZXN1bHRFeHByZXNzaW9uID8gJiptX3Jlc3VsdEV4cHJlc3Npb24gOiBudWxscHRyOyB9Cisg
ICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgdGFrZUxlZnRWYWx1ZSgpIHsgcmV0dXJuIFdURk1v
dmUobV9sZWZ0VmFsdWUpOyB9CisgICAgVW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+JiYg
dGFrZU9sZFZhbHVlKCkgeyByZXR1cm4gV1RGTW92ZShtX29sZFZhbHVlKTsgfQorICAgIFVuaXF1
ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPiYmIHRha2VOZXdWYWx1ZSgpIHsgcmV0dXJuIFdURk1v
dmUobV9uZXdWYWx1ZSk7IH0KKyAgICBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYg
dGFrZU5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJuIFdURk1vdmUobV9uZXdWYWx1ZUV4cHJl
c3Npb24pOyB9CisgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYmIHRha2VSZXN1
bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gV1RGTW92ZShtX3Jlc3VsdEV4cHJlc3Npb24pOyB9CiAK
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4gZnJpZW5kIFVu
aXF1ZVJlZjxVPiBXVEY6Om1ha2VVbmlxdWVSZWYoQXJncyYmLi4uKTsKIAotICAgIFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVz
c2lvbj4gbFZhbHVlKQorICAgIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2Vu
JiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbGVmdFZhbHVlKQogICAgICAgICA6IEV4
cHJlc3Npb24oTGV4ZXI6OlRva2VuKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92
ZShsVmFsdWUpKQotICAgICAgICAsIG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbiksIFF1
YWxpZmllcnMoKSwgV1RGOjpudWxsb3B0LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51
bGxvcHQpCi0gICAgICAgICwgbV9uZXdWYWx1ZShXVEZNb3ZlKG9yaWdpbiksIFF1YWxpZmllcnMo
KSwgV1RGOjpudWxsb3B0LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpCisg
ICAgICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUpKQorICAgICAgICAsIG1fb2xk
VmFsdWUobWFrZVVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4ob3Jp
Z2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCkpCisgICAgICAgICwgbV9uZXdWYWx1ZShtYWtlVW5pcXVlUmVmPFZhcmlh
YmxlRGVjbGFyYXRpb24+KFdURk1vdmUob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxv
cHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpCiAgICAgewogICAgIH0K
IAotICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xWYWx1ZTsKLSAgICBWYXJpYWJsZURlY2xh
cmF0aW9uIG1fb2xkVmFsdWU7Ci0gICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOwor
ICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKKyAgICBVbmlxdWVSZWY8VmFy
aWFibGVEZWNsYXJhdGlvbj4gbV9vbGRWYWx1ZTsKKyAgICBVbmlxdWVSZWY8VmFyaWFibGVEZWNs
YXJhdGlvbj4gbV9uZXdWYWx1ZTsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+
IG1fbmV3VmFsdWVFeHByZXNzaW9uOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9u
Pj4gbV9yZXN1bHRFeHByZXNzaW9uOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRp
b24uaAppbmRleCAxOTgyNGY5NDA1NGU0YjNiN2Q3Y2YyNGY2M2MwMTE5YjhhNjNmNGZiLi5lNTBh
YWFkZGU3ODhmNGVkODllOWMyNmJmNDQ2MzljMjE0MDQ5Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFy
aWFibGVEZWNsYXJhdGlvbi5oCkBAIC03OSw3ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgT3B0aW9u
YWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiBtX2luaXRpYWxpemVyOwogfTsKIAotdXNpbmcgVmFy
aWFibGVEZWNsYXJhdGlvbnMgPSBWZWN0b3I8VmFyaWFibGVEZWNsYXJhdGlvbj47Cit1c2luZyBW
YXJpYWJsZURlY2xhcmF0aW9ucyA9IFZlY3RvcjxVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlv
bj4+OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgKaW5kZXggZThlMWZjN2Y1YjIzOGRiYjA0MDNlOWY0
MDI3ODA0YTcwYTdlODgxYy4uMDlhMDJkMDFmNDk2ODRhYjk2M2VmODcyNWIwNDUyZDVhMzhlZGY0
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dC5oCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBWYXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQgewogcHVibGljOgotICAgIFZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVmVjdG9y
PFZhcmlhYmxlRGVjbGFyYXRpb24+JiYgdmFyaWFibGVEZWNsYXJhdGlvbnMpCisgICAgVmFyaWFi
bGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBWYXJpYWJsZURl
Y2xhcmF0aW9ucyYmIHZhcmlhYmxlRGVjbGFyYXRpb25zKQogICAgICAgICA6IFN0YXRlbWVudChX
VEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV92YXJpYWJsZURlY2xhcmF0aW9ucyhXVEZNb3Zl
KHZhcmlhYmxlRGVjbGFyYXRpb25zKSkKICAgICB7CkBAIC01MywxMCArNTMsMTAgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc1ZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+
JiB2YXJpYWJsZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7
IH0KKyAgICBWZWN0b3I8VW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+PiYgdmFyaWFibGVE
ZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOyB9CiAKIHByaXZh
dGU6Ci0gICAgVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+IG1fdmFyaWFibGVEZWNsYXJhdGlv
bnM7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnMgbV92YXJpYWJsZURlY2xhcmF0aW9uczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2Nh
ZmZvbGRpbmcuY3BwCmluZGV4IDYyNGM1NjJlNTFjYTYwYzZlZjhkZTI4YWZlYmFjNTE0ZjJiZTBk
YmQuLjU0OWQ1ZGNmMWIzN2FmY2EzY2U2ODExYzQ1ZjNjOWM0YWJhNzIyNjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2lu
dFNjYWZmb2xkaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKQEAgLTg2LDcgKzg2LDcgQEAg
c3RhdGljIFN0cmluZyBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhBU1Q6OlNlbWFudGljJiBzZW1hbnRp
YykKICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4o
c2VtYW50aWMpKQogICAgICAgICByZXR1cm4gYXR0cmlidXRlRm9yU2VtYW50aWMoV1RGOjpnZXQ8
QVNUOjpCdWlsdEluU2VtYW50aWM+KHNlbWFudGljKSk7CiAgICAgYXV0byYgc3RhZ2VJbk91dFNl
bWFudGljID0gV1RGOjpnZXQ8QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KHNlbWFudGljKTsKLSAg
ICByZXR1cm4gbWFrZVN0cmluZygiW1t1c2VyKCIsIHN0YWdlSW5PdXRTZW1hbnRpYy5pbmRleCgp
LCAiKV1dIik7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIltbdXNlcih1c2VyIiwgc3RhZ2VJbk91
dFNlbWFudGljLmluZGV4KCksICIpXV0iKTsKIH0KIAogRW50cnlQb2ludFNjYWZmb2xkaW5nOjpF
bnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVm
aW5pdGlvbiwgSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEVu
dHJ5UG9pbnRJdGVtcyYgZW50cnlQb2ludEl0ZW1zLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+
JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBsYXlvdXQsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYg
Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKQpAQCAtMTg4LDkgKzE4OCw5IEBAIFN0cmluZyBFbnRy
eVBvaW50U2NhZmZvbGRpbmc6Om1hbmdsZWRJbnB1dFBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGgp
CiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiog
c3RydWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS5uYW1lKCkgPT0gcGF0
aFswXSkgeworICAgICAgICBpZiAobV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ld
LT5uYW1lKCkgPT0gcGF0aFswXSkgewogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
bV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0pOwotICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0g
bV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKS0+dW5pZnlOb2RlKCk7
CisgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbaV0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoaXM8QVNU
OjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBuYW1lZFR5
cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKICAgICAgICAgICAgICAg
ICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKQpAQCAtMjQ5LDcg
KzI0OSw3IEBAIFN0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFja1Jlc291cmNlc0Fu
ZE5hbWVkQnVpbHRJbnMoKQogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCk7ICsraSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
X3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKVtpXS50eXBlKCkpLCAnICcsIG1fcGFyYW1ldGVyVmFyaWFibGVzW2ldLCAiO1xuIikp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLT50
eXBlKCkpLCAnICcsIG1fcGFyYW1ldGVyVmFyaWFibGVzW2ldLCAiO1xuIikpOwogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2xheW91dC5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRv
IHZhcmlhYmxlTmFtZSA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldLnZhcmlhYmxlTmFtZTsKQEAgLTQw
Myw4ICs0MDMsOCBAQCBTdHJpbmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBl
clR5cGVzKCkKICAgICBmb3IgKGF1dG8mIG5hbWVkU3RhZ2VJbiA6IG1fbmFtZWRTdGFnZUlucykg
ewogICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW25hbWVkU3RhZ2VJbi5pbmRleEluRW50
cnlQb2ludEl0ZW1zXS51bm5hbWVkVHlwZSk7CiAgICAgICAgIGF1dG8gZWxlbWVudE5hbWUgPSBu
YW1lZFN0YWdlSW4uZWxlbWVudE5hbWU7Ci0gICAgICAgIGF1dG8gYXR0cmlidXRlSW5kZXggPSBu
YW1lZFN0YWdlSW4uZWxlbWVudE5hbWU7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcoIiAgICAiLCBtYW5nbGVkVHlwZU5hbWUsICcgJywgZWxlbWVudE5hbWUsICIgW1t1
c2VyKCIsIGF0dHJpYnV0ZUluZGV4LCAiKV1dO1xuIikpOworICAgICAgICBhdXRvIGF0dHJpYnV0
ZUluZGV4ID0gbmFtZWRTdGFnZUluLmF0dHJpYnV0ZUluZGV4OworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1l
bnROYW1lLCAiIFtbdXNlcih1c2VyIiwgYXR0cmlidXRlSW5kZXgsICIpXV07XG4iKSk7CiAgICAg
fQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuXG4iKTsKIApAQCAtNDQ2LDcgKzQ0Niw3
IEBAIFN0cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKCkKICAgICBm
b3IgKGF1dG8mIG5hbWVkU3RhZ2VJbiA6IG1fbmFtZWRTdGFnZUlucykgewogICAgICAgICBhdXRv
JiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW25hbWVkU3RhZ2VJbi5pbmRleEluRW50
cnlQb2ludEl0ZW1zXS5wYXRoOwogICAgICAgICBhdXRvJiBlbGVtZW50TmFtZSA9IG5hbWVkU3Rh
Z2VJbi5lbGVtZW50TmFtZTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAiID0gIiwgbV9zdGFnZUluU3RydWN0TmFtZSwgJy4n
LCBlbGVtZW50TmFtZSwgIjtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAiID0gIiwgbV9zdGFnZUluUGFyYW1ldGVy
TmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIpKTsKICAgICB9CiAKICAgICByZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApp
bmRleCAyZmMxNDY1ODYxNmM5ODljYTIxN2M2OTI4MmFlODZkYzQ4NzE5ZjA4Li4wOWQ2OWIxMDNh
ZDE2MzlhNTI5NjQyMmY2YmJhNDdiNThhOTI4YWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9u
V3JpdGVyLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgRnVuY3Rpb25EZWNsYXJhdGlvbldy
aXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVtpXS50eXBlKCkpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKmZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ld
LT50eXBlKCkpKTsKICAgICB9CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwog
fQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uCiAgICAgICAgICAg
ICBhdXRvIHBhcmFtZXRlck5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICAg
ICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJpYWJsZU1hcHBpbmcuYWRkKCZwYXJhbWV0ZXIs
IHBhcmFtZXRlck5hbWUpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnBhcmFtZXRlci50eXBl
KCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnBhcmFtZXRl
ci0+dHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJOYW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7XG4iKTsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKQEAgLTQ4NiwxMiArNDg2LDIxIEBAIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24m
IHZhcmlhYmxlRGVjbGFyYXRpCiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKIHsKKyAg
ICBpZiAoaXM8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGFzc2lnbm1lbnRFeHByZXNzaW9u
LmxlZnQoKSkpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RGVy
ZWZlcmVuY2VFeHByZXNzaW9uPihhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpLnBvaW50ZXIo
KSk7CisgICAgICAgIGF1dG8gbGVmdE5hbWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAg
ICAgYXV0byByaWdodE5hbWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygnKicsIGxlZnROYW1lLCAiID0gIiwgcmlnaHROYW1l
LCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZChyaWdodE5hbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lv
bi5sZWZ0KCkpOwogICAgIGF1dG8gbGVmdE5hbWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwogICAgIGF1
dG8gcmlnaHROYW1lID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhsZWZ0TmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpKTsKLSAg
ICBtX3N0YWNrLmFwcGVuZChsZWZ0TmFtZSk7CisgICAgbV9zdGFjay5hcHBlbmQocmlnaHROYW1l
KTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4
cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQpAQCAtNTcwLDcgKzU3OSw3IEBAIHZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dp
Y2FsTm90RXhwcmVzCiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxh
c3QoKTsKICAgICBBU1NFUlQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5
cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUo
KTsKQEAgLTU4Nyw3ICs1OTYsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYQogCiB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24m
IG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBv
aW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBv
aW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2su
dGFrZUxhc3QoKTsKICAgICBBU1NFUlQobWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAppbmRleCA2OTcy
ZTk4OTA1MGE5YTFiN2RhODExYTg3YzMzYzMzZDFlNGVkMjljLi5lZGU1NzZmZGJiMDZkNWExZGU5
NGFkM2VlZDgyZjJmODA3MzA4YTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0
aW9uV3JpdGVyLmNwcApAQCAtMTExLDggKzExMSw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0
aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUg
PSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCktPnVuaWZ5
Tm9kZSgpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpOworICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CiAgICAgICAg
IGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSkpIHsKICAgICAgICAgICAgIGF1
dG8mIHBhcmFtZXRlck5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihwYXJhbWV0
ZXJUeXBlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4o
cGFyYW1ldGVyTmFtZWRUeXBlKSkgewpAQCAtMTM0LDcgKzEzNCw3IEBAIFN0cmluZyB3cml0ZU5h
dGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0g
Im9wZXJhdG9yLnZhbHVlIikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxS
ZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBh
cmFtZXRlck5hbWUsICIgeCkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCIsIG1ldGFsUmV0dXJuTmFtZSwgIj4o
eCk7XG4iKSk7CkBAIC0xNDIsMTEgKzE0MiwxMiBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlv
bihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQog
ICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAgIH0KIAorICAgIC8v
IEZJWE1FOiBBdXRob3JzIGNhbiBtYWtlIGEgc3RydWN0IGZpZWxkIG5hbWVkICJsZW5ndGgiIHRv
by4gQXV0b2dlbmVyYXRlZCBnZXR0ZXJzIGZvciB0aG9zZSBzaG91bGRuJ3QgdGFrZSB0aGlzIGNv
ZGVwYXRoLgogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3IubGVuZ3RoIikgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGludHJpbnNpY3MsIG1hdGNo
ZXMobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIGludHJpbnNpY3MudWludFR5cGUo
KSkpOwogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCktPnVuaWZ5Tm9kZSgpOwor
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
OworICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgIEFTU0VSVChp
czxBU1Q6OlVubmFtZWRUeXBlPihwYXJhbWV0ZXJUeXBlKSk7CiAgICAgICAgIGF1dG8mIHVubmFt
ZWRQYXJhbWV0ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4ocGFyYW1ldGVyVHlw
ZSk7CiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFBhcmFtZXRlclR5cGUp
KSB7CkBAIC0xNjUsNDUgKzE2Niw3MyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgIH0K
IAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJv
cGVyYXRvci4iX3N0cikpIHsKKyAgICAgICAgYXV0byBtYW5nbGVkRmllbGROYW1lID0gWyZdKFN0
cmluZyYgZmllbGROYW1lKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2Rl
ID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5p
ZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5h
bWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdHJ1Y3R1cmVE
ZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUp
OworICAgICAgICAgICAgICAgIGF1dG8qIHN0cnVjdHVyZUVsZW1lbnQgPSBzdHJ1Y3R1cmVEZWZp
bml0aW9uLmZpbmQoZmllbGROYW1lKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJl
RWxlbWVudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clN0cnVjdHVyZUVsZW1lbnQoKnN0cnVjdHVyZUVsZW1lbnQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUp
KTsKKyAgICAgICAgICAgIHJldHVybiBmaWVsZE5hbWU7CisgICAgICAgIH07CisKICAgICAgICAg
aWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKICAg
ICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMik7Ci0gICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0
ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBh
dXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmaWVsZE5hbWUg
PSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJf
c3RyLmxlbmd0aCgpKTsKICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5zdWJzdHJp
bmcoMCwgZmllbGROYW1lLmxlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsRmll
bGROYW1lID0gbWFuZ2xlZEZpZWxkTmFtZShmaWVsZE5hbWUpOwogICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVu
Y3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0
ZXIyTmFtZSwgIiBuKSB7XG4iKSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCIgICAgdi4iLCBmaWVsZE5hbWUsICIgPSBuO1xuIikpOworICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHYuIiwgbWV0YWxGaWVsZE5hbWUs
ICIgPSBuO1xuIikpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygiICAgIHJldHVybiB2O1xuIikpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
In1cbiIpOwogICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpKTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAg
YXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbEZpZWxkTmFt
ZSA9IG1hbmdsZWRGaWVsZE5hbWUoZmllbGROYW1lKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1l
LCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iKSk7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gdi4iLCBmaWVsZE5hbWUsICI7XG4i
KSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4g
di4iLCBtZXRhbEZpZWxkTmFtZSwgIjtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIn1cbiIpOwogICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAg
IH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRo
KCJvcGVyYXRvciYuIl9zdHIpKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRh
bFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgo
KSk7CisKKyAgICAgICAgU3RyaW5nIG1ldGFsRmllbGROYW1lOworICAgICAgICBhdXRvJiB1bm5h
bWVkVHlwZSA9ICpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlw
ZSgpOworICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBl
Pih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYg
bmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAg
IGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAgICAg
ICAgIGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmVFbGVtZW50
ID0gc3RydWN0dXJlRGVmaW5pdGlvbi5maW5kKGZpZWxkTmFtZSk7CisgICAgICAgICAgICBBU1NF
UlQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgICAgICBtZXRhbEZpZWxkTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKnN0cnVjdHVyZUVsZW1lbnQpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1ldGFsRmllbGROYW1lID0gZmllbGROYW1lOwor
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1l
LCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikg
e1xuIikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0
dXJuICYodi0+IiwgZmllbGROYW1lLCAiKTtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAmKHYtPiIsIG1ldGFsRmllbGROYW1lLCAiKTtc
biIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwogICAgICAgICByZXR1
cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXSIpIHsKICAgICAgICAgQVNTRVJU
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsK
LSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgp
KTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5
cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFd
LT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBv
dXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRh
bFBhcmFtZXRlcjJOYW1lLCAiIGkpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygiICAgIHJldHVybiBtW2ldO1xuIikpOwpAQCAtMjEzLDggKzI0Miw4IEBA
IFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJltdIikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOwotICAgICAgICBhdXRv
IG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAg
ICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7
CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIGF1dG8gZmll
bGROYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVy
YXRvciZbXS4iX3N0ci5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBt
ZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHYsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbikge1xu
IikpOwpAQCAtMjI1LDkgKzI1NCw5IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW109Iikgewog
ICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDMpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVsxXS50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyM05hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVsyXS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIz
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJu
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1l
dGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0
ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGksICIsIG1ldGFsUGFyYW1l
dGVyM05hbWUsICIgdikge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCIgICAgbVtpXSA9IHY7XG4iKSk7CkBAIC0yMzksNyArMjY4LDcgQEAgU3RyaW5nIHdy
aXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmEKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5pc09wZXJh
dG9yKCkpIHsKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpLnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5sZW5n
dGgoKSk7Ci0gICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxS
ZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5h
bWUsICIgeCkge1xuIikpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiICAgIHJldHVybiAiLCBvcGVyYXRvck5hbWUsICJ4O1xuIikpOwpAQCAtMjQ5LDggKzI3
OCw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKICAgICAgICAgYXV0
byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJp
bmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
MU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8g
bWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBt
ZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xu
IikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJu
IHggIiwgb3BlcmF0b3JOYW1lLCAiIHk7XG4iKSk7CkBAIC0yODMsNyArMzEyLDcgQEAgU3RyaW5n
IHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkgPT0gImFzdWludCIKICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkgPT0gImFzZmxvYXQiKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRh
bFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFs
UGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbWFwRnVuY3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpKSwgIih4KTtcbiIpKTsKQEAgLTI5Myw4ICszMjIsOCBAQCBTdHJp
bmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJwb3ciIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJh
dGFuMiIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFO
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0
ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0
dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJh
bWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIpKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAiLCBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSwgIih4LCB5KTtcbiIpKTsKQEAgLTMzNiwxNCAr
MzY1LDE0IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIkludGVybG9ja2VkIl9zdHIpKSB7CiAgICAg
ICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiSW50ZXJsb2NrZWRD
b21wYXJlRXhjaGFuZ2UiKSB7CiAgICAgICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDQpOwotICAgICAgICAgICAgQVNTRVJUKGlz
PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCkpKTsKLSAgICAgICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRQb2ludGVyID0g
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVy
VHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
KTsKKyAgICAgICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNU
OjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlID0g
Zmlyc3RBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAgICAgICAgICBhdXRvIGZp
cnN0QXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShmaXJzdEFy
Z3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gc2Vjb25kQXJn
dW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOwotICAgICAgICAgICAgYXV0byB0aGlyZEFy
Z3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpczxB
U1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
M10udHlwZSgpKSk7Ci0gICAgICAgICAgICBhdXRvJiBmb3VydGhBcmd1bWVudFBvaW50ZXIgPSBk
b3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbM10udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gc2Vjb25kQXJndW1lbnQgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudCA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzJdLT50eXBlKCkpOworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9p
bnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlw
ZSgpKSk7CisgICAgICAgICAgICBhdXRvJiBmb3VydGhBcmd1bWVudFBvaW50ZXIgPSBkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbM10tPnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1Nw
YWNlID0gZm91cnRoQXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAg
YXV0byBmb3VydGhBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KGZvdXJ0aEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAn
KCcsIGNvbnZlcnRBZGRyZXNzU3BhY2UoZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywg
Zmlyc3RBcmd1bWVudFBvaW50ZWUsICIqIG9iamVjdCwgIiwgc2Vjb25kQXJndW1lbnQsICIgY29t
cGFyZSwgIiwgdGhpcmRBcmd1bWVudCwgIiBkZXNpcmVkLCAiLCBjb252ZXJ0QWRkcmVzc1NwYWNl
KGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmb3VydGhBcmd1bWVudFBvaW50ZWUs
ICIqIG91dCkge1xuIikpOwpAQCAtMzU0LDEzICszODMsMTMgQEAgU3RyaW5nIHdyaXRlTmF0aXZl
RnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmEKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMyk7Ci0gICAgICAgIEFTU0VSVChpczxBU1Q6OlBv
aW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKSk7Ci0gICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNU
OjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LnR5cGUoKSk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpOworICAgICAgICBhdXRv
JiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAg
YXV0byBmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZmlyc3RBcmd1bWVudFBvaW50ZXIuYWRk
cmVzc1NwYWNlKCk7CiAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZpcnN0QXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkp
OwotICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsK
LSAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBlKCkpKTsKLSAgICAgICAgYXV0byYgdGhpcmRBcmd1
bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgpKTsKKyAgICAgICAgYXV0byBzZWNvbmRB
cmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICBBU1NFUlQoaXM8QVNU
OjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJd
LT50eXBlKCkpKTsKKyAgICAgICAgYXV0byYgdGhpcmRBcmd1bWVudFBvaW50ZXIgPSBkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMl0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudEFkZHJlc3NTcGFjZSA9
IHRoaXJkQXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwogICAgICAgICBhdXRvIHRoaXJk
QXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0aGlyZEFyZ3Vt
ZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgYXV0byBuYW1lID0gYXRvbWljTmFt
ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIkludGVybG9ja2Vk
Il9zdHIubGVuZ3RoKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAK
aW5kZXggNjFkMzQ4YWYxNTk2NjIzYWY0YzM3OThlYTk5ODFmOTRhNDE2OTU2NS4uNDFlYmFlNmI0
MGRmZWEzMGRiMTM1ZWEzZmU5YjE0ZWMxOTc3OGUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgYm9vbCBjaGVja0R1cGxpY2F0ZUZ1
bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgYm9vbCBzYW1lID0gdHJ1ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGsgPSAwOyBrIDwgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraykg
ewotICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFt
ZXRlcnMoKVtrXS50eXBlKCksICpmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5
cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKClba10tPnR5cGUoKSwgKmZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJz
KClba10tPnR5cGUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC04MCw4ICs4MCw4
IEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1l
KCkgPT0gIm9wZXJhdG9yJltdIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNp
emUoKSA9PSAyCi0gICAgICAgICAgICAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3Rh
dGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFy
YW1ldGVycygpWzBdLnR5cGUoKSkpKSB7Ci0gICAgICAgICAgICBhdXRvJiB0eXBlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1l
dGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgICAgICAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0u
Z2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKSkgeworICAgICAgICAgICAgYXV0byYgdHlw
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OlR5
cGVSZWZlcmVuY2U+KHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHJlc29sdmVk
VHlwZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSkucmVzb2x2ZWRUeXBlKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
PigqcmVzb2x2ZWRUeXBlKSkgewpAQCAtOTIsMTQgKzkyLDE0IEBAIGJvb2wgY2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUo
KSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygp
LnNpemUoKSA9PSAxCi0gICAgICAgICAgICAmJiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+
KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQotICAgICAgICAgICAgfHwgaXM8QVNUOjpBcnJheVR5
cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKSkpCisgICAgICAgICAgICAmJiAoaXM8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigq
ZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkKKyAgICAgICAgICAg
IHx8IGlzPEFTVDo6QXJyYXlUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBl
Jj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgp
Lm5hbWUoKSA9PSAib3BlcmF0b3I9PSIKICAgICAgICAgICAgICYmIGZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIKLSAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJl
bmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNb
aV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpCi0gICAgICAgICAgICAmJiBpczxBU1Q6
OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVu
Y3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpKQotICAgICAgICAgICAgJiYg
bWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCksICpmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKSkpCisgICAgICAgICAgICAmJiBp
czxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUm
PigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkKKyAgICAgICAg
ICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5h
bWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLT50eXBlKCkpKQor
ICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpLCAqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNw
cAppbmRleCAxMzY1ZjI2ZDEyMzQ4MjAwMGVlNzQwNDdjYjMyMWU4MDJiMmM2MDgzLi40NjlmYWM2
ZjhmZGIzNmY1ZTdjNzMzNDA5ZWI1YTRjYmExY2RjY2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKQEAgLTEyMiw4ICsx
MjIsOCBAQCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRo
T3BlcmF0b3JBbmRlckluZGV4ZXIoQVNUOjpDYWxsRQogICAgIGNvbnN0IGJvb2wgaXNPcGVyYXRv
ciA9IHRydWU7CiAgICAgYXV0byByZXR1cm5UeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50
ZXJUeXBlPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBmaXJzdEFyZ3Vt
ZW50LmFkZHJlc3NTcGFjZSgpLCBmaXJzdEFyZ3VtZW50LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7
CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwotICAgIHBhcmFtZXRl
cnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBmaXJzdEFyZ3VtZW50LmNsb25l
KCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7Ci0gICAgcGFyYW1l
dGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhw
cmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNz
LnVpbnRUeXBlKCkpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwor
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50
cmluc2ljcy51aW50VHlwZSgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCkpOwogICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBT
dHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1v
dmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0xMzIs
NyArMTMyLDcgQEAgc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZl
V2l0aE9wZXJhdG9yTGVuZ3RoKEFTVDo6Q2FsbEV4cHJlc3MKICAgICBjb25zdCBib29sIGlzT3Bl
cmF0b3IgPSB0cnVlOwogICAgIGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVp
bnRUeXBlKCkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
KGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgZmlyc3RBcmd1
bWVudC5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwor
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQpKTsKICAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2lu
KCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5U
eXBlKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiB9
CiAKQEAgLTE1Myw4ICsxNTMsOCBAQCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIHJlc29sdmVXaXRoUmVmZXJlbmNlQ29tcGFyYXRvcihBU1Q6OkNhbGxFeAogICAgICAgICB9
KSk7CiAgICAgfSkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
LSAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgYXJndW1l
bnRUeXBlLT5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkp
OwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBXVEZN
b3ZlKGFyZ3VtZW50VHlwZSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCBhcmd1bWVudFR5cGUtPmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2lu
KCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KFdURk1v
dmUoYXJndW1lbnRUeXBlKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkp
OwogICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6
QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJp
bmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiB9CiAKQEAgLTIwMyw4ICsy
MDMsOCBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiBy
ZXNvbHZlQnlJbnN0YW50aWF0aW9uKEFTVDo6Q2FsbAogICAgICAgICBhdXRvIHJpZ2h0QWNjZXB0
YWJpbGl0eSA9IGFjY2VwdGFiaWxpdHkodHlwZXNbMV0uZ2V0KCkpOwogICAgICAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgaWYgKGxlZnRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFi
aWxpdHk6OlllcyAmJiByaWdodEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6WWVzKSB7
Ci0gICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTEgPSB0eXBlc1swXS5nZXQoKS5nZXRVbm5h
bWVkVHlwZSgpOwotICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUyID0gdHlwZXNbMV0uZ2V0
KCkuZ2V0VW5uYW1lZFR5cGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlMSA9ICp0
eXBlc1swXS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgpOworICAgICAgICAgICAgYXV0byYgdW5uYW1l
ZFR5cGUyID0gKnR5cGVzWzFdLmdldCgpLmdldFVubmFtZWRUeXBlKCk7CiAgICAgICAgICAgICBz
dWNjZXNzID0gbWF0Y2hlcyh1bm5hbWVkVHlwZTEsIHVubmFtZWRUeXBlMik7CiAgICAgICAgIH0g
ZWxzZSBpZiAoKGxlZnRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6Ok1heWJlICYmIHJp
Z2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMpCiAgICAgICAgICAgICB8fCAo
bGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6WWVzICYmIHJpZ2h0QWNjZXB0YWJp
bGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXliZSkpCkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBzdGF0
aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJz
ID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMiA6IDE7CiAgICAgICAgIGlmIChmdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8mIGZpcnN0UGFyYW1ldGVy
VW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSkt
PnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvJiBmaXJzdFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgq
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7
CiAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdFBhcmFtZXRlclVuaWZ5Tm9k
ZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5h
bWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUpOwogICAgICAgICAgICAgaWYgKGlzPEFT
VDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmIChraW5kID09
IENoZWNrS2luZDo6SW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8mIHNlY29uZFBhcmFtZXRlclVu
aWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpLT51
bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSA9
ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKS0+dW5pZnlOb2Rl
KCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJV
bmlmeU5vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGF1
dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJV
bmlmeU5vZGUpOwpAQCAtMzI4LDE0ICszMjgsMTQgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRv
ck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQK
ICAgICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5k
OjpJbmRleCA/IDMgOiAyOwogICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50VW5pZnlOb2RlID0gKCpmdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAg
ICBhdXRvJiBmaXJzdEFyZ3VtZW50VW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpWzBdLT50eXBlKCkpLT51bmlmeU5vZGUoKTsKICAgICAgICAgaWYgKGlzPEFTVDo6
VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRVbmlmeU5vZGUpKSB7CiAgICAgICAgICAgICBhdXRv
JiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRV
bmlmeU5vZGUpOwogICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRU
eXBlKSB8fCBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFT
VDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIGlmIChraW5kID09IENoZWNrS2luZDo6SW5kZXgpIHsKLSAg
ICAgICAgICAgIGF1dG8mIHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZp
bml0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAg
IGF1dG8mIHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVsxXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlz
PEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0
PEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUpOwpAQCAtMzQ1LDkgKzM0
NSw5IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAgICAgICAgICAgICBpZiAoIW5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5pc0ludCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQotICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSwg
KmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkKKyAgICAgICAgaWYg
KCFtYXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksICpmdW5jdGlvbkRlZmluaXRpb24u
cGFyYW1ldGVycygpWzBdLT50eXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBhdXRvJiB2YWx1ZVR5cGUgPSAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtu
dW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxXS50eXBlKCk7CisgICAgICAgIGF1dG8mIHZhbHVlVHlw
ZSA9ICpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW251bUV4cGVjdGVkUGFyYW1ldGVy
cyAtIDFdLT50eXBlKCk7CiAgICAgICAgIGF1dG8gZ2V0dGVyTmFtZSA9IGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkuc3Vic3RyaW5nKDAsIGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkubGVuZ3Ro
KCkgLSAxKTsKICAgICAgICAgYXV0byogZ2V0dGVyRnVuY3MgPSBuYW1lQ29udGV4dC5nZXRGdW5j
dGlvbnMoZ2V0dGVyTmFtZSk7CiAgICAgICAgIGlmICghZ2V0dGVyRnVuY3MpCkBAIC0zNTUsNyAr
MzU1LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAgICAgICAgVmVjdG9yPFJlc29sdmlu
Z1R5cGU+IGFyZ3VtZW50VHlwZXM7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVudFR5cGVSZWZlcmVuY2VzOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bUV4cGVjdGVkUGFyYW1ldGVycyAtIDE7ICsraSkKLSAgICAg
ICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKVswXS50eXBlKCkpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBw
ZW5kKCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+Y2xvbmUo
KSk7CiAgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnRUeXBlIDogYXJndW1lbnRUeXBlcykKICAg
ICAgICAgICAgIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMuYXBwZW5kKGFyZ3VtZW50VHlwZSk7CiAg
ICAgICAgIGF1dG8qIG92ZXJsb2FkID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCpnZXR0
ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNlcywgbnVsbHB0cik7CkBAIC0zNzgsNyArMzc4
LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0g
KCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgp
OworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpWzBdLT50eXBlKCkpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmICghaXM8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1l
ZFR5cGU+KHVuaWZ5Tm9kZSk7CkBAIC0zOTIsNyArMzkyLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tP
cGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRl
ZmluaXQKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5u
YW1lKCkgPT0gIm9wZXJhdG9yKysiIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9w
ZXJhdG9yLS0iKSB7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVy
cygpLnNpemUoKSA9PSAxCi0gICAgICAgICAgICAmJiBtYXRjaGVzKCpmdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7Cisg
ICAgICAgICAgICAmJiBtYXRjaGVzKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwogICAgIH0KICAgICBpZiAoZnVu
Y3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IrIiB8fCBmdW5jdGlvbkRlZmluaXRp
b24ubmFtZSgpID09ICJvcGVyYXRvci0iKQogICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSB8fCBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSA9PSAyOwpAQCAtNDQ3LDE5ICs0NDcsMTggQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIGJvb2wgY2hlY2tTaGFkZXJUeXBlKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJik7Ci0gICAgdm9pZCBmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uJiwgQVNUOjpVbm5hbWVkVHlwZSYgd3JhcHBlZEJhc2VUeXBlLCBB
U1Q6OlVubmFtZWRUeXBlKiBleHRyYUFyZ3VtZW50VHlwZSA9IG51bGxwdHIpOwogICAgIGJvb2wg
aXNCb29sVHlwZShSZXNvbHZpbmdUeXBlJik7CiAgICAgc3RydWN0IFJlY3Vyc2VJbmZvIHsKICAg
ICAgICAgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZTsKLSAgICAgICAgT3B0aW9uYWw8QVNU
OjpBZGRyZXNzU3BhY2U+JiBhZGRyZXNzU3BhY2U7CisgICAgICAgIEFTVDo6VHlwZUFubm90YXRp
b24mIHR5cGVBbm5vdGF0aW9uOwogICAgIH07Ci0gICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJl
Y3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMVmFsdWUgPSBm
YWxzZSk7Ci0gICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9u
JiwgYm9vbCByZXF1aXJlc0xWYWx1ZSA9IGZhbHNlKTsKKyAgICBPcHRpb25hbDxSZWN1cnNlSW5m
bz4gcmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xlZnRW
YWx1ZSA9IGZhbHNlKTsKKyAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4gZ2V0SW5mbyhBU1Q6OkV4
cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlID0gZmFsc2UpOwogICAgIE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gcmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6
OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpOwogICAgIGJvb2wgcmVjdXJzZUFuZFJlcXVpcmVC
b29sVHlwZShBU1Q6OkV4cHJlc3Npb24mKTsKLSAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHBy
ZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYsIE9wdGlvbmFsPEFTVDo6QWRk
cmVzc1NwYWNlPiA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhw
cmVzc2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiwgT3B0aW9uYWw8QVNU
OjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lkIGZvcndhcmRUeXBlKEFT
VDo6RXhwcmVzc2lvbiYsIFJlc29sdmluZ1R5cGUmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFj
ZT4gPSBXVEY6Om51bGxvcHQpOworICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24m
LCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7Cisg
ICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CisgICAgdm9pZCBmb3J3YXJkVHlw
ZShBU1Q6OkV4cHJlc3Npb24mLCBSZXNvbHZpbmdUeXBlJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7
CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwpAQCAt
NDk0LDcgKzQ5Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJikgb3ZlcnJpZGU7CiAKICAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIFJlc29sdmlu
Z1R5cGU+IG1fdHlwZU1hcDsKLSAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIE9wdGlvbmFs
PEFTVDo6QWRkcmVzc1NwYWNlPj4gbV9hZGRyZXNzU3BhY2VNYXA7CisgICAgSGFzaE1hcDxBU1Q6
OkV4cHJlc3Npb24qLCBBU1Q6OlR5cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5vdGF0aW9uczsKICAg
ICBIYXNoU2V0PFN0cmluZz4gbV92ZXJ0ZXhFbnRyeVBvaW50czsKICAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9mcmFnbWVudEVudHJ5UG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2NvbXB1dGVF
bnRyeVBvaW50czsKQEAgLTUzOCw4ICs1MzcsOCBAQCBib29sIENoZWNrZXI6OmFzc2lnblR5cGVz
KCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGtl
eVZhbHVlUGFpciA6IG1fYWRkcmVzc1NwYWNlTWFwKQotICAgICAgICBrZXlWYWx1ZVBhaXIua2V5
LT5zZXRBZGRyZXNzU3BhY2Uoa2V5VmFsdWVQYWlyLnZhbHVlKTsKKyAgICBmb3IgKGF1dG8mIGtl
eVZhbHVlUGFpciA6IG1fdHlwZUFubm90YXRpb25zKQorICAgICAgICBrZXlWYWx1ZVBhaXIua2V5
LT5zZXRUeXBlQW5ub3RhdGlvbihXVEZNb3ZlKGtleVZhbHVlUGFpci52YWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC02MjEsNiArNjIwLDE3IEBAIHN0YXRpYyBPcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KFJlc29sdmluZ1R5cGUmIHJl
c29sCiAgICAgfSkpOwogfQogCitzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+PiBjb21taXQoUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkKK3sKKyAgICByZXR1
cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4+IHsKKyAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLT5jbG9uZSgpOworICAg
IH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAg
ICAgIGlmICghcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2
ZWRUeXBlKCkpCisgICAgICAgICAgICByZXR1cm4gY29tbWl0KHJlc29sdmFibGVUeXBlUmVmZXJl
bmNlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpOworICAgIH0p
KTsKK30KKwogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYg
ZW51bWVyYXRpb25EZWZpbml0aW9uKQogewogICAgIGF1dG8qIGJhc2VUeXBlID0gKFsmXSgpIC0+
IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiB7CkBAIC03MjgsMjYgKzczOCwyNiBAQCB2b2lk
IENoZWNrZXI6OnZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKICAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7CiB9CiAKLWF1dG8gQ2hlY2tlcjo6
cmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVp
cmVzTFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4KK2F1dG8gQ2hlY2tlcjo6cmVjdXJz
ZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVpcmVzTGVm
dFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4KIHsKICAgICBWaXNpdG9yOjp2aXNpdChl
eHByZXNzaW9uKTsKICAgICBpZiAoZXJyb3IoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLSAgICByZXR1cm4gZ2V0SW5mbyhleHByZXNzaW9uLCByZXF1aXJlc0xWYWx1ZSk7CisgICAg
cmV0dXJuIGdldEluZm8oZXhwcmVzc2lvbiwgcmVxdWlyZXNMZWZ0VmFsdWUpOwogfQogCi1hdXRv
IENoZWNrZXI6OmdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVp
cmVzTFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4KK2F1dG8gQ2hlY2tlcjo6Z2V0SW5m
byhBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUpIC0+
IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgogewogICAgIGF1dG8gdHlwZUl0ZXJhdG9yID0gbV90eXBl
TWFwLmZpbmQoJmV4cHJlc3Npb24pOwogICAgIEFTU0VSVCh0eXBlSXRlcmF0b3IgIT0gbV90eXBl
TWFwLmVuZCgpKTsKIAotICAgIGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NT
cGFjZU1hcC5maW5kKCZleHByZXNzaW9uKTsKLSAgICBBU1NFUlQoYWRkcmVzc1NwYWNlSXRlcmF0
b3IgIT0gbV9hZGRyZXNzU3BhY2VNYXAuZW5kKCkpOwotICAgIGlmIChyZXF1aXJlc0xWYWx1ZSAm
JiAhYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKSB7CisgICAgYXV0byB0eXBlQW5ub3RhdGlv
bkl0ZXJhdG9yID0gbV90eXBlQW5ub3RhdGlvbnMuZmluZCgmZXhwcmVzc2lvbik7CisgICAgQVNT
RVJUKHR5cGVBbm5vdGF0aW9uSXRlcmF0b3IgIT0gbV90eXBlQW5ub3RhdGlvbnMuZW5kKCkpOwor
ICAgIGlmIChyZXF1aXJlc0xlZnRWYWx1ZSAmJiB0eXBlQW5ub3RhdGlvbkl0ZXJhdG9yLT52YWx1
ZS5pc1JpZ2h0VmFsdWUoKSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4ge3sgdHlwZUl0ZXJhdG9yLT52YWx1ZSwg
YWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlIH19OworICAgIHJldHVybiB7eyB0eXBlSXRlcmF0
b3ItPnZhbHVlLCB0eXBlQW5ub3RhdGlvbkl0ZXJhdG9yLT52YWx1ZSB9fTsKIH0KIAogdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRp
b24pCkBAIC03NjcsMTkgKzc3NywzMiBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKICAgICB9CiB9CiAKLXZvaWQgQ2hl
Y2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRUeXBlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFj
ZT4gYWRkcmVzc1NwYWNlKQordm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lv
biYgZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdW5uYW1lZFR5cGUs
IEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkK
IHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIFdURk1v
dmUodW5uYW1lZFR5cGUpKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOwotICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNz
U3BhY2VNYXAuYWRkKCZleHByZXNzaW9uLCBhZGRyZXNzU3BhY2UpOworICAgIGF1dG8gYWRkcmVz
c1NwYWNlQWRkUmVzdWx0ID0gbV90eXBlQW5ub3RhdGlvbnMuYWRkKCZleHByZXNzaW9uLCBXVEZN
b3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRS
ZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0KIAotdm9pZCBDaGVj
a2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVmUHRyPFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLCBPcHRpb25hbDxB
U1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlKQordm9pZCBDaGVja2VyOjphc3NpZ25UeXBl
KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYmIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVB
bm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
KSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
LSAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgm
ZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3Vs
dCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh0eXBlQW5ub3Rh
dGlvbikpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNz
U3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6Zm9yd2FyZFR5
cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdU
eXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVl
KCkpCit7CisgICAgcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc3VsdCkgeworICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHJlc3VsdC0+Y2xvbmUoKSk7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfSwg
WyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc3VsdCkgeworICAgICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHJlc3VsdC5jb3B5UmVm
KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50
cnkpOworICAgIH0pKTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fdHlwZUFu
bm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwogICAg
IEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1
bHQuaXNOZXdFbnRyeSk7CiB9CiAKQEAgLTc4OSw2ICs4MTIsMTEgQEAgdm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKICAg
ICBpZiAoIWxlZnRJbmZvKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAobGVmdEluZm8tPnR5
cGVBbm5vdGF0aW9uLmlzUmlnaHRWYWx1ZSgpKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBhdXRvIHJpZ2h0SW5mbyA9IHJlY3Vyc2VBbmRHZXRJ
bmZvKGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwogICAgIGlmICghcmlnaHRJbmZvKQog
ICAgICAgICByZXR1cm47CkBAIC04MDIsMjMgKzgzMCwxMCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQogICAgIGFz
c2lnblR5cGUoYXNzaWdubWVudEV4cHJlc3Npb24sIFdURk1vdmUoKnJlc3VsdFR5cGUpKTsKIH0K
IAotdm9pZCBDaGVja2VyOjpmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24s
IFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNl
PiBhZGRyZXNzU3BhY2UpCi17Ci0gICAgcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc3VsdCkgewotICAgICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHJlc3VsdC0+Y2xvbmUo
KSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc3VsdCkg
ewotICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHJl
c3VsdC5jb3B5UmVmKCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVz
dWx0LmlzTmV3RW50cnkpOwotICAgIH0pKTsKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3Vs
dCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVz
dWx0LmlzTmV3RW50cnkpOwotfQotCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKIHsKLSAgICBhdXRv
IGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmxWYWx1ZSgpLCB0cnVlKTsKLSAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgYXV0byBsZWZ0VmFs
dWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0
VmFsdWUoKSwgdHJ1ZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggdGhlIFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24ncyBBbm9ueW1vdXNWYXJpYWJsZXMuCkBAIC04MjcsNyArODQyLDcg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiAgICAgaWYgKCFuZXdWYWx1ZUluZm8pCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbWF0Y2hBbmRDb21taXQobFZhbHVlSW5mby0+cmVzb2x2aW5n
VHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKSkgeworICAgIGlmICghbWF0Y2hBbmRD
b21taXQobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZp
bmdUeXBlKSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtODczLDM3ICs4ODgsNDMgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNl
RXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXNzaWduVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Npb24sIHBvaW50ZXJUeXBlLT5j
bG9uZSgpLCBwb2ludGVyVHlwZS0+YWRkcmVzc1NwYWNlKCkpOworICAgIGFzc2lnblR5cGUoZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+Y2xvbmUoKSwgQVNUOjpMZWZ0VmFsdWUg
eyBwb2ludGVyVHlwZS0+YWRkcmVzc1NwYWNlKCkgfSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsK
LSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhtYWtlUG9pbnRlckV4cHJl
c3Npb24ubFZhbHVlKCksIHRydWUpOwotICAgIGlmICghbFZhbHVlSW5mbykKKyAgICBhdXRvIGxl
ZnRWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVm
dFZhbHVlKCksIHRydWUpOworICAgIGlmICghbGVmdFZhbHVlSW5mbykKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90
YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOworICAgIGlmICghbGVmdEFkZHJlc3NTcGFjZSkgewor
ICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgYXV0byog
bFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOwot
ICAgIGlmICghbFZhbHVlVHlwZSkgeworICAgIGF1dG8qIGxlZnRWYWx1ZVR5cGUgPSBnZXRVbm5h
bWVkVHlwZShsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBpZiAoIWxlZnRWYWx1
ZVR5cGUpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGFzc2lnblR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6
UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihtYWtlUG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkp
LCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBsVmFsdWVUeXBlLT5jbG9uZSgpKSk7CisgICAg
YXNzaWduVHlwZShtYWtlUG9pbnRlckV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpQb2lu
dGVyVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5vcmlnaW4oKSksICps
ZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKIHZvaWQgQ2hl
Y2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGF1dG8gbFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRH
ZXRJbmZvKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOwotICAgIGlmICgh
bFZhbHVlSW5mbykKKyAgICBhdXRvIGxlZnRWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyht
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKKyAgICBpZiAoIWxlZnRW
YWx1ZUluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIGxWYWx1ZVR5cGUgPSBnZXRV
bm5hbWVkVHlwZShsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWxWYWx1ZVR5
cGUpIHsKKyAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobGVmdFZhbHVl
SW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVUeXBlKSB7CiAgICAgICAg
IHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvJiB1bmlmeU5v
ZGUgPSBsVmFsdWVUeXBlLT51bmlmeU5vZGUoKTsKKyAgICBhdXRvJiB1bmlmeU5vZGUgPSBsZWZ0
VmFsdWVUeXBlLT51bmlmeU5vZGUoKTsKICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5p
ZnlOb2RlKSkgewogICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5u
YW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkVHlwZSkpIHsKQEAgLTkxMyw3ICs5MzQsOCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFT
VDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
cwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFsVmFsdWVJ
bmZvLT5hZGRyZXNzU3BhY2UpIHsKKyAgICAgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gbGVm
dFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOworICAgICAgICBp
ZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKICAgICAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTkyMSwxODMgKzk0MywxMTIgQEAgdm9pZCBDaGVj
a2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3MKICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlw
ZSkpIHsKICAgICAgICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlU
eXBlPih1bm5hbWVkVHlwZSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2F2ZSB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzLgotICAgICAgICAgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6
VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsVmFsdWVJbmZv
LT5hZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50eXBlKCkuY2xvbmUoKSkpOworICAgICAgICAgICAg
YXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBhcnJheVR5cGUudHlwZSgpLmNs
b25lKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
ICghbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlKSB7CisgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNl
ID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOworICAg
IGlmICghbGVmdEFkZHJlc3NTcGFjZSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4o
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsVmFsdWVJbmZvLT5hZGRy
ZXNzU3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25lKCkpKTsKKyAgICBhc3NpZ25UeXBlKG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwg
KmxlZnRBZGRyZXNzU3BhY2UsIGxlZnRWYWx1ZVR5cGUtPmNsb25lKCkpKTsKIH0KIAotdm9pZCBD
aGVja2VyOjpmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKEFTVDo6UHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIEFTVDo6VW5uYW1lZFR5cGUmIHdy
YXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVkVHlwZSogZXh0cmFBcmd1bWVudFR5cGUpCit2b2lk
IENoZWNrZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKIHsKLSAg
ICB1c2luZyBPdmVybG9hZFJlc29sdXRpb24gPSBzdGQ6OnR1cGxlPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiosIEFTVDo6VW5uYW1lZFR5cGUqPjsKLQotICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiogZ2V0RnVuY3Rpb247Ci0gICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0UmV0dXJuVHlwZTsK
LSAgICBzdGQ6OnRpZShnZXRGdW5jdGlvbiwgZ2V0UmV0dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3Zl
cmxvYWRSZXNvbHV0aW9uIHsKLSAgICAgICAgUmVzb2x2aW5nVHlwZSBnZXRBcmd1bWVudFR5cGUx
KHdyYXBwZWRCYXNlVHlwZS5jbG9uZSgpKTsKLSAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlw
ZT4gZ2V0QXJndW1lbnRUeXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAg
ICAgICAgICAgZ2V0QXJndW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5
cGUtPmNsb25lKCkpOworICAgIGF1dG8gYmFzZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhkb3RF
eHByZXNzaW9uLmJhc2UoKSk7CisgICAgaWYgKCFiYXNlSW5mbykKKyAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gYmFzZVVubmFtZWRUeXBlID0gY29tbWl0KGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBl
KTsKKyAgICBpZiAoIWJhc2VVbm5hbWVkVHlwZSkKKyAgICAgICAgcmV0dXJuOwogCisgICAgQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBnZXRGdW5jdGlvbiA9IG51bGxwdHI7CisgICAgQVNUOjpV
bm5hbWVkVHlwZSogZ2V0UmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAgewogICAgICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gZ2V0QXJndW1lbnRUeXBl
czsKLSAgICAgICAgZ2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoZ2V0QXJndW1lbnRUeXBlMSk7Ci0g
ICAgICAgIGlmIChnZXRBcmd1bWVudFR5cGUyKQotICAgICAgICAgICAgZ2V0QXJndW1lbnRUeXBl
cy5hcHBlbmQoKmdldEFyZ3VtZW50VHlwZTIpOwotCi0gICAgICAgIGF1dG8qIGdldEZ1bmN0aW9u
ID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5w
b3NzaWJsZUdldE92ZXJsb2FkcygpLCBnZXRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKLSAgICAg
ICAgaWYgKCFnZXRGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihu
dWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGdldEZ1bmN0
aW9uLCAmZ2V0RnVuY3Rpb24tPnR5cGUoKSk7Ci0gICAgfSkoKTsKLQotICAgIEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb247Ci0gICAgQVNUOjpVbm5hbWVkVHlwZSogYW5kUmV0
dXJuVHlwZTsKLSAgICBzdGQ6OnRpZShhbmRGdW5jdGlvbiwgYW5kUmV0dXJuVHlwZSkgPSAoWyZd
KCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsKLSAgICAgICAgYXV0byBjb21wdXRlQW5kQXJndW1l
bnRUeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBPcHRpb25hbDxS
ZXNvbHZpbmdUeXBlPiB7Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4geyB1bm5hbWVkVHlwZS5j
bG9uZSgpIH07Ci0gICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBl
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4geyBSZXNvbHZpbmdUeXBlKG1ha2VVbmlxdWVSZWY8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBkb3duY2FzdDxBU1Q6
OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5jbG9uZSgpKSkgfTsKLSAgICAgICAgICAg
IGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiB7IFJlc29sdmluZ1R5cGUo
bWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNh
c3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkuY2xvbmUoKSkpIH07Ci0gICAgICAg
IH07Ci0gICAgICAgIGF1dG8gY29tcHV0ZUFuZFJldHVyblR5cGUgPSBbJl0oQVNUOjpVbm5hbWVk
VHlwZSYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKLSAgICAgICAgICAgIGlm
IChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUo
KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9OwotCi0gICAgICAgIGF1
dG8gYW5kQXJndW1lbnRUeXBlMSA9IGNvbXB1dGVBbmRBcmd1bWVudFR5cGUod3JhcHBlZEJhc2VU
eXBlKTsKLSAgICAgICAgaWYgKCFhbmRBcmd1bWVudFR5cGUxKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICBPcHRpb25hbDxSZXNv
bHZpbmdUeXBlPiBhbmRBcmd1bWVudFR5cGUyOwotICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5
cGUpCi0gICAgICAgICAgICBhbmRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFy
Z3VtZW50VHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGJh
c2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgZ2V0RnVuY3Rpb24gPSByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUdldE92ZXJsb2FkcygpLCBn
ZXRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGdldEZ1bmN0aW9uKQorICAg
ICAgICAgICAgZ2V0UmV0dXJuVHlwZSA9ICZnZXRGdW5jdGlvbi0+dHlwZSgpOworICAgIH0KIAor
ICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb24gPSBudWxscHRyOworICAg
IEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVyblR5cGUgPSBudWxscHRyOworICAgIGlmIChhdXRv
IGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NT
cGFjZSgpKSB7CisgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0
QWRkcmVzc1NwYWNlLCBiYXNlVW5uYW1lZFR5cGUtPmdldCgpLmNsb25lKCkpOwogICAgICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYW5kQXJndW1lbnRU
eXBlczsKLSAgICAgICAgYW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoKmFuZEFyZ3VtZW50VHlwZTEp
OwotICAgICAgICBpZiAoYW5kQXJndW1lbnRUeXBlMikKLSAgICAgICAgICAgIGFuZEFyZ3VtZW50
VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5cGUyKTsKLQotICAgICAgICBhdXRvKiBhbmRGdW5j
dGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24ucG9zc2libGVBbmRPdmVybG9hZHMoKSwgYW5kQXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0g
ICAgICAgIGlmICghYW5kRnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihhbmRG
dW5jdGlvbiwgY29tcHV0ZUFuZFJldHVyblR5cGUoYW5kRnVuY3Rpb24tPnR5cGUoKSkpOwotICAg
IH0pKCk7CisgICAgICAgIGFuZEFyZ3VtZW50VHlwZXMuYXBwZW5kKGJhc2VJbmZvLT5yZXNvbHZp
bmdUeXBlKTsKKyAgICAgICAgYW5kRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZElt
cGwoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFuZE92ZXJsb2FkcygpLCBhbmRBcmd1bWVudFR5cGVz
LCBudWxscHRyKTsKKyAgICAgICAgaWYgKGFuZEZ1bmN0aW9uKQorICAgICAgICAgICAgYW5kUmV0
dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgp
KS5lbGVtZW50VHlwZSgpOyAvLyBGSVhNRTogRW5mb3JjZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3
aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKKyAgICB9CisKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBl
KiB0aHJlYWRBbmRSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICB7CisgICAgICAgIGF1dG8gYXJn
dW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4o
ZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGJhc2VV
bm5hbWVkVHlwZS0+Z2V0KCkuY2xvbmUoKSk7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiB0aHJlYWRBbmRBcmd1bWVudFR5cGVzOworICAgICAg
ICB0aHJlYWRBbmRBcmd1bWVudFR5cGVzLmFwcGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7
CisgICAgICAgIHRocmVhZEFuZEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBs
KGRvdEV4cHJlc3Npb24ucG9zc2libGVBbmRPdmVybG9hZHMoKSwgdGhyZWFkQW5kQXJndW1lbnRU
eXBlcywgbnVsbHB0cik7CisgICAgICAgIGlmICh0aHJlYWRBbmRGdW5jdGlvbikKKyAgICAgICAg
ICAgIHRocmVhZEFuZFJldHVyblR5cGUgPSAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odGhy
ZWFkQW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8gRklYTUU6IEVuZm9yY2Ug
dGhlIHJldHVybiBvZiBhbmRlcnMgd2lsbCBhbHdheXMgYmUgYSBwb2ludGVyCisgICAgfQogCi0g
ICAgaWYgKCFnZXRSZXR1cm5UeXBlICYmICFhbmRSZXR1cm5UeXBlKSB7CisgICAgaWYgKCFnZXRG
dW5jdGlvbiAmJiAhYW5kRnVuY3Rpb24pIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLQotICAgIGlmIChnZXRSZXR1cm5UeXBlICYmIGFuZFJldHVyblR5cGUg
JiYgIW1hdGNoZXMoKmdldFJldHVyblR5cGUsICphbmRSZXR1cm5UeXBlKSkgeworICAgIGlmIChn
ZXRGdW5jdGlvbiAmJiBhbmRGdW5jdGlvbikgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChhbmRGdW5jdGlvbiAmJiB0aHJlYWRBbmRGdW5jdGlv
biAmJiAhbWF0Y2hlcygqYW5kUmV0dXJuVHlwZSwgKnRocmVhZEFuZFJldHVyblR5cGUpKSB7CiAg
ICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24qIHNldEZ1bmN0aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNl
dFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUoc2V0RnVuY3Rpb24sIHNldFJldHVyblR5cGUpID0g
KFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlvbiB7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgc2V0
QXJndW1lbnQxVHlwZSh3cmFwcGVkQmFzZVR5cGUuY2xvbmUoKSk7Ci0gICAgICAgIE9wdGlvbmFs
PFJlc29sdmluZ1R5cGU+IHNldEFyZ3VtZW50VHlwZTI7Ci0gICAgICAgIGlmIChleHRyYUFyZ3Vt
ZW50VHlwZSkKLSAgICAgICAgICAgIHNldEFyZ3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4
dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgpKTsKLSAgICAgICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1
bWVudDNUeXBlKGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0
dXJuVHlwZS0+Y2xvbmUoKSk7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogZmllbGRUeXBlID0gZ2V0
UmV0dXJuVHlwZSA/IGdldFJldHVyblR5cGUgOiBhbmRSZXR1cm5UeXBlOwogCisgICAgQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5jdGlvbiA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5h
bWVkVHlwZSogc2V0UmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAgewogICAgICAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gc2V0QXJndW1lbnRUeXBlczsK
LSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoc2V0QXJndW1lbnQxVHlwZSk7Ci0gICAg
ICAgIGlmIChzZXRBcmd1bWVudFR5cGUyKQotICAgICAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5h
cHBlbmQoKnNldEFyZ3VtZW50VHlwZTIpOwotICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVu
ZChzZXRBcmd1bWVudDNUeXBlKTsKLQotICAgICAgICBhdXRvKiBzZXRGdW5jdGlvbiA9IHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVT
ZXRPdmVybG9hZHMoKSwgc2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAgICAgIGlmICgh
c2V0RnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwg
bnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzZXRGdW5jdGlvbiwgJnNl
dEZ1bmN0aW9uLT50eXBlKCkpOwotICAgIH0pKCk7Ci0KLSAgICBpZiAoc2V0RnVuY3Rpb24pIHsK
LSAgICAgICAgaWYgKCFtYXRjaGVzKHNldEZ1bmN0aW9uLT50eXBlKCksIHdyYXBwZWRCYXNlVHlw
ZSkpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1Nw
YWNlOwotICAgIGlmIChnZXRSZXR1cm5UeXBlIHx8IGFuZFJldHVyblR5cGUpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFRoZSByZWZlcmVuY2UgY29tcGlsZXIgaGFzICJlbHNlIGlmICghbm9kZS5iYXNl
LmlzTFZhbHVlICYmICFiYXNlVHlwZS5pc0FycmF5UmVmKSIsCi0gICAgICAgIC8vIGJ1dCBJIGRv
bid0IHVuZGVyc3RhbmQgd2h5IGl0IGV4aXN0cy4gSSBoYXZlbid0IHdyaXR0ZW4gaXQgaGVyZSwg
YW5kIEknbGwgaW52ZXN0aWdhdGUKLSAgICAgICAgLy8gaWYgd2UgY2FuIHJlbW92ZSBpdCBmcm9t
IHRoZSByZWZlcmVuY2UgY29tcGlsZXIuCi0gICAgICAgIGlmIChpczxBU1Q6OlJlZmVyZW5jZVR5
cGU+KHdyYXBwZWRCYXNlVHlwZSkpCi0gICAgICAgICAgICBhZGRyZXNzU3BhY2UgPSBkb3duY2Fz
dDxBU1Q6OlJlZmVyZW5jZVR5cGU+KHdyYXBwZWRCYXNlVHlwZSkuYWRkcmVzc1NwYWNlKCk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBhZGRyZXNzU3BhY2VJdGVyYXRvciA9IG1f
YWRkcmVzc1NwYWNlTWFwLmZpbmQoJnByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwot
ICAgICAgICAgICAgQVNTRVJUKGFkZHJlc3NTcGFjZUl0ZXJhdG9yICE9IG1fYWRkcmVzc1NwYWNl
TWFwLmVuZCgpKTsKLSAgICAgICAgICAgIGlmIChhZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUp
Ci0gICAgICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gKmFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52
YWx1ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHNldEVycm9yKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAg
IHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAg
ICAgUmVzb2x2aW5nVHlwZSBmaWVsZFJlc29sdmluZ1R5cGUoZmllbGRUeXBlLT5jbG9uZSgpKTsK
KyAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoZmllbGRSZXNvbHZpbmdUeXBlKTsKKyAg
ICAgICAgc2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVz
c2lvbi5wb3NzaWJsZVNldE92ZXJsb2FkcygpLCBzZXRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsK
KyAgICAgICAgaWYgKHNldEZ1bmN0aW9uKQorICAgICAgICAgICAgc2V0UmV0dXJuVHlwZSA9ICZz
ZXRGdW5jdGlvbi0+dHlwZSgpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBHZW5lcmF0ZSB0aGUg
Y2FsbCBleHByZXNzaW9ucwotCi0gICAgYXNzaWduVHlwZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24sIGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlw
ZS0+Y2xvbmUoKSwgYWRkcmVzc1NwYWNlKTsKLX0KLQotT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+PiBDaGVja2VyOjpyZWN1cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCi17Ci0gICAgYXV0
byBiYXNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5i
YXNlKCkpOwotICAgIGlmICghYmFzZUluZm8pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICBhdXRvKiBiYXNlVHlwZSA9IGdldFVubmFtZWRUeXBlKGJhc2VJbmZvLT5yZXNvbHZp
bmdUeXBlKTsKLSAgICBpZiAoIWJhc2VUeXBlKSB7CisgICAgaWYgKHNldEZ1bmN0aW9uICYmIGFu
ZEZ1bmN0aW9uKSB7CiAgICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgfQotICAgIGF1dG8mIGJhc2VVbmlmeU5vZGUgPSBiYXNlVHlwZS0+dW5pZnlO
b2RlKCk7Ci0gICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpKQotICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkuY2xv
bmUoKTsKLSAgICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpKTsKLSAg
ICByZXR1cm4geyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNl
VW5pZnlOb2RlKSkgfTsKLX0KLQotdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Np
b24mIGRvdEV4cHJlc3Npb24pCi17Ci0gICAgYXV0byBiYXNlVHlwZSA9IHJlY3Vyc2VBbmRXcmFw
QmFzZVR5cGUoZG90RXhwcmVzc2lvbik7Ci0gICAgaWYgKCFiYXNlVHlwZSkKICAgICAgICAgcmV0
dXJuOworICAgIH0KIAotICAgIGZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoZG90RXhwcmVz
c2lvbiwgKmJhc2VUeXBlKTsKKyAgICBkb3RFeHByZXNzaW9uLnNldEdldEZ1bmN0aW9uKGdldEZ1
bmN0aW9uKTsKKyAgICBkb3RFeHByZXNzaW9uLnNldEFuZEZ1bmN0aW9uKGFuZEZ1bmN0aW9uKTsK
KyAgICBkb3RFeHByZXNzaW9uLnNldFRocmVhZEFuZEZ1bmN0aW9uKHRocmVhZEFuZEZ1bmN0aW9u
KTsKKyAgICBkb3RFeHByZXNzaW9uLnNldFNldEZ1bmN0aW9uKHNldEZ1bmN0aW9uKTsKKworICAg
IEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKTsK
KyAgICBpZiAoYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9u
LmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAgICBpZiAoYW5kRnVuY3Rpb24pCisgICAgICAg
ICAgICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6TGVmdFZhbHVlIHsgKmxlZnRBZGRyZXNzU3BhY2Ug
fTsKKyAgICAgICAgZWxzZSBpZiAoc2V0RnVuY3Rpb24pCisgICAgICAgICAgICB0eXBlQW5ub3Rh
dGlvbiA9IEFTVDo6QWJzdHJhY3RMZWZ0VmFsdWUoKTsKKyAgICB9IGVsc2UgaWYgKCFiYXNlSW5m
by0+dHlwZUFubm90YXRpb24uaXNSaWdodFZhbHVlKCkgJiYgKHNldEZ1bmN0aW9uIHx8IGFuZEZ1
bmN0aW9uKSkKKyAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkFic3RyYWN0TGVmdFZhbHVl
KCk7CisgICAgYXNzaWduVHlwZShkb3RFeHByZXNzaW9uLCBmaWVsZFR5cGUtPmNsb25lKCksIFdU
Rk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0KIAotdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Oklu
ZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OkluZGV4RXhwcmVzc2lvbiYpCiB7Ci0gICAgYXV0byBiYXNlVHlwZSA9IHJlY3Vyc2VBbmRXcmFw
QmFzZVR5cGUoaW5kZXhFeHByZXNzaW9uKTsKLSAgICBpZiAoIWJhc2VUeXBlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIGluZGV4SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGluZGV4RXhw
cmVzc2lvbi5pbmRleEV4cHJlc3Npb24oKSk7Ci0gICAgaWYgKCFpbmRleEluZm8pCi0gICAgICAg
IHJldHVybjsKLSAgICBhdXRvIGluZGV4RXhwcmVzc2lvblR5cGUgPSBnZXRVbm5hbWVkVHlwZShp
bmRleEluZm8tPnJlc29sdmluZ1R5cGUpOwotICAgIGlmICghaW5kZXhFeHByZXNzaW9uVHlwZSkg
ewotICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmlu
aXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhpbmRleEV4cHJlc3Npb24sIFdURk1vdmUoKmJhc2VU
eXBlKSwgaW5kZXhFeHByZXNzaW9uVHlwZSk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlh
YmxlUmVmZXJlbmNlKQpAQCAtMTEwNSwxMCArMTA1NiwxMCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQogICAgIEFTU0VSVCh2
YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsKICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVu
Y2UudmFyaWFibGUoKS0+dHlwZSgpKTsKICAgICAKLSAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NT
cGFjZT4gYWRkcmVzc1NwYWNlOwotICAgIGlmICghdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUo
KS0+aXNBbm9ueW1vdXMoKSkKLSAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZDsKLSAgICBhc3NpZ25UeXBlKHZhcmlhYmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJl
ZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCktPmNsb25lKCksIGFkZHJlc3NTcGFjZSk7CisgICAg
QVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpOwor
ICAgIGlmICghdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+aXNBbm9ueW1vdXMoKSkgLy8g
RklYTUU6IFRoaXMgZG9lc24ndCBzZWVtIHJpZ2h0LgorICAgICAgICB0eXBlQW5ub3RhdGlvbiA9
IEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9OworICAgIGFzc2ln
blR5cGUodmFyaWFibGVSZWZlcmVuY2UsIHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5
cGUoKS0+Y2xvbmUoKSwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwogfQogCiB2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCkBAIC0xNDA3LDcgKzEzNTgs
NyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJl
c3Npb24pCiAgICAgaWYgKGVycm9yKCkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvIGxhc3RJ
bmZvID0gZ2V0SW5mbyhjb21tYUV4cHJlc3Npb24ubGlzdCgpLmxhc3QoKSk7Ci0gICAgZm9yd2Fy
ZFR5cGUoY29tbWFFeHByZXNzaW9uLCBsYXN0SW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgZm9y
d2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBsYXN0SW5mby0+cmVzb2x2aW5nVHlwZSwgbGFzdElu
Zm8tPnR5cGVBbm5vdGF0aW9uKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlRlcm5h
cnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKQEAgLTE0NTYsNyArMTQwNyw3IEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCiAg
ICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbi0+cGFyYW1ldGVycygp
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbWF0Y2hBbmRDb21taXQodHlwZXNbaV0uZ2V0
KCksICpmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLnR5cGUoKSkpIHsKKyAgICAgICAgaWYgKCFt
YXRjaEFuZENvbW1pdCh0eXBlc1tpXS5nZXQoKSwgKmZ1bmN0aW9uLT5wYXJhbWV0ZXJzKClbaV0t
PnR5cGUoKSkpIHsKICAgICAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMSW5mZXJUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEluZmVyVHlwZXMuY3BwCmluZGV4IDJmY2M2ZjEzOWRlODRhMzJjNGM3MDdjYTA2
MGI5YmUxYjQyZmQzZTAuLjE1OGUyM2I0NzJkZTQ5OTMxZWI3ODQyYzk3Yjg0YWEyM2QwOTcwZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5m
ZXJUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xJbmZlclR5cGVzLmNwcApAQCAtMjI3LDkgKzIyNyw5IEBAIGJvb2wgaW5mZXJUeXBlc0ZvckNh
bGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3Rk
OjpyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBv
c3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8g
c3VjY2VzcyA9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7Ci0g
ICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqcG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClb
aV0udHlwZSgpLCB1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqcG9z
c2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSwgdW5uYW1lZFR5cGUpOwogICAg
ICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBl
UmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUocG9zc2libGVGdW5jdGlvbi5w
YXJhbWV0ZXJzKClbaV0udHlwZSgpLT51bmlmeU5vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4g
cmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY2FuUmVzb2x2ZShwb3Nz
aWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKSk7CiAgICAg
ICAgIH0pKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xO
YW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDA1MzUwZTBkYzk4NWVjYjM5MGY1ODZmMGEzNGQyYTZl
Y2ZlZGNhMzIuLjNjYmVkZDljMjU3ODhmZTVkZTA1NjEyZmYwZGQyNmQ0Yzg1NGY3ZTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29s
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVSZXNvbHZlci5jcHAKQEAgLTE5Nyw5ICsxOTcsMTAgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZp
c2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIDw9
IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUg
YWJsZSB0byBiZWNvbWUgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFscyB3aXRob3V0IHVwZGF0aW5n
IGJhY2tyZWZlcmVuY2VzIik7CiAgICAgICAgICAgICAgICAgICAgIExleGVyOjpUb2tlbiBvcmln
aW4gPSBkb3RFeHByZXNzaW9uLm9yaWdpbigpOwogICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogUGVyaGFwcyBkbyB0aGlzIHdpdGggdmFyaWFudHMgb3IgYSBSZXdyaXRlciBpbnN0ZWFkLgor
ICAgICAgICAgICAgICAgICAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOwogICAg
ICAgICAgICAgICAgICAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsID0gQVNUOjpFbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWw6OndyYXAoV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGJhc2VOYW1l
KSwgV1RGTW92ZShtZW1iZXJOYW1lKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLCAqbWVtYmVyKTsK
LSAgICAgICAgICAgICAgICAgICAgbmV3ICgmZG90RXhwcmVzc2lvbikgQVNUOjpFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwoV1RGTW92ZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbmV3IChsb2NhdGlvbikgQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwoV1RGTW92ZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXRFcnJvcigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJz
ZXIuY3BwCmluZGV4IDM5ZGQ3YTJhMWJhYjBhOTdiMDkzOThlNTA3ZTQ4ODcxODdlOWFkNmIuLmE5
Nzc4OTc5MDMwNzQ2OGNmNmYwZjMwYjEwMGQ1ZmY1ZTk3YTZiNGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKQEAgLTEwODIs
MTMgKzEwODIsMTMgQEAgYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVycygpIC0+IEV4cGVjdGVk
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPgogICAgIGF1dG8gZmlyc3RQYXJhbWV0
ZXIgPSBwYXJzZVBhcmFtZXRlcigpOwogICAgIGlmICghZmlyc3RQYXJhbWV0ZXIpCiAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmaXJzdFBhcmFtZXRlci5lcnJvcigpKTsKLSAgICBw
YXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKCpmaXJzdFBhcmFtZXRlcikpOworICAgIHBhcmFtZXRl
cnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3Zl
KCpmaXJzdFBhcmFtZXRlcikpKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKExleGVyOjpUb2tlbjo6
VHlwZTo6Q29tbWEpKSB7CiAgICAgICAgIGF1dG8gcGFyYW1ldGVyID0gcGFyc2VQYXJhbWV0ZXIo
KTsKICAgICAgICAgaWYgKCFwYXJhbWV0ZXIpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4ocGFyYW1ldGVyLmVycm9yKCkpOwotICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKCpwYXJhbWV0ZXIpKTsKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUoKnBhcmFtZXRlcikpKTsKICAg
ICB9CiAKICAgICBhdXRvIHJpZ2h0UGFyZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9r
ZW46OlR5cGU6OlJpZ2h0UGFyZW50aGVzaXMpOwpAQCAtMTU2NywxNCArMTU2NywxNCBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnNTdAogICAgIGlmICghZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uKQog
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9u
LmVycm9yKCkpOwogCi0gICAgVmVjdG9yPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4gcmVzdWx0
OwotICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uKSk7
CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+PiByZXN1bHQ7
CisgICAgcmVzdWx0LmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bj4oV1RGTW92ZSgqZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uKSkpOwogCiAgICAgd2hpbGUgKHRy
eVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb21tYSkpIHsKICAgICAgICAgYXV0byB2YXJpYWJs
ZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCgqdHlwZSktPmNsb25lKCkp
OwogICAgICAgICBpZiAoIXZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgICAgICAgICByZXR1cm4g
VW5leHBlY3RlZDxFcnJvcj4odmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKLSAgICAgICAg
cmVzdWx0LmFwcGVuZChXVEZNb3ZlKCp2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1v
dmUoKnZhcmlhYmxlRGVjbGFyYXRpb24pKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShyZXN1
bHQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByZXBhcmUuY3BwCmluZGV4IDlhMTAzNWE0YjhjYWQzM2EyMWU2NzBmMjIwMDU5MWNjMTQ4ZDZi
MTMuLjg2OWI3YzM4Y2RiNGE5ZGNjMWIyOTQxOTY0YmU5ZDY4MWFkOGUwODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcApA
QCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJX
SExTTFByb3BlcnR5UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXSExTTFJlY3Vyc2lvbkNoZWNrZXIu
aCIKICNpbmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hM
U0xTZW1hbnRpY01hdGNoZXIuaCIKQEAgLTgyLDcgKzgzLDcgQEAgc3RhdGljIE9wdGlvbmFsPFBy
b2dyYW0+IHByZXBhcmVTaGFyZWQoU3RyaW5nJiB3aGxzbFNvdXJjZSkKICAgICBpZiAoIWNoZWNr
KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGNoZWNrTGl0ZXJh
bFR5cGVzKHByb2dyYW0pOwotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlc29sdmUgcHJvcGVydGllcyBoZXJlCisgICAgcmVzb2x2
ZVByb3BlcnRpZXMocHJvZ3JhbSk7CiAgICAgZmluZEhpZ2hab21iaWVzKHByb2dyYW0pOwogICAg
IGlmICghY2hlY2tTdGF0ZW1lbnRCZWhhdmlvcihwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkZWFhMDI3
NWZkOWY3MGE4YzE0NzliMGNkMTUyYzg3NDgwNGI0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3Bw
CkBAIC0wLDAgKzEsNzYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldITFNMUHJvcGVydHlSZXNvbHZlci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENh
bGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb21tYUV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG90RXhw
cmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRl
ckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAi
V0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgorI2lu
Y2x1ZGUgIldITFNMVmlzaXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK2NsYXNzIFByb3BlcnR5UmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7Citw
dWJsaWM6Citwcml2YXRlOgorICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24m
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJikgb3ZlcnJpZGU7
CisKKyAgICBib29sIHNpbXBsaWZ5UmlnaHRWYWx1ZShBU1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAg
ICBib29sIHNpbXBsaWZ5QWJzdHJhY3RMZWZ0VmFsdWUoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lv
biYsIEFTVDo6RG90RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgcmln
aHQpOworICAgIHZvaWQgc2ltcGxpZnlMZWZ0VmFsdWUoQVNUOjpFeHByZXNzaW9uJik7CisKKyAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7Cit9Owor
Cit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhw
cmVzc2lvbikKK3sKKyAgICAvLyBVbmxlc3Mgd2UncmUgaW5zaWRlIGFuIEFzc2lnbm1lbnRFeHBy
ZXNzaW9uIG9yIGEgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiwgd2UncmUgYSByaWdodCB2YWx1
ZS4KKyAgICBpZiAoIXNpbXBsaWZ5UmlnaHRWYWx1ZShkb3RFeHByZXNzaW9uKSkKKyAgICAgICAg
c2V0RXJyb3IoKTsKK30KKwordm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIFZpc2l0b3I6OnZpc2l0
KGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgaWYgKCFtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmlz
RW1wdHkoKSkKKyAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkuc3RhdGVtZW50cygp
Lmluc2VydCgwLCBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQ+KExleGVyOjpUb2tlbihtX3ZhcmlhYmxlRGVjbGFyYXRpb25zWzBdLT5vcmlnaW4oKSksIFdU
Rk1vdmUobV92YXJpYWJsZURlY2xhcmF0aW9ucykpKTsKK30KKworc3RhdGljIE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBzZXR0ZXJDYWxsKEFTVDo6RG90RXhwcmVzc2lvbiYg
ZG90RXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiBuZXdWYWx1ZSwgY29u
c3Qgc3RkOjpmdW5jdGlvbjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPigpPiYgbGVmdFZhbHVl
RmFjdG9yeSwgY29uc3Qgc3RkOjpmdW5jdGlvbjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPigp
PiYgcG9pbnRlclRvTGVmdFZhbHVlRmFjdG9yeSkKK3sKKyAgICBpZiAoZG90RXhwcmVzc2lvbi5h
bmRGdW5jdGlvbigpKSB7CisgICAgICAgIC8vICpvcGVyYXRvciYuZm9vKCZ2KSA9IG5ld1ZhbHVl
CisgICAgICAgIGlmICghZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpKQorICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKHBvaW50ZXJUb0xlZnRWYWx1ZUZhY3RvcnkoKSk7CisgICAgICAgIGF1dG8gY2FsbEV4cHJl
c3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihk
b3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVu
Y3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgY2FsbEV4cHJl
c3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpLT50eXBlKCku
Y2xvbmUoKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OlJpZ2h0VmFsdWUoKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90
RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpKTsKKworICAgICAgICBhdXRvIGRlcmVmZXJl
bmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+
KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZShjYWxsRXhwcmVz
c2lvbikpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8
QVNUOjpQb2ludGVyVHlwZT4oZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlvbigpLT50eXBl
KCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lv
bi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6
VGhyZWFkIH0pOworCisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNz
aW9uLm9yaWdpbigpKSwgV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pLCBXVEZNb3ZlKG5l
d1ZhbHVlKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0
PEFTVDo6UG9pbnRlclR5cGU+KGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlw
ZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lv
bi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgIHJldHVy
biBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9u
KSk7CisgICAgfQorCisgICAgLy8gdiA9IG9wZXJhdG9yLmZvbz0odiwgbmV3VmFsdWUpCisgICAg
QVNTRVJUKGRvdEV4cHJlc3Npb24uc2V0RnVuY3Rpb24oKSk7CisKKyAgICBWZWN0b3I8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGxl
ZnRWYWx1ZUZhY3RvcnkoKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKG5ld1ZhbHVl
KSk7CisgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhw
cmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJpbmcoZG90
RXhwcmVzc2lvbi5zZXRGdW5jdGlvbigpLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwor
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24uc2V0RnVuY3Rpb24oKS0+
dHlwZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RF
eHByZXNzaW9uLnNldEZ1bmN0aW9uKCkpOworCisgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBsZWZ0VmFsdWVGYWN0b3J5KCksIFdURk1vdmUoY2Fs
bEV4cHJlc3Npb24pKTsKKyAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHBy
ZXNzaW9uLnNldEZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICBhc3NpZ25tZW50RXhw
cmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgcmV0
dXJuIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Np
b24pKTsKK30KKworc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBn
ZXR0ZXJDYWxsKEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbiwgY29uc3Qgc3RkOjpm
dW5jdGlvbjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPigpPiYgbGVmdFZhbHVlRmFjdG9yeSwg
Y29uc3Qgc3RkOjpmdW5jdGlvbjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPigpPiYgcG9pbnRl
clRvTGVmdFZhbHVlRmFjdG9yeSkKK3sKKyAgICBpZiAoZG90RXhwcmVzc2lvbi5hbmRGdW5jdGlv
bigpKSB7CisgICAgICAgIC8vICpvcGVyYXRvciYuZm9vKCZ2KQorICAgICAgICBpZiAoIWRvdEV4
cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChwb2ludGVyVG9MZWZ0VmFs
dWVGYWN0b3J5KCkpOworICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4o
KSksIFN0cmluZyhkb3RFeHByZXNzaW9uLnRocmVhZEFuZEZ1bmN0aW9uKCktPm5hbWUoKSksIFdU
Rk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4
cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgICAgICBj
YWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAg
ICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmRvdEV4cHJlc3Npb24udGhyZWFkQW5k
RnVuY3Rpb24oKSk7CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhw
cmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGRv
dEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNs
b25lKCkpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKworICAgICAg
ICByZXR1cm4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oV1RGTW92ZShkZXJlZmVyZW5jZUV4
cHJlc3Npb24pKTsKKyAgICB9CisKKyAgICAvLyBvcGVyYXRvci5mb28odikKKyAgICBBU1NFUlQo
ZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpKTsKKyAgICAKKyAgICBWZWN0b3I8VW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGxlZnRW
YWx1ZUZhY3RvcnkoKSk7CisgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkp
LCBTdHJpbmcoZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpLT5uYW1lKCkpLCBXVEZNb3ZlKGFy
Z3VtZW50cykpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24uZ2V0
RnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1
bmN0aW9uKCpkb3RFeHByZXNzaW9uLmdldEZ1bmN0aW9uKCkpOworCisgICAgcmV0dXJuIFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKK30KKworc3Ry
dWN0IE1vZGlmeVJlc3VsdCB7CisgICAgQVNUOjpFeHByZXNzaW9uJiBpbm5lckxlZnRWYWx1ZTsK
KyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOworICAg
IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gdmFyaWFibGVEZWNs
YXJhdGlvbnM7Cit9Oworc3RydWN0IE1vZGlmaWNhdGlvblJlc3VsdCB7CisgICAgVmVjdG9yPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKyAgICBVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPiByZXN1bHQ7Cit9Oworc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4g
bW9kaWZ5KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbiwgc3RkOjpmdW5jdGlvbjxP
cHRpb25hbDxNb2RpZmljYXRpb25SZXN1bHQ+KE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+PiYmKT4gbW9kaWZpY2F0aW9uKQoreworICAgIC8vIENvbnNpZGVyIGEuYi5jLmQrKzsK
KyAgICAvLyBUaGlzIHdvdWxkIGdldCB0cmFuc2Zvcm1lZCBpbnRvOgorICAgIC8vCisgICAgLy8g
U3RlcCAxOgorICAgIC8vIHAgPSAmYTsKKyAgICAvLworICAgIC8vIFN0ZXAgMjoKKyAgICAvLyBx
ID0gb3BlcmF0b3IuYigqcCk7CisgICAgLy8gciA9IG9wZXJhdG9yLmMocSk7CisgICAgLy8KKyAg
ICAvLyBTdGVwIDM6CisgICAgLy8gb2xkVmFsdWUgPSBvcGVyYXRvci5kKHIpOworICAgIC8vIG5l
d1ZhbHVlID0gLi4uOworICAgIC8vCisgICAgLy8gU3RlcCA0OgorICAgIC8vIHIgPSBvcGVyYXRv
ci5kPShyLCBuZXdWYWx1ZSk7CisgICAgLy8gcSA9IG9wZXJhdG9yLmM9KHEsIHIpOworICAgIC8v
CisgICAgLy8gU3RlcCA0OgorICAgIC8vICpwID0gb3BlcmF0b3IuYj0oKnAsIHEpOworCisgICAg
Ly8gSWYgdGhlIGV4cHJlc3Npb24gaXMgYS5iLmMuZCA9IGUsIFN0ZXAgMyBkaXNhcHBlYXJzIGFu
ZCAibmV3VmFsdWUiIGluIHN0ZXAgNCBiZWNvbWVzICJlIi4KKyAgICAKKworICAgIC8vIEZpbmQg
dGhlICIuYiIgIi5jIiBhbmQgIi5kIiBleHByZXNzaW9ucy4KKyAgICBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6OkRvdEV4cHJlc3Npb24+PiBjaGFpbjsKKyAgICBBU1Q6OkRvdEV4
cHJlc3Npb24qIGl0ZXJhdG9yID0gJmRvdEV4cHJlc3Npb247CisgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgY2hhaW4uYXBwZW5kKCppdGVyYXRvcik7CisgICAgICAgIEFTU0VSVChpdGVyYXRv
ci0+YmFzZSgpLnR5cGVBbm5vdGF0aW9uKCkpOworICAgICAgICBpZiAoaXRlcmF0b3ItPmJhc2Uo
KS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgQVNTRVJUKCFpdGVyYXRvci0+YmFzZSgpLnR5cGVBbm5vdGF0aW9uKCktPmlz
UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6RG90RXhwcmVzc2lvbj4oaXRl
cmF0b3ItPmJhc2UoKSkpOyAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgd2l0aCBpbmRleCBleHBy
ZXNzaW9ucworICAgICAgICBpdGVyYXRvciA9ICZkb3duY2FzdDxBU1Q6OkRvdEV4cHJlc3Npb24+
KGl0ZXJhdG9yLT5iYXNlKCkpOworICAgIH0KKyAgICBhdXRvIGxlZnRFeHByZXNzaW9uID0gaXRl
cmF0b3ItPnRha2VCYXNlKCk7CisgICAgQVNUOjpFeHByZXNzaW9uJiBpbm5lckxlZnRFeHByZXNz
aW9uID0gbGVmdEV4cHJlc3Npb247CisKKyAgICAvLyBDcmVhdGUgInAiIHZhcmlhYmxlLgorICAg
IEFTU0VSVChsZWZ0RXhwcmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8gcG9pbnRl
clZhcmlhYmxlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVy
OjpUb2tlbihsZWZ0RXhwcmVzc2lvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4o
TGV4ZXI6OlRva2VuKGxlZnRFeHByZXNzaW9uLT5vcmlnaW4oKSksICpsZWZ0RXhwcmVzc2lvbi0+
dHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpLCBsZWZ0RXhwcmVzc2lvbi0+cmVz
b2x2ZWRUeXBlKCktPmNsb25lKCkpKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKKworICAgIC8vIENyZWF0ZSAicSIgYW5kICJyIiB2YXJpYWJsZXMuCisgICAgVmVjdG9y
PFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+PiBpbnRlcm1lZGlhdGVWYXJpYWJs
ZXM7CisgICAgaW50ZXJtZWRpYXRlVmFyaWFibGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2hh
aW4uc2l6ZSgpIC0gMSk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBjaGFpbi5zaXplKCk7
ICsraSkgeworICAgICAgICBhdXRvJiBkb3RFeHByZXNzaW9uID0gc3RhdGljX2Nhc3Q8QVNUOjpE
b3RFeHByZXNzaW9uJj4oY2hhaW5baV0pOworICAgICAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5y
ZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGludGVybWVkaWF0ZVZhcmlhYmxlcy51bmNoZWNrZWRB
cHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tl
bihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGRvdEV4cHJlc3Np
b24ucmVzb2x2ZWRUeXBlKCktPmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCkpOworICAgIH0KKworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4gZXhwcmVzc2lvbnM7CisKKyAgICAvLyBTdGVwIDE6CisgICAgeworICAgICAgICBhdXRvIG1h
a2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJl
c3Npb24+KExleGVyOjpUb2tlbihpbm5lckxlZnRFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92
ZShsZWZ0RXhwcmVzc2lvbikpOworICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5
cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oaW5uZXJMZWZ0
RXhwcmVzc2lvbi5vcmlnaW4oKSksICppbm5lckxlZnRFeHByZXNzaW9uLnR5cGVBbm5vdGF0aW9u
KCktPmxlZnRBZGRyZXNzU3BhY2UoKSwgaW5uZXJMZWZ0RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUo
KS0+Y2xvbmUoKSkpOworICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJl
bmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICBBU1NFUlQocG9pbnRl
clZhcmlhYmxlLT50eXBlKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShw
b2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgIGF1dG8gYXNz
aWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Np
b24+KExleGVyOjpUb2tlbihpbm5lckxlZnRFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2
YXJpYWJsZVJlZmVyZW5jZSksIFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAg
ICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgp
LT5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RG
TW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgIH0KKworICAgIC8vIFN0ZXAgMjoKKyAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIHByZXZpb3VzID0gbnVsbHB0cjsKKyAgICBhdXRv
IHByZXZpb3VzTGVmdFZhbHVlID0gWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4g
eworICAgICAgICBpZiAocHJldmlvdXMpIHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZl
cmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2U6OndyYXAoKnByZXZpb3VzKSk7CisgICAgICAgICAgICBBU1NFUlQocHJldmlv
dXMtPnR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwcmV2
aW91cy0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworICAgICAgICAgICAgcmV0dXJuIHZhcmlh
YmxlUmVmZXJlbmNlOworICAgICAgICB9CisgICAgCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZl
cmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgIEFTU0VSVChwb2lu
dGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBl
KHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZl
cmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgYXV0byBk
ZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHBy
ZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFy
aWFibGVSZWZlcmVuY2UpKTsKKyAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgp
KTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9u
ZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFi
bGUtPnR5cGUoKSkuYWRkcmVzc1NwYWNlKCkgfSk7CisgICAgICAgIHJldHVybiBkZXJlZmVyZW5j
ZUV4cHJlc3Npb247CisgICAgfTsKKyAgICBhdXRvIHBvaW50ZXJUb1ByZXZpb3VzTGVmdFZhbHVl
ID0gWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICBpZiAocHJl
dmlvdXMpIHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAo
KnByZXZpb3VzKSk7CisgICAgICAgICAgICBBU1NFUlQocHJldmlvdXMtPnR5cGUoKSk7CisgICAg
ICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwcmV2aW91cy0+dHlwZSgpLT5jbG9u
ZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJ
cyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihk
b3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOworICAg
ICAgICAgICAgQVNTRVJUKHByZXZpb3VzLT50eXBlKCkpOworICAgICAgICAgICAgbWFrZVBvaW50
ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4
ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkLCBwcmV2aW91cy0+dHlwZSgpLT5jbG9uZSgpKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRl
ckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlUG9pbnRlckV4cHJlc3Npb247CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVm
ZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOwor
ICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOworICAgICAgICB2YXJpYWJs
ZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7Cisg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1
ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0
PworICAgICAgICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CisgICAgfTsKKyAgICBmb3IgKHNp
emVfdCBpID0gY2hhaW4uc2l6ZSgpIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICBBU1Q6OkRv
dEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24gPSBjaGFpbltpXTsKKyAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uID0gaW50ZXJtZWRpYXRlVmFyaWFi
bGVzW2kgLSAxXTsKKworICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gZ2V0dGVyQ2FsbChk
b3RFeHByZXNzaW9uLCBwcmV2aW91c0xlZnRWYWx1ZSwgcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFs
dWUpOworCisgICAgICAgIGlmICghY2FsbEV4cHJlc3Npb24pCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6Ondy
YXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJh
dGlvbi50eXBlKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJpYWJs
ZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpU
aHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgIGF1dG8gYXNzaWdu
bWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+
KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJl
ZmVyZW5jZSksIFdURk1vdmUoKmNhbGxFeHByZXNzaW9uKSk7CisgICAgICAgIGFzc2lnbm1lbnRF
eHByZXNzaW9uLT5zZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsK
KyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6Umln
aHRWYWx1ZSgpKTsKKworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25t
ZW50RXhwcmVzc2lvbikpOworICAgICAgICAKKyAgICAgICAgcHJldmlvdXMgPSAmdmFyaWFibGVE
ZWNsYXJhdGlvbjsKKyAgICB9CisgICAgYXV0byBsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24gPSBn
ZXR0ZXJDYWxsKGNoYWluWzBdLCBwcmV2aW91c0xlZnRWYWx1ZSwgcG9pbnRlclRvUHJldmlvdXNM
ZWZ0VmFsdWUpOworCisgICAgLy8gTW9kaWZpY2F0aW9uUmVzdWx0KFVuaXF1ZVJlZjxBU1Q6OkV4
cHJlc3Npb24+JiYpCisgICAgLy8gU3RlcCAzOgorICAgIGF1dG8gbW9kaWZpY2F0aW9uUmVzdWx0
ID0gbW9kaWZpY2F0aW9uKFdURk1vdmUobGFzdEdldHRlckNhbGxFeHByZXNzaW9uKSk7CisgICAg
aWYgKCFtb2RpZmljYXRpb25SZXN1bHQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtb2RpZmljYXRpb25SZXN1bHQtPmV4cHJlc3Npb25z
LnNpemUoKTsgKytpKQorICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShtb2RpZmlj
YXRpb25SZXN1bHQtPmV4cHJlc3Npb25zW2ldKSk7CisKKyAgICAvLyBTdGVwIDQ6CisgICAgVW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gcmlnaHRWYWx1ZSA9IFdURk1vdmUobW9kaWZpY2F0aW9u
UmVzdWx0LT5yZXN1bHQpOworICAgIEFTU0VSVChyaWdodFZhbHVlLT5yZXNvbHZlZFR5cGUoKSk7
CisgICAgYXV0byBleHByZXNzaW9uVHlwZSA9IHJpZ2h0VmFsdWUtPnJlc29sdmVkVHlwZSgpLT5j
bG9uZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hhaW4uc2l6ZSgpIC0gMTsgKytp
KSB7CisgICAgICAgIEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbiA9IGNoYWluW2ld
OworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24g
PSBpbnRlcm1lZGlhdGVWYXJpYWJsZXNbaV07CisKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhw
cmVzc2lvbiA9IHNldHRlckNhbGwoZG90RXhwcmVzc2lvbiwgV1RGTW92ZShyaWdodFZhbHVlKSwg
WyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICAgICAgYXV0byB2
YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4o
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAg
ICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAg
dmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNs
b25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6
IElzIHRoaXMgcmlnaHQ/CisgICAgICAgICAgICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7Cisg
ICAgICAgIH0sIFsmXSgpIC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAg
ICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlv
bikpOworICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24u
dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7
IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVy
RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExl
eGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVy
ZW5jZSkpOworICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsK
KyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVm
PEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwg
QVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNs
b25lKCkpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VQb2ludGVy
RXhwcmVzc2lvbjsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKCFhc3NpZ25tZW50RXhwcmVz
c2lvbikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgZXhwcmVz
c2lvbnMuYXBwZW5kKFdURk1vdmUoKmFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisKKyAgICAgICAg
cmlnaHRWYWx1ZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpW
YXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFT
U0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIHJpZ2h0VmFsdWUtPnNl
dFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOworICAgICAgICByaWdo
dFZhbHVlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1Nw
YWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworICAgIH0KKworICAgIC8v
IFN0ZXAgNToKKyAgICB7CisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBzZXR0
ZXJDYWxsKGNoYWluW2NoYWluLnNpemUoKSAtIDFdLCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBbJl0o
KSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgICAgICBhdXRvIHZhcmlh
YmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICAgICAg
QVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1
ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0
PworCisgICAgICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9u
Lm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOworICAgICAgICAgICAgQVNT
RVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhw
cmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRlclZhcmlh
YmxlLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICBkZXJlZmVy
ZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKS5hZGRyZXNzU3Bh
Y2UoKSB9KTsKKyAgICAgICAgICAgIHJldHVybiBkZXJlZmVyZW5jZUV4cHJlc3Npb247CisgICAg
ICAgIH0sIFsmXSgpIC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgICAg
IGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZl
cmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7Cisg
ICAgICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOworICAgICAgICAgICAg
dmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25l
KCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElz
IHRoaXMgcmlnaHQ/CisgICAgICAgICAgICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CisgICAg
ICAgIH0pOworCisgICAgICAgIGlmICghYXNzaWdubWVudEV4cHJlc3Npb24pCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZN
b3ZlKCphc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgIH0KKworICAgIFZlY3RvcjxVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gdmFyaWFibGVEZWNsYXJhdGlvbnM7CisgICAg
dmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUocG9pbnRlclZhcmlhYmxlKSk7Cisg
ICAgZm9yIChhdXRvJiBpbnRlcm1lZGlhdGVWYXJpYWJsZSA6IGludGVybWVkaWF0ZVZhcmlhYmxl
cykKKyAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUoaW50ZXJtZWRp
YXRlVmFyaWFibGUpKTsKKworICAgIHJldHVybiB7eyBpbm5lckxlZnRFeHByZXNzaW9uLCBXVEZN
b3ZlKGV4cHJlc3Npb25zKSwgV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9ucykgfX07Cit9CisK
K3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYg
YXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAgQVNTRVJUKGFzc2lnbm1lbnRFeHByZXNzaW9u
LmxlZnQoKS50eXBlQW5ub3RhdGlvbigpKTsKKyAgICBpZiAoYXNzaWdubWVudEV4cHJlc3Npb24u
bGVmdCgpLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAgICBz
aW1wbGlmeUxlZnRWYWx1ZShhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCFhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCku
dHlwZUFubm90YXRpb24oKS0+aXNSaWdodFZhbHVlKCkpOworICAgIGlmICghaXM8QVNUOjpEb3RF
eHByZXNzaW9uPihhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpKSB7CisgICAgICAgIHNldEVy
cm9yKCk7IC8vIEZJWE1FOiBNYWtlIHRoaXMgd29yayB3aXRoIGluZGV4IGV4cHJlc3Npb25zLgor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGFzc2lnbm1lbnRFeHByZXNzaW9u
LnJpZ2h0KCkucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8gdHlwZSA9IGFzc2lnbm1lbnRFeHBy
ZXNzaW9uLnJpZ2h0KCkucmVzb2x2ZWRUeXBlKCktPmNsb25lKCk7CisKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7CisKKyAgICBhdXRvIG1vZGlm
eVJlc3VsdCA9IG1vZGlmeShkb3duY2FzdDxBU1Q6OkRvdEV4cHJlc3Npb24+KGFzc2lnbm1lbnRF
eHByZXNzaW9uLmxlZnQoKSksIFsmXShPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4mJikgLT4gT3B0aW9uYWw8TW9kaWZpY2F0aW9uUmVzdWx0PiB7CisgICAgICAgIHJldHVybiB7
eyBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+KCksIGFzc2lnbm1lbnRFeHByZXNz
aW9uLnRha2VSaWdodCgpIH19OworICAgIH0pOworCisgICAgaWYgKCFtb2RpZnlSZXN1bHQpIHsK
KyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzaW1wbGlm
eUxlZnRWYWx1ZShtb2RpZnlSZXN1bHQtPmlubmVyTGVmdFZhbHVlKTsKKworICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpBc3NpZ25t
ZW50RXhwcmVzc2lvbiksICJBc3NpZ25tZW50IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0
byBiZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNl
cyIpOworICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBhc3NpZ25tZW50RXhwcmVzc2lvbi5vcmln
aW4oKTsKKyAgICB2b2lkKiBsb2NhdGlvbiA9ICZhc3NpZ25tZW50RXhwcmVzc2lvbjsKKyAgICBh
c3NpZ25tZW50RXhwcmVzc2lvbi5+QXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICBhdXRvKiBj
b21tYUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVzc2lvbihXVEZN
b3ZlKG9yaWdpbiksIFdURk1vdmUobW9kaWZ5UmVzdWx0LT5leHByZXNzaW9ucykpOworICAgIGNv
bW1hRXhwcmVzc2lvbi0+c2V0VHlwZShXVEZNb3ZlKHR5cGUpKTsKKyAgICBjb21tYUV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgIGZvciAoYXV0
byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IG1vZGlmeVJlc3VsdC0+dmFyaWFibGVEZWNsYXJhdGlv
bnMpCisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUodmFyaWFi
bGVEZWNsYXJhdGlvbikpOworfQorCit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKK3sK
KyAgICBBU1NFUlQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5u
b3RhdGlvbigpKTsKKyAgICBpZiAocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgLy8gQ29u
c2lkZXIgYSsrOworICAgICAgICAvLyBUaGlzIHdvdWxkIGdldCB0cmFuc2Zvcm1lZCBpbnRvOgor
ICAgICAgICAvLworICAgICAgICAvLyBwID0gJmE7CisgICAgICAgIC8vIG9sZFZhbHVlID0gKnA7
CisgICAgICAgIC8vIG5ld1ZhbHVlID0gLi4uOworICAgICAgICAvLyAqcCA9IG5ld1ZhbHVlOwor
CisgICAgICAgIEFTU0VSVChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJl
c29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byBiYXNlVHlwZSA9IHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCktPmNsb25lKCk7CisgICAgICAgIGF1
dG8gcG9pbnRlclR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpU
b2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKSwgKnJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkudHlwZUFubm90YXRpb24oKS0+bGVm
dEFkZHJlc3NTcGFjZSgpLCBiYXNlVHlwZS0+Y2xvbmUoKSk7CisKKyAgICAgICAgYXV0byBwb2lu
dGVyVmFyaWFibGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4
ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KHBvaW50ZXJU
eXBlLT5jbG9uZSgpKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKwor
ICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOwor
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gb3JpZ2luID0gTGV4ZXI6OlRva2VuKHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkpOworICAgICAgICAgICAg
YXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50
ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgcmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi50YWtlTGVmdFZhbHVlKCkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9u
LT5zZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVy
RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAg
ICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJs
ZSkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclR5cGUt
PmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklY
TUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Np
b24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KFdURk1vdmUob3Jp
Z2luKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSksIFdURk1vdmUobWFrZVBvaW50ZXJFeHBy
ZXNzaW9uKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShwb2lu
dGVyVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBleHByZXNz
aW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6Ondy
YXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNl
dFR5cGUocG9pbnRlclR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVu
Y2UxLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRv
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigp
KSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTEpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsK
KworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTIgPSByZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLm9sZFZhcmlhYmxlUmVmZXJlbmNlKCk7CisgICAgICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZTItPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAg
ICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2ln
bm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5v
cmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSwgV1RGTW92ZShkZXJlZmVyZW5j
ZUV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBl
KGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGV4cHJl
c3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIH0K
KworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gcmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJpYWJsZVJlZmVyZW5jZSgpOworICAgICAgICAgICAg
dmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAg
ICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsg
QVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisK
KyAgICAgICAgICAgIGF1dG8gbmV3VmFsdWVFeHByZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi50YWtlTmV3VmFsdWVFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBBU1NFUlQobmV3
VmFsdWVFeHByZXNzaW9uKTsgLy8gRklYTUU6IFJlbGF4IHRoaXMgY29uc3RyYWludC4KKyAgICAg
ICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNz
aWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
Lm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSksIFdURk1vdmUoKm5ld1ZhbHVl
RXhwcmVzc2lvbikpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUo
YmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVz
c2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQor
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3
cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5z
ZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlMS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0
byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VF
eHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4o
KSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UxKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5j
ZUV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7
CisKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0gcmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5uZXdWYXJpYWJsZVJlZmVyZW5jZSgpOworICAgICAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UyLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlh
YmxlUmVmZXJlbmNlMi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAg
ICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
b3JpZ2luKCkpLCBXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiksIFdURk1vdmUodmFyaWFi
bGVSZWZlcmVuY2UyKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlw
ZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBleHBy
ZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9
CisKKyAgICAgICAgYXV0byByZXN1bHRFeHByZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi50YWtlUmVzdWx0RXhwcmVzc2lvbigpOworICAgICAgICBBU1NFUlQocmVzdWx0RXhwcmVz
c2lvbik7IC8vIEZJWE1FOiBCZSByZXNpbGllbnQgdG8gdGhpcyBiZWluZyBudWxsLgorICAgICAg
ICBBU1NFUlQoKCpyZXN1bHRFeHByZXNzaW9uKS0+cmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBh
dXRvIHR5cGUgPSAoKnJlc3VsdEV4cHJlc3Npb24pLT5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsK
KyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoKnJlc3VsdEV4cHJlc3Npb24pKTsK
KworICAgICAgICBVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBvbGRWYXJpYWJs
ZURlY2xhcmF0aW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlT2xkVmFsdWUoKTsK
KyAgICAgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4gbmV3VmFyaWFibGVE
ZWNsYXJhdGlvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFrZU5ld1ZhbHVlKCk7CisK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpDb21tYUV4cHJlc3Npb24pIDw9IHNp
emVvZihBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pLCAiUmVhZE1vZGlmeVdyaXRlIGV4
cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMgd2l0
aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgICAgICBMZXhlcjo6VG9rZW4gb3Jp
Z2luID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICAgICAgdm9pZCog
bG9jYXRpb24gPSAmcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjsKKyAgICAgICAgcmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5+UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbigpOworICAgICAgICBh
dXRvKiBjb21tYUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVzc2lv
bihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoZXhwcmVzc2lvbnMpKTsKKyAgICAgICAgY29tbWFF
eHByZXNzaW9uLT5zZXRUeXBlKFdURk1vdmUodHlwZSkpOworICAgICAgICBjb21tYUV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBtX3Zh
cmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHBvaW50ZXJWYXJpYWJsZSkpOworICAg
ICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG9sZFZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92
ZShuZXdWYXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlQoIXJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkudHlwZUFubm90
YXRpb24oKS0+aXNSaWdodFZhbHVlKCkpOworICAgIGlmICghaXM8QVNUOjpEb3RFeHByZXNzaW9u
PihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKSkgeworICAgICAgICBzZXRF
cnJvcigpOyAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgd2l0aCBpbmRleCBleHByZXNzaW9ucy4K
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhdXRvIG1vZGlmeVJlc3VsdCA9IG1vZGlmeShk
b3duY2FzdDxBU1Q6OkRvdEV4cHJlc3Npb24+KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVm
dFZhbHVlKCkpLCBbJl0oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYgbGFz
dEdldHRlckNhbGxFeHByZXNzaW9uKSAtPiBPcHRpb25hbDxNb2RpZmljYXRpb25SZXN1bHQ+IHsK
KyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsK
KyAgICAgICAgaWYgKCFsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24pCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVS
ZWZlcmVuY2UgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhcmlhYmxlUmVmZXJlbmNl
KCk7CisgICAgICAgICAgICBBU1NFUlQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFs
dWUoKS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0
VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgp
LT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJ
WE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5vcmlnaW4oKSksIFdURk1v
dmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3ZlKCpsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24p
KTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAg
ICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6Umln
aHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNz
aWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1Zh
cmlhYmxlUmVmZXJlbmNlKCk7CisgICAgICAgICAgICBBU1NFUlQocmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJs
ZVJlZmVyZW5jZS0+c2V0VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgp
LnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpU
aHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIG5l
d1ZhbHVlRXhwcmVzc2lvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFrZU5ld1ZhbHVl
RXhwcmVzc2lvbigpOworICAgICAgICAgICAgQVNTRVJUKG5ld1ZhbHVlRXhwcmVzc2lvbik7IC8v
IEZJWE1FOiBSZWxheCB0aGlzIGNvbnN0cmFpbnQKKyAgICAgICAgICAgIGF1dG8gYXNzaWdubWVu
dEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExl
eGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigp
KSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSksIFdURk1vdmUoKm5ld1ZhbHVlRXhwcmVzc2lv
bikpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7Cisg
ICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpS
aWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShh
c3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHt7IFdU
Rk1vdmUoZXhwcmVzc2lvbnMpLCByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhcmlhYmxl
UmVmZXJlbmNlKCkgfX07CisgICAgfSk7CisKKyAgICBpZiAoIW1vZGlmeVJlc3VsdCkgeworICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpbXBsaWZ5TGVm
dFZhbHVlKG1vZGlmeVJlc3VsdC0+aW5uZXJMZWZ0VmFsdWUpOworCisgICAgYXV0byByZXN1bHRF
eHByZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlUmVzdWx0RXhwcmVzc2lv
bigpOworICAgIEFTU0VSVChyZXN1bHRFeHByZXNzaW9uKTsgLy8gRklYTUU6IEJlIHJlc2lsaWVu
dCB0byB0aGlzIGJlaW5nIG51bGwuCisgICAgQVNTRVJUKCgqcmVzdWx0RXhwcmVzc2lvbiktPnJl
c29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHR5cGUgPSAoKnJlc3VsdEV4cHJlc3Npb24pLT5yZXNv
bHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICBtb2RpZnlSZXN1bHQtPmV4cHJlc3Npb25zLmFwcGVu
ZChXVEZNb3ZlKCpyZXN1bHRFeHByZXNzaW9uKSk7CisKKyAgICBVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uPiBvbGRWYXJpYWJsZURlY2xhcmF0aW9uID0gcmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi50YWtlT2xkVmFsdWUoKTsKKyAgICBVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uPiBuZXdWYXJpYWJsZURlY2xhcmF0aW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi50YWtlTmV3VmFsdWUoKTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q29t
bWFFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKSwg
IlJlYWRNb2RpZnlXcml0ZSBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGNv
bW1hIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICBM
ZXhlcjo6VG9rZW4gb3JpZ2luID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKTsK
KyAgICB2b2lkKiBsb2NhdGlvbiA9ICZyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOworICAgIHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uflJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKTsKKyAg
ICBhdXRvKiBjb21tYUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVz
c2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobW9kaWZ5UmVzdWx0LT5leHByZXNzaW9ucykp
OworICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZShXVEZNb3ZlKHR5cGUpKTsKKyAgICBjb21t
YUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAg
IGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IG1vZGlmeVJlc3VsdC0+dmFyaWFibGVE
ZWNsYXJhdGlvbnMpCisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1v
dmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBw
ZW5kKFdURk1vdmUob2xkVmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgIG1fdmFyaWFibGVEZWNs
YXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobmV3VmFyaWFibGVEZWNsYXJhdGlvbikpOworfQorCiti
b29sIFByb3BlcnR5UmVzb2x2ZXI6OnNpbXBsaWZ5UmlnaHRWYWx1ZShBU1Q6OkRvdEV4cHJlc3Np
b24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJl
c3Npb24ub3JpZ2luKCk7CisKKyAgICBpZiAoYXV0byogYW5kRnVuY3Rpb24gPSBkb3RFeHByZXNz
aW9uLmFuZEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgYXV0byYgYmFzZSA9IGRvdEV4cHJlc3Npb24u
YmFzZSgpOworICAgICAgICBBU1NFUlQoYmFzZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIEFT
U0VSVChiYXNlLnR5cGVBbm5vdGF0aW9uKCkpOworICAgICAgICBpZiAoYXV0byBsZWZ0QWRkcmVz
c1NwYWNlID0gYmFzZS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIGRvdEV4cHJlc3Np
b24udGFrZUJhc2UoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5
cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwg
KmxlZnRBZGRyZXNzU3BhY2UsIGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpKTsKKyAgICAg
ICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworCisgICAgICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4+IGFyZ3VtZW50czsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtl
UG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBT
dHJpbmcoYW5kRnVuY3Rpb24tPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAg
ICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkp
OworICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6Umln
aHRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5k
RnVuY3Rpb24pOworCisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkRlcmVm
ZXJlbmNlRXhwcmVzc2lvbikgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhw
cmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBkZXJlZmVyZW5jZSBleHByZXNzaW9u
cyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgICAgICAgICB2b2lkKiBs
b2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOworICAgICAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90
RXhwcmVzc2lvbigpOworICAgICAgICAgICAgYXV0byogZGVyZWZlcmVuY2VFeHByZXNzaW9uID0g
bmV3IChsb2NhdGlvbikgQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4p
LCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJl
c3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5
cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhw
cmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6
OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgaGF2ZSBh
biBhbmRlciwgYnV0IG5vIGxlZnQgdmFsdWUgdG8gY2FsbCBpdCBvbi4gTGV0J3Mgc2F2ZSB0aGUg
dmFsdWUgaW50byBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBjcmVhdGUgYSBsZWZ0IHZhbHVlLgor
ICAgICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGlubGluaW5nIHRoZSBmdW5jdGlvbnMgdGhl
IHNwZWMgc2F5cyBhcmUgZ2VuZXJhdGVkLgorICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhy
ZWFkQW5kRnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBh
dXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIEFTVDo6UXVhbGlmaWVycygpLCBiYXNlLnJl
c29sdmVkVHlwZSgpLT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlKGJh
c2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEt
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRo
cmVhZCB9KTsKKworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgV1RG
TW92ZSh2YXJpYWJsZVJlZmVyZW5jZTEpLCBkb3RFeHByZXNzaW9uLnRha2VCYXNlKCkpOworICAg
ICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlLnJlc29sdmVkVHlwZSgpLT5j
bG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlMi0+c2V0VHlwZShiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFy
aWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisKKyAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJl
c3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTIpKTsKKyAgICAgICAgbWFr
ZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlw
ZT4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGJhc2Uu
cmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9u
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgVmVjdG9y
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAgICAgYXV0byBj
YWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6
OlRva2VuKG9yaWdpbiksIFN0cmluZyhhbmRGdW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1
bWVudHMpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoYW5kRnVuY3Rpb24tPnR5
cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9u
KCphbmRGdW5jdGlvbik7CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKG9yaWdpbiks
IFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9u
LT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkp
LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkIH0pOworCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHByZXNz
aW9uKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVk
IHRvIGJlIGFibGUgdG8gYmVjb21lIGNvbW1hIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcg
YmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgdm9pZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lv
bjsKKyAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgICAgICBWZWN0
b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOworICAgICAgICBleHBy
ZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICBl
eHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pKTsKKyAgICAg
ICAgYXV0byogY29tbWFFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpDb21tYUV4cHJl
c3Npb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSk7CisgICAgICAgIGNv
bW1hRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5j
dGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBjb21tYUV4cHJl
c3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZCB9KTsKKworICAgICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpDYWxsRXhwcmVzc2lvbikgPD0gc2l6
ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxl
IHRvIGJlY29tZSBjYWxsIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5j
ZXMiKTsKKyAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigpKTsKKyAgICBhdXRv
JiBnZXRGdW5jdGlvbiA9ICpkb3RFeHByZXNzaW9uLmdldEZ1bmN0aW9uKCk7CisgICAgVmVjdG9y
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFw
cGVuZChkb3RFeHByZXNzaW9uLnRha2VCYXNlKCkpOworICAgIHZvaWQqIGxvY2F0aW9uID0gJmRv
dEV4cHJlc3Npb247CisgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgIGF1
dG8qIGNhbGxFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpDYWxsRXhwcmVzc2lvbihX
VEZNb3ZlKG9yaWdpbiksIFN0cmluZyhnZXRGdW5jdGlvbi5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3Vt
ZW50cykpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbihnZXRGdW5jdGlvbik7Cisg
ICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZ2V0RnVuY3Rpb24udHlwZSgpLmNsb25lKCkpOwor
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2NsYXNzIExlZnRWYWx1ZVNpbXBsaWZpZXIgOiBwdWJs
aWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJikg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6Cit9OworCit2b2lkIExlZnRWYWx1ZVNpbXBsaWZpZXI6OnZp
c2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBWaXNpdG9yOjp2
aXNpdChkb3RFeHByZXNzaW9uKTsKKyAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5iYXNlKCkudHlw
ZUFubm90YXRpb24oKSk7CisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uYmFzZSgpLnR5cGVBbm5v
dGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSk7CisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24u
YW5kRnVuY3Rpb24oKSk7CisKKyAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lv
bi5vcmlnaW4oKTsKKyAgICBhdXRvKiBhbmRGdW5jdGlvbiA9IGRvdEV4cHJlc3Npb24uYW5kRnVu
Y3Rpb24oKTsKKyAgICBhdXRvJiBiYXNlID0gZG90RXhwcmVzc2lvbi5iYXNlKCk7CisgICAgYXV0
byBsZWZ0QWRkcmVzc1NwYWNlID0gKmRvdEV4cHJlc3Npb24uYmFzZSgpLnR5cGVBbm5vdGF0aW9u
KCktPmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihv
cmlnaW4pLCBkb3RFeHByZXNzaW9uLnRha2VCYXNlKCkpOworICAgIG1ha2VQb2ludGVyRXhwcmVz
c2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tl
bihvcmlnaW4pLCBsZWZ0QWRkcmVzc1NwYWNlLCBiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgp
KSk7CisgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFy
Z3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNz
aW9uKSk7CisgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxs
RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFN0cmluZyhhbmRGdW5jdGlvbi0+bmFt
ZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShh
bmRGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1
bmN0aW9uKCphbmRGdW5jdGlvbik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkRl
cmVmZXJlbmNlRXhwcmVzc2lvbikgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3Qg
ZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBkZXJlZmVyZW5jZSBleHByZXNz
aW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgdm9pZCogbG9jYXRp
b24gPSAmZG90RXhwcmVzc2lvbjsKKyAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7
CisgICAgYXV0byogZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpE
ZXJlZmVyZW5jZUV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNz
aW9uKSk7CisgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7
CisgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmFk
ZHJlc3NTcGFjZSgpIH0pOworfQorCit2b2lkIExlZnRWYWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFT
VDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAg
Ly8gRGVyZWZlcmVuY2UgZXhwcmVzc2lvbnMgYXJlIHRoZSBvbmx5IGV4cHJlc3Npb25zIHdoZXJl
IHRoZSBjaGlsZHJlbiBtaWdodCBiZSBtb3JlLXJpZ2h0IHRoYW4gd2UgYXJlLgorICAgIC8vIEZv
ciBleGFtcGxlLCBhIGRlcmVmZXJlbmNlIGV4cHJlc3Npb24gbWF5IGJlIGEgbGVmdCB2YWx1ZSBi
dXQgaXRzIGNoaWxkIG1heSBiZSBhIGNhbGwgZXhwcmVzc2lvbiB3aGljaCBpcyBhIHJpZ2h0IHZh
bHVlLgorICAgIC8vIExlZnRWYWx1ZVNpbXBsaWZpZXIgZG9lc24ndCBoYW5kbGUgcmlnaHQgdmFs
dWVzLCBzbyB3ZSBpbnN0ZWFkIG5lZWQgdG8gdXNlIFByb3BlcnR5UmVzb2x2ZXIuCisgICAgLy8g
RklYTUU6IFdoYXQgYWJvdXQgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHM/CisgICAgUHJvcGVydHlS
ZXNvbHZlcigpLlZpc2l0b3I6OnZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbik7Cit9CisKK3Zv
aWQgUHJvcGVydHlSZXNvbHZlcjo6c2ltcGxpZnlMZWZ0VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBl
eHByZXNzaW9uKQoreworICAgIExlZnRWYWx1ZVNpbXBsaWZpZXIoKS5WaXNpdG9yOjp2aXNpdChl
eHByZXNzaW9uKTsKK30KKwordm9pZCByZXNvbHZlUHJvcGVydGllcyhQcm9ncmFtJiBwcm9ncmFt
KQoreworICAgIFByb3BlcnR5UmVzb2x2ZXIoKS5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIy
MDVmOTAyYmNjOTRlY2E5ZWYzM2I1OGRhMWM3MDFhYjcyYjM0NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZl
ci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCByZXNvbHZlUHJvcGVydGllcyhQcm9ncmFtJik7CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCmluZGV4IGU3
ODM4Y2UzZjcyNWFlMDlhYmExZWRiNTBhNjU5MmMzNDYzMTNlZTUuLmRjOTM0ZGJmNzI2YTgxNGEw
ODA0YjRjY2I1NzUyZGJlY2I4MWYzOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNw
cApAQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uJiBjYW5kaWRhdGUsIGNvbnN0IFZlY3RvcgogICAgICAgICBjb252
ZXJzaW9uQ29zdCArPSBhcmd1bWVudFR5cGVzW2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IHVuc2lnbmVkIHsKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IHVuc2lnbmVkIHsKLSAgICAgICAg
ICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jb252
ZXJzaW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpOworICAgICAgICAg
ICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNvbnZl
cnNpb25Db3N0KCpjYW5kaWRhdGUucGFyYW1ldGVycygpW2ldLT50eXBlKCkpOwogICAgICAgICB9
KSk7CiAgICAgfQogICAgIC8vIFRoZSByZXR1cm4gdHlwZSBjYW4gbmV2ZXIgYmUgYSBsaXRlcmFs
IHR5cGUsIHNvIGl0cyBjb252ZXJzaW9uIGNvc3QgaXMgYWx3YXlzIDAuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5o
CmluZGV4IGNhNWNiYjU5MjljZjllMTgxOGMyY2Q3NDFlNzlkOTM2Y2FhYzY4ZWUuLjUwZTUzMmI2
YTZlODJmMWUwMmEwNDY3OTFiOGU2Njk2ZDViMTFlMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCkBAIC03
Miw2ICs3Miw3IEBAIHByaXZhdGU6CiAKIC8vIFRoaXMgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5k
IGEgVmFyaWFudC4KIC8vIEl0IGV4aXN0cyBzbyB3ZSBjYW4gbWFrZSBzdXJlIHRoYXQgdGhlIGRl
ZmF1bHQgY29uc3RydWN0b3IgZG9lcyB0aGUgcmlnaHQgdGhpbmcuCisvLyBGSVhNRTogVGhpcyB3
cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCiBjbGFzcyBSZXNvbHZpbmdUeXBlIHsKIHB1
YmxpYzoKICAgICBSZXNvbHZpbmdUeXBlKCkKQEAgLTEwMiwxMCArMTAzLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIEFTVDo6VW5uYW1lZFR5cGUmIGdl
dFVubmFtZWRUeXBlKCkKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBnZXRVbm5hbWVkVHlwZSgpCiAg
ICAgewotICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcik7CisgICAgICAgIGlmIChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcikpCisgICAg
ICAgICAgICByZXR1cm4gJldURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9p
bm5lcik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBWaXNpdG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRl
Y2x0eXBlKFdURjo6dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+LCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+PiY+KCkp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
dGFuZGFyZExpYnJhcnkudHh0IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CmluZGV4IDc5YTJjNjBlMDYwNmIxMzI2NWJiMjMwMzY3
YWNmOTcyNTBiZjlhN2YuLjBmYjVkMzkzMmQ0NWZiMGFmZGUwOTU5NjE1ZWJkODFmZWFhOTFjNTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3Rh
bmRhcmRMaWJyYXJ5LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQKQEAgLTM5MCw0ICszOTAsMTMgQEAgbmF0aXZlIHZv
aWQgQWxsTWVtb3J5QmFycmllcldpdGhHcm91cFN5bmMoKTsKIG5hdGl2ZSB2b2lkIERldmljZU1l
bW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jKCk7CiBuYXRpdmUgdm9pZCBHcm91cE1lbW9yeUJhcnJp
ZXJXaXRoR3JvdXBTeW5jKCk7CiAKK29wZXJhdG9yIGZsb2F0NChmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB6LCBmbG9hdCB3KSB7CisgICAgZmxvYXQ0IHJlc3VsdDsKKyAgICByZXN1bHQueCA9IHg7
CisgICAgcmVzdWx0LnkgPSB5OworICAgIHJlc3VsdC56ID0gejsKKyAgICByZXN1bHQudyA9IHc7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI4OTAgSW5zZXJ0IHRoZSByZXN0IG9mIHRoZSBzdGFuZGFy
ZCBsaWJyYXJ5IG9uY2UgdGhlIHBhcnNlciBpcyBmYXN0IGVub3VnaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVy
YXRvckxlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAppbmRleCBhZTNjYTY0MjM5ZTNiNTlk
MzZhYWFhZWVjN2JhNDcxYmNiNjdjZWI5Li42NWVkN2FjZjQzZjIwMDQwMjUwZjkwNjZhMTRiNjQw
YjU3YmJmMGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVu
Z3RoLmNwcApAQCAtNjUsNyArNjUsNyBAQCBib29sIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVu
Z3RoKFByb2dyYW0mIHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKIAogICAg
IGZvciAoYXV0byYgYXJyYXlUeXBlIDogYXJyYXlUeXBlcykgewotICAgICAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBl
LmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgYXJyYXlUeXBlLmdldCgpLmNs
b25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
YXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1
YWxpZmllcnMoKSwgYXJyYXlUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xh
cmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
YXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51
bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdl
dCgpLm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudWludFR5cGUoKSksICJvcGVyYXRv
ci5sZW5ndGgiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJh
dG9yKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAppbmRleCBjZDdjMzcw
MmFkYmVhMjlhYzE4YzVjYmU2ZGI2MDg3YjllMDJlZDhhLi43NGNjOGYxODRlODM1YjNjZTFjNDli
NWNlNmVjOGQ2YTRhODY4YzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5j
cHAKQEAgLTExMCw3ICsxMTAsNyBAQCBib29sIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3Jh
bSYgcHJvZ3JhbSkKICAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogCiAgICAgZm9yIChhdXRv
JiB1bm5hbWVkVHlwZSA6IHVubmFtZWRUeXBlcykgewotICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0
KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyB1bm5hbWVkVHlwZS5nZXQoKS5jbG9u
ZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIGF1
dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1
YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBw
YXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlD
b25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRU
eXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUo
cGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpAQCAtMTI3LDcgKzEyNyw3
IEBAIGJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAg
ICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHN0YXRpY19jYXN0PEFTVDo6TmFt
ZWRUeXBlJj4obmFtZWRUeXBlKSkgJiYgZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KHN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4obmFtZWRUeXBlKSkuaXNBdG9taWMoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2lu
KCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5nZXQoKSkgfSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgYXV0byB2YXJpYWJs
ZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExl
eGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwg
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhl
cjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSksIFN0
cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RG
TW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVy
OjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCks
IFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1l
ZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCAib3BlcmF0b3IgY2FzdCJf
c3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAppbmRleCAx
Nzk3ZmU1Mzk0YzgxZWFjZDM5NTRhYmM2YThhNjVhNmM4ZmM5NmUyLi5kNzRhZjMzYTFmMDVhNjky
MjE5YzhjY2U0YWZkY2M5Mjk1MTA5NzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
RW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCkBAIC00MSw4ICs0MSw4IEBAIGJvb2wgc3ludGhlc2l6
ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJh
dG9yID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dy
YW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9u
LT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0KTsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9u
LT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0
aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsK
KyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEgPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RG
OjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xh
cmF0aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25E
ZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAg
ICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7CiAgICAg
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7
CkBAIC01Miw3ICs1Miw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFBy
b2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5v
cmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tl
bihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9u
KSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9u
LT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJh
dGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3IudmFsdWUiX3N0ciwgV1RG
TW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CkBAIC02MSw3ICs2
MSw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dy
YW0pCiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSks
IEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRp
b24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKQEAgLTcwLDEwICs3MCwxMCBAQCBib29s
IHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAg
ICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZh
cmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCku
Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
ICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9u
ZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1l
dGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICBB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgeyBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sICJvcGVyYXRvciBjYXN0Il9zdHIs
IFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOworICAgICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRl
ZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4
ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRl
ZmluaXRpb24pKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RG
OjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5k
KFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycy5jcHAKaW5kZXggODI2NzIyMTM3ZTRjM2UzODIyNzc4MGRhZTEyYjI5YWFiYTFi
NzJlZS4uOTQ1ZDBjZWVmYWEzOWNlNTA3NDYwN2QyYzQ0OTNjZjM5N2U5ODNkZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3Ry
dWN0dXJlQWNjZXNzb3JzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCkBAIC00Niw3ICs0Niw3
IEBAIGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQog
ICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9u
LT5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
Ly8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQKLSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVy
ZURlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Cisg
ICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3Jp
Z2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCk7CiAgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBw
YXJhbWV0ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFy
aWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmli
dXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgp
LCBtYWtlU3RyaW5nKCJvcGVyYXRvci4iLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKSksIFdURk1v
dmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwpAQCAtNTYsOCArNTYs
OCBAQCBib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkK
IAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9y
LmZpZWxkPQotICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJs
ZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
c3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pIH0sIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Ci0gICAgICAgICAgICAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24yKExleGVyOjpUb2tlbihzdHJ1
Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgc3RydWN0dXJlRWxl
bWVudC50eXBlKCkuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVs
ZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxl
bWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFy
YXRpb24yID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpU
b2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHN0cnVj
dHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCk7CiAgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFi
bGVEZWNsYXJhdGlvbjEpKTsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZN
b3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgc3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICAgICAgLy8g
VGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQKICAgICAgICAgICAgIGF1dG8gY3JlYXRlQW5kZXIg
PSBbJl0oQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gewogICAgICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVu
dC5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikp
OwotICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIHsgV1RGTW92ZShhcmd1bWVudFR5cGUpIH0sIFN0cmluZygpLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tl
bihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgV1RG
OjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVu
ZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgICAgICBhdXRvIHJl
dHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihz
dHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRkcmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50
LnR5cGUoKS5jbG9uZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCmluZGV4IGVkMmU4YzAwNTJkNmRmZTliZDA3YmFmNzY0
OWQ4Y2U0OGM5YjA5YmIuLjJmMjAxNTJjYWI3YWQxYzc4MjZiYTNkMjE1MTdhNGVjMDllYWVlYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlz
aXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xW
aXNpdG9yLmNwcApAQCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpU
cmFwJikKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCiB7CiAgICAgZm9yIChhdXRvJiB2
YXJpYWJsZURlY2xhcmF0aW9uIDogdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQudmFyaWFi
bGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVj
bGFyYXRpb24pOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlv
bi5nZXQoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxl
TG9vcCkKQEAgLTU4OSwxNyArNTg5LDE3IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpMb2dp
Y2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCiAKIHZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsK
LSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgp
KTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsKICAgICBj
aGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsK
ICAgICBpZiAocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggMzY3NWUwMDRiODY3M2U5ZDY4YjFjNmJkOGQ0NjhhMGQ0ZDQxMjU3
ZS4uY2Y3NDZjZWEyZThjYmQxYzEzZTIwYzk2MTU1MTA2OWU3MzIwM2MxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTM0OCw2ICszNDgsNyBAQCBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBl
UmVmZXJlbmNlLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVy
YWwuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAogTW9kdWxlcy93ZWJncHUvV2Vi
R1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVQWRhcHRlci5jcHAKIE1vZHVsZXMvd2ViZ3B1
L1dlYkdQVUJpbmRHcm91cC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNjljZmYyMzIxMjhjYmJlOGVhNWNjMWRlZTg0MDcw
Y2I2Zjg3MDFlLi4yZWQ3N2IyYTYyMjkyMWJjYTUzMjJhOWJhZWM0ZDlmYzYwZDQ3MWQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC02MzkwLDYgKzYzOTAsOCBAQAogCQkxQ0EwQzJFQzIxRUVENkY2MDBBMTE4NjAgLyogV0hMU0xM
aXRlcmFsVHlwZUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xMaXRlcmFsVHlw
ZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUwMzBEQzI1
NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gRXZlbnRMb29wTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQ0ExOUUxNTBEQzI1NUNBMDA2NUE5OTQgLyogRXZlbnRMb29wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50TG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQ0FBODJGNjIyNDJBRTA1MDBFODRCQkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMUHJvcGVydHlSZXNvbHZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQUE4MkY3MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExT
TFByb3BlcnR5UmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xQcm9wZXJ0eVJlc29sdmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDdFMEE2QzQwNTIwMEFCRTA2
RSAvKiBXZWJTY3JpcHRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViU2NyaXB0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDdG
MEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3QubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDQUYzNDgwMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmpl
Y3RQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9i
amVjdFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NDAyLDYgKzI1
NDA0LDggQEAKIAkJCQlDMjRBNTdCQTIxRkVBRkVBMDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmNw
cCAqLywKIAkJCQlDMjRBNTdCQjIxRkVBRkVBMDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmggKi8s
CiAJCQkJQzIxQkY3M0EyMUNEOEQ3MDAwMjI3OTc5IC8qIFdITFNMUHJvZ3JhbS5oICovLAorCQkJ
CTFDQUE4MkY2MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwICov
LAorCQkJCTFDQUE4MkY3MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIu
aCAqLywKIAkJCQkxQ0EwQzJFMDIxRUVCNUY1MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVj
a2VyLmNwcCAqLywKIAkJCQkxQ0EwQzJERTIxRUVCNUY0MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNp
b25DaGVja2VyLmggKi8sCiAJCQkJQzIzNEE5QUQyMUU5MkMxOTAwM0M5ODREIC8qIFdITFNMUmVj
dXJzaXZlVHlwZUNoZWNrZXIuY3BwICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVN
ZXRhbC5tbQppbmRleCA4ZmI0YTI2Y2E0OGI1NGNhYWIxODdkYjI5ZTM0NjlhMzg1MDQ0MDVmLi5l
MDI5MmI4ZjU0NGQ0ZWFjZGJhMTc5ZmMwYjIzNGU0ZWMzYWE3M2ZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVN
ZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQpAQCAtMjYzLDYgKzI2Myw4IEBAIHN0YXRpYyBib29s
IHRyeVNldFdITFNMRnVuY3Rpb25zRm9yUGlwZWxpbmVEZXNjcmlwdG9yKGNvbnN0IGNoYXIqIGNv
bnN0IGZ1bmN0aW9uCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
ICAgIFdURkxvZ0Fsd2F5cygiTWV0YWwgU291cmNlOiAlcyIsIHJlc3VsdC0+bWV0YWxTb3VyY2Uu
dXRmOCgpLmRhdGEoKSk7CisKICAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKICAgICBhdXRvIGxp
YnJhcnkgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdMaWJyYXJ5V2l0aFNv
dXJjZTpyZXN1bHQtPm1ldGFsU291cmNlIG9wdGlvbnM6bmlsIGVycm9yOiZlcnJvcl0pOwogICAg
IEFTU0VSVChsaWJyYXJ5KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1k
b3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1k
b3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDE3MDUwZjlhNzQzZjA1
ZTkwMDZmYzkxYWM2NGQ1MDJkYWRkNjMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWRvdC1leHByZXNzaW9ucy1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTkg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2Ny
aXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMu
Z2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBj
b250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9
ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQor
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhw
cmVzc2lvbnMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xOGFjOWU2NGU0NzE4OWU3NjA2YTE1MDZhMmE2OGFjMDFjYjI3OGVj
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdC1leHByZXNz
aW9ucy5odG1sCkBAIC0wLDAgKzEsMTI0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0
cnVjdCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAg
IGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0
cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKyAgICByZXN1bHQucG9zaXRpb24g
PSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRy
aWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRl
LCBzaGFkZSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25z
dCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNv
bnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRT
aGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7
CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1v
ZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
QmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9y
bSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JX
cml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAg
Y29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgaW5wdXRTbG90OiAwLCBmb3Jt
YXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVy
TG9jYXRpb246IDEsIGlucHV0U2xvdDogMCwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsK
KyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNv
bnN0IGlucHV0MCA9IHtpbnB1dFNsb3Q6IDAsIHN0cmlkZTogMjAgfTsKKyAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCBpbnB1dFN0YXRlID0ge2luZGV4Rm9ybWF0OiAidWlu
dDMyIiwgYXR0cmlidXRlcywgaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERl
c2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTog
InVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNv
bnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdy
b3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlw
ZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0
aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNp
bFN0YXRlLCBpbnB1dFN0YXRlLCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91
dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxp
bmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBE
ZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhC
dWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0g
YXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVm
ZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbOV0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEw
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0g
PSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3Ig
PSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVz
b3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRv
cik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNl
QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVu
bWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZm
ZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwg
cmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3Ig
PSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119
OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3Vw
RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUi
KTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdy
YTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENo
YWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2Fw
Q2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9
IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRF
bmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3Qg
cmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVu
dHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxs
LCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwor
ICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRl
clBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5S
ZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5z
ZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0Qmlu
ZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVm
ZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJh
dyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29u
c3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5n
ZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370369</attachid>
            <date>2019-05-21 18:46:25 -0700</date>
            <delta_ts>2019-05-22 15:49:25 -0700</delta_ts>
            <desc>Simple dot expressions work</desc>
            <filename>bug-195925-20190521184623.patch</filename>
            <type>text/plain</type>
            <size>163507</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDcwNzViODZlMzBmMjk0
ZjYxODM2YjM5NThkZTEzYjQ4MDI4MzA0MS4uZjhkZDE0YmYzYmRjODE3MWU1ZDI0MTZlNWI2NGNh
ZjkwZTU2MWRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE5LTA1LTIxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgcHJvcGVydHkgcmVzb2x2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTkyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBwcm9wZXJ0eSByZXNvbHZlciBpcyB0aGUgdGhpbmcgdGhh
dCByZXBsYWNlcyBkb3QgZXhwcmVzc2lvbnMsIGluZGV4IGV4cHJlc3Npb25zLCBhbmQKKyAgICAg
ICAgcmVhZC1tb2RpZnktd3JpdGUgZXhwcmVzc2lvbnMgd2l0aCBjYWxscyB0byBnZXR0ZXJzLCBz
ZXR0ZXJzLCBhbmQgYW5kZXJzLiBUaGlzIHBhdGNoIGRvZXNuJ3QKKyAgICAgICAgZnVsbHkgaW1w
bGVtZW50IHRoZSBwcm9wZXJ0eSByZXNvbHZlciwgYnV0IGltcGxlbWVudHMgZW5vdWdoIGZvciBz
aW1wbGUgZG90IGV4cHJlc3Npb25zIHRvCisgICAgICAgIHdvcmsuIFRoaXMgaXMgZW5vdWdoIGZv
ciB1cyB0byBiZSBhYmxlIHRvIHRlc3QgbW9zdCBvZiB0aGUgcmVzdCBvZiB0aGUgY29tcGlsZXIu
IEluZGV4CisgICAgICAgIGV4cHJlc3Npb25zIGFuZCByZWFkLW1vZGlmeS13cml0ZSBleHByZXNz
aW9ucyBhcmUgbm90IGZ1bGx5IGluY2x1ZGVkIGluIHRoaXMgcGF0Y2gsIGFuZCB3aWxsCisgICAg
ICAgIGJlIGZpbmlzaGVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWxzbyBhZGRzIHRoZSB0aGlyZCBjb25jZXB0IG9mIHZhbHVlLW5lc3MuIFdlIG5vdyBoYXZl
IHJpZ2h0IHZhbHVlcywgbGVmdCB2YWx1ZXMsCisgICAgICAgIGFuZCBhYnN0cmFjdCBsZWZ0IHZh
bHVlcyAoZm9yIHRoaW5ncyB3aGljaCBoYXZlIHNldHRlcnMgYnV0IGhhdmUgbm8gYWRkcmVzcyku
IFRoaXMgYWRkaXRpb24KKyAgICAgICAgaXMgcmVxdWlyZWQgZm9yIHRoZSBhbmFseXNpcyB0aGUg
cHJvcGVydHkgcmVzb2x2ZXIgcGVyZm9ybXMuIFRoaXMgY29uY2VwdCBpcyBhbHNvIHByZXNlbnQg
aW4KKyAgICAgICAgdGhlIHNwZWMuCisKKyAgICAgICAgVGVzdDogd2ViZ3B1L3dobHNsLWRvdC1l
eHByZXNzaW9ucy5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xBZGRyZXNzU3BhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGVBbm5v
dGF0aW9uOjpUeXBlQW5ub3RhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpU
eXBlQW5ub3RhdGlvbjo6bGVmdEFkZHJlc3NTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpUeXBlQW5ub3RhdGlvbjo6aXNSaWdodFZhbHVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGVBbm5vdGF0aW9uOjp2aXNpdCk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6dHlwZUFubm90YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6c2V0VHlwZUFubm90YXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6YWRkcmVzc1Nw
YWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJl
c3Npb246OnNldEFkZHJlc3NTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6TWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNU
OjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uOjpsZWZ0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6bFZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9p
bnRlckV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbjo6TWFrZVBvaW50ZXJFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbjo6bGVmdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uOjpsZWZ0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uOjpsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkNoZWNrZXI6OmFzc2lnblR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2Vy
OjpyZWN1cnNlQW5kR2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6
Z2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6YXNzaWduVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6Zm9yd2FyZFR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpDaGVja2VyOjpmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaDoKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OlZpc2l0b3I6OnZpc2l0KToKKwogMjAxOS0wNS0yMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIGZvbnQtb3B0aWNhbC1zaXppbmcgYXBwbGll
cyB0aGUgd3JvbmcgdmFyaWF0aW9uIHZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCmluZGV4IDRh
NmQ3YzQ2OTVkYzRjYWM4MjkwNTRlNDA1NTU3ODc2NTE3NWY4NjMuLjNhNjU1YzQ0MTYxMjMxZjM2
M2M4NjNhOGM0ODQ0MzUzNzVkNDQ2ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICs0
Myw3NCBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAog
fTsKIAorc3RydWN0IExlZnRWYWx1ZSB7CisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsK
K307CisKK3N0cnVjdCBBYnN0cmFjdExlZnRWYWx1ZSB7Cit9OworCitzdHJ1Y3QgUmlnaHRWYWx1
ZSB7Cit9OworCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3Nhcnku
CitjbGFzcyBUeXBlQW5ub3RhdGlvbiB7CitwdWJsaWM6CisgICAgVHlwZUFubm90YXRpb24oKQor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgOiBtX2VtcHR5KHRydWUpCisjZW5kaWYKKyAg
ICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oTGVmdFZhbHVlIHYpCisgICAgICAgIDog
bV9pbm5lcih2KQorICAgIHsKKyAgICB9CisKKyAgICBUeXBlQW5ub3RhdGlvbihBYnN0cmFjdExl
ZnRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlw
ZUFubm90YXRpb24oUmlnaHRWYWx1ZSB2KQorICAgICAgICA6IG1faW5uZXIodikKKyAgICB7Cisg
ICAgfQorCisgICAgVHlwZUFubm90YXRpb24oY29uc3QgVHlwZUFubm90YXRpb24mKSA9IGRlZmF1
bHQ7CisgICAgVHlwZUFubm90YXRpb24oVHlwZUFubm90YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0
OworCisgICAgVHlwZUFubm90YXRpb24mIG9wZXJhdG9yPShjb25zdCBUeXBlQW5ub3RhdGlvbiYp
ID0gZGVmYXVsdDsKKyAgICBUeXBlQW5ub3RhdGlvbiYgb3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9u
JiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFk
ZHJlc3NTcGFjZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIW1fZW1wdHkpOworICAg
ICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxMZWZ0VmFsdWU+KG1faW5uZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PExlZnRWYWx1ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIGJvb2wgaXNSaWdo
dFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0eSk7CisgICAgICAg
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJpZ2h0VmFsdWU+KG1faW5uZXIpOworICAg
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZp
c2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6dmlzaXQodmlzaXRvciwgc3RkOjpkZWNs
dmFsPFZhcmlhbnQ8TGVmdFZhbHVlLCBBYnN0cmFjdExlZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigp
KSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6
OnZpc2l0KHZpc2l0b3IsIG1faW5uZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWYXJpYW50
PExlZnRWYWx1ZSwgQWJzdHJhY3RMZWZ0VmFsdWUsIFJpZ2h0VmFsdWU+IG1faW5uZXI7CisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgbV9lbXB0eSB7IGZhbHNlIH07CisjZW5kaWYKK307
CisKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgKaW5kZXggYjEy
MWZiNmMxZTFkMTc5MjYxNWQ5YmIwMjc0ZmUyMzU4OGE3ZjJiNS4uNzk0MTVlMmZmMzAzMDI5MTA2
YjViZjQxOTc2N2ViNTk5OGYwZTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVz
c2lvbi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24mIGxlZnQo
KSB7IHJldHVybiBtX2xlZnQ7IH0KICAgICBFeHByZXNzaW9uJiByaWdodCgpIHsgcmV0dXJuIG1f
cmlnaHQ7IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiB0YWtlUmlnaHQoKSB7IHJldHVy
biBXVEZNb3ZlKG1fcmlnaHQpOyB9CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Np
b24+IG1fbGVmdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBiN2FiMjBjZWQyYzQ1M2Y5NWYxYzJl
M2VmYzI4MWZkYTQ4ZTVjM2FkLi4zMThhODEwNjE2M2RiODdlODVlZjQ4MWVjODg3ZDlkNmM1YzI5
Y2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC02NSwxMiArNjUsMTIgQEAgcHVibGljOgogICAg
ICAgICBtX3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAgIH0KIAotICAgIGNvbnN0IE9wdGlvbmFs
PEFkZHJlc3NTcGFjZT4mIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1Nw
YWNlOyB9CisgICAgY29uc3QgVHlwZUFubm90YXRpb24qIHR5cGVBbm5vdGF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlQW5ub3RhdGlvbiA/ICYqbV90eXBlQW5ub3RhdGlvbiA6IG51bGxwdHI7
IH0KIAotICAgIHZvaWQgc2V0QWRkcmVzc1NwYWNlKE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFk
ZHJlc3NTcGFjZSkKKyAgICB2b2lkIHNldFR5cGVBbm5vdGF0aW9uKFR5cGVBbm5vdGF0aW9uJiYg
dHlwZUFubm90YXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoIW1fYWRkcmVzc1NwYWNlKTsK
LSAgICAgICAgbV9hZGRyZXNzU3BhY2UgPSBhZGRyZXNzU3BhY2U7CisgICAgICAgIEFTU0VSVCgh
bV90eXBlQW5ub3RhdGlvbik7CisgICAgICAgIG1fdHlwZUFubm90YXRpb24gPSBXVEZNb3ZlKHR5
cGVBbm5vdGF0aW9uKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBc3NpZ25tZW50RXhw
cmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05Nyw3ICs5Nyw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIE9wdGlvbmFsPFVu
aXF1ZVJlZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsKLSAgICBPcHRpb25hbDxBZGRyZXNzU3BhY2U+
IG1fYWRkcmVzc1NwYWNlOworICAgIE9wdGlvbmFsPFR5cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5v
dGF0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKaW5kZXggNjMxNmY1NGUxNjMyNmI0YTQ4M2Zh
ODcyZTFmNDdiYjA0OGVkZjg4ZS4uNzcwY2Y4YmE5ZjI1MjcyNmY2OWMxYWU2ZGU1ZWE0YTViMTJi
Zjc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24uaApAQCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVl
UmVmPEV4cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFs
dWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9s
VmFsdWUoV1RGTW92ZShsVmFsdWUpKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVm
dFZhbHVlKSkKICAgICB7CiAgICAgfQogCkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBpc01ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiBtX2xW
YWx1ZTsgfQorICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVl
OyB9CiAKIHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAg
IFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnRWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAppbmRleCA3YjA1MmI2
ZDVmMjg4N2Y1OTJkZjQ0ZmQ5NDA5YzRmYTk1MjAzYWE4Li4zNDYwNGQ1NmFlY2M0YjYzMGQ3YTdl
NmY3OTZiOWM4NTM0N2NlMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Np
b24uaApAQCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZVBvaW50
ZXJFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIE1ha2VQb2lu
dGVyRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9u
PiYmIGxWYWx1ZSkKKyAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVz
c2lvbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUp
KQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVlKSkKICAgICB7CiAgICAg
fQogCkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01ha2VQb2ludGVy
RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJl
c3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhwcmVzc2lvbiYgbGVm
dFZhbHVlKCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBVbmlxdWVS
ZWY8RXhwcmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVm
dFZhbHVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5oCmluZGV4IDJlYzM0ZTE1ZDhhNDBlNWFkMmUyYmY4OTY4MGMy
MWMzMzQ0Yzk5ODguLjE1NzA5MmQ2NTBmYWNlYTAyOWI5YjE3NzYwZDgwNTA1N2UxYWRkOTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKQEAgLTU5LDI3ICs2MCw1NiBA
QCBwdWJsaWM6CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+JiBwb3NzaWJsZUdldE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9zc2libGVH
ZXRPdmVybG9hZHM7IH0KICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlU2V0T3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9wb3Nz
aWJsZVNldE92ZXJsb2FkczsgfQogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVBbmRPdmVybG9hZHMoKSB7IHJldHVybiBt
X3Bvc3NpYmxlQW5kT3ZlcmxvYWRzOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVu
Y3Rpb24oKSB7IHJldHVybiBtX2dldEZ1bmN0aW9uOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlv
biogYW5kRnVuY3Rpb24oKSB7IHJldHVybiBtX2FuZEZ1bmN0aW9uOyB9CisgICAgRnVuY3Rpb25E
ZWNsYXJhdGlvbiogdGhyZWFkQW5kRnVuY3Rpb24oKSB7IHJldHVybiBtX3RocmVhZEFuZEZ1bmN0
aW9uOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0RnVuY3Rpb24oKSB7IHJldHVybiBt
X3NldEZ1bmN0aW9uOyB9CiAKICAgICB2b2lkIHNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKGNvbnN0
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYg
b3ZlcmxvYWRzKQogICAgIHsKICAgICAgICAgbV9wb3NzaWJsZUdldE92ZXJsb2FkcyA9IG92ZXJs
b2FkczsKICAgICB9CisgICAgdm9pZCBzZXRQb3NzaWJsZUFuZE92ZXJsb2Fkcyhjb25zdCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJs
b2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVBbmRPdmVybG9hZHMgPSBvdmVybG9hZHM7
CisgICAgfQogICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMp
CiAgICAgewogICAgICAgICBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzID0gb3ZlcmxvYWRzOwogICAg
IH0KLSAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQorCisg
ICAgdm9pZCBzZXRHZXRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBnZXRGdW5jdGlvbikK
ICAgICB7Ci0gICAgICAgIG1fcG9zc2libGVBbmRPdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAg
ICAgIG1fZ2V0RnVuY3Rpb24gPSBnZXRGdW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldEFu
ZEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0aW9uKQorICAgIHsKKyAgICAg
ICAgbV9hbmRGdW5jdGlvbiA9IGFuZEZ1bmN0aW9uOworICAgIH0KKworICAgIHZvaWQgc2V0VGhy
ZWFkQW5kRnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogdGhyZWFkQW5kRnVuY3Rpb24pCisg
ICAgeworICAgICAgICBtX3RocmVhZEFuZEZ1bmN0aW9uID0gdGhyZWFkQW5kRnVuY3Rpb247Cisg
ICAgfQorCisgICAgdm9pZCBzZXRTZXRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRG
dW5jdGlvbikKKyAgICB7CisgICAgICAgIG1fc2V0RnVuY3Rpb24gPSBzZXRGdW5jdGlvbjsKICAg
ICB9CiAKICAgICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gbV9iYXNlOyB9CisgICAgVW5p
cXVlUmVmPEV4cHJlc3Npb24+JiYgdGFrZUJhc2UoKSB7IHJldHVybiBXVEZNb3ZlKG1fYmFzZSk7
IH0KIAogcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9iYXNlOwogICAgIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bv
c3NpYmxlR2V0T3ZlcmxvYWRzOwogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzOwogICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3Np
YmxlQW5kT3ZlcmxvYWRzOworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fZ2V0RnVuY3Rpb24g
eyBudWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9hbmRGdW5jdGlvbiB7IG51
bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX3RocmVhZEFuZEZ1bmN0aW9uIHsg
bnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fc2V0RnVuY3Rpb24geyBudWxs
cHRyIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24uaAppbmRleCA3OWQ4ZDBmNzA4ZThkMDU3ODMxMmM4MTc5NGU4
OGVkYWYzNDg3Y2Y5Li4yMDlhNTI2NTFlN2ViM2ViNWE5Y2MxZjZiYzE3MDJiZWI2NTgyYmM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCkBAIC00MSwx
MSArNDEsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1QgewogCiAvKgotICog
IDEuIEV2YWx1YXRlIG1fbFZhbHVlCisgKiAgMS4gRXZhbHVhdGUgbV9sZWZ0VmFsdWUKICAqICAy
LiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX29sZFZhbHVlCiAgKiAgMy4gRXZhbHVhdGUgbV9uZXdW
YWx1ZUV4cHJlc3Npb24KICAqICA0LiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX25ld1ZhbHVlCi0g
KiAgNS4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9sVmFsdWUKKyAqICA1LiBBc3NpZ24gdGhlIHJl
c3VsdCB0byBtX2xlZnRWYWx1ZQogICogIDYuIEV2YWx1YXRlIG1fcmVzdWx0RXhwcmVzc2lvbgog
ICogIDcuIFJldHVybiB0aGUgcmVzdWx0CiAgKi8KQEAgLTczLDM4ICs3Myw0MSBAQCBwdWJsaWM6
CiAKICAgICBVbmlxdWVSZWY8VmFyaWFibGVSZWZlcmVuY2U+IG9sZFZhcmlhYmxlUmVmZXJlbmNl
KCkKICAgICB7Ci0gICAgICAgIC8vIFRoZSBvbmx5IHJlYXNvbiB3ZSBkb24ndCBnZXQgdXNlLWFm
dGVyLWZyZWVzIGlzIHRoZSBmYWN0IHRoYXQgZXZlcnkgaW5zdGFuY2Ugb2YgUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbiBpcyBhbGxvY2F0ZWQgb24gdGhlIGhlYXAuCiAgICAgICAgIHJldHVybiBt
YWtlVW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJlbmNlPihWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCht
X29sZFZhbHVlKSk7CiAgICAgfQogCiAgICAgVW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJlbmNlPiBu
ZXdWYXJpYWJsZVJlZmVyZW5jZSgpCiAgICAgewotICAgICAgICAvLyBUaGUgb25seSByZWFzb24g
d2UgZG9uJ3QgZ2V0IHVzZS1hZnRlci1mcmVlcyBpcyB0aGUgZmFjdCB0aGF0IGV2ZXJ5IGluc3Rh
bmNlIG9mIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24gaXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFw
LgogICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxWYXJpYWJsZVJlZmVyZW5jZT4oVmFyaWFi
bGVSZWZlcmVuY2U6OndyYXAobV9uZXdWYWx1ZSkpOwogICAgIH0KIAogICAgIGJvb2wgaXNSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gbV9sVmFsdWU7IH0KKyAgICBFeHBy
ZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogICAgIFZhcmlhYmxl
RGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQogICAgIFZhcmlh
YmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9uZXdWYWx1ZTsgfQogICAgIEV4
cHJlc3Npb24qIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJuIG1fbmV3VmFsdWVFeHByZXNz
aW9uID8gJiptX25ld1ZhbHVlRXhwcmVzc2lvbiA6IG51bGxwdHI7IH0KICAgICBFeHByZXNzaW9u
KiByZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gbV9yZXN1bHRFeHByZXNzaW9uID8gJiptX3Jl
c3VsdEV4cHJlc3Npb24gOiBudWxscHRyOyB9CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYg
dGFrZUxlZnRWYWx1ZSgpIHsgcmV0dXJuIFdURk1vdmUobV9sZWZ0VmFsdWUpOyB9CisgICAgVW5p
cXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+JiYgdGFrZU9sZFZhbHVlKCkgeyByZXR1cm4gV1RG
TW92ZShtX29sZFZhbHVlKTsgfQorICAgIFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPiYm
IHRha2VOZXdWYWx1ZSgpIHsgcmV0dXJuIFdURk1vdmUobV9uZXdWYWx1ZSk7IH0KKyAgICBPcHRp
b25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYgdGFrZU5ld1ZhbHVlRXhwcmVzc2lvbigpIHsg
cmV0dXJuIFdURk1vdmUobV9uZXdWYWx1ZUV4cHJlc3Npb24pOyB9CisgICAgT3B0aW9uYWw8VW5p
cXVlUmVmPEV4cHJlc3Npb24+PiYmIHRha2VSZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gV1RG
TW92ZShtX3Jlc3VsdEV4cHJlc3Npb24pOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8Y2xh
c3MgVSwgY2xhc3MuLi4gQXJncz4gZnJpZW5kIFVuaXF1ZVJlZjxVPiBXVEY6Om1ha2VVbmlxdWVS
ZWYoQXJncyYmLi4uKTsKIAotICAgIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbFZhbHVlKQorICAgIFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVz
c2lvbj4gbGVmdFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oTGV4ZXI6OlRva2VuKG9yaWdp
bikpCi0gICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQotICAgICAgICAsIG1fb2xk
VmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbiksIFF1YWxpZmllcnMoKSwgV1RGOjpudWxsb3B0LCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpCi0gICAgICAgICwgbV9uZXdWYWx1
ZShXVEZNb3ZlKG9yaWdpbiksIFF1YWxpZmllcnMoKSwgV1RGOjpudWxsb3B0LCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpCisgICAgICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92
ZShsZWZ0VmFsdWUpKQorICAgICAgICAsIG1fb2xkVmFsdWUobWFrZVVuaXF1ZVJlZjxWYXJpYWJs
ZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51
bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpCisgICAgICAgICwg
bV9uZXdWYWx1ZShtYWtlVW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUob3Jp
Z2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCkpCiAgICAgewogICAgIH0KIAotICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9u
PiBtX2xWYWx1ZTsKLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7Ci0gICAgVmFy
aWFibGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBt
X2xlZnRWYWx1ZTsKKyAgICBVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4gbV9vbGRWYWx1
ZTsKKyAgICBVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4gbV9uZXdWYWx1ZTsKICAgICBP
cHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IG1fbmV3VmFsdWVFeHByZXNzaW9uOwogICAg
IE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9yZXN1bHRFeHByZXNzaW9uOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAppbmRleCAxOTgyNGY5NDA1NGU0YjNi
N2Q3Y2YyNGY2M2MwMTE5YjhhNjNmNGZiLi5lNTBhYWFkZGU3ODhmNGVkODllOWMyNmJmNDQ2Mzlj
MjE0MDQ5Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCkBAIC03OSw3
ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiBt
X2luaXRpYWxpemVyOwogfTsKIAotdXNpbmcgVmFyaWFibGVEZWNsYXJhdGlvbnMgPSBWZWN0b3I8
VmFyaWFibGVEZWNsYXJhdGlvbj47Cit1c2luZyBWYXJpYWJsZURlY2xhcmF0aW9ucyA9IFZlY3Rv
cjxVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4+OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgK
aW5kZXggZThlMWZjN2Y1YjIzOGRiYjA0MDNlOWY0MDI3ODA0YTcwYTdlODgxYy4uMDlhMDJkMDFm
NDk2ODRhYjk2M2VmODcyNWIwNDUyZDVhMzhlZGY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVz
cGFjZSBBU1QgewogCiBjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCA6IHB1Ymxp
YyBTdGF0ZW1lbnQgewogcHVibGljOgotICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+JiYgdmFy
aWFibGVEZWNsYXJhdGlvbnMpCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBWYXJpYWJsZURlY2xhcmF0aW9ucyYmIHZhcmlhYmxlRGVjbGFy
YXRpb25zKQogICAgICAgICA6IFN0YXRlbWVudChXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwg
bV92YXJpYWJsZURlY2xhcmF0aW9ucyhXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb25zKSkKICAg
ICB7CkBAIC01MywxMCArNTMsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1ZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+JiB2YXJpYWJsZURlY2xhcmF0aW9ucygpIHsg
cmV0dXJuIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7IH0KKyAgICBWZWN0b3I8VW5pcXVlUmVmPFZh
cmlhYmxlRGVjbGFyYXRpb24+PiYgdmFyaWFibGVEZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX3Zh
cmlhYmxlRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFZhcmlhYmxlRGVj
bGFyYXRpb24+IG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7CisgICAgVmFyaWFibGVEZWNsYXJhdGlv
bnMgbV92YXJpYWJsZURlY2xhcmF0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xF
bnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCmluZGV4IDYyNGM1NjJl
NTFjYTYwYzZlZjhkZTI4YWZlYmFjNTE0ZjJiZTBkYmQuLjU0OWQ1ZGNmMWIzN2FmY2EzY2U2ODEx
YzQ1ZjNjOWM0YWJhNzIyNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZy5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVGb3JT
ZW1hbnRpYyhBU1Q6OlNlbWFudGljJiBzZW1hbnRpYykKICAgICBpZiAoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oc2VtYW50aWMpKQogICAgICAgICByZXR1cm4g
YXR0cmlidXRlRm9yU2VtYW50aWMoV1RGOjpnZXQ8QVNUOjpCdWlsdEluU2VtYW50aWM+KHNlbWFu
dGljKSk7CiAgICAgYXV0byYgc3RhZ2VJbk91dFNlbWFudGljID0gV1RGOjpnZXQ8QVNUOjpTdGFn
ZUluT3V0U2VtYW50aWM+KHNlbWFudGljKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiW1t1c2Vy
KCIsIHN0YWdlSW5PdXRTZW1hbnRpYy5pbmRleCgpLCAiKV1dIik7CisgICAgcmV0dXJuIG1ha2VT
dHJpbmcoIltbdXNlcih1c2VyIiwgc3RhZ2VJbk91dFNlbWFudGljLmluZGV4KCksICIpXV0iKTsK
IH0KIAogRW50cnlQb2ludFNjYWZmb2xkaW5nOjpFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50cmlu
c2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEVudHJ5UG9pbnRJdGVtcyYgZW50cnlQb2ludEl0
ZW1zLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBsYXlv
dXQsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKQpA
QCAtMTg4LDkgKzE4OCw5IEBAIFN0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6Om1hbmdsZWRJ
bnB1dFBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGgpCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwog
ICAgIEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiogc3RydWN0dXJlRGVmaW5pdGlvbiA9IG51bGxw
dHI7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKVtpXS5uYW1lKCkgPT0gcGF0aFswXSkgeworICAgICAgICBpZiAobV9mdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLT5uYW1lKCkgPT0gcGF0aFswXSkgewogICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0pOwot
ICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpW2ldLnR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiB1bmlmeU5v
ZGUgPSBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKS0+dW5pZnlO
b2RlKCk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsK
ICAgICAgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlw
ZT4odW5pZnlOb2RlKTsKICAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZp
bml0aW9uPihuYW1lZFR5cGUpKQpAQCAtMjQ5LDcgKzI0OSw3IEBAIFN0cmluZyBFbnRyeVBvaW50
U2NhZmZvbGRpbmc6OnVucGFja1Jlc291cmNlc0FuZE5hbWVkQnVpbHRJbnMoKQogewogICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpLCAnICcsIG1f
cGFyYW1ldGVyVmFyaWFibGVzW2ldLCAiO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpLCAnICcsIG1fcGFyYW1ldGVyVmFy
aWFibGVzW2ldLCAiO1xuIikpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheW91
dC5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IG1fbmFtZWRCaW5k
R3JvdXBzW2ldLnZhcmlhYmxlTmFtZTsKQEAgLTQwMyw4ICs0MDMsOCBAQCBTdHJpbmcgRnJhZ21l
bnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5cGVzKCkKICAgICBmb3IgKGF1dG8mIG5h
bWVkU3RhZ2VJbiA6IG1fbmFtZWRTdGFnZUlucykgewogICAgICAgICBhdXRvIG1hbmdsZWRUeXBl
TmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbV9lbnRyeVBvaW50SXRlbXMu
aW5wdXRzW25hbWVkU3RhZ2VJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zXS51bm5hbWVkVHlwZSk7
CiAgICAgICAgIGF1dG8gZWxlbWVudE5hbWUgPSBuYW1lZFN0YWdlSW4uZWxlbWVudE5hbWU7Ci0g
ICAgICAgIGF1dG8gYXR0cmlidXRlSW5kZXggPSBuYW1lZFN0YWdlSW4uZWxlbWVudE5hbWU7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtYW5nbGVkVHlw
ZU5hbWUsICcgJywgZWxlbWVudE5hbWUsICIgW1t1c2VyKCIsIGF0dHJpYnV0ZUluZGV4LCAiKV1d
O1xuIikpOworICAgICAgICBhdXRvIGF0dHJpYnV0ZUluZGV4ID0gbmFtZWRTdGFnZUluLmF0dHJp
YnV0ZUluZGV4OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAg
IiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAiIFtbdXNlcih1c2VyIiwgYXR0
cmlidXRlSW5kZXgsICIpXV07XG4iKSk7CiAgICAgfQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9O1xuXG4iKTsKIApAQCAtNDQ2LDcgKzQ0Niw3IEBAIFN0cmluZyBGcmFnbWVudEVudHJ5UG9p
bnRTY2FmZm9sZGluZzo6dW5wYWNrKCkKICAgICBmb3IgKGF1dG8mIG5hbWVkU3RhZ2VJbiA6IG1f
bmFtZWRTdGFnZUlucykgewogICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMu
aW5wdXRzW25hbWVkU3RhZ2VJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zXS5wYXRoOwogICAgICAg
ICBhdXRvJiBlbGVtZW50TmFtZSA9IG5hbWVkU3RhZ2VJbi5lbGVtZW50TmFtZTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAi
ID0gIiwgbV9zdGFnZUluU3RydWN0TmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIpKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkSW5wdXRQYXRoKHBh
dGgpLCAiID0gIiwgbV9zdGFnZUluUGFyYW1ldGVyTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtc
biIpKTsKICAgICB9CiAKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xG
dW5jdGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAppbmRleCAyZmMxNDY1ODYxNmM5ODljYTIxN2M2
OTI4MmFlODZkYzQ4NzE5ZjA4Li4wOWQ2OWIxMDNhZDE2MzlhNTI5NjQyMmY2YmJhNDdiNThhOTI4
YWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMTA3LDcgKzEwNyw3
IEBAIHZvaWQgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBp
ZiAoaSkKICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpm
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKTsKKyAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpKTsKICAgICB9CiAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwogfQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYg
ZnVuY3Rpb25EZWZpbml0aW9uCiAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlck5hbWUgPSBnZW5l
cmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92
YXJpYWJsZU1hcHBpbmcuYWRkKCZwYXJhbWV0ZXIsIHBhcmFtZXRlck5hbWUpOwogICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKnBhcmFtZXRlci50eXBlKCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsK
KyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKnBhcmFtZXRlci0+dHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJO
YW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7XG4i
KTsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygp
KTsKQEAgLTQ4NiwxMiArNDg2LDIxIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpCiAKIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9u
JiBhc3NpZ25tZW50RXhwcmVzc2lvbikKIHsKKyAgICBpZiAoaXM8QVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24+KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSkpIHsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihhc3NpZ25t
ZW50RXhwcmVzc2lvbi5sZWZ0KCkpLnBvaW50ZXIoKSk7CisgICAgICAgIGF1dG8gbGVmdE5hbWUg
PSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25t
ZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgYXV0byByaWdodE5hbWUgPSBtX3N0YWNr
LnRha2VMYXN0KCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygn
KicsIGxlZnROYW1lLCAiID0gIiwgcmlnaHROYW1lLCAiO1xuIikpOworICAgICAgICBtX3N0YWNr
LmFwcGVuZChyaWdodE5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOwogICAgIGF1dG8gbGVmdE5h
bWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1l
bnRFeHByZXNzaW9uLnJpZ2h0KCkpOwogICAgIGF1dG8gcmlnaHROYW1lID0gbV9zdGFjay50YWtl
TGFzdCgpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhsZWZ0TmFtZSwg
IiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZChsZWZ0TmFtZSk7
CisgICAgbV9zdGFjay5hcHBlbmQocmlnaHROYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQpA
QCAtNTcwLDcgKzU3OSw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzCiAKIHZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZp
c2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAg
ICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICBBU1NFUlQobWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKQEAgLTU4Nyw3ICs1OTYsNyBAQCB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uJiBtYWtlQXJyYQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsK
LSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgp
KTsKICAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICBBU1NFUlQobWFr
ZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKICAgICBhdXRvIHZhcmlhYmxlTmFt
ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2
ZUZ1bmN0aW9uV3JpdGVyLmNwcAppbmRleCA2OTcyZTk4OTA1MGE5YTFiN2RhODExYTg3YzMzYzMz
ZDFlNGVkMjljLi5lZGU1NzZmZGJiMDZkNWExZGU5NGFkM2VlZDgyZjJmODA3MzA4YTY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5h
dGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMTExLDggKzEx
MSw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAgICAgICAgIH0KIAogICAgICAgICBBU1NF
UlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwot
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7
Ci0gICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS50eXBlKCktPnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvIG1ldGFs
UGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvJiBw
YXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0t
PnR5cGUoKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4ocGFy
YW1ldGVyVHlwZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHBhcmFtZXRlck5hbWVkVHlwZSA9IGRv
d25jYXN0PEFTVDo6TmFtZWRUeXBlPihwYXJhbWV0ZXJUeXBlKTsKICAgICAgICAgICAgIGlmIChp
czxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocGFyYW1ldGVyTmFtZWRUeXBlKSkgewpAQCAt
MTM0LDcgKzEzNCw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLnZhbHVlIikgewogICAgICAg
ICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09
IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0t
PnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91
dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIikpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PCIsIG1ldGFsUmV0dXJuTmFtZSwgIj4oeCk7XG4iKSk7CkBAIC0xNDIsMTEgKzE0Miwx
MiBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBBdXRob3JzIGNhbiBtYWtlIGEg
c3RydWN0IGZpZWxkIG5hbWVkICJsZW5ndGgiIHRvby4gQXV0b2dlbmVyYXRlZCBnZXR0ZXJzIGZv
ciB0aG9zZSBzaG91bGRuJ3QgdGFrZSB0aGlzIGNvZGVwYXRoLgogICAgIGlmIChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIikgewogICAgICAgICBB
U1NFUlRfVU5VU0VEKGludHJpbnNpY3MsIG1hdGNoZXMobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi50eXBlKCksIGludHJpbnNpY3MudWludFR5cGUoKSkpOwogICAgICAgICBBU1NFUlQobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAg
IGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS50eXBlKCktPnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvJiBwYXJhbWV0ZXJU
eXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+
dW5pZnlOb2RlKCk7CiAgICAgICAgIEFTU0VSVChpczxBU1Q6OlVubmFtZWRUeXBlPihwYXJhbWV0
ZXJUeXBlKSk7CiAgICAgICAgIGF1dG8mIHVubmFtZWRQYXJhbWV0ZXJUeXBlID0gZG93bmNhc3Q8
QVNUOjpVbm5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgIGlmIChpczxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFBhcmFtZXRlclR5cGUpKSB7CkBAIC0xNjUsNDUgKzE2Niw3MyBAQCBT
dHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvci4iX3N0cikpIHsKKyAgICAgICAg
YXV0byBtYW5nbGVkRmllbGROYW1lID0gWyZdKFN0cmluZyYgZmllbGROYW1lKSAtPiBTdHJpbmcg
eworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRv
JiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAg
ICAgICAgIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpT
dHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgICAgICAgICAgICAgIGF1dG8qIHN0
cnVjdHVyZUVsZW1lbnQgPSBzdHJ1Y3R1cmVEZWZpbml0aW9uLmZpbmQoZmllbGROYW1lKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKnN0cnVjdHVy
ZUVsZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgICAgIHJldHVybiBmaWVs
ZE5hbWU7CisgICAgICAgIH07CisKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKICAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsK
KyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50
eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkp
OwogICAgICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgICAg
IGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5zdWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0aCgpIC0g
MSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsRmllbGROYW1lID0gbWFuZ2xlZEZpZWxkTmFtZShm
aWVsZE5hbWUpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
ZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1l
dGVyMU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7Ci0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgdi4iLCBmaWVsZE5h
bWUsICIgPSBuO1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiICAgIHYuIiwgbWV0YWxGaWVsZE5hbWUsICIgPSBuO1xuIikpOwogICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiB2O1xuIikpOwogICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwogICAgICAgICAgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAg
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAg
ICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgYXV0byBmaWVsZE5h
bWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9y
LiJfc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgp
KTsKKyAgICAgICAgYXV0byBtZXRhbEZpZWxkTmFtZSA9IG1hbmdsZWRGaWVsZE5hbWUoZmllbGRO
YW1lKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVy
bk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwg
IiB2KSB7XG4iKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAg
ICByZXR1cm4gdi4iLCBmaWVsZE5hbWUsICI7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gdi4iLCBtZXRhbEZpZWxkTmFtZSwgIjtcbiIp
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwogICAgICAgICByZXR1cm4g
c3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIl9zdHIpKSB7CiAgICAg
ICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkg
PT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0u
dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAg
ICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJz
dHJpbmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CisKKyAgICAgICAgU3RyaW5nIG1ldGFs
RmllbGROYW1lOworICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9ICpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpOworICAgICAgICBhdXRvJiB1bmlmeU5v
ZGUgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUo
KS51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpO
YW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHN0cnVjdHVyZURlZmluaXRp
b24gPSBkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSk7CisgICAg
ICAgICAgICBhdXRvKiBzdHJ1Y3R1cmVFbGVtZW50ID0gc3RydWN0dXJlRGVmaW5pdGlvbi5maW5k
KGZpZWxkTmFtZSk7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlRWxlbWVudCk7CisgICAg
ICAgICAgICBtZXRhbEZpZWxkTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0cnVjdHVy
ZUVsZW1lbnQoKnN0cnVjdHVyZUVsZW1lbnQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG1ldGFsRmllbGROYW1lID0gZmllbGROYW1lOworCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwg
JygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIikpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICYodi0+IiwgZmllbGROYW1lLCAiKTtc
biIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVy
biAmKHYtPiIsIG1ldGFsRmllbGROYW1lLCAiKTtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIn1cbiIpOwogICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3JbXSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFO
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
cjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1l
dGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0
YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGkpIHtcbiIp
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBt
W2ldO1xuIikpOwpAQCAtMjEzLDggKzI0Miw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9u
KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAK
ICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJltd
IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpID09IDIpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJO
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5O
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnR5cGUoKSk7CiAgICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvciZbXS4iX3N0ci5sZW5ndGgoKSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAn
ICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHYsICIs
IG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbikge1xuIikpOwpAQCAtMjI1LDkgKzI1NCw5IEBAIFN0
cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkgPT0gIm9wZXJhdG9yW109IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOwotICAgICAgICBhdXRvIG1l
dGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICBhdXRv
IG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOwotICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyM05hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBlKCkpOworICAgICAg
ICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7
CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBl
KCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRG
dW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFt
ZXRlcjJOYW1lLCAiIGksICIsIG1ldGFsUGFyYW1ldGVyM05hbWUsICIgdikge1xuIikpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgbVtpXSA9IHY7XG4iKSk7
CkBAIC0yMzksNyArMjY4LDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICBpZiAobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5pc09wZXJhdG9yKCkpIHsKICAgICAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKSB7CiAgICAgICAg
ICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
LnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBhdXRvIG1l
dGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAg
ICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0
aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIikpOwogICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAiLCBvcGVyYXRv
ck5hbWUsICJ4O1xuIikpOwpAQCAtMjQ5LDggKzI3OCw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhCiAKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpLnNpemUoKSA9PSAyKTsKICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkp
OwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBl
KCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50
eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAn
ICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgsICIs
IG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHggIiwgb3BlcmF0b3JOYW1lLCAiIHk7XG4i
KSk7CkBAIC0yODMsNyArMzEyLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICAgICAg
fHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFzdWludCIKICAgICAgICAg
fHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFzZmxvYXQiKSB7CiAgICAg
ICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkg
PT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0u
dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywg
b3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iKSk7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwg
bWFwRnVuY3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSwgIih4KTtc
biIpKTsKQEAgLTI5Myw4ICszMjIsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAg
aWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJwb3ciIHx8IG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhdGFuMiIpIHsKICAgICAgICAgQVNTRVJUKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsK
KyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUo
KSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50
eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRw
dXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBh
cmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygiICAgIHJldHVybiAiLCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSwgIih4LCB5KTtcbiIpKTsKQEAgLTMzNiwxNCArMzY1LDE0IEBAIFN0cmluZyB3cml0ZU5hdGl2
ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN0YXJ0c1dp
dGgoIkludGVybG9ja2VkIl9zdHIpKSB7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UiKSB7CiAgICAgICAg
ICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ID09IDQpOwotICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKTsKLSAgICAgICAgICAg
IGF1dG8mIGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4o
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAg
ICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKTsKKyAgICAgICAgICAgIGF1dG8mIGZpcnN0
QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICAgICAgYXV0
byBmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZmlyc3RBcmd1bWVudFBvaW50ZXIuYWRkcmVz
c1NwYWNlKCk7CiAgICAgICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgp
KTsKLSAgICAgICAgICAgIGF1dG8gc2Vjb25kQXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBl
KCkpOwotICAgICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlw
ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10udHlwZSgpKSk7Ci0gICAgICAgICAgICBh
dXRvJiBmb3VydGhBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10udHlwZSgpKTsKKyAgICAg
ICAgICAgIGF1dG8gc2Vjb25kQXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAg
ICAgICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlwZSgpKSk7CisgICAgICAgICAgICBhdXRvJiBm
b3VydGhBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5cGUoKSk7CiAgICAgICAgICAg
ICBhdXRvIGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZm91cnRoQXJndW1lbnRQb2ludGVy
LmFkZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1bWVudFBvaW50ZWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZvdXJ0aEFyZ3VtZW50UG9pbnRlci5lbGVt
ZW50VHlwZSgpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
InZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIGNvbnZlcnRBZGRyZXNzU3BhY2UoZmly
c3RBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZmlyc3RBcmd1bWVudFBvaW50ZWUsICIqIG9i
amVjdCwgIiwgc2Vjb25kQXJndW1lbnQsICIgY29tcGFyZSwgIiwgdGhpcmRBcmd1bWVudCwgIiBk
ZXNpcmVkLCAiLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNl
KSwgJyAnLCBmb3VydGhBcmd1bWVudFBvaW50ZWUsICIqIG91dCkge1xuIikpOwpAQCAtMzU0LDEz
ICszODMsMTMgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgfQogCiAgICAgICAg
IEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
Myk7Ci0gICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSk7Ci0gICAgICAgIGF1dG8mIGZpcnN0
QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIEFTU0VSVChp
czxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0tPnR5cGUoKSkpOworICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50QWRkcmVzc1Nw
YWNlID0gZmlyc3RBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAgICAgIGF1dG8g
Zmlyc3RBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZpcnN0
QXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwotICAgICAgICBhdXRvIHNlY29uZEFyZ3Vt
ZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9p
bnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBl
KCkpKTsKLSAgICAgICAgYXV0byYgdGhpcmRBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6
OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0u
dHlwZSgpKTsKKyAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50
eXBlKCkpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkpKTsKKyAgICAgICAgYXV0byYg
dGhpcmRBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0tPnR5cGUoKSk7CiAgICAgICAgIGF1
dG8gdGhpcmRBcmd1bWVudEFkZHJlc3NTcGFjZSA9IHRoaXJkQXJndW1lbnRQb2ludGVyLmFkZHJl
c3NTcGFjZSgpOwogICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSh0aGlyZEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsK
ICAgICAgICAgYXV0byBuYW1lID0gYXRvbWljTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKS5zdWJzdHJpbmcoIkludGVybG9ja2VkIl9zdHIubGVuZ3RoKCkpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKaW5kZXggNjFkMzQ4YWYxNTk2NjIzYWY0YzM3
OThlYTk5ODFmOTRhNDE2OTU2NS4uNDFlYmFlNmI0MGRmZWEzMGRiMTM1ZWEzZmU5YjE0ZWMxOTc3
OGUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKQEAgLTcwLDcg
KzcwLDcgQEAgYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9n
cmFtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYm9vbCBzYW1lID0g
dHJ1ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraykgewotICAgICAgICAgICAgICAgIGlmICghbWF0
Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCksICpmdW5jdGlv
bnNbal0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClba10tPnR5cGUoKSwg
KmZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10tPnR5cGUoKSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgc2FtZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CkBAIC04MCw4ICs4MCw4IEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yJltdIiAmJiBmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCi0gICAgICAgICAgICAmJiBp
czxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVk
VHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpKSB7Ci0g
ICAgICAgICAgICBhdXRvJiB0eXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlw
ZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAg
ICAgICAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNU
OjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLT50eXBl
KCkpKSkgeworICAgICAgICAgICAgYXV0byYgdHlwZSA9IHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6
VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgp
KTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJl
ZmVyZW5jZT4odHlwZSkucmVzb2x2ZWRUeXBlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKSkgewpAQCAtOTIs
MTQgKzkyLDE0IEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYg
cHJvZ3JhbSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiBm
dW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAxCi0gICAgICAgICAgICAm
JiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5u
YW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQot
ICAgICAgICAgICAgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6
VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
KSkpCisgICAgICAgICAgICAmJiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19j
YXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRl
cnMoKVswXS0+dHlwZSgpKSkKKyAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlUeXBlPihzdGF0
aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSkpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIKICAg
ICAgICAgICAgICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIK
LSAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3Qg
QVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5
cGUoKSkpCi0gICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0
PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMo
KVsxXS50eXBlKCkpKQotICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKVswXS50eXBlKCksICpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygp
WzFdLnR5cGUoKSkpCisgICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRp
Y19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKSkKKyAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlw
ZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpWzFdLT50eXBlKCkpKQorICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVu
Y3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLCAqZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAppbmRleCAxMzY1ZjI2ZDEyMzQ4MjAwMGVl
NzQwNDdjYjMyMWU4MDJiMmM2MDgzLi40NjlmYWM2ZjhmZGIzNmY1ZTdjNzMzNDA5ZWI1YTRjYmEx
Y2RjY2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQ2hlY2tlci5jcHAKQEAgLTEyMiw4ICsxMjIsOCBAQCBzdGF0aWMgQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoQVNUOjpD
YWxsRQogICAgIGNvbnN0IGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAgICAgYXV0byByZXR1cm5U
eXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oY2FsbEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBmaXJzdEFyZ3VtZW50LmFkZHJlc3NTcGFjZSgpLCBmaXJzdEFy
Z3VtZW50LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9ucyBwYXJhbWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgeyBmaXJzdEFyZ3VtZW50LmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0KSk7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpIH0sIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VV
bmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgp
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJz
LmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRv
a2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2Vu
KGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSksIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwogICAgIHJldHVybiBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpu
dWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0xMzIsNyArMTMyLDcgQEAgc3RhdGljIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKEFTVDo6Q2Fs
bEV4cHJlc3MKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAgIGF1dG8gcmV0
dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOwogICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIHsgZmlyc3RBcmd1bWVudC5jbG9uZSgpIH0sIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VV
bmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgp
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKICAgICByZXR1cm4gQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhl
cjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCks
IFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5n
dGgiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
V1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiB9CiAKQEAgLTE1Myw4ICsxNTMsOCBAQCBzdGF0
aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoUmVmZXJlbmNlQ29t
cGFyYXRvcihBU1Q6OkNhbGxFeAogICAgICAgICB9KSk7CiAgICAgfSkpOwogICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgYXJndW1lbnRUeXBlLT5jbG9uZSgpIH0sIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2lu
KCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBXVEZNb3ZlKGFyZ3VtZW50VHlwZSkgfSwgU3RyaW5n
KCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQo
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihjYWxs
RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBhcmd1bWVudFR5cGUtPmNs
b25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFt
ZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhl
cjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KFdURk1vdmUoYXJndW1lbnRUeXBlKSksIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwogICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihj
YWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxs
b3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBp
c09wZXJhdG9yKSk7CiB9CiAKQEAgLTIwMyw4ICsyMDMsOCBAQCBzdGF0aWMgT3B0aW9uYWw8QVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlQnlJbnN0YW50aWF0aW9uKEFTVDo6
Q2FsbAogICAgICAgICBhdXRvIHJpZ2h0QWNjZXB0YWJpbGl0eSA9IGFjY2VwdGFiaWxpdHkodHlw
ZXNbMV0uZ2V0KCkpOwogICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgaWYg
KGxlZnRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcyAmJiByaWdodEFjY2VwdGFi
aWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6WWVzKSB7Ci0gICAgICAgICAgICBhdXRvJiB1bm5hbWVk
VHlwZTEgPSB0eXBlc1swXS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgpOwotICAgICAgICAgICAgYXV0
byYgdW5uYW1lZFR5cGUyID0gdHlwZXNbMV0uZ2V0KCkuZ2V0VW5uYW1lZFR5cGUoKTsKKyAgICAg
ICAgICAgIGF1dG8mIHVubmFtZWRUeXBlMSA9ICp0eXBlc1swXS5nZXQoKS5nZXRVbm5hbWVkVHlw
ZSgpOworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUyID0gKnR5cGVzWzFdLmdldCgpLmdl
dFVubmFtZWRUeXBlKCk7CiAgICAgICAgICAgICBzdWNjZXNzID0gbWF0Y2hlcyh1bm5hbWVkVHlw
ZTEsIHVubmFtZWRUeXBlMik7CiAgICAgICAgIH0gZWxzZSBpZiAoKGxlZnRBY2NlcHRhYmlsaXR5
ID09IEFjY2VwdGFiaWxpdHk6Ok1heWJlICYmIHJpZ2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRh
YmlsaXR5OjpZZXMpCiAgICAgICAgICAgICB8fCAobGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0
YWJpbGl0eTo6WWVzICYmIHJpZ2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXli
ZSkpCkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3Zlcmxv
YWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAg
ICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4
ID8gMiA6IDE7CiAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNp
emUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGF1dG8mIGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmlu
aXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRv
JiBmaXJzdFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKVswXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgIGlmIChpczxBU1Q6OlVubmFt
ZWRUeXBlPihmaXJzdFBhcmFtZXRlclVuaWZ5Tm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHVu
bmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlm
eU5vZGUpOwogICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBl
KSB8fCBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6
QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChraW5kID09IENoZWNrS2luZDo6SW5kZXgpIHsKLSAgICAg
ICAgICAgIGF1dG8mIHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGF1
dG8mIHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKVsxXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFT
VDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFT
VDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUpOwpAQCAtMzI4LDE0ICszMjgs
MTQgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAgICAgICAgc2l6ZV90IG51bUV4cGVjdGVk
UGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCA/IDMgOiAyOwogICAgICAgICBp
ZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQ
YXJhbWV0ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvJiBmaXJz
dEFyZ3VtZW50VW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBd
LnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50VW5pZnlO
b2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpLT51bmlm
eU5vZGUoKTsKICAgICAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRV
bmlmeU5vZGUpKSB7CiAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFT
VDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRVbmlmeU5vZGUpOwogICAgICAgICAgICAgaWYg
KGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmIChr
aW5kID09IENoZWNrS2luZDo6SW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8mIHNlY29uZFBhcmFt
ZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBl
KCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHNlY29uZFBhcmFtZXRlclVuaWZ5
Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKS0+dW5p
ZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJh
bWV0ZXJVbmlmeU5vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJh
bWV0ZXJVbmlmeU5vZGUpOwpAQCAtMzQ1LDkgKzM0NSw5IEBAIHN0YXRpYyBib29sIGNoZWNrT3Bl
cmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZp
bml0CiAgICAgICAgICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc0ludCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIW1hdGNo
ZXMoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSwgKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKSkKKyAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlv
bi50eXBlKCksICpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvJiB2YWx1ZVR5cGUgPSAqZnVu
Y3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxXS50
eXBlKCk7CisgICAgICAgIGF1dG8mIHZhbHVlVHlwZSA9ICpmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpW251bUV4cGVjdGVkUGFyYW1ldGVycyAtIDFdLT50eXBlKCk7CiAgICAgICAgIGF1
dG8gZ2V0dGVyTmFtZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuc3Vic3RyaW5nKDAsIGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkubGVuZ3RoKCkgLSAxKTsKICAgICAgICAgYXV0byogZ2V0
dGVyRnVuY3MgPSBuYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoZ2V0dGVyTmFtZSk7CiAgICAgICAg
IGlmICghZ2V0dGVyRnVuY3MpCkBAIC0zNTUsNyArMzU1LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tP
cGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRl
ZmluaXQKICAgICAgICAgVmVjdG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7CiAgICAg
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVu
dFR5cGVSZWZlcmVuY2VzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUV4cGVj
dGVkUGFyYW1ldGVycyAtIDE7ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5k
KCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT5jbG9uZSgpKTsK
KyAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKCgqZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+Y2xvbmUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgYXJn
dW1lbnRUeXBlIDogYXJndW1lbnRUeXBlcykKICAgICAgICAgICAgIGFyZ3VtZW50VHlwZVJlZmVy
ZW5jZXMuYXBwZW5kKGFyZ3VtZW50VHlwZSk7CiAgICAgICAgIGF1dG8qIG92ZXJsb2FkID0gcmVz
b2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJl
bmNlcywgbnVsbHB0cik7CkBAIC0zNzgsNyArMzc4LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVy
YXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmlu
aXQKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgewot
ICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgYXV0byYgdW5pZnlO
b2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpLT51bmlm
eU5vZGUoKTsKICAgICAgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2Rl
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiB1bm5h
bWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CkBAIC0zOTIs
NyArMzkyLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKysiIHx8IGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLS0iKSB7CiAgICAgICAgIHJldHVy
biBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxCi0gICAgICAgICAg
ICAmJiBtYXRjaGVzKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwg
ZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAgICAgICAgICAmJiBtYXRjaGVzKCpmdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlv
bi50eXBlKCkpOwogICAgIH0KICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3IrIiB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvci0iKQog
ICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MSB8fCBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyOwpAQCAtNDQ3
LDE5ICs0NDcsMTggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGJvb2wgY2hlY2tTaGFkZXJU
eXBlKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7Ci0gICAgdm9pZCBmaW5pc2hWaXNp
dGluZ1Byb3BlcnR5QWNjZXNzKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiwgQVNUOjpV
bm5hbWVkVHlwZSYgd3JhcHBlZEJhc2VUeXBlLCBBU1Q6OlVubmFtZWRUeXBlKiBleHRyYUFyZ3Vt
ZW50VHlwZSA9IG51bGxwdHIpOwogICAgIGJvb2wgaXNCb29sVHlwZShSZXNvbHZpbmdUeXBlJik7
CiAgICAgc3RydWN0IFJlY3Vyc2VJbmZvIHsKICAgICAgICAgUmVzb2x2aW5nVHlwZSYgcmVzb2x2
aW5nVHlwZTsKLSAgICAgICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+JiBhZGRyZXNzU3Bh
Y2U7CisgICAgICAgIEFTVDo6VHlwZUFubm90YXRpb24mIHR5cGVBbm5vdGF0aW9uOwogICAgIH07
Ci0gICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVz
c2lvbiYsIGJvb2wgcmVxdWlyZXNMVmFsdWUgPSBmYWxzZSk7Ci0gICAgT3B0aW9uYWw8UmVjdXJz
ZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xWYWx1ZSA9IGZh
bHNlKTsKKyAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4gcmVjdXJzZUFuZEdldEluZm8oQVNUOjpF
eHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSA9IGZhbHNlKTsKKyAgICBPcHRpb25h
bDxSZWN1cnNlSW5mbz4gZ2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTGVm
dFZhbHVlID0gZmFsc2UpOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
Pj4gcmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYp
OwogICAgIGJvb2wgcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZShBU1Q6OkV4cHJlc3Npb24mKTsK
LSAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+JiYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVsbG9wdCk7
Ci0gICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4mJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpudWxs
b3B0KTsKLSAgICB2b2lkIGZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlc29sdmluZ1R5
cGUmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBXVEY6Om51bGxvcHQpOworICAgIHZv
aWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4mJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhw
cmVzc2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiwgQVNUOjpUeXBlQW5u
b3RhdGlvbik7CisgICAgdm9pZCBmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZXNvbHZp
bmdUeXBlJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0
aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwpAQCAtNDk0LDcgKzQ5Myw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJikgb3ZlcnJpZGU7CiAKICAgICBIYXNo
TWFwPEFTVDo6RXhwcmVzc2lvbiosIFJlc29sdmluZ1R5cGU+IG1fdHlwZU1hcDsKLSAgICBIYXNo
TWFwPEFTVDo6RXhwcmVzc2lvbiosIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPj4gbV9hZGRy
ZXNzU3BhY2VNYXA7CisgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBBU1Q6OlR5cGVBbm5v
dGF0aW9uPiBtX3R5cGVBbm5vdGF0aW9uczsKICAgICBIYXNoU2V0PFN0cmluZz4gbV92ZXJ0ZXhF
bnRyeVBvaW50czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9mcmFnbWVudEVudHJ5UG9pbnRzOwog
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2NvbXB1dGVFbnRyeVBvaW50czsKQEAgLTUzOCw4ICs1Mzcs
OCBAQCBib29sIENoZWNrZXI6OmFzc2lnblR5cGVzKCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IG1fYWRkcmVzc1NwYWNl
TWFwKQotICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5zZXRBZGRyZXNzU3BhY2Uoa2V5VmFsdWVQ
YWlyLnZhbHVlKTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IG1fdHlwZUFubm90YXRp
b25zKQorICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5zZXRUeXBlQW5ub3RhdGlvbihXVEZNb3Zl
KGtleVZhbHVlUGFpci52YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC02MjEsNiAr
NjIwLDE3IEBAIHN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1h
dGNoQW5kQ29tbWl0KFJlc29sdmluZ1R5cGUmIHJlc29sCiAgICAgfSkpOwogfQogCitzdGF0aWMg
T3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBjb21taXQoUmVzb2x2aW5nVHlw
ZSYgcmVzb2x2aW5nVHlwZSkKK3sKKyAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBl
KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgcmV0
dXJuIHVubmFtZWRUeXBlLT5jbG9uZSgpOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gT3B0aW9uYWw8VW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgIGlmICghcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgICAgICByZXR1
cm4gY29tbWl0KHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJl
c29sdmVkVHlwZSgpLT5jbG9uZSgpOworICAgIH0pKTsKK30KKwogdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQogewog
ICAgIGF1dG8qIGJhc2VUeXBlID0gKFsmXSgpIC0+IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
KiB7CkBAIC03MjgsMjYgKzczOCwyNiBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VHlwZVJl
ZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVB
cmd1bWVudCk7CiB9CiAKLWF1dG8gQ2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHBy
ZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVpcmVzTFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1
cnNlSW5mbz4KK2F1dG8gQ2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9u
JiBleHByZXNzaW9uLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNl
SW5mbz4KIHsKICAgICBWaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKICAgICBpZiAoZXJyb3Io
KSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gZ2V0SW5mbyhleHBy
ZXNzaW9uLCByZXF1aXJlc0xWYWx1ZSk7CisgICAgcmV0dXJuIGdldEluZm8oZXhwcmVzc2lvbiwg
cmVxdWlyZXNMZWZ0VmFsdWUpOwogfQogCi1hdXRvIENoZWNrZXI6OmdldEluZm8oQVNUOjpFeHBy
ZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVpcmVzTFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1
cnNlSW5mbz4KK2F1dG8gQ2hlY2tlcjo6Z2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Np
b24sIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgogewog
ICAgIGF1dG8gdHlwZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmV4cHJlc3Npb24pOwogICAg
IEFTU0VSVCh0eXBlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKIAotICAgIGF1dG8gYWRk
cmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFjZU1hcC5maW5kKCZleHByZXNzaW9uKTsK
LSAgICBBU1NFUlQoYWRkcmVzc1NwYWNlSXRlcmF0b3IgIT0gbV9hZGRyZXNzU3BhY2VNYXAuZW5k
KCkpOwotICAgIGlmIChyZXF1aXJlc0xWYWx1ZSAmJiAhYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZh
bHVlKSB7CisgICAgYXV0byB0eXBlQW5ub3RhdGlvbkl0ZXJhdG9yID0gbV90eXBlQW5ub3RhdGlv
bnMuZmluZCgmZXhwcmVzc2lvbik7CisgICAgQVNTRVJUKHR5cGVBbm5vdGF0aW9uSXRlcmF0b3Ig
IT0gbV90eXBlQW5ub3RhdGlvbnMuZW5kKCkpOworICAgIGlmIChyZXF1aXJlc0xlZnRWYWx1ZSAm
JiB0eXBlQW5ub3RhdGlvbkl0ZXJhdG9yLT52YWx1ZS5pc1JpZ2h0VmFsdWUoKSkgewogICAgICAg
ICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KLSAgICBy
ZXR1cm4ge3sgdHlwZUl0ZXJhdG9yLT52YWx1ZSwgYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVl
IH19OworICAgIHJldHVybiB7eyB0eXBlSXRlcmF0b3ItPnZhbHVlLCB0eXBlQW5ub3RhdGlvbkl0
ZXJhdG9yLT52YWx1ZSB9fTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCkBAIC03NjcsMTkgKzc3NywzMiBAQCB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNs
YXJhdGlvbikKICAgICB9CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJl
c3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRU
eXBlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlKQordm9pZCBDaGVj
a2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiYgdW5uYW1lZFR5cGUsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFu
bm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodW5uYW1lZFR5cGUpKTsKICAgICBBU1NF
UlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIGF1dG8gYWRk
cmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZleHByZXNzaW9uLCBh
ZGRyZXNzU3BhY2UpOworICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV90eXBlQW5u
b3RhdGlvbnMuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiAgICAg
QVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKIH0KIAotdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVz
c2lvbiYgZXhwcmVzc2lvbiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29s
dmFibGVUeXBlUmVmZXJlbmNlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1Nw
YWNlKQordm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lv
biwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29sdmFibGVUeXBlUmVmZXJl
bmNlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVl
KCkpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBX
VEZNb3ZlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJl
c3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsK
KyAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgm
ZXhwcmVzc2lvbiwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOworICAgIEFTU0VSVF9VTlVTRUQo
YWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7
Cit9CisKK3ZvaWQgQ2hlY2tlcjo6Zm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNz
aW9uLCBSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5
cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCit7CisgICAgcmVzb2x2aW5nVHlwZS52
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJl
c3VsdCkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Np
b24sIHJlc3VsdC0+Y2xvbmUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBh
ZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4mIHJlc3VsdCkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5h
ZGQoJmV4cHJlc3Npb24sIHJlc3VsdC5jb3B5UmVmKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0pKTsKKyAgICBhdXRvIGFk
ZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwg
V1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNl
QWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKQEAgLTc4
OSw2ICs4MTIsMTEgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNz
aW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKICAgICBpZiAoIWxlZnRJbmZvKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBpZiAobGVmdEluZm8tPnR5cGVBbm5vdGF0aW9uLmlzUmlnaHRWYWx1ZSgp
KSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBh
dXRvIHJpZ2h0SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGFzc2lnbm1lbnRFeHByZXNzaW9uLnJp
Z2h0KCkpOwogICAgIGlmICghcmlnaHRJbmZvKQogICAgICAgICByZXR1cm47CkBAIC04MDIsMjMg
KzgzMCwxMCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24m
IGFzc2lnbm1lbnRFeHByZXNzaW9uKQogICAgIGFzc2lnblR5cGUoYXNzaWdubWVudEV4cHJlc3Np
b24sIFdURk1vdmUoKnJlc3VsdFR5cGUpKTsKIH0KIAotdm9pZCBDaGVja2VyOjpmb3J3YXJkVHlw
ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5
cGUsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2UpCi17Ci0gICAgcmVz
b2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mIHJlc3VsdCkgewotICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5h
ZGQoJmV4cHJlc3Npb24sIHJlc3VsdC0+Y2xvbmUoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc3VsdCkgewotICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHJlc3VsdC5jb3B5UmVmKCkpOwotICAgICAgICBB
U1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0pKTsK
LSAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgm
ZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKLSAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFj
ZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOwotfQotCiB2b2lk
IENoZWNrZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbikKIHsKLSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0
SW5mbyhyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpLCB0cnVlKTsKLSAgICBpZiAo
IWxWYWx1ZUluZm8pCisgICAgYXV0byBsZWZ0VmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8o
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSwgdHJ1ZSk7CisgICAgaWYgKCFs
ZWZ0VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogRmlndXJlIG91
dCB3aGF0IHRvIGRvIHdpdGggdGhlIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ncyBBbm9ueW1v
dXNWYXJpYWJsZXMuCkBAIC04MjcsNyArODQyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiAg
ICAgaWYgKCFuZXdWYWx1ZUluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbWF0Y2hB
bmRDb21taXQobFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZp
bmdUeXBlKSkgeworICAgIGlmICghbWF0Y2hBbmRDb21taXQobGVmdFZhbHVlSW5mby0+cmVzb2x2
aW5nVHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKSkgewogICAgICAgICBzZXRFcnJv
cigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODczLDM3ICs4ODgsNDMgQEAgdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlwZShkZXJlZmVy
ZW5jZUV4cHJlc3Npb24sIHBvaW50ZXJUeXBlLT5jbG9uZSgpLCBwb2ludGVyVHlwZS0+YWRkcmVz
c1NwYWNlKCkpOworICAgIGFzc2lnblR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVy
VHlwZS0+Y2xvbmUoKSwgQVNUOjpMZWZ0VmFsdWUgeyBwb2ludGVyVHlwZS0+YWRkcmVzc1NwYWNl
KCkgfSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsKLSAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1
cnNlQW5kR2V0SW5mbyhtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCksIHRydWUpOwotICAg
IGlmICghbFZhbHVlSW5mbykKKyAgICBhdXRvIGxlZnRWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0
SW5mbyhtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCksIHRydWUpOworICAgIGlmICgh
bGVmdFZhbHVlSW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBsZWZ0QWRkcmVzc1Nw
YWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOwor
ICAgIGlmICghbGVmdEFkZHJlc3NTcGFjZSkgeworICAgICAgICBzZXRFcnJvcigpOwogICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgYXV0byogbFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBl
KGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOwotICAgIGlmICghbFZhbHVlVHlwZSkgeworICAg
IGF1dG8qIGxlZnRWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsZWZ0VmFsdWVJbmZvLT5yZXNv
bHZpbmdUeXBlKTsKKyAgICBpZiAoIWxlZnRWYWx1ZVR5cGUpIHsKICAgICAgICAgc2V0RXJyb3Io
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUobWFrZVBvaW50ZXJF
eHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbiht
YWtlUG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNl
LCBsVmFsdWVUeXBlLT5jbG9uZSgpKSk7CisgICAgYXNzaWduVHlwZShtYWtlUG9pbnRlckV4cHJl
c3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0VmFsdWVU
eXBlLT5jbG9uZSgpKSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAg
IGF1dG8gbFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24ubFZhbHVlKCkpOwotICAgIGlmICghbFZhbHVlSW5mbykKKyAgICBhdXRvIGxlZnRW
YWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmxlZnRWYWx1ZSgpKTsKKyAgICBpZiAoIWxlZnRWYWx1ZUluZm8pCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8qIGxWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsVmFsdWVJbmZvLT5yZXNv
bHZpbmdUeXBlKTsKLSAgICBpZiAoIWxWYWx1ZVR5cGUpIHsKKyAgICBhdXRvKiBsZWZ0VmFsdWVU
eXBlID0gZ2V0VW5uYW1lZFR5cGUobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAg
aWYgKCFsZWZ0VmFsdWVUeXBlKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhdXRvJiB1bmlmeU5vZGUgPSBsVmFsdWVUeXBlLT51bmlmeU5vZGUo
KTsKKyAgICBhdXRvJiB1bmlmeU5vZGUgPSBsZWZ0VmFsdWVUeXBlLT51bmlmeU5vZGUoKTsKICAg
ICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewogICAgICAgICBhdXRvJiB1
bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAgICAg
ICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsKQEAgLTkxMyw3ICs5
MzQsOCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzcwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKCFsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UpIHsKKyAgICAg
ICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24u
bGVmdEFkZHJlc3NTcGFjZSgpOworICAgICAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKICAg
ICAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTkyMSwxODMgKzk0MywxMTIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3MKICAgICAgICAgaWYg
KGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpIHsKICAgICAgICAgICAgIGF1dG8mIGFy
cmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogU2F2ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgotICAgICAgICAgICAg
YXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbi5vcmlnaW4oKSksICpsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50
eXBlKCkuY2xvbmUoKSkpOworICAgICAgICAgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhl
cjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRk
cmVzc1NwYWNlLCBhcnJheVR5cGUudHlwZSgpLmNsb25lKCkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNl
KSB7CisgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90
YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOworICAgIGlmICghbGVmdEFkZHJlc3NTcGFjZSkgewog
ICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWdu
VHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
bi5vcmlnaW4oKSksICpsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25l
KCkpKTsKKyAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VV
bmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGxlZnRWYWx1
ZVR5cGUtPmNsb25lKCkpKTsKIH0KIAotdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZ1Byb3Bl
cnR5QWNjZXNzKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24sIEFTVDo6VW5uYW1lZFR5cGUmIHdyYXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVk
VHlwZSogZXh0cmFBcmd1bWVudFR5cGUpCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RG90RXhw
cmVzc2lvbiYgZG90RXhwcmVzc2lvbikKIHsKLSAgICB1c2luZyBPdmVybG9hZFJlc29sdXRpb24g
PSBzdGQ6OnR1cGxlPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIEFTVDo6VW5uYW1lZFR5cGUq
PjsKLQotICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb247Ci0gICAgQVNU
OjpVbm5hbWVkVHlwZSogZ2V0UmV0dXJuVHlwZTsKLSAgICBzdGQ6OnRpZShnZXRGdW5jdGlvbiwg
Z2V0UmV0dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsKLSAgICAgICAg
UmVzb2x2aW5nVHlwZSBnZXRBcmd1bWVudFR5cGUxKHdyYXBwZWRCYXNlVHlwZS5jbG9uZSgpKTsK
LSAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gZ2V0QXJndW1lbnRUeXBlMjsKLSAgICAg
ICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAgICAgICAgICAgZ2V0QXJndW1lbnRUeXBlMiA9
IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOworICAgIGF1dG8gYmFz
ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhkb3RFeHByZXNzaW9uLmJhc2UoKSk7CisgICAgaWYg
KCFiYXNlSW5mbykKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gYmFzZVVubmFtZWRUeXBlID0g
Y29tbWl0KGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBpZiAoIWJhc2VVbm5hbWVkVHlw
ZSkKKyAgICAgICAgcmV0dXJuOwogCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBnZXRG
dW5jdGlvbiA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0UmV0dXJuVHlwZSA9
IG51bGxwdHI7CisgICAgewogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxS
ZXNvbHZpbmdUeXBlPj4gZ2V0QXJndW1lbnRUeXBlczsKLSAgICAgICAgZ2V0QXJndW1lbnRUeXBl
cy5hcHBlbmQoZ2V0QXJndW1lbnRUeXBlMSk7Ci0gICAgICAgIGlmIChnZXRBcmd1bWVudFR5cGUy
KQotICAgICAgICAgICAgZ2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoKmdldEFyZ3VtZW50VHlwZTIp
OwotCi0gICAgICAgIGF1dG8qIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJ
bXBsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZUdldE92ZXJsb2FkcygpLCBnZXRB
cmd1bWVudFR5cGVzLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFnZXRGdW5jdGlvbikKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGdldEZ1bmN0aW9uLCAmZ2V0RnVuY3Rpb24tPnR5cGUoKSk7
Ci0gICAgfSkoKTsKLQotICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb247
Ci0gICAgQVNUOjpVbm5hbWVkVHlwZSogYW5kUmV0dXJuVHlwZTsKLSAgICBzdGQ6OnRpZShhbmRG
dW5jdGlvbiwgYW5kUmV0dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsK
LSAgICAgICAgYXV0byBjb21wdXRlQW5kQXJndW1lbnRUeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5
cGUmIHVubmFtZWRUeXBlKSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7Ci0gICAgICAgICAg
ICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4geyB1bm5hbWVkVHlwZS5jbG9uZSgpIH07Ci0gICAgICAgICAgICBpZiAo
aXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
eyBSZXNvbHZpbmdUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExl
eGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJl
c3NTcGFjZTo6VGhyZWFkLCBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5
cGUoKS5jbG9uZSgpKSkgfTsKLSAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAg
ICAgICAgIHJldHVybiB7IFJlc29sdmluZ1R5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJU
eXBlPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNU
OjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5h
bWVkVHlwZSkuY2xvbmUoKSkpIH07Ci0gICAgICAgIH07Ci0gICAgICAgIGF1dG8gY29tcHV0ZUFu
ZFJldHVyblR5cGUgPSBbJl0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6
VW5uYW1lZFR5cGUqIHsKLSAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5h
bWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJU
eXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICB9OwotCi0gICAgICAgIGF1dG8gYW5kQXJndW1lbnRUeXBlMSA9IGNvbXB1
dGVBbmRBcmd1bWVudFR5cGUod3JhcHBlZEJhc2VUeXBlKTsKLSAgICAgICAgaWYgKCFhbmRBcmd1
bWVudFR5cGUxKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51
bGxwdHIpOwotICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiBhbmRBcmd1bWVudFR5cGUy
OwotICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCi0gICAgICAgICAgICBhbmRBcmd1bWVu
dFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50VHlwZS0+Y2xvbmUoKSk7CisgICAg
ICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAg
ICAgICAgZ2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVz
c2lvbi5wb3NzaWJsZUdldE92ZXJsb2FkcygpLCBnZXRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsK
KyAgICAgICAgaWYgKGdldEZ1bmN0aW9uKQorICAgICAgICAgICAgZ2V0UmV0dXJuVHlwZSA9ICZn
ZXRGdW5jdGlvbi0+dHlwZSgpOworICAgIH0KIAorICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogYW5kRnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVy
blR5cGUgPSBudWxscHRyOworICAgIGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5m
by0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgIGF1dG8gYXJn
dW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4o
ZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBiYXNlVW5uYW1lZFR5
cGUtPmdldCgpLmNsb25lKCkpOwogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxSZXNvbHZpbmdUeXBlPj4gYW5kQXJndW1lbnRUeXBlczsKLSAgICAgICAgYW5kQXJndW1lbnRU
eXBlcy5hcHBlbmQoKmFuZEFyZ3VtZW50VHlwZTEpOwotICAgICAgICBpZiAoYW5kQXJndW1lbnRU
eXBlMikKLSAgICAgICAgICAgIGFuZEFyZ3VtZW50VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5
cGUyKTsKLQotICAgICAgICBhdXRvKiBhbmRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVBbmRPdmVybG9hZHMoKSwg
YW5kQXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAgICAgIGlmICghYW5kRnVuY3Rpb24pCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihhbmRGdW5jdGlvbiwgY29tcHV0ZUFuZFJldHVyblR5
cGUoYW5kRnVuY3Rpb24tPnR5cGUoKSkpOwotICAgIH0pKCk7CisgICAgICAgIGFuZEFyZ3VtZW50
VHlwZXMuYXBwZW5kKGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgYW5kRnVuY3Rp
b24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFu
ZE92ZXJsb2FkcygpLCBhbmRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGFu
ZEZ1bmN0aW9uKQorICAgICAgICAgICAgYW5kUmV0dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBv
aW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpOyAvLyBGSVhNRTog
RW5mb3JjZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKKyAg
ICB9CisKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHRocmVhZEFuZEZ1bmN0aW9uID0g
bnVsbHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiB0aHJlYWRBbmRSZXR1cm5UeXBlID0gbnVs
bHB0cjsKKyAgICB7CisgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFT
VDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGJhc2VVbm5hbWVkVHlwZS0+Z2V0KCkuY2xvbmUoKSk7
CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiB0
aHJlYWRBbmRBcmd1bWVudFR5cGVzOworICAgICAgICB0aHJlYWRBbmRBcmd1bWVudFR5cGVzLmFw
cGVuZChiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIHRocmVhZEFuZEZ1bmN0aW9u
ID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVBbmRP
dmVybG9hZHMoKSwgdGhyZWFkQW5kQXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGlm
ICh0aHJlYWRBbmRGdW5jdGlvbikKKyAgICAgICAgICAgIHRocmVhZEFuZFJldHVyblR5cGUgPSAm
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odGhyZWFkQW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxl
bWVudFR5cGUoKTsgLy8gRklYTUU6IEVuZm9yY2UgdGhlIHJldHVybiBvZiBhbmRlcnMgd2lsbCBh
bHdheXMgYmUgYSBwb2ludGVyCisgICAgfQogCi0gICAgaWYgKCFnZXRSZXR1cm5UeXBlICYmICFh
bmRSZXR1cm5UeXBlKSB7CisgICAgaWYgKCFnZXRGdW5jdGlvbiAmJiAhYW5kRnVuY3Rpb24pIHsK
ICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlmIChn
ZXRSZXR1cm5UeXBlICYmIGFuZFJldHVyblR5cGUgJiYgIW1hdGNoZXMoKmdldFJldHVyblR5cGUs
ICphbmRSZXR1cm5UeXBlKSkgeworICAgIGlmIChnZXRGdW5jdGlvbiAmJiBhbmRGdW5jdGlvbikg
eworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChh
bmRGdW5jdGlvbiAmJiB0aHJlYWRBbmRGdW5jdGlvbiAmJiAhbWF0Y2hlcygqYW5kUmV0dXJuVHlw
ZSwgKnRocmVhZEFuZFJldHVyblR5cGUpKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHNldEZ1bmN0
aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNldFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUo
c2V0RnVuY3Rpb24sIHNldFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlv
biB7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgc2V0QXJndW1lbnQxVHlwZSh3cmFwcGVkQmFzZVR5
cGUuY2xvbmUoKSk7Ci0gICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IHNldEFyZ3VtZW50
VHlwZTI7Ci0gICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKLSAgICAgICAgICAgIHNldEFy
Z3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgpKTsK
LSAgICAgICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDNUeXBlKGdldFJldHVyblR5cGUgPyBn
ZXRSZXR1cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlwZS0+Y2xvbmUoKSk7CisgICAgQVNU
OjpVbm5hbWVkVHlwZSogZmllbGRUeXBlID0gZ2V0UmV0dXJuVHlwZSA/IGdldFJldHVyblR5cGUg
OiBhbmRSZXR1cm5UeXBlOwogCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5j
dGlvbiA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogc2V0UmV0dXJuVHlwZSA9IG51
bGxwdHI7CisgICAgewogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNv
bHZpbmdUeXBlPj4gc2V0QXJndW1lbnRUeXBlczsKLSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5h
cHBlbmQoc2V0QXJndW1lbnQxVHlwZSk7Ci0gICAgICAgIGlmIChzZXRBcmd1bWVudFR5cGUyKQot
ICAgICAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoKnNldEFyZ3VtZW50VHlwZTIpOwot
ICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChzZXRBcmd1bWVudDNUeXBlKTsKLQotICAg
ICAgICBhdXRvKiBzZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVTZXRPdmVybG9hZHMoKSwgc2V0QXJndW1lbnRU
eXBlcywgbnVsbHB0cik7Ci0gICAgICAgIGlmICghc2V0RnVuY3Rpb24pCi0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihzZXRGdW5jdGlvbiwgJnNldEZ1bmN0aW9uLT50eXBlKCkpOwotICAgIH0p
KCk7Ci0KLSAgICBpZiAoc2V0RnVuY3Rpb24pIHsKLSAgICAgICAgaWYgKCFtYXRjaGVzKHNldEZ1
bmN0aW9uLT50eXBlKCksIHdyYXBwZWRCYXNlVHlwZSkpIHsKLSAgICAgICAgICAgIHNldEVycm9y
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBPcHRpb25h
bDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOwotICAgIGlmIChnZXRSZXR1cm5UeXBl
IHx8IGFuZFJldHVyblR5cGUpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoZSByZWZlcmVuY2UgY29t
cGlsZXIgaGFzICJlbHNlIGlmICghbm9kZS5iYXNlLmlzTFZhbHVlICYmICFiYXNlVHlwZS5pc0Fy
cmF5UmVmKSIsCi0gICAgICAgIC8vIGJ1dCBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IGl0IGV4aXN0
cy4gSSBoYXZlbid0IHdyaXR0ZW4gaXQgaGVyZSwgYW5kIEknbGwgaW52ZXN0aWdhdGUKLSAgICAg
ICAgLy8gaWYgd2UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZSByZWZlcmVuY2UgY29tcGlsZXIuCi0g
ICAgICAgIGlmIChpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHdyYXBwZWRCYXNlVHlwZSkpCi0gICAg
ICAgICAgICBhZGRyZXNzU3BhY2UgPSBkb3duY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGU+KHdyYXBw
ZWRCYXNlVHlwZSkuYWRkcmVzc1NwYWNlKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
YXV0byBhZGRyZXNzU3BhY2VJdGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFwLmZpbmQoJnByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAgICAgICAgICAgQVNTRVJUKGFkZHJlc3NT
cGFjZUl0ZXJhdG9yICE9IG1fYWRkcmVzc1NwYWNlTWFwLmVuZCgpKTsKLSAgICAgICAgICAgIGlm
IChhZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUpCi0gICAgICAgICAgICAgICAgYWRkcmVzc1Nw
YWNlID0gKmFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGJh
c2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgUmVzb2x2aW5nVHlwZSBmaWVsZFJlc29s
dmluZ1R5cGUoZmllbGRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5h
cHBlbmQoZmllbGRSZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgc2V0RnVuY3Rpb24gPSByZXNvbHZl
RnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5wb3NzaWJsZVNldE92ZXJsb2Fkcygp
LCBzZXRBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKHNldEZ1bmN0aW9uKQor
ICAgICAgICAgICAgc2V0UmV0dXJuVHlwZSA9ICZzZXRGdW5jdGlvbi0+dHlwZSgpOwogICAgIH0K
IAotICAgIC8vIEZJWE1FOiBHZW5lcmF0ZSB0aGUgY2FsbCBleHByZXNzaW9ucwotCi0gICAgYXNz
aWduVHlwZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIGdldFJldHVyblR5cGUgPyBnZXRSZXR1
cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlwZS0+Y2xvbmUoKSwgYWRkcmVzc1NwYWNlKTsK
LX0KLQotT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBDaGVja2VyOjpyZWN1
cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24pCi17Ci0gICAgYXV0byBiYXNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJ
bmZvKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAgIGlmICghYmFzZUluZm8p
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBhdXRvKiBiYXNlVHlwZSA9IGdl
dFVubmFtZWRUeXBlKGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWJhc2VUeXBl
KSB7CisgICAgaWYgKHNldEZ1bmN0aW9uICYmIGFuZEZ1bmN0aW9uKSB7CiAgICAgICAgIHNldEVy
cm9yKCk7Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfQotICAgIGF1dG8mIGJh
c2VVbmlmeU5vZGUgPSBiYXNlVHlwZS0+dW5pZnlOb2RlKCk7Ci0gICAgaWYgKGlzPEFTVDo6VW5u
YW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpV
bm5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkuY2xvbmUoKTsKLSAgICBBU1NFUlQoaXM8QVNUOjpO
YW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpKTsKLSAgICByZXR1cm4geyBBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSks
IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSkgfTsKLX0KLQotdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCi17Ci0gICAg
YXV0byBiYXNlVHlwZSA9IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoZG90RXhwcmVzc2lvbik7Ci0g
ICAgaWYgKCFiYXNlVHlwZSkKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGZpbmlzaFZp
c2l0aW5nUHJvcGVydHlBY2Nlc3MoZG90RXhwcmVzc2lvbiwgKmJhc2VUeXBlKTsKKyAgICBkb3RF
eHByZXNzaW9uLnNldEdldEZ1bmN0aW9uKGdldEZ1bmN0aW9uKTsKKyAgICBkb3RFeHByZXNzaW9u
LnNldEFuZEZ1bmN0aW9uKGFuZEZ1bmN0aW9uKTsKKyAgICBkb3RFeHByZXNzaW9uLnNldFRocmVh
ZEFuZEZ1bmN0aW9uKHRocmVhZEFuZEZ1bmN0aW9uKTsKKyAgICBkb3RFeHByZXNzaW9uLnNldFNl
dEZ1bmN0aW9uKHNldEZ1bmN0aW9uKTsKKworICAgIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFu
bm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKTsKKyAgICBpZiAoYXV0byBsZWZ0QWRkcmVzc1Nw
YWNlID0gYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAg
ICAgICBpZiAoYW5kRnVuY3Rpb24pCisgICAgICAgICAgICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6
TGVmdFZhbHVlIHsgKmxlZnRBZGRyZXNzU3BhY2UgfTsKKyAgICAgICAgZWxzZSBpZiAoc2V0RnVu
Y3Rpb24pCisgICAgICAgICAgICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6QWJzdHJhY3RMZWZ0VmFs
dWUoKTsKKyAgICB9IGVsc2UgaWYgKCFiYXNlSW5mby0+dHlwZUFubm90YXRpb24uaXNSaWdodFZh
bHVlKCkgJiYgKHNldEZ1bmN0aW9uIHx8IGFuZEZ1bmN0aW9uKSkKKyAgICAgICAgdHlwZUFubm90
YXRpb24gPSBBU1Q6OkFic3RyYWN0TGVmdFZhbHVlKCk7CisgICAgYXNzaWduVHlwZShkb3RFeHBy
ZXNzaW9uLCBmaWVsZFR5cGUtPmNsb25lKCksIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0K
IAotdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNz
aW9uKQordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpCiB7Ci0gICAg
YXV0byBiYXNlVHlwZSA9IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoaW5kZXhFeHByZXNzaW9uKTsK
LSAgICBpZiAoIWJhc2VUeXBlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGluZGV4SW5m
byA9IHJlY3Vyc2VBbmRHZXRJbmZvKGluZGV4RXhwcmVzc2lvbi5pbmRleEV4cHJlc3Npb24oKSk7
Ci0gICAgaWYgKCFpbmRleEluZm8pCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIGluZGV4RXhw
cmVzc2lvblR5cGUgPSBnZXRVbm5hbWVkVHlwZShpbmRleEluZm8tPnJlc29sdmluZ1R5cGUpOwot
ICAgIGlmICghaW5kZXhFeHByZXNzaW9uVHlwZSkgewotICAgICAgICBzZXRFcnJvcigpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vzcyhp
bmRleEV4cHJlc3Npb24sIFdURk1vdmUoKmJhc2VUeXBlKSwgaW5kZXhFeHByZXNzaW9uVHlwZSk7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQpAQCAtMTEwNSwxMCAr
MTA1NiwxMCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZh
cmlhYmxlUmVmZXJlbmNlKQogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgp
KTsKICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgpKTsKICAg
ICAKLSAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOwotICAgIGlm
ICghdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+aXNBbm9ueW1vdXMoKSkKLSAgICAgICAg
YWRkcmVzc1NwYWNlID0gQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKLSAgICBhc3NpZ25UeXBl
KHZhcmlhYmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCkt
PmNsb25lKCksIGFkZHJlc3NTcGFjZSk7CisgICAgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5u
b3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpOworICAgIGlmICghdmFyaWFibGVSZWZlcmVuY2Uu
dmFyaWFibGUoKS0+aXNBbm9ueW1vdXMoKSkgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBzZWVtIHJp
Z2h0LgorICAgICAgICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRy
ZXNzU3BhY2U6OlRocmVhZCB9OworICAgIGFzc2lnblR5cGUodmFyaWFibGVSZWZlcmVuY2UsIHZh
cmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKS0+Y2xvbmUoKSwgV1RGTW92ZSh0eXBl
QW5ub3RhdGlvbikpOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1
cm5TdGF0ZW1lbnQpCkBAIC0xNDA3LDcgKzEzNTgsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFT
VDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCiAgICAgaWYgKGVycm9yKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBhdXRvIGxhc3RJbmZvID0gZ2V0SW5mbyhjb21tYUV4cHJlc3Np
b24ubGlzdCgpLmxhc3QoKSk7Ci0gICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBsYXN0
SW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBs
YXN0SW5mby0+cmVzb2x2aW5nVHlwZSwgbGFzdEluZm8tPnR5cGVBbm5vdGF0aW9uKTsKIH0KIAog
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVz
c2lvbikKQEAgLTE0NTYsNyArMTQwNyw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDYWxs
RXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmdW5jdGlvbi0+cGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghbWF0Y2hBbmRDb21taXQodHlwZXNbaV0uZ2V0KCksICpmdW5jdGlvbi0+cGFyYW1ldGVycygp
W2ldLnR5cGUoKSkpIHsKKyAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1pdCh0eXBlc1tpXS5nZXQo
KSwgKmZ1bmN0aW9uLT5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSkpIHsKICAgICAgICAgICAgIHNl
dEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCmlu
ZGV4IDJmY2M2ZjEzOWRlODRhMzJjNGM3MDdjYTA2MGI5YmUxYjQyZmQzZTAuLjE1OGUyM2I0NzJk
ZTQ5OTMxZWI3ODQyYzk3Yjg0YWEyM2QwOTcwZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcApAQCAtMjI3LDkg
KzIyNyw5IEBAIGJvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
JiBwb3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygp
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gc3VjY2VzcyA9IGFyZ3VtZW50VHlwZXNbaV0u
Z2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygq
cG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLCB1bm5hbWVkVHlwZSk7Cisg
ICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqcG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClb
aV0tPnR5cGUoKSwgdW5uYW1lZFR5cGUpOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgewotICAg
ICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgp
LmNhblJlc29sdmUocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLT51bmlm
eU5vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJl
c29sdmFibGVUeXBlKCkuY2FuUmVzb2x2ZShwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtp
XS0+dHlwZSgpLT51bmlmeU5vZGUoKSk7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYgKCFzdWNj
ZXNzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDA1
MzUwZTBkYzk4NWVjYjM5MGY1ODZmMGEzNGQyYTZlY2ZlZGNhMzIuLjNjYmVkZDljMjU3ODhmZTVk
ZTA1NjEyZmYwZGQyNmQ0Yzg1NGY3ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTE5Nyw5ICsx
OTcsMTAgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90
RXhwcmVzc2lvbikKICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNU
OjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24p
LCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgRW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFscyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CiAgICAgICAg
ICAgICAgICAgICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RFeHByZXNzaW9uLm9yaWdpbigp
OwogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogUGVyaGFwcyBkbyB0aGlzIHdpdGggdmFy
aWFudHMgb3IgYSBSZXdyaXRlciBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICB2b2lkKiBs
b2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOwogICAgICAgICAgICAgICAgICAgICBkb3RFeHByZXNz
aW9uLn5Eb3RFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsID0gQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWw6OndyYXAoV1RG
TW92ZShvcmlnaW4pLCBXVEZNb3ZlKGJhc2VOYW1lKSwgV1RGTW92ZShtZW1iZXJOYW1lKSwgZW51
bWVyYXRpb25EZWZpbml0aW9uLCAqbWVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3ICgm
ZG90RXhwcmVzc2lvbikgQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShlbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3IChsb2NhdGlv
bikgQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShlbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCmluZGV4IDM5ZGQ3YTJhMWJhYjBh
OTdiMDkzOThlNTA3ZTQ4ODcxODdlOWFkNmIuLmE5Nzc4OTc5MDMwNzQ2OGNmNmYwZjMwYjEwMGQ1
ZmY1ZTk3YTZiNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFBhcnNlci5jcHAKQEAgLTEwODIsMTMgKzEwODIsMTMgQEAgYXV0byBQYXJzZXI6
OnBhcnNlUGFyYW1ldGVycygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMs
IEVycm9yPgogICAgIGF1dG8gZmlyc3RQYXJhbWV0ZXIgPSBwYXJzZVBhcmFtZXRlcigpOwogICAg
IGlmICghZmlyc3RQYXJhbWV0ZXIpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihm
aXJzdFBhcmFtZXRlci5lcnJvcigpKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKCpm
aXJzdFBhcmFtZXRlcikpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCpmaXJzdFBhcmFtZXRlcikpKTsKIAogICAg
IHdoaWxlICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7CiAgICAgICAgIGF1
dG8gcGFyYW1ldGVyID0gcGFyc2VQYXJhbWV0ZXIoKTsKICAgICAgICAgaWYgKCFwYXJhbWV0ZXIp
CiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocGFyYW1ldGVyLmVycm9yKCkp
OwotICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKCpwYXJhbWV0ZXIpKTsKKyAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24+KFdURk1vdmUoKnBhcmFtZXRlcikpKTsKICAgICB9CiAKICAgICBhdXRvIHJpZ2h0UGFyZW50
aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0UGFyZW50aGVzaXMp
OwpAQCAtMTU2NywxNCArMTU2NywxNCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xh
cmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdAogICAgIGlm
ICghZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4oZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uLmVycm9yKCkpOwogCi0gICAgVmVjdG9yPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4gcmVzdWx0OwotICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92
ZSgqZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24+PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqZmlyc3RWYXJpYWJsZURl
Y2xhcmF0aW9uKSkpOwogCiAgICAgd2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpD
b21tYSkpIHsKICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uKCgqdHlwZSktPmNsb25lKCkpOwogICAgICAgICBpZiAoIXZhcmlhYmxlRGVj
bGFyYXRpb24pCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFyaWFibGVE
ZWNsYXJhdGlvbi5lcnJvcigpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCp2YXJp
YWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUoKnZhcmlhYmxlRGVjbGFyYXRpb24pKSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQo
V1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShyZXN1bHQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCmluZGV4IDlhMTAzNWE0
YjhjYWQzM2EyMWU2NzBmMjIwMDU5MWNjMTQ4ZDZiMTMuLjg2OWI3YzM4Y2RiNGE5ZGNjMWIyOTQx
OTY0YmU5ZDY4MWFkOGUwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
IldITFNMTmFtZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRl
ICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJXSExTTFJlY3Vyc2lvbkNoZWNrZXIuaCIKICNpbmNsdWRlICJXSExTTFJlY3Vyc2l2
ZVR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpY01hdGNoZXIuaCIKQEAgLTgy
LDcgKzgzLDcgQEAgc3RhdGljIE9wdGlvbmFsPFByb2dyYW0+IHByZXBhcmVTaGFyZWQoU3RyaW5n
JiB3aGxzbFNvdXJjZSkKICAgICBpZiAoIWNoZWNrKHByb2dyYW0pKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0pOwotICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlc29s
dmUgcHJvcGVydGllcyBoZXJlCisgICAgcmVzb2x2ZVByb3BlcnRpZXMocHJvZ3JhbSk7CiAgICAg
ZmluZEhpZ2hab21iaWVzKHByb2dyYW0pOwogICAgIGlmICghY2hlY2tTdGF0ZW1lbnRCZWhhdmlv
cihwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVz
b2x2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkZWFhMDI3NWZkOWY3MGE4YzE0NzliMGNkMTUyYzg3NDgw
NGI0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEsNzYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlSZXNvbHZl
ci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4
cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xDb21tYUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb3BlcnR5
UmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6Citwcml2YXRlOgorICAgIHZvaWQg
dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisKKyAgICBib29sIHNpbXBsaWZ5UmlnaHRW
YWx1ZShBU1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAgICBib29sIHNpbXBsaWZ5QWJzdHJhY3RMZWZ0
VmFsdWUoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYsIEFTVDo6RG90RXhwcmVzc2lvbiYsIFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgcmlnaHQpOworICAgIHZvaWQgc2ltcGxpZnlMZWZ0
VmFsdWUoQVNUOjpFeHByZXNzaW9uJik7CisKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
IG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7Cit9OworCit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZp
c2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICAvLyBVbmxlc3Mg
d2UncmUgaW5zaWRlIGFuIEFzc2lnbm1lbnRFeHByZXNzaW9uIG9yIGEgUmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbiwgd2UncmUgYSByaWdodCB2YWx1ZS4KKyAgICBpZiAoIXNpbXBsaWZ5UmlnaHRW
YWx1ZShkb3RFeHByZXNzaW9uKSkKKyAgICAgICAgc2V0RXJyb3IoKTsKK30KKwordm9pZCBQcm9w
ZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZp
bml0aW9uKQoreworICAgIFZpc2l0b3I6OnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAg
aWYgKCFtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgZnVuY3Rpb25E
ZWZpbml0aW9uLmJsb2NrKCkuc3RhdGVtZW50cygpLmluc2VydCgwLCBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KExleGVyOjpUb2tlbihtX3ZhcmlhYmxl
RGVjbGFyYXRpb25zWzBdLT5vcmlnaW4oKSksIFdURk1vdmUobV92YXJpYWJsZURlY2xhcmF0aW9u
cykpKTsKK30KKworc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBz
ZXR0ZXJDYWxsKEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4mJiBuZXdWYWx1ZSwgY29uc3Qgc3RkOjpmdW5jdGlvbjxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPigpPiYgbGVmdFZhbHVlRmFjdG9yeSwgY29uc3Qgc3RkOjpmdW5jdGlv
bjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPigpPiYgcG9pbnRlclRvTGVmdFZhbHVlRmFjdG9y
eSkKK3sKKyAgICBpZiAoZG90RXhwcmVzc2lvbi5hbmRGdW5jdGlvbigpKSB7CisgICAgICAgIC8v
ICpvcGVyYXRvciYuZm9vKCZ2KSA9IG5ld1ZhbHVlCisgICAgICAgIGlmICghZG90RXhwcmVzc2lv
bi50aHJlYWRBbmRGdW5jdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgCisgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJn
dW1lbnRzOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHBvaW50ZXJUb0xlZnRWYWx1ZUZhY3Rv
cnkoKSk7CisgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3Ry
aW5nKGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShh
cmd1bWVudHMpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lv
bi50aHJlYWRBbmRGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGNhbGxFeHBy
ZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgICAgIGNh
bGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90RXhwcmVzc2lvbi50aHJlYWRBbmRGdW5jdGlv
bigpKTsKKworICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9u
Lm9yaWdpbigpKSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworICAgICAgICBkZXJlZmVyZW5j
ZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oZG90RXhwcmVz
c2lvbi50aHJlYWRBbmRGdW5jdGlvbigpLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7
CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpM
ZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworCisgICAgICAgIGF1dG8g
YXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJl
c3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZShkZXJl
ZmVyZW5jZUV4cHJlc3Npb24pLCBXVEZNb3ZlKG5ld1ZhbHVlKSk7CisgICAgICAgIGFzc2lnbm1l
bnRFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGRvdEV4cHJl
c3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkp
OworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpS
aWdodFZhbHVlKCkpOworCisgICAgICAgIHJldHVybiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
PihXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgfQorCisgICAgLy8gdiA9IG9w
ZXJhdG9yLmZvbz0odiwgbmV3VmFsdWUpCisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uc2V0RnVu
Y3Rpb24oKSk7CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3Vt
ZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGxlZnRWYWx1ZUZhY3RvcnkoKSk7CisgICAgYXJn
dW1lbnRzLmFwcGVuZChXVEZNb3ZlKG5ld1ZhbHVlKSk7CisgICAgYXV0byBjYWxsRXhwcmVzc2lv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJpbmcoZG90RXhwcmVzc2lvbi5zZXRGdW5jdGlvbigpLT5u
YW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBl
KGRvdEV4cHJlc3Npb24uc2V0RnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgIGNhbGxF
eHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgY2Fs
bEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCkpOwor
CisgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBs
ZWZ0VmFsdWVGYWN0b3J5KCksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICBhc3NpZ25t
ZW50RXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCktPnR5cGUo
KS5jbG9uZSgpKTsKKyAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgcmV0dXJuIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+KFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKK30KKworc3RhdGljIE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBnZXR0ZXJDYWxsKEFTVDo6RG90RXhwcmVzc2lv
biYgZG90RXhwcmVzc2lvbiwgY29uc3Qgc3RkOjpmdW5jdGlvbjxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPigpPiYgbGVmdFZhbHVlRmFjdG9yeSwgY29uc3Qgc3RkOjpmdW5jdGlvbjxVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPigpPiYgcG9pbnRlclRvTGVmdFZhbHVlRmFjdG9yeSkKK3sKKyAg
ICBpZiAoZG90RXhwcmVzc2lvbi5hbmRGdW5jdGlvbigpKSB7CisgICAgICAgIC8vICpvcGVyYXRv
ciYuZm9vKCZ2KQorICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24o
KSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBW
ZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChwb2ludGVyVG9MZWZ0VmFsdWVGYWN0b3J5KCkpOworICAgICAgICBhdXRv
IGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhl
cjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhkb3RFeHByZXNzaW9uLnRo
cmVhZEFuZEZ1bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAg
IGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24o
KS0+dHlwZSgpLmNsb25lKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVu
Y3Rpb24oKmRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSk7CisKKyAgICAgICAgYXV0
byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VF
eHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUo
Y2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBl
KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rp
b24oKS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBkZXJlZmVyZW5j
ZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRy
ZXNzU3BhY2U6OlRocmVhZCB9KTsKKworICAgICAgICByZXR1cm4gVW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4oV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pKTsKKyAgICB9CisKKyAgICAv
LyBvcGVyYXRvci5mb28odikKKyAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5nZXRGdW5jdGlvbigp
KTsKKyAgICAKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50
czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGxlZnRWYWx1ZUZhY3RvcnkoKSk7CisgICAgYXV0byBj
YWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6
OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJpbmcoZG90RXhwcmVzc2lvbi5nZXRG
dW5jdGlvbigpLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIGNhbGxFeHByZXNz
aW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24uZ2V0RnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkp
OworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUo
KSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLmdldEZ1
bmN0aW9uKCkpOworCisgICAgcmV0dXJuIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1v
dmUoY2FsbEV4cHJlc3Npb24pKTsKK30KKworc3RydWN0IE1vZGlmeVJlc3VsdCB7CisgICAgQVNU
OjpFeHByZXNzaW9uJiBpbm5lckxlZnRWYWx1ZTsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uPj4gdmFyaWFibGVEZWNsYXJhdGlvbnM7Cit9Oworc3RydWN0IE1vZGlm
aWNhdGlvblJlc3VsdCB7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBl
eHByZXNzaW9uczsKKyAgICBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiByZXN1bHQ7Cit9Owor
c3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVDo6RG90RXhwcmVzc2lvbiYg
ZG90RXhwcmVzc2lvbiwgc3RkOjpmdW5jdGlvbjxPcHRpb25hbDxNb2RpZmljYXRpb25SZXN1bHQ+
KE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmKT4gbW9kaWZpY2F0aW9uKQor
eworICAgIC8vIENvbnNpZGVyIGEuYi5jLmQrKzsKKyAgICAvLyBUaGlzIHdvdWxkIGdldCB0cmFu
c2Zvcm1lZCBpbnRvOgorICAgIC8vCisgICAgLy8gU3RlcCAxOgorICAgIC8vIHAgPSAmYTsKKyAg
ICAvLworICAgIC8vIFN0ZXAgMjoKKyAgICAvLyBxID0gb3BlcmF0b3IuYigqcCk7CisgICAgLy8g
ciA9IG9wZXJhdG9yLmMocSk7CisgICAgLy8KKyAgICAvLyBTdGVwIDM6CisgICAgLy8gb2xkVmFs
dWUgPSBvcGVyYXRvci5kKHIpOworICAgIC8vIG5ld1ZhbHVlID0gLi4uOworICAgIC8vCisgICAg
Ly8gU3RlcCA0OgorICAgIC8vIHIgPSBvcGVyYXRvci5kPShyLCBuZXdWYWx1ZSk7CisgICAgLy8g
cSA9IG9wZXJhdG9yLmM9KHEsIHIpOworICAgIC8vCisgICAgLy8gU3RlcCA0OgorICAgIC8vICpw
ID0gb3BlcmF0b3IuYj0oKnAsIHEpOworCisgICAgLy8gSWYgdGhlIGV4cHJlc3Npb24gaXMgYS5i
LmMuZCA9IGUsIFN0ZXAgMyBkaXNhcHBlYXJzIGFuZCAibmV3VmFsdWUiIGluIHN0ZXAgNCBiZWNv
bWVzICJlIi4KKyAgICAKKworICAgIC8vIEZpbmQgdGhlICIuYiIgIi5jIiBhbmQgIi5kIiBleHBy
ZXNzaW9ucy4KKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkRvdEV4cHJl
c3Npb24+PiBjaGFpbjsKKyAgICBBU1Q6OkRvdEV4cHJlc3Npb24qIGl0ZXJhdG9yID0gJmRvdEV4
cHJlc3Npb247CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgY2hhaW4uYXBwZW5kKCppdGVy
YXRvcik7CisgICAgICAgIEFTU0VSVChpdGVyYXRvci0+YmFzZSgpLnR5cGVBbm5vdGF0aW9uKCkp
OworICAgICAgICBpZiAoaXRlcmF0b3ItPmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRk
cmVzc1NwYWNlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgQVNTRVJUKCFpdGVyYXRv
ci0+YmFzZSgpLnR5cGVBbm5vdGF0aW9uKCktPmlzUmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgQVNT
RVJUKGlzPEFTVDo6RG90RXhwcmVzc2lvbj4oaXRlcmF0b3ItPmJhc2UoKSkpOyAvLyBGSVhNRTog
TWFrZSB0aGlzIHdvcmsgd2l0aCBpbmRleCBleHByZXNzaW9ucworICAgICAgICBpdGVyYXRvciA9
ICZkb3duY2FzdDxBU1Q6OkRvdEV4cHJlc3Npb24+KGl0ZXJhdG9yLT5iYXNlKCkpOworICAgIH0K
KyAgICBhdXRvIGxlZnRFeHByZXNzaW9uID0gaXRlcmF0b3ItPnRha2VCYXNlKCk7CisgICAgQVNU
OjpFeHByZXNzaW9uJiBpbm5lckxlZnRFeHByZXNzaW9uID0gbGVmdEV4cHJlc3Npb247CisKKyAg
ICAvLyBDcmVhdGUgInAiIHZhcmlhYmxlLgorICAgIEFTU0VSVChsZWZ0RXhwcmVzc2lvbi0+cmVz
b2x2ZWRUeXBlKCkpOworICAgIGF1dG8gcG9pbnRlclZhcmlhYmxlID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihsZWZ0RXhwcmVzc2lvbi0+b3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KG1h
a2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGxlZnRFeHByZXNzaW9u
LT5vcmlnaW4oKSksICpsZWZ0RXhwcmVzc2lvbi0+dHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJl
c3NTcGFjZSgpLCBsZWZ0RXhwcmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKworICAgIC8vIENyZWF0ZSAicSIg
YW5kICJyIiB2YXJpYWJsZXMuCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+PiBpbnRlcm1lZGlhdGVWYXJpYWJsZXM7CisgICAgaW50ZXJtZWRpYXRlVmFyaWFi
bGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2hhaW4uc2l6ZSgpIC0gMSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDE7IGkgPCBjaGFpbi5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBkb3RF
eHByZXNzaW9uID0gc3RhdGljX2Nhc3Q8QVNUOjpEb3RFeHByZXNzaW9uJj4oY2hhaW5baV0pOwor
ICAgICAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGlu
dGVybWVkaWF0ZVZhcmlhYmxlcy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIGRvdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCktPmNsb25lKCks
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIH0KKworICAgIFZl
Y3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisKKyAgICAvLyBT
dGVwIDE6CisgICAgeworICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihpbm5lckxl
ZnRFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZShsZWZ0RXhwcmVzc2lvbikpOworICAgICAg
ICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50
ZXJUeXBlPihMZXhlcjo6VG9rZW4oaW5uZXJMZWZ0RXhwcmVzc2lvbi5vcmlnaW4oKSksICppbm5l
ckxlZnRFeHByZXNzaW9uLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKSwgaW5u
ZXJMZWZ0RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSkpOworICAgICAgICBtYWtl
UG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsK
KworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJp
YWJsZSkpOworICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOworICAgICAg
ICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xv
bmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0
aGlzIHJpZ2h0PworCisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihpbm5lckxlZnRF
eHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSksIFdURk1vdmUo
bWFrZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5z
ZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdu
bWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKwor
ICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikp
OworICAgIH0KKworICAgIC8vIFN0ZXAgMjoKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24q
IHByZXZpb3VzID0gbnVsbHB0cjsKKyAgICBhdXRvIHByZXZpb3VzTGVmdFZhbHVlID0gWyZdKCkg
LT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICBpZiAocHJldmlvdXMpIHsK
KyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6
VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAoKnByZXZpb3Vz
KSk7CisgICAgICAgICAgICBBU1NFUlQocHJldmlvdXMtPnR5cGUoKSk7CisgICAgICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwcmV2aW91cy0+dHlwZSgpLT5jbG9uZSgpKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJp
Z2h0PworICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJlbmNlOworICAgICAgICB9Cisg
ICAgCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6
VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZh
cmlhYmxlKSk7CisgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAg
ICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5j
bG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElz
IHRoaXMgcmlnaHQ/CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhw
cmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpKTsKKyAgICAgICAg
QVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFi
bGUtPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VF
eHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuYWRkcmVzc1NwYWNlKCkg
fSk7CisgICAgICAgIHJldHVybiBkZXJlZmVyZW5jZUV4cHJlc3Npb247CisgICAgfTsKKyAgICBh
dXRvIHBvaW50ZXJUb1ByZXZpb3VzTGVmdFZhbHVlID0gWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4geworICAgICAgICBpZiAocHJldmlvdXMpIHsKKyAgICAgICAgICAgIGF1dG8g
dmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+
KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAoKnByZXZpb3VzKSk7CisgICAgICAgICAgICBB
U1NFUlQocHJldmlvdXMtPnR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+
c2V0VHlwZShwcmV2aW91cy0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAg
ICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9p
bnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RG
TW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOworICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzLT50
eXBlKCkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VV
bmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3Jp
Z2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBwcmV2aW91cy0+dHlwZSgpLT5jbG9u
ZSgpKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlUG9pbnRlckV4
cHJlc3Npb247CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlh
YmxlLT50eXBlKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVy
VmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworICAgICAgICByZXR1cm4gdmFyaWFibGVS
ZWZlcmVuY2U7CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gY2hhaW4uc2l6ZSgpIC0gMTsg
aSA+IDA7IC0taSkgeworICAgICAgICBBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24g
PSBjaGFpbltpXTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURl
Y2xhcmF0aW9uID0gaW50ZXJtZWRpYXRlVmFyaWFibGVzW2kgLSAxXTsKKworICAgICAgICBhdXRv
IGNhbGxFeHByZXNzaW9uID0gZ2V0dGVyQ2FsbChkb3RFeHByZXNzaW9uLCBwcmV2aW91c0xlZnRW
YWx1ZSwgcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUpOworCisgICAgICAgIGlmICghY2FsbEV4
cHJlc3Npb24pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1
dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOwor
ICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUo
KSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlz
IHJpZ2h0PworCisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9u
Lm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSksIFdURk1vdmUoKmNhbGxFeHBy
ZXNzaW9uKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHZhcmlhYmxl
RGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBleHBy
ZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICAK
KyAgICAgICAgcHJldmlvdXMgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKKyAgICB9CisgICAgYXV0
byBsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24gPSBnZXR0ZXJDYWxsKGNoYWluWzBdLCBwcmV2aW91
c0xlZnRWYWx1ZSwgcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUpOworCisgICAgLy8gTW9kaWZp
Y2F0aW9uUmVzdWx0KFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYpCisgICAgLy8gU3RlcCAz
OgorICAgIGF1dG8gbW9kaWZpY2F0aW9uUmVzdWx0ID0gbW9kaWZpY2F0aW9uKFdURk1vdmUobGFz
dEdldHRlckNhbGxFeHByZXNzaW9uKSk7CisgICAgaWYgKCFtb2RpZmljYXRpb25SZXN1bHQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
b2RpZmljYXRpb25SZXN1bHQtPmV4cHJlc3Npb25zLnNpemUoKTsgKytpKQorICAgICAgICBleHBy
ZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShtb2RpZmljYXRpb25SZXN1bHQtPmV4cHJlc3Npb25zW2ld
KSk7CisKKyAgICAvLyBTdGVwIDQ6CisgICAgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gcmln
aHRWYWx1ZSA9IFdURk1vdmUobW9kaWZpY2F0aW9uUmVzdWx0LT5yZXN1bHQpOworICAgIEFTU0VS
VChyaWdodFZhbHVlLT5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byBleHByZXNzaW9uVHlwZSA9
IHJpZ2h0VmFsdWUtPnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY2hhaW4uc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIEFTVDo6RG90RXhwcmVz
c2lvbiYgZG90RXhwcmVzc2lvbiA9IGNoYWluW2ldOworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBpbnRlcm1lZGlhdGVWYXJpYWJsZXNbaV07
CisKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IHNldHRlckNhbGwoZG90RXhw
cmVzc2lvbiwgV1RGTW92ZShyaWdodFZhbHVlKSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4geworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNs
YXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUo
dmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRy
ZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisgICAgICAgICAg
ICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CisgICAgICAgIH0sIFsmXSgpIC0+IFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2Ug
PSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZl
cmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgQVNTRVJUKHZh
cmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
LT5zZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAg
ICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7
IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0Pwor
CisgICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9y
aWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOworICAgICAgICAgICAgQVNTRVJU
KHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhw
cmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpU
b2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwg
dmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgICAgIG1ha2VQ
b2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VQb2ludGVyRXhwcmVzc2lvbjsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgaWYgKCFhc3NpZ25tZW50RXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoKmFzc2ln
bm1lbnRFeHByZXNzaW9uKSk7CisKKyAgICAgICAgcmlnaHRWYWx1ZSA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJp
YWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5
cGUoKSk7CisgICAgICAgIHJpZ2h0VmFsdWUtPnNldFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50
eXBlKCktPmNsb25lKCkpOworICAgICAgICByaWdodFZhbHVlLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJ
cyB0aGlzIHJpZ2h0PworICAgIH0KKworICAgIC8vIFN0ZXAgNToKKyAgICB7CisgICAgICAgIGF1
dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBzZXR0ZXJDYWxsKGNoYWluW2NoYWluLnNpemUoKSAt
IDFdLCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPiB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBv
aW50ZXJWYXJpYWJsZSkpOworICAgICAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlw
ZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJp
YWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Np
b24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJs
ZVJlZmVyZW5jZSkpOworICAgICAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgp
KTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpLmVsZW1lbnRUeXBlKCku
Y2xvbmUoKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50
ZXJWYXJpYWJsZS0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKKyAgICAgICAgICAgIHJldHVy
biBkZXJlZmVyZW5jZUV4cHJlc3Npb247CisgICAgICAgIH0sIFsmXSgpIC0+IFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+IHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgICAgICBBU1NFUlQocG9pbnRlclZh
cmlhYmxlLT50eXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUo
cG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisgICAgICAgICAgICBy
ZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CisgICAgICAgIH0pOworCisgICAgICAgIGlmICghYXNz
aWdubWVudEV4cHJlc3Npb24pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKCphc3NpZ25tZW50RXhwcmVzc2lvbikp
OworICAgIH0KKworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
Pj4gdmFyaWFibGVEZWNsYXJhdGlvbnM7CisgICAgdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5k
KFdURk1vdmUocG9pbnRlclZhcmlhYmxlKSk7CisgICAgZm9yIChhdXRvJiBpbnRlcm1lZGlhdGVW
YXJpYWJsZSA6IGludGVybWVkaWF0ZVZhcmlhYmxlcykKKyAgICAgICAgdmFyaWFibGVEZWNsYXJh
dGlvbnMuYXBwZW5kKFdURk1vdmUoaW50ZXJtZWRpYXRlVmFyaWFibGUpKTsKKworICAgIHJldHVy
biB7eyBpbm5lckxlZnRFeHByZXNzaW9uLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSwgV1RGTW92ZSh2
YXJpYWJsZURlY2xhcmF0aW9ucykgfX07Cit9CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlz
aXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7Cisg
ICAgQVNTRVJUKGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKS50eXBlQW5ub3RhdGlvbigpKTsK
KyAgICBpZiAoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpLnR5cGVBbm5vdGF0aW9uKCktPmxl
ZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAgICBzaW1wbGlmeUxlZnRWYWx1ZShhc3NpZ25tZW50
RXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVu
dEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJU
KCFhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkudHlwZUFubm90YXRpb24oKS0+aXNSaWdodFZh
bHVlKCkpOworICAgIGlmICghaXM8QVNUOjpEb3RFeHByZXNzaW9uPihhc3NpZ25tZW50RXhwcmVz
c2lvbi5sZWZ0KCkpKSB7CisgICAgICAgIHNldEVycm9yKCk7IC8vIEZJWE1FOiBNYWtlIHRoaXMg
d29yayB3aXRoIGluZGV4IGV4cHJlc3Npb25zLgorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUKGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkucmVzb2x2ZWRUeXBlKCkpOwor
ICAgIGF1dG8gdHlwZSA9IGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkucmVzb2x2ZWRUeXBl
KCktPmNsb25lKCk7CisKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Np
b24ucmlnaHQoKSk7CisKKyAgICBhdXRvIG1vZGlmeVJlc3VsdCA9IG1vZGlmeShkb3duY2FzdDxB
U1Q6OkRvdEV4cHJlc3Npb24+KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSksIFsmXShPcHRp
b25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4mJikgLT4gT3B0aW9uYWw8TW9kaWZpY2F0
aW9uUmVzdWx0PiB7CisgICAgICAgIHJldHVybiB7eyBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4+KCksIGFzc2lnbm1lbnRFeHByZXNzaW9uLnRha2VSaWdodCgpIH19OworICAgIH0p
OworCisgICAgaWYgKCFtb2RpZnlSZXN1bHQpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBzaW1wbGlmeUxlZnRWYWx1ZShtb2RpZnlSZXN1bHQtPmlu
bmVyTGVmdFZhbHVlKTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHBy
ZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiksICJBc3NpZ25tZW50
IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMg
d2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgIExleGVyOjpUb2tlbiBvcmln
aW4gPSBhc3NpZ25tZW50RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICB2b2lkKiBsb2NhdGlvbiA9
ICZhc3NpZ25tZW50RXhwcmVzc2lvbjsKKyAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi5+QXNzaWdu
bWVudEV4cHJlc3Npb24oKTsKKyAgICBhdXRvKiBjb21tYUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0
aW9uKSBBU1Q6OkNvbW1hRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobW9kaWZ5
UmVzdWx0LT5leHByZXNzaW9ucykpOworICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZShXVEZN
b3ZlKHR5cGUpKTsKKyAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
UmlnaHRWYWx1ZSgpKTsKKworICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IG1v
ZGlmeVJlc3VsdC0+dmFyaWFibGVEZWNsYXJhdGlvbnMpCisgICAgICAgIG1fdmFyaWFibGVEZWNs
YXJhdGlvbnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworfQorCit2b2lk
IFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYg
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKK3sKKyAgICBBU1NFUlQocmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpKTsKKyAgICBpZiAocmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpLT5sZWZ0QWRk
cmVzc1NwYWNlKCkpIHsKKyAgICAgICAgLy8gQ29uc2lkZXIgYSsrOworICAgICAgICAvLyBUaGlz
IHdvdWxkIGdldCB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAgICAvLworICAgICAgICAvLyBwID0g
JmE7CisgICAgICAgIC8vIG9sZFZhbHVlID0gKnA7CisgICAgICAgIC8vIG5ld1ZhbHVlID0gLi4u
OworICAgICAgICAvLyAqcCA9IG5ld1ZhbHVlOworCisgICAgICAgIEFTU0VSVChyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0
byBiYXNlVHlwZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2
ZWRUeXBlKCktPmNsb25lKCk7CisgICAgICAgIGF1dG8gcG9pbnRlclR5cGUgPSBtYWtlVW5pcXVl
UmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKSwgKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVm
dFZhbHVlKCkudHlwZUFubm90YXRpb24oKS0+bGVmdEFkZHJlc3NTcGFjZSgpLCBiYXNlVHlwZS0+
Y2xvbmUoKSk7CisKKyAgICAgICAgYXV0byBwb2ludGVyVmFyaWFibGUgPSBtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+KHBvaW50ZXJUeXBlLT5jbG9uZSgpKSwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKworICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gb3JpZ2luID0gTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZh
bHVlKCkub3JpZ2luKCkpOworICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24g
PSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4o
b3JpZ2luKSwgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTGVmdFZhbHVlKCkpOworICAg
ICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9u
ZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJl
bmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFy
aWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAg
ICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNz
aWdubWVudEV4cHJlc3Npb24+KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVy
ZW5jZSksIFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAgICAgICAgICBhc3Np
Z25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShwb2ludGVyVHlwZS0+Y2xvbmUoKSk7CisgICAgICAg
ICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZh
bHVlKCkpOworCisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25t
ZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAg
ICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGUocG9pbnRlclR5cGUtPmNsb25lKCkp
OworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0
aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbihyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5j
ZTEpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlw
ZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgYXV0byB2YXJpYWJs
ZVJlZmVyZW5jZTIgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhcmlhYmxlUmVmZXJl
bmNlKCk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGUoYmFzZVR5cGUt
PmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJ
WE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVS
ZWZlcmVuY2UyKSwgV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pKTsKKyAgICAgICAgICAg
IGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAg
ICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0
VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2ln
bm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJp
YWJsZVJlZmVyZW5jZSgpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUo
YmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9
KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gbmV3VmFsdWVF
eHByZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTmV3VmFsdWVFeHByZXNz
aW9uKCk7CisgICAgICAgICAgICBBU1NFUlQobmV3VmFsdWVFeHByZXNzaW9uKTsgLy8gRklYTUU6
IFJlbGF4IHRoaXMgY29uc3RyYWludC4KKyAgICAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJl
c3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpU
b2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJs
ZVJlZmVyZW5jZSksIFdURk1vdmUoKm5ld1ZhbHVlRXhwcmVzc2lvbikpOworICAgICAgICAgICAg
YXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAg
ICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRW
YWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdu
bWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gdmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAg
ICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9uZSgp
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogSXMg
dGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVu
Y2UxKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5
cGUtPmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVSZWZlcmVuY2UyID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJpYWJsZVJlZmVy
ZW5jZSgpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlKGJhc2VUeXBl
LT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBG
SVhNRTogSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVz
c2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRv
a2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGRlcmVmZXJl
bmNlRXhwcmVzc2lvbiksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSk7CisgICAgICAgICAg
ICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAg
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworCisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3Np
Z25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXN1bHRFeHBy
ZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlUmVzdWx0RXhwcmVzc2lvbigp
OworICAgICAgICBBU1NFUlQocmVzdWx0RXhwcmVzc2lvbik7IC8vIEZJWE1FOiBCZSByZXNpbGll
bnQgdG8gdGhpcyBiZWluZyBudWxsLgorICAgICAgICBBU1NFUlQoKCpyZXN1bHRFeHByZXNzaW9u
KS0+cmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHR5cGUgPSAoKnJlc3VsdEV4cHJlc3Np
b24pLT5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5k
KFdURk1vdmUoKnJlc3VsdEV4cHJlc3Npb24pKTsKKworICAgICAgICBVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPiBvbGRWYXJpYWJsZURlY2xhcmF0aW9uID0gcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi50YWtlT2xkVmFsdWUoKTsKKyAgICAgICAgVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4gbmV3VmFyaWFibGVEZWNsYXJhdGlvbiA9IHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24udGFrZU5ld1ZhbHVlKCk7CisKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoQVNUOjpDb21tYUV4cHJlc3Npb24pIDw9IHNpemVvZihBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24pLCAiUmVhZE1vZGlmeVdyaXRlIGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0
byBiZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNl
cyIpOworICAgICAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi5vcmlnaW4oKTsKKyAgICAgICAgdm9pZCogbG9jYXRpb24gPSAmcmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbjsKKyAgICAgICAgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5+UmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbigpOworICAgICAgICBhdXRvKiBjb21tYUV4cHJlc3Npb24gPSBuZXcg
KGxvY2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUo
ZXhwcmVzc2lvbnMpKTsKKyAgICAgICAgY29tbWFFeHByZXNzaW9uLT5zZXRUeXBlKFdURk1vdmUo
dHlwZSkpOworICAgICAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChX
VEZNb3ZlKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25z
LmFwcGVuZChXVEZNb3ZlKG9sZFZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgbV92YXJp
YWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShuZXdWYXJpYWJsZURlY2xhcmF0aW9uKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoIXJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24ubGVmdFZhbHVlKCkudHlwZUFubm90YXRpb24oKS0+aXNSaWdodFZhbHVlKCkpOwor
ICAgIGlmICghaXM8QVNUOjpEb3RFeHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmxlZnRWYWx1ZSgpKSkgeworICAgICAgICBzZXRFcnJvcigpOyAvLyBGSVhNRTogTWFrZSB0aGlz
IHdvcmsgd2l0aCBpbmRleCBleHByZXNzaW9ucy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBhdXRvIG1vZGlmeVJlc3VsdCA9IG1vZGlmeShkb3duY2FzdDxBU1Q6OkRvdEV4cHJlc3Npb24+
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpLCBbJl0oT3B0aW9uYWw8VW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYgbGFzdEdldHRlckNhbGxFeHByZXNzaW9uKSAtPiBP
cHRpb25hbDxNb2RpZmljYXRpb25SZXN1bHQ+IHsKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKyAgICAgICAgaWYgKCFsYXN0R2V0dGVyQ2Fs
bEV4cHJlc3Npb24pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAg
IHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSByZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLm9sZFZhcmlhYmxlUmVmZXJlbmNlKCk7CisgICAgICAgICAgICBBU1NFUlQocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKSk7CisgICAg
ICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZh
cmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworCisgICAg
ICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFz
c2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5sZWZ0VmFsdWUoKS5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZN
b3ZlKCpsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRF
eHByZXNzaW9uLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCku
cmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAg
ZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCk7CisgICAgICAg
ICAgICBBU1NFUlQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsK
KyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBJcyB0aGlz
IHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIG5ld1ZhbHVlRXhwcmVzc2lvbiA9IHJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24udGFrZU5ld1ZhbHVlRXhwcmVzc2lvbigpOworICAgICAgICAgICAg
QVNTRVJUKG5ld1ZhbHVlRXhwcmVzc2lvbik7IC8vIEZJWE1FOiBSZWxheCB0aGlzIGNvbnN0cmFp
bnQKKyAgICAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5j
ZSksIFdURk1vdmUoKm5ld1ZhbHVlRXhwcmVzc2lvbikpOworICAgICAgICAgICAgYXNzaWdubWVu
dEV4cHJlc3Npb24tPnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVz
c2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAg
ICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHt7IFdURk1vdmUoZXhwcmVzc2lvbnMpLCByZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCkgfX07CisgICAgfSk7CisK
KyAgICBpZiAoIW1vZGlmeVJlc3VsdCkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIHNpbXBsaWZ5TGVmdFZhbHVlKG1vZGlmeVJlc3VsdC0+aW5uZXJM
ZWZ0VmFsdWUpOworCisgICAgYXV0byByZXN1bHRFeHByZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi50YWtlUmVzdWx0RXhwcmVzc2lvbigpOworICAgIEFTU0VSVChyZXN1bHRFeHBy
ZXNzaW9uKTsgLy8gRklYTUU6IEJlIHJlc2lsaWVudCB0byB0aGlzIGJlaW5nIG51bGwuCisgICAg
QVNTRVJUKCgqcmVzdWx0RXhwcmVzc2lvbiktPnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHR5
cGUgPSAoKnJlc3VsdEV4cHJlc3Npb24pLT5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKTsKKyAgICBt
b2RpZnlSZXN1bHQtPmV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKCpyZXN1bHRFeHByZXNzaW9u
KSk7CisKKyAgICBVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBvbGRWYXJpYWJs
ZURlY2xhcmF0aW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlT2xkVmFsdWUoKTsK
KyAgICBVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBuZXdWYXJpYWJsZURlY2xh
cmF0aW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTmV3VmFsdWUoKTsKKworICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNU
OjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKSwgIlJlYWRNb2RpZnlXcml0ZSBleHByZXNzaW9u
cyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGNvbW1hIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBk
YXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gcmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICB2b2lkKiBsb2NhdGlvbiA9ICZyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uOworICAgIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uflJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKTsKKyAgICBhdXRvKiBjb21tYUV4cHJlc3Npb24gPSBu
ZXcgKGxvY2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1v
dmUobW9kaWZ5UmVzdWx0LT5leHByZXNzaW9ucykpOworICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0
VHlwZShXVEZNb3ZlKHR5cGUpKTsKKyAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJh
dGlvbiA6IG1vZGlmeVJlc3VsdC0+dmFyaWFibGVEZWNsYXJhdGlvbnMpCisgICAgICAgIG1fdmFy
aWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwor
ICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUob2xkVmFyaWFibGVEZWNs
YXJhdGlvbikpOworICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobmV3
VmFyaWFibGVEZWNsYXJhdGlvbikpOworfQorCitib29sIFByb3BlcnR5UmVzb2x2ZXI6OnNpbXBs
aWZ5UmlnaHRWYWx1ZShBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7CisgICAg
TGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CisKKyAgICBpZiAo
YXV0byogYW5kRnVuY3Rpb24gPSBkb3RFeHByZXNzaW9uLmFuZEZ1bmN0aW9uKCkpIHsKKyAgICAg
ICAgYXV0byYgYmFzZSA9IGRvdEV4cHJlc3Npb24uYmFzZSgpOworICAgICAgICBBU1NFUlQoYmFz
ZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VSVChiYXNlLnR5cGVBbm5vdGF0aW9uKCkp
OworICAgICAgICBpZiAoYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gYmFzZS50eXBlQW5ub3RhdGlv
bigpLT5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJF
eHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4
ZXI6OlRva2VuKG9yaWdpbiksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7CisgICAgICAgICAg
ICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50
ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGJhc2UucmVz
b2x2ZWRUeXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lv
bi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBW
ZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAg
ICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJl
c3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBTdHJpbmcoYW5kRnVuY3Rpb24tPm5hbWUoKSks
IFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlw
ZShhbmRGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgY2FsbEV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGNh
bGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kRnVuY3Rpb24pOworCisgICAgICAgICAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbikgPD0gc2l6ZW9m
KEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRv
IGJlY29tZSBkZXJlZmVyZW5jZSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZl
cmVuY2VzIik7CisgICAgICAgICAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOwor
ICAgICAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgICAgICAgICAg
YXV0byogZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpEZXJlZmVy
ZW5jZUV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7
CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNU
OjpQb2ludGVyVHlwZT4oYW5kRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgp
KTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+
dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gV2UgaGF2ZSBhbiBhbmRlciwgYnV0IG5vIGxlZnQgdmFsdWUg
dG8gY2FsbCBpdCBvbi4gTGV0J3Mgc2F2ZSB0aGUgdmFsdWUgaW50byBhIHRlbXBvcmFyeSB2YXJp
YWJsZSB0byBjcmVhdGUgYSBsZWZ0IHZhbHVlLgorICAgICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2
ZWx5IGlubGluaW5nIHRoZSBmdW5jdGlvbnMgdGhlIHNwZWMgc2F5cyBhcmUgZ2VuZXJhdGVkLgor
ICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFkQW5kRnVuY3Rpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKG9yaWdp
biksIEFTVDo6UXVhbGlmaWVycygpLCBiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworCisgICAgICAgIGF1dG8gdmFyaWFi
bGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAg
dmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkp
OworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVm
dFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKworICAgICAgICBhdXRvIGFz
c2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNz
aW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTEpLCBk
b3RFeHByZXNzaW9uLnRha2VCYXNlKCkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+
c2V0VHlwZShiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVu
dEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAg
ICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0
aW9uKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlwZShiYXNlLnJlc29sdmVk
VHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisK
KyAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgV1RGTW92ZSh2YXJp
YWJsZVJlZmVyZW5jZTIpKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBl
KG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIEFT
VDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGJhc2UucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpKTsK
KyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
PiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9pbnRl
ckV4cHJlc3Npb24pKTsKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFN0cmluZyhhbmRG
dW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgY2FsbEV4cHJl
c3Npb24tPnNldFR5cGUoYW5kRnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY2Fs
bEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAg
ICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCphbmRGdW5jdGlvbik7CisKKyAgICAgICAg
YXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVu
Y2VFeHByZXNzaW9uPihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsK
KyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9p
bnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7Cisg
ICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0
VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworCisgICAgICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpEb3RFeHBy
ZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGNvbW1h
IGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAg
dm9pZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKKyAgICAgICAgZG90RXhwcmVzc2lvbi5+
RG90RXhwcmVzc2lvbigpOworICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4+IGV4cHJlc3Npb25zOworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3Np
Z25tZW50RXhwcmVzc2lvbikpOworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShk
ZXJlZmVyZW5jZUV4cHJlc3Npb24pKTsKKyAgICAgICAgYXV0byogY29tbWFFeHByZXNzaW9uID0g
bmV3IChsb2NhdGlvbikgQVNUOjpDb21tYUV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pLCBXVEZN
b3ZlKGV4cHJlc3Npb25zKSk7CisgICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZShkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgp
LmNsb25lKCkpOworICAgICAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKworICAgICAgICBt
X3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoQVNUOjpDYWxsRXhwcmVzc2lvbikgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJE
b3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBjYWxsIGV4cHJlc3Npb25z
IHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICBBU1NFUlQoZG90RXhwcmVz
c2lvbi5nZXRGdW5jdGlvbigpKTsKKyAgICBhdXRvJiBnZXRGdW5jdGlvbiA9ICpkb3RFeHByZXNz
aW9uLmdldEZ1bmN0aW9uKCk7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
PiBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChkb3RFeHByZXNzaW9uLnRha2VCYXNl
KCkpOworICAgIHZvaWQqIGxvY2F0aW9uID0gJmRvdEV4cHJlc3Npb247CisgICAgZG90RXhwcmVz
c2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgIGF1dG8qIGNhbGxFeHByZXNzaW9uID0gbmV3IChs
b2NhdGlvbikgQVNUOjpDYWxsRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFN0cmluZyhnZXRG
dW5jdGlvbi5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIGNhbGxFeHByZXNzaW9u
LT5zZXRGdW5jdGlvbihnZXRGdW5jdGlvbik7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUo
Z2V0RnVuY3Rpb24udHlwZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Ns
YXNzIExlZnRWYWx1ZVNpbXBsaWZpZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAg
dm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cit9Owor
Cit2b2lkIExlZnRWYWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90
RXhwcmVzc2lvbikKK3sKKyAgICBWaXNpdG9yOjp2aXNpdChkb3RFeHByZXNzaW9uKTsKKyAgICBB
U1NFUlQoZG90RXhwcmVzc2lvbi5iYXNlKCkudHlwZUFubm90YXRpb24oKSk7CisgICAgQVNTRVJU
KGRvdEV4cHJlc3Npb24uYmFzZSgpLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2Uo
KSk7CisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rpb24oKSk7CisKKyAgICBMZXhl
cjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICBhdXRvKiBhbmRG
dW5jdGlvbiA9IGRvdEV4cHJlc3Npb24uYW5kRnVuY3Rpb24oKTsKKyAgICBhdXRvJiBiYXNlID0g
ZG90RXhwcmVzc2lvbi5iYXNlKCk7CisgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gKmRvdEV4
cHJlc3Npb24uYmFzZSgpLnR5cGVBbm5vdGF0aW9uKCktPmxlZnRBZGRyZXNzU3BhY2UoKTsKKyAg
ICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9p
bnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBkb3RFeHByZXNzaW9uLnRha2VC
YXNlKCkpOworICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVm
PEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4pLCBsZWZ0QWRkcmVzc1NwYWNl
LCBiYXNlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKSk7CisgICAgbWFrZVBvaW50ZXJFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICBWZWN0b3I8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBw
ZW5kKFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAgYXV0byBjYWxsRXhwcmVz
c2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9y
aWdpbiksIFN0cmluZyhhbmRGdW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsK
KyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkp
OworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUo
KSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCphbmRGdW5jdGlvbik7CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbikgPD0gc2l6
ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxl
IHRvIGJlY29tZSBkZXJlZmVyZW5jZSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2ty
ZWZlcmVuY2VzIik7CisgICAgdm9pZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKKyAgICBk
b3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CisgICAgYXV0byogZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24oV1RGTW92
ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZEZ1bmN0aW9uLT50
eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9u
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRl
clR5cGU+KGFuZEZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOworfQorCit2b2lk
IExlZnRWYWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBk
ZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgLy8gRGVyZWZlcmVuY2UgZXhwcmVzc2lvbnMg
YXJlIHRoZSBvbmx5IGV4cHJlc3Npb25zIHdoZXJlIHRoZSBjaGlsZHJlbiBtaWdodCBiZSBtb3Jl
LXJpZ2h0IHRoYW4gd2UgYXJlLgorICAgIC8vIEZvciBleGFtcGxlLCBhIGRlcmVmZXJlbmNlIGV4
cHJlc3Npb24gbWF5IGJlIGEgbGVmdCB2YWx1ZSBidXQgaXRzIGNoaWxkIG1heSBiZSBhIGNhbGwg
ZXhwcmVzc2lvbiB3aGljaCBpcyBhIHJpZ2h0IHZhbHVlLgorICAgIC8vIExlZnRWYWx1ZVNpbXBs
aWZpZXIgZG9lc24ndCBoYW5kbGUgcmlnaHQgdmFsdWVzLCBzbyB3ZSBpbnN0ZWFkIG5lZWQgdG8g
dXNlIFByb3BlcnR5UmVzb2x2ZXIuCisgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgZnVuY3Rpb24g
Y2FsbCBhcmd1bWVudHM/CisgICAgUHJvcGVydHlSZXNvbHZlcigpLlZpc2l0b3I6OnZpc2l0KGRl
cmVmZXJlbmNlRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6c2ltcGxp
ZnlMZWZ0VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIExlZnRWYWx1
ZVNpbXBsaWZpZXIoKS5WaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKK30KKwordm9pZCByZXNv
bHZlUHJvcGVydGllcyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFByb3BlcnR5UmVzb2x2ZXIo
KS5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlS
ZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9w
ZXJ0eVJlc29sdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIyMDVmOTAyYmNjOTRlY2E5ZWYzM2I1OGRhMWM3
MDFhYjcyYjM0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBy
ZXNvbHZlUHJvcGVydGllcyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJl
c29sdmVPdmVybG9hZEltcGwuY3BwCmluZGV4IGU3ODM4Y2UzZjcyNWFlMDlhYmExZWRiNTBhNjU5
MmMzNDYzMTNlZTUuLmRjOTM0ZGJmNzI2YTgxNGEwODA0YjRjY2I1NzUyZGJlY2I4MWYzOGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApAQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMg
dW5zaWduZWQgY29udmVyc2lvbkNvc3QoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBjYW5kaWRh
dGUsIGNvbnN0IFZlY3RvcgogICAgICAgICBjb252ZXJzaW9uQ29zdCArPSBhcmd1bWVudFR5cGVz
W2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYpIC0+IHVuc2lnbmVkIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9
LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UpIC0+IHVuc2lnbmVkIHsKLSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jb252ZXJzaW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFt
ZXRlcnMoKVtpXS50eXBlKCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNvbnZlcnNpb25Db3N0KCpjYW5kaWRhdGUucGFyYW1l
dGVycygpW2ldLT50eXBlKCkpOwogICAgICAgICB9KSk7CiAgICAgfQogICAgIC8vIFRoZSByZXR1
cm4gdHlwZSBjYW4gbmV2ZXIgYmUgYSBsaXRlcmFsIHR5cGUsIHNvIGl0cyBjb252ZXJzaW9uIGNv
c3QgaXMgYWx3YXlzIDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCmluZGV4IGNhNWNiYjU5MjljZjllMTgxOGMy
Y2Q3NDFlNzlkOTM2Y2FhYzY4ZWUuLjUwZTUzMmI2YTZlODJmMWUwMmEwNDY3OTFiOGU2Njk2ZDVi
MTFlMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUmVzb2x2aW5nVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCkBAIC03Miw2ICs3Miw3IEBAIHByaXZhdGU6CiAKIC8v
IFRoaXMgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGEgVmFyaWFudC4KIC8vIEl0IGV4aXN0cyBz
byB3ZSBjYW4gbWFrZSBzdXJlIHRoYXQgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZG9lcyB0aGUg
cmlnaHQgdGhpbmcuCisvLyBGSVhNRTogVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3Nh
cnkuCiBjbGFzcyBSZXNvbHZpbmdUeXBlIHsKIHB1YmxpYzoKICAgICBSZXNvbHZpbmdUeXBlKCkK
QEAgLTEwMiwxMCArMTAzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
IH0KIAotICAgIEFTVDo6VW5uYW1lZFR5cGUmIGdldFVubmFtZWRUeXBlKCkKKyAgICBBU1Q6OlVu
bmFtZWRUeXBlKiBnZXRVbm5hbWVkVHlwZSgpCiAgICAgewotICAgICAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpKTsK
LSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9p
bm5lcik7CisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPj4obV9pbm5lcikpCisgICAgICAgICAgICByZXR1cm4gJldURjo6Z2V0PFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcik7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yPiBhdXRvIHZpc2l0
KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6dmlzaXQodmlzaXRvciwg
c3RkOjpkZWNsdmFsPFZhcmlhbnQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBSZWZQdHI8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+PiY+KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0IGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0Cmlu
ZGV4IDc5YTJjNjBlMDYwNmIxMzI2NWJiMjMwMzY3YWNmOTcyNTBiZjlhN2YuLjBmYjVkMzkzMmQ0
NWZiMGFmZGUwOTU5NjE1ZWJkODFmZWFhOTFjNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQK
QEAgLTM5MCw0ICszOTAsMTMgQEAgbmF0aXZlIHZvaWQgQWxsTWVtb3J5QmFycmllcldpdGhHcm91
cFN5bmMoKTsKIG5hdGl2ZSB2b2lkIERldmljZU1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jKCk7
CiBuYXRpdmUgdm9pZCBHcm91cE1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jKCk7CiAKK29wZXJh
dG9yIGZsb2F0NChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSB7CisgICAgZmxv
YXQ0IHJlc3VsdDsKKyAgICByZXN1bHQueCA9IHg7CisgICAgcmVzdWx0LnkgPSB5OworICAgIHJl
c3VsdC56ID0gejsKKyAgICByZXN1bHQudyA9IHc7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI4OTAg
SW5zZXJ0IHRoZSByZXN0IG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uY2UgdGhlIHBhcnNlciBp
cyBmYXN0IGVub3VnaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVu
Z3RoLmNwcAppbmRleCBhZTNjYTY0MjM5ZTNiNTlkMzZhYWFhZWVjN2JhNDcxYmNiNjdjZWI5Li42
NWVkN2FjZjQzZjIwMDQwMjUwZjkwNjZhMTRiNjQwYjU3YmJmMGNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcApAQCAtNjUsNyArNjUsNyBAQCBi
b29sIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mIHByb2dyYW0pCiAgICAg
Ym9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKIAogICAgIGZvciAoYXV0byYgYXJyYXlUeXBlIDogYXJy
YXlUeXBlcykgewotICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNs
YXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIHsgYXJyYXlUeXBlLmdldCgpLmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihhcnJh
eVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgYXJyYXlUeXBlLmdldCgp
LmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwg
QVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRy
aW5zaWNzKCkudWludFR5cGUoKSksICJvcGVyYXRvci5sZW5ndGgiX3N0ciwgV1RGTW92ZShwYXJh
bWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
Q29uc3RydWN0b3JzLmNwcAppbmRleCBjZDdjMzcwMmFkYmVhMjlhYzE4YzVjYmU2ZGI2MDg3Yjll
MDJlZDhhLi43NGNjOGYxODRlODM1YjNjZTFjNDliNWNlNmVjOGQ2YTRhODY4YzFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCBib29s
IHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICBib29sIGlzT3Bl
cmF0b3IgPSB0cnVlOwogCiAgICAgZm9yIChhdXRvJiB1bm5hbWVkVHlwZSA6IHVubmFtZWRUeXBl
cykgewotICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgeyB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4odW5uYW1l
ZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUuZ2V0
KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpB
dHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCks
ICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwg
aXNPcGVyYXRvcikpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgc3ludGhlc2l6ZUNvbnN0cnVj
dG9ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KHN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4obmFtZWRUeXBlKSkgJiYgZG93
bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHN0YXRpY19jYXN0PEFTVDo6TmFtZWRU
eXBlJj4obmFtZWRUeXBlKSkuaXNBdG9taWMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVy
OjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmln
aW4oKSksIG5hbWVkVHlwZS5nZXQoKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpu
dWxsb3B0KTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCku
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9y
aWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCk7CiAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3Io
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3Jp
Z2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1l
ZFR5cGUuZ2V0KCkpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBX
VEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVu
dW1lcmF0aW9uRnVuY3Rpb25zLmNwcAppbmRleCAxNzk3ZmU1Mzk0YzgxZWFjZDM5NTRhYmM2YThh
NjVhNmM4ZmM5NmUyLi5kNzRhZjMzYTFmMDVhNjkyMjE5YzhjY2U0YWZkY2M5Mjk1MTA5NzFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCkBA
IC00MSw4ICs0MSw4IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dy
YW0mIHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8m
IGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygp
KSB7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJp
YWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhl
cjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVm
aW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKLSAgICAg
ICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhl
cjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVy
cygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25E
ZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCks
IFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVE
ZWNsYXJhdGlvbjEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4
ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0
aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwor
ICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9u
LT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3Zl
KHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CkBAIC01Miw3ICs1Miw3IEBAIGJvb2wgc3lu
dGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0K
IAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFi
bGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
ICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9y
aWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBh
cmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxl
RGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhl
cjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9u
ZSgpLCAib3BlcmF0b3IudmFsdWUiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxs
b3B0LCBpc09wZXJhdG9yKSk7CkBAIC02MSw3ICs2MSw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1l
cmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0KIAogICAgICAgICB7
Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFy
aWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
PihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51
bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0
b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0
b3IpKTsKQEAgLTcwLDEwICs3MCwxMCBAQCBib29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0
aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwg
ZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBw
YXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJs
ZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0
ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmlu
aXRpb24pIH0sICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6
bnVsbG9wdCwgaXNPcGVyYXRvcikpOworICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpB
dHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgIm9wZXJhdG9yIGNhc3Qi
X3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiAg
ICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbikpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKaW5kZXggODI2NzIy
MTM3ZTRjM2UzODIyNzc4MGRhZTEyYjI5YWFiYTFiNzJlZS4uOTQ1ZDBjZWVmYWEzOWNlNTA3NDYw
N2QyYzQ0OTNjZjM5N2U5ODNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1
cmVBY2Nlc3NvcnMuY3BwCkBAIC00Niw3ICs0Niw3IEBAIGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVy
ZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmll
bGQKLSAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNs
YXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0
dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pIH0sIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYWJs
ZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4
ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9u
KSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAg
ICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBz
dHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBtYWtlU3RyaW5nKCJvcGVyYXRvci4iLCBz
dHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgaXNPcGVyYXRvcikpOwpAQCAtNTYsOCArNTYsOCBAQCBib29sIHN5bnRoZXNpemVTdHJ1Y3R1
cmVBY2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKIAogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQotICAgICAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4o
c3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSks
IHN0cnVjdHVyZURlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCk7Ci0gICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxl
RGVjbGFyYXRpb24yKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNU
OjpRdWFsaWZpZXJzKCksIHsgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSB9LCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIGF1dG8g
dmFyaWFibGVEZWNsYXJhdGlvbjEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURl
ZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAg
ICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24yID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdp
bigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCks
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKICAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7
CkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9n
cmFtJiBwcm9ncmFtKQogICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQK
ICAgICAgICAgICAgIGF1dG8gY3JlYXRlQW5kZXIgPSBbJl0oQVNUOjpBZGRyZXNzU3BhY2UgYWRk
cmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gewogICAgICAgICAg
ICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBl
PihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwg
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9y
aWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikpOwotICAgICAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1
cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RGTW92ZShhcmd1bWVu
dFR5cGUpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAg
ICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3Zl
KGFyZ3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwog
ICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRp
b24pKTsKICAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFT
VDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwg
YWRkcmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCmlu
ZGV4IGVkMmU4YzAwNTJkNmRmZTliZDA3YmFmNzY0OWQ4Y2U0OGM5YjA5YmIuLjJmMjAxNTJjYWI3
YWQxYzc4MjZiYTNkMjE1MTdhNGVjMDllYWVlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtNTMyLDcgKzUzMiw3
IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUcmFwJikKIHZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYWJsZURlY2xhcmF0aW9uIDogdmFyaWFi
bGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQudmFyaWFibGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb24pOworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbi5nZXQoKSk7CiB9CiAKIHZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKQEAgLTU4OSwxNyArNTg5LDE3IEBA
IHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5v
dEV4cHJlc3Npb24pCiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewotICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFs
dWUoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFr
ZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFr
ZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
bFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmxlZnRWYWx1ZSgpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsKICAgICBpZiAocmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMzY3NWUwMDRi
ODY3M2U5ZDY4YjFjNmJkOGQ0NjhhMGQ0ZDQxMjU3ZS4uY2Y3NDZjZWEyZThjYmQxYzEzZTIwYzk2
MTU1MTA2OWU3MzIwM2MxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTM0OCw2ICszNDgsNyBAQCBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcAogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcAogTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQcmVwYXJlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJl
c29sdmVyLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV2Vi
R1BVQWRhcHRlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBm
NjljZmYyMzIxMjhjYmJlOGVhNWNjMWRlZTg0MDcwY2I2Zjg3MDFlLi4yZWQ3N2IyYTYyMjkyMWJj
YTUzMjJhOWJhZWM0ZDlmYzYwZDQ3MWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzkwLDYgKzYzOTAsOCBAQAogCQkxQ0Ew
QzJFQzIxRUVENkY2MDBBMTE4NjAgLyogV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQ0ExOUUwMzBEQzI1NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRXZlbnRMb29wTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUxNTBEQzI1NUNBMDA2NUE5
OTQgLyogRXZlbnRMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50
TG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0FBODJGNjIyNDJBRTA1MDBF
ODRCQkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMUHJvcGVydHlSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
QUE4MkY3MjI0MkFFMDUwMEU4NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDQUYzNDdFMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDdGMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3Jp
cHRPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJT
Y3JpcHRPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDgwMEE2
QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NDAyLDYgKzI1NDA0LDggQEAKIAkJCQlDMjRBNTdCQTIxRkVB
RkVBMDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmNwcCAqLywKIAkJCQlDMjRBNTdCQjIxRkVBRkVB
MDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmggKi8sCiAJCQkJQzIxQkY3M0EyMUNEOEQ3MDAwMjI3
OTc5IC8qIFdITFNMUHJvZ3JhbS5oICovLAorCQkJCTFDQUE4MkY2MjI0MkFFMDUwMEU4NEJCQiAv
KiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwICovLAorCQkJCTFDQUE4MkY3MjI0MkFFMDUwMEU4
NEJCQiAvKiBXSExTTFByb3BlcnR5UmVzb2x2ZXIuaCAqLywKIAkJCQkxQ0EwQzJFMDIxRUVCNUY1
MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2VyLmNwcCAqLywKIAkJCQkxQ0EwQzJERTIx
RUVCNUY0MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2VyLmggKi8sCiAJCQkJQzIzNEE5
QUQyMUU5MkMxOTAwM0M5ODREIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQ
VVJlbmRlclBpcGVsaW5lTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQppbmRleCA4ZmI0YTI2Y2E0OGI1
NGNhYWIxODdkYjI5ZTM0NjlhMzg1MDQ0MDVmLi5lMDI5MmI4ZjU0NGQ0ZWFjZGJhMTc5ZmMwYjIz
NGU0ZWMzYWE3M2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQpA
QCAtMjYzLDYgKzI2Myw4IEBAIHN0YXRpYyBib29sIHRyeVNldFdITFNMRnVuY3Rpb25zRm9yUGlw
ZWxpbmVEZXNjcmlwdG9yKGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uCiAgICAgaWYgKCFyZXN1
bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFdURkxvZ0Fsd2F5cygiTWV0YWwgU291
cmNlOiAlcyIsIHJlc3VsdC0+bWV0YWxTb3VyY2UudXRmOCgpLmRhdGEoKSk7CisKICAgICBOU0Vy
cm9yICplcnJvciA9IG5pbDsKICAgICBhdXRvIGxpYnJhcnkgPSBhZG9wdE5TKFtkZXZpY2UucGxh
dGZvcm1EZXZpY2UoKSBuZXdMaWJyYXJ5V2l0aFNvdXJjZTpyZXN1bHQtPm1ldGFsU291cmNlIG9w
dGlvbnM6bmlsIGVycm9yOiZlcnJvcl0pOwogICAgIEFTU0VSVChsaWJyYXJ5KTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mNDE3MDUwZjlhNzQzZjA1ZTkwMDZmYzkxYWM2NGQ1MDJkYWRkNjMzCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdC1leHByZXNzaW9u
cy1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAw
IiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQo
KSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIp
OworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250
ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwg
NDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxs
UmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxv
YWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOGFjOWU2NGU0
NzE4OWU3NjA2YTE1MDZhMmE2OGFjMDFjYjI3OGVjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWRvdC1leHByZXNzaW9ucy5odG1sCkBAIC0wLDAgKzEsMTI0IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52
YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlw
dD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0
NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDAp
OworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBh
dHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0
IHJlc3VsdDsKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hh
ZGUgPSBzaGFkZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJh
Z21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewor
ICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7Cithc3lu
YyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9y
LmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIu
cmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAg
Y29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2
ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRp
dmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0
YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxw
aGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
clN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQs
IHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVw
dGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJM
b2NhdGlvbjogMCwgaW5wdXRTbG90OiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9Owor
ICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGlucHV0U2xvdDogMCwg
Zm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0
dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtpbnB1dFNsb3Q6IDAs
IHN0cmlkZTogMjAgfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCBp
bnB1dFN0YXRlID0ge2luZGV4Rm9ybWF0OiAidWludDMyIiwgYXR0cmlidXRlcywgaW5wdXRzfTsK
KworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7Ymlu
ZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBj
b25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRH
cm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0
ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25T
dGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCBpbnB1dFN0YXRlLCBzYW1wbGVD
b3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJB
cnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVS
VEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29u
c3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7CisKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
Ml0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBj
b25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVT
X1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVz
YWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZm
ZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVz
b3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlb
MF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJC
aW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJp
bmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9Owor
ICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQs
IGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRl
dmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29u
dGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNj
cmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBD
aGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsK
KyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVs
dFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1h
bmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6
IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRl
eHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6
ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFj
aG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0
YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NF
bmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlw
dG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFsw
XSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQ
YXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRF
bmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1
ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQp
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="386328"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370493</attachid>
            <date>2019-05-23 00:41:05 -0700</date>
            <delta_ts>2019-05-23 02:29:35 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-195925-20190523004104.patch</filename>
            <type>text/plain</type>
            <size>228158</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTE3ZmUzOTVkYTIwNWQx
ZGVjYjBmMjhhNTQxYWFmNDExZThjZjAzZC4uMTE4YjYyNDFhOTBkNmQyYjE5YzhlZTNkZmE5ODlk
OWQzYjc5NjNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNiBAQAorMjAxOS0wNS0yMyAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0g
SW1wbGVtZW50IHByb3BlcnR5IHJlc29sdmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU5MjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ4MjE5
NjQzPgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpIGFuZCBSb2JpbiBNb3Jpc3Nl
dC4KKworICAgICAgICBUaGUgcHJvcGVydHkgcmVzb2x2ZXIgaXMgdGhlIHRoaW5nIHRoYXQgcmVw
bGFjZXMgZG90IGV4cHJlc3Npb25zLCBpbmRleCBleHByZXNzaW9ucywgYW5kCisgICAgICAgIHJl
YWQtbW9kaWZ5LXdyaXRlIGV4cHJlc3Npb25zIHdpdGggY2FsbHMgdG8gZ2V0dGVycywgc2V0dGVy
cywgYW5kIGFuZGVycy4gVGhpcyBwYXRjaCBkb2Vzbid0CisgICAgICAgIGZ1bGx5IGltcGxlbWVu
dCB0aGUgcHJvcGVydHkgcmVzb2x2ZXIsIGJ1dCBpbXBsZW1lbnRzIGVub3VnaCBmb3Igc2ltcGxl
IGRvdCBleHByZXNzaW9ucyB0bworICAgICAgICB3b3JrLiBUaGlzIGlzIGVub3VnaCBmb3IgdXMg
dG8gYmUgYWJsZSB0byB0ZXN0IG1vc3Qgb2YgdGhlIHJlc3Qgb2YgdGhlIGNvbXBpbGVyLiBJbmRl
eAorICAgICAgICBleHByZXNzaW9ucyBhbmQgcmVhZC1tb2RpZnktd3JpdGUgZXhwcmVzc2lvbnMg
YXJlIG5vdCBmdWxseSBpbmNsdWRlZCBpbiB0aGlzIHBhdGNoLCBhbmQgd2lsbAorICAgICAgICBi
ZSBmaW5pc2hlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAgICBUaGUgcHJvcGVydHkg
cmVzb2x2ZXIgbWF5IGludHJvZHVjZSBhbm9ueW1vdXMgdmFyaWFibGVzIGluIHZhcmlvdXMgcGxh
Y2VzLiBJbiBvcmRlciB0byBkbworICAgICAgICB0aGlzLCBhZnRlciB0aGUgcHJvcGVydHkgcmVz
b2x2ZXIgcnVucywgaXQgd2lsbCBpbnNlcnQgYWxsIHRoZXNlIGFub255bW91cyB2YXJpYWJsZXMg
aW4gdGhlCisgICAgICAgIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoaXMg
bWVhbnMgdGhhdCBlbnRyaWVzIGluIHRoZSBWYXJpYWJsZURlY2xhcmF0aW9ucworICAgICAgICB2
ZWN0b3Igd2lsbCBhbGwgc2hpZnQsIHdoaWNoIG1lYW5zIFZhcmlhYmxlRGVjbGFyYXRpb25zIGhh
dmUgdG8gYmUgYWxsb2NhdGVkIG9uIHRoZSBoZWFwIHNvCisgICAgICAgIGJhY2tyZWZlcmVuY2Vz
IHRvIHRoZW0gc3RheSB2YWxpZC4gVGhpcyBwYXRjaCBtb3ZlcyB0aGUgc3RvcmFnZSBhc3NvY2lh
dGVkIHdpdGggdGhlc2UgdmFsdWVzCisgICAgICAgIHRvIGxpdmluZyBkaXJlY3RseSBpbiB0aGUg
dmVjdG9yJ3Mgc3RvcmFnZSB0byBsaXZpbmcgaW4gaGVhcCBzdG9yYWdlICh2aWEgZmlsbGluZyB0
aGUgdmVjdG9yCisgICAgICAgIHdpdGggVW5pcXVlUmVmcykuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhbHNvIGFkZHMgdGhlIHRoaXJkIGNvbmNlcHQgb2YgdmFsdWUtbmVzcy4gV2Ugbm93IGhhdmUg
cmlnaHQgdmFsdWVzLCBsZWZ0IHZhbHVlcywKKyAgICAgICAgYW5kIGFic3RyYWN0IGxlZnQgdmFs
dWVzIChmb3IgdGhpbmdzIHdoaWNoIGhhdmUgc2V0dGVycyBidXQgaGF2ZSBubyBhZGRyZXNzKS4g
VGhpcyBhZGRpdGlvbgorICAgICAgICBpcyByZXF1aXJlZCBmb3IgdGhlIGFuYWx5c2lzIHRoZSBw
cm9wZXJ0eSByZXNvbHZlciBwZXJmb3Jtcy4gVGhpcyBjb25jZXB0IGlzIGFsc28gcHJlc2VudCBp
bgorICAgICAgICB0aGUgc3BlYy4KKworICAgICAgICBUZXN0OiB3ZWJncHUvd2hsc2wtZG90LWV4
cHJlc3Npb25zLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFkZHJlc3NTcGFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90
YXRpb246OlR5cGVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5
cGVBbm5vdGF0aW9uOjpsZWZ0QWRkcmVzc1NwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpBU1Q6OlR5cGVBbm5vdGF0aW9uOjppc1JpZ2h0VmFsdWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZUFubm90YXRpb246OnZpc2l0KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6QXNzaWdubWVudEV4cHJlc3Npb246OnRha2VS
aWdodCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRF
eHByZXNzaW9uLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90
RXhwcmVzc2lvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVu
dHJ5UG9pbnRUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RXhwcmVzc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6
bWF5YmVSZXNvbHZlZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVz
c2lvbjo6cmVzb2x2ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJl
c3Npb246Om1heWJlVHlwZUFubm90YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6RXhwcmVzc2lvbjo6dHlwZUFubm90YXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6c2V0VHlwZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6YWRkcmVzc1NwYWNlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246OnNldEFk
ZHJlc3NTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRmxvYXRMaXRlcmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGbG9h
dExpdGVyYWw6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpJbnRlZ2VyTGl0ZXJhbDo6dmFsdWVGb3JTZWxlY3RlZFR5cGUgY29uc3QpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmg6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpJbnRlZ2VyTGl0ZXJhbDo6Y2xvbmUgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb246Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6bGVm
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVyRXhwcmVzc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246
OmxlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4
cHJlc3Npb246OmxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6
Ok51bGxMaXRlcmFsOjpjbG9uZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246OnBvc3NpYmxlR2V0dGVyT3Zl
cmxvYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbjo6cG9zc2libGVTZXR0ZXJPdmVybG9hZHMpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOjpwb3NzaWJsZUFuZGVyT3ZlcmxvYWRz
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bjo6Z2V0dGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uOjphbmRlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbjo6dGhyZWFkQW5kZXJGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246
OnNldHRlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbjo6c2V0UG9zc2libGVHZXR0ZXJPdmVybG9hZHMpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOjpzZXRQb3NzaWJs
ZUFuZGVyT3ZlcmxvYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbjo6c2V0UG9zc2libGVTZXR0ZXJPdmVybG9hZHMpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOjpzZXRHZXR0ZXJG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb246OnNldEFuZGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOjpzZXRUaHJlYWRBbmRlckZ1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbjo6c2V0
U2V0dGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uOjp0YWtlQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNU
OjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246OnBvc3NpYmxlR2V0T3ZlcmxvYWRzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bjo6cG9zc2libGVTZXRPdmVybG9hZHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOjpwb3NzaWJsZUFuZE92ZXJsb2Fkcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb246OnNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbjo6c2V0UG9zc2libGVT
ZXRPdmVybG9hZHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uOjpzZXRQb3NzaWJsZUFuZE92ZXJsb2Fkcyk6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbjo6b2xkVmFyaWFibGVSZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bmV3VmFyaWFibGVSZWZlcmVu
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbjo6bGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb246OnRha2VMZWZ0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6dGFrZU9sZFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246OnRha2VO
ZXdWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uOjp0YWtlTmV3VmFsdWVFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246OnRha2VSZXN1bHRFeHByZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b246OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvbHZhYmxlVHlwZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UmVzb2x2YWJsZVR5cGU6Om1heWJlUmVzb2x2ZWRU
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlc29sdmFibGVUeXBl
OjpyZXNvbHZlZFR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UmVz
b2x2YWJsZVR5cGU6Om1heWJlUmVzb2x2ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpBU1Q6OlJlc29sdmFibGVUeXBlOjpyZXNvbHZlZFR5cGUpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlwZSBjb25z
dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRp
b25Db25zdGFudFNlbWFudGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlNw
ZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlwZSBjb25zdCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGlj
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYzo6
aXNBY2NlcHRhYmxlVHlwZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbjo6ZmluZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6VHlwZVJlZmVyZW5jZTo6bWF5YmVSZXNvbHZlZFR5cGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VHlwZVJlZmVyZW5jZTo6cmVzb2x2ZWRUeXBlIGNvbnN0
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVn
ZXJMaXRlcmFsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlVuc2lnbmVkSW50
ZWdlckxpdGVyYWw6OnZhbHVlRm9yU2VsZWN0ZWRUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmg6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsOjpjbG9uZSBj
b25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVE
ZWNsYXJhdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudDo6VmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnNTdGF0ZW1lbnQ6OnZhcmlhYmxlRGVjbGFyYXRpb25zKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OmF0dHJpYnV0ZUZvclNlbWFudGljKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjptYW5nbGVk
SW5wdXRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNj
YWZmb2xkaW5nOjp1bnBhY2tSZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBl
clR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OnVucGFjayk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdCk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OndyaXRlTmF0aXZlRnVuY3Rp
b24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlVHlw
ZVdyaXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OndyaXRlTmF0aXZl
VHlwZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFt
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpmaW5kSW5WZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OnZpc2l0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjpjcmVhdGVOYW1lTm9kZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVER1bXBlcjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OmNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OnJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OnJlc29sdmVXaXRoT3BlcmF0b3JMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OnJlc29sdmVXaXRoUmVmZXJlbmNlQ29tcGFyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6cmVzb2x2ZUJ5SW5zdGFudGlhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
Y2hlY2tPcGVyYXRvck92ZXJsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2Vy
Ojphc3NpZ25UeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y29tbWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6
OmFzc2lnblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmZvcndhcmRU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpnZXRVbm5hbWVkVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vzcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZFdy
YXBCYXNlVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Okdh
dGhlcmVyOjp0YWtlRW50cnlQb2ludEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpH
YXRoZXJlcjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5m
ZXJUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hBbmRDb21taXQpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6aW5mZXJUeXBlc0ZvckNhbGwpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpnZXRO
YXRpdmVUeXBlRGVjbGFyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTmFtZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lUmVzb2x2
ZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVBhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9u
cyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQaXBlbGluZURlc2NyaXB0
b3IuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnByZXBhcmVTaGFyZWQpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpzZXR0ZXJDYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpnZXR0ZXJDYWxsKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptb2RpZnkpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OlByb3BlcnR5UmVzb2x2ZXI6OnNpbXBsaWZ5UmlnaHRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TGVmdFZhbHVlU2ltcGxpZmllcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlByb3BlcnR5UmVzb2x2ZXI6OnNpbXBsaWZ5TGVmdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpyZXNvbHZlUHJvcGVydGllcyk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudHJ5UG9pbnRUeXBlLmguCisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UmVjdXJzaXZlVHlwZUNoZWNrZXI6OnZpc2l0
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZElt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNvbnZlcnNpb25Db3N0KToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpSZXNvbHZpbmdUeXBlOjpnZXRVbm5hbWVkVHlwZSk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0OgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5n
dGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkZpbmRBcnJheVR5cGVzOjp0YWtlQXJy
YXlUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6c3ludGhlc2l6ZUFycmF5T3BlcmF0
b3JMZW5ndGgpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZUNvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6RmluZEFsbFR5cGVz
Ojp0YWtlVW5uYW1lZFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpGaW5kQWxsVHlw
ZXM6OnRha2VOYW1lZFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpzeW50aGVzaXpl
Q29uc3RydWN0b3JzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
c3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OnN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6VmlzaXRvcjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMVmlzaXRvci5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6
OnRyeVNldFdITFNMRnVuY3Rpb25zRm9yUGlwZWxpbmVEZXNjcmlwdG9yKToKKwogMjAxOS0wNS0y
MiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIGZv
bnQtb3B0aWNhbC1zaXppbmcgYXBwbGllcyB0aGUgd3JvbmcgdmFyaWF0aW9uIHZhbHVlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRy
ZXNzU3BhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFkZHJlc3NTcGFjZS5oCmluZGV4IDBiMjA0MDgzZGZjZmI4Mjc1YzcyODFhZjA2YzMxNzE5NjNj
Y2M2NmQuLjQyNWQxMzQ2Njc4NTFkYWI4NWM4MjdiMjUwY2I1N2FmZGVmYzJkZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NT
cGFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFkZHJlc3NTcGFjZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAog
I2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC01Nyw2ICs1OCw3NCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBTdHJp
bmcgdG9TdHJpbmcoQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkKICAgICB9CiB9CiAKK3N0cnVj
dCBMZWZ0VmFsdWUgeworICAgIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7Cit9OworCitzdHJ1
Y3QgQWJzdHJhY3RMZWZ0VmFsdWUgeworfTsKKworc3RydWN0IFJpZ2h0VmFsdWUgeworfTsKKwor
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNTgg
VGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCitjbGFzcyBUeXBlQW5ub3RhdGlv
biB7CitwdWJsaWM6CisgICAgVHlwZUFubm90YXRpb24oKQorI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICAgICAgOiBtX2VtcHR5KHRydWUpCisjZW5kaWYKKyAgICB7CisgICAgfQorCisgICAgVHlw
ZUFubm90YXRpb24oTGVmdFZhbHVlIHYpCisgICAgICAgIDogbV9pbm5lcih2KQorICAgIHsKKyAg
ICB9CisKKyAgICBUeXBlQW5ub3RhdGlvbihBYnN0cmFjdExlZnRWYWx1ZSB2KQorICAgICAgICA6
IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90YXRpb24oUmlnaHRWYWx1
ZSB2KQorICAgICAgICA6IG1faW5uZXIodikKKyAgICB7CisgICAgfQorCisgICAgVHlwZUFubm90
YXRpb24oY29uc3QgVHlwZUFubm90YXRpb24mKSA9IGRlZmF1bHQ7CisgICAgVHlwZUFubm90YXRp
b24oVHlwZUFubm90YXRpb24mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgVHlwZUFubm90YXRp
b24mIG9wZXJhdG9yPShjb25zdCBUeXBlQW5ub3RhdGlvbiYpID0gZGVmYXVsdDsKKyAgICBUeXBl
QW5ub3RhdGlvbiYgb3BlcmF0b3I9KFR5cGVBbm5vdGF0aW9uJiYgb3RoZXIpID0gZGVmYXVsdDsK
KworICAgIE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4gbGVmdEFkZHJlc3NTcGFjZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fZW1wdHkpOworICAgICAgICBpZiAoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxMZWZ0VmFsdWU+KG1faW5uZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
Z2V0PExlZnRWYWx1ZT4obV9pbm5lcikuYWRkcmVzc1NwYWNlOworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIH0KKworICAgIGJvb2wgaXNSaWdodFZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFJpZ2h0VmFsdWU+KG1faW5uZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBWaXNpdG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZpc2l0b3IpIC0+IGRl
Y2x0eXBlKFdURjo6dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlhbnQ8TGVmdFZhbHVl
LCBBYnN0cmFjdExlZnRWYWx1ZSwgUmlnaHRWYWx1ZT4mPigpKSkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9lbXB0eSk7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW5u
ZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWYXJpYW50PExlZnRWYWx1ZSwgQWJzdHJhY3RM
ZWZ0VmFsdWUsIFJpZ2h0VmFsdWU+IG1faW5uZXI7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
IGJvb2wgbV9lbXB0eSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVu
dEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgKaW5kZXggYjEyMWZiNmMxZTFkMTc5MjYxNWQ5YmIw
Mjc0ZmUyMzU4OGE3ZjJiNS4uYzEwY2NiYTUwYmU3NGU1ZTJiYzI0MWQxMzZhMGEwYWFkNWY4NGRh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQXNzaWdubWVudEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oCkBAIC01NSw2ICs1NSw3
IEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24mIGxlZnQoKSB7IHJldHVybiBtX2xlZnQ7IH0K
ICAgICBFeHByZXNzaW9uJiByaWdodCgpIHsgcmV0dXJuIG1fcmlnaHQ7IH0KKyAgICBVbmlxdWVS
ZWY8RXhwcmVzc2lvbj4gdGFrZVJpZ2h0KCkgeyByZXR1cm4gV1RGTW92ZShtX3JpZ2h0KTsgfQog
CiBwcml2YXRlOgogICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4
cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENvbnN0YW50RXhwcmVzc2lvbi5oCmluZGV4IDNkMWFlMWNlYzM1Nzg5OWJkODdmZmZkMTQ1NDA2
ZGIzMjlmMDg2NGEuLjhlZWNlYjA4YjA0Y2QyOGM5YjhkMzU5NjQ0ZmRmMGVjZWM1MjMzMDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENv
bnN0YW50RXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVz
cGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi0vLyBGSVhNRTogbWFjT1MgU2llcnJh
IGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHB1dHRpbmcgVmFyaWFudHMgaW5zaWRlIFZhcmlhbnRz
LAorLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgx
NTggbWFjT1MgU2llcnJhIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHB1dHRpbmcgVmFyaWFudHMg
aW5zaWRlIFZhcmlhbnRzLAogLy8gc28gdGhpcyBpcyBhIHdyYXBwZXIgY2xhc3MgdG8gbWFrZSBz
dXJlIHRoYXQgZG9lc24ndCBoYXBwZW4uIEFzIHNvb24gYXMgd2UgZG9uJ3QKIC8vIGhhdmUgdG8g
c3VwcG9ydCBTaWVycmEsIHRoaXMgY2FuIGJlIG1pZ3JhdGVkIHRvIGEgVmFyaWFudCBwcm9wZXIu
CiBjbGFzcyBDb25zdGFudEV4cHJlc3Npb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCmluZGV4
IDA0MDQ1MDExNWViMTZjZjE1YWU3ZDU1YjA2MTZkNjA5OTZjYWQ4MDAuLjMzMzdmYjk4MzU4ZmM1
YzI1ODIzYWZhN2UyYTAzOTNmMzg1Zjc2NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmgKQEAg
LTUzLDE3ICs1MywxNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzRG90RXhwcmVzc2lvbigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFN0cmluZyBnZXRGdW5jdGlvbk5h
bWUoKSBjb25zdCBvdmVycmlkZQorICAgIFN0cmluZyBnZXR0ZXJGdW5jdGlvbk5hbWUoKSBjb25z
dCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIm9wZXJhdG9yLiIs
IG1fZmllbGROYW1lKTsKICAgICB9CiAKLSAgICBTdHJpbmcgc2V0RnVuY3Rpb25OYW1lKCkgY29u
c3Qgb3ZlcnJpZGUKKyAgICBTdHJpbmcgc2V0dGVyRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJp
ZGUKICAgICB7CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJvcGVyYXRvci4iLCBtX2ZpZWxk
TmFtZSwgIj0iKTsKICAgICB9CiAKLSAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICBTdHJpbmcgYW5kZXJGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIm9wZXJhdG9yJi4iLCBtX2ZpZWxkTmFt
ZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRW50cnlQb2ludFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEVudHJ5UG9pbnRUeXBlLmgKaW5kZXggMjU1ZTRhNDM4MTkwODU5
YzY3NDBjNjIzYzcyNjBkZGRmY2I4YzI1OC4uNjVmNjg3M2I0NjkwOWRlYWQ0Y2IyMDI2MmI3NTM2
ZTExN2U1N2QyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRW50cnlQb2ludFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnRyeVBvaW50VHlwZS5oCkBAIC0zOSw3ICszOSw2IEBA
IGVudW0gY2xhc3MgRW50cnlQb2ludFR5cGUgOiB1aW50OF90IHsKICAgICBWZXJ0ZXgsCiAgICAg
RnJhZ21lbnQsCiAgICAgQ29tcHV0ZSwKLSAgICAvLyBGSVhNRTogQWRkIGFuIGVudHJ5IHBvaW50
IHR5cGUgZm9yIHRlc3RpbmcKIH07CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFN0cmluZyB0b1N0
cmluZyhFbnRyeVBvaW50VHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCmluZGV4IGI3YWIyMGNl
ZDJjNDUzZjk1ZjFjMmUzZWZjMjgxZmRhNDhlNWMzYWQuLjc2NzdiOTk0Mzk2YmEyNmFmNGUyZjJl
YjRlYmYxODhkOTVmNjgxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKQEAgLTU3LDcgKzU3LDEzIEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9vcmlnaW47IH0KIAotICAgIFVubmFtZWRUeXBlKiByZXNvbHZlZFR5cGUoKSB7IHJldHVy
biBtX3R5cGUgPyAmKm1fdHlwZSA6IG51bGxwdHI7IH0KKyAgICBVbm5hbWVkVHlwZSogbWF5YmVS
ZXNvbHZlZFR5cGUoKSB7IHJldHVybiBtX3R5cGUgPyAmKm1fdHlwZSA6IG51bGxwdHI7IH0KKwor
ICAgIFVubmFtZWRUeXBlJiByZXNvbHZlZFR5cGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dHlwZSk7CisgICAgICAgIHJldHVybiAqbV90eXBlOworICAgIH0KIAogICAgIHZvaWQgc2V0VHlw
ZShVbmlxdWVSZWY8VW5uYW1lZFR5cGU+JiYgdHlwZSkKICAgICB7CkBAIC02NSwxMiArNzEsMTgg
QEAgcHVibGljOgogICAgICAgICBtX3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAgIH0KIAotICAg
IGNvbnN0IE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYWRkcmVzc1NwYWNlOyB9CisgICAgY29uc3QgVHlwZUFubm90YXRpb24qIG1heWJlVHlw
ZUFubm90YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3R5cGVBbm5vdGF0aW9uID8gJiptX3R5cGVB
bm5vdGF0aW9uIDogbnVsbHB0cjsgfQorCisgICAgY29uc3QgVHlwZUFubm90YXRpb24mIHR5cGVB
bm5vdGF0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGVBbm5vdGF0aW9u
KTsKKyAgICAgICAgcmV0dXJuICptX3R5cGVBbm5vdGF0aW9uOworICAgIH0KIAotICAgIHZvaWQg
c2V0QWRkcmVzc1NwYWNlKE9wdGlvbmFsPEFkZHJlc3NTcGFjZT4mIGFkZHJlc3NTcGFjZSkKKyAg
ICB2b2lkIHNldFR5cGVBbm5vdGF0aW9uKFR5cGVBbm5vdGF0aW9uJiYgdHlwZUFubm90YXRpb24p
CiAgICAgewotICAgICAgICBBU1NFUlQoIW1fYWRkcmVzc1NwYWNlKTsKLSAgICAgICAgbV9hZGRy
ZXNzU3BhY2UgPSBhZGRyZXNzU3BhY2U7CisgICAgICAgIEFTU0VSVCghbV90eXBlQW5ub3RhdGlv
bik7CisgICAgICAgIG1fdHlwZUFubm90YXRpb24gPSBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBc3NpZ25tZW50RXhwcmVzc2lvbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05Nyw3ICsxMDksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8VW5uYW1l
ZFR5cGU+PiBtX3R5cGU7Ci0gICAgT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiBtX2FkZHJlc3NTcGFj
ZTsKKyAgICBPcHRpb25hbDxUeXBlQW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbjsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaAppbmRleCBmMWZiMTNmZWNh
NWIyNDQ4YzQzNDFiOGU3MzcwZDVmZGRiMTE4NWM5Li4xMWU2MGZjNzdmYWMxNmMzNGM2MWMxYTk3
ZTliYzM5MzA1NGQ2YmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaApAQCAtNjIsOCArNjIsOCBA
QCBwdWJsaWM6CiAgICAgRmxvYXRMaXRlcmFsIGNsb25lKCkgY29uc3QKICAgICB7CiAgICAgICAg
IEZsb2F0TGl0ZXJhbCByZXN1bHQoTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgbV92YWx1ZSk7Ci0g
ICAgICAgIGlmIChyZXN1bHQubV90eXBlLnJlc29sdmVkVHlwZSgpKQotICAgICAgICAgICAgcmVz
dWx0Lm1fdHlwZS5yZXNvbHZlKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkp
OworICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0gbV90eXBlLm1heWJlUmVzb2x2ZWRU
eXBlKCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzb2x2ZWRUeXBlLT5j
bG9uZSgpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lv
bi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhF
eHByZXNzaW9uLmgKaW5kZXggMzQ3YmNmZWM0Y2E0MjYxNGRiOWJhYTcwODZiNTEyM2IyMjk2ZTY4
MC4uYWExOTdiNWFmNDNiZDYwMzg4YzcxODVhZDE0NmU4ZWMwM2QzMmU4YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNz
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
SW5kZXhFeHByZXNzaW9uLmgKQEAgLTUyLDE3ICs1MiwxNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzSW5kZXhFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgU3RyaW5nIGdldEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgU3RyaW5nIGdl
dHRlckZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1cm4g
Im9wZXJhdG9yW10iX3N0cjsKICAgICB9CiAKLSAgICBTdHJpbmcgc2V0RnVuY3Rpb25OYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICBTdHJpbmcgc2V0dGVyRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiAib3BlcmF0b3ImW10iX3N0cjsKICAgICB9CiAK
LSAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBTdHJpbmcg
YW5kZXJGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJu
ICJvcGVyYXRvcltdPSJfc3RyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmNwcApp
bmRleCAzY2Y2ODVhNTI1MGQ1ODdiYzJjNzY4ZjA1ZGVmNjM4NzE3NTFlMGRiLi4yMjFlMTFlYzI5
YjU2ZDUxMDZkYjhhZDk0OTRiMTJhYjEyN2M2NTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVy
YWwuY3BwCkBAIC0zOSwxMCArMzksOCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogaW50NjRfdCBJbnRl
Z2VyTGl0ZXJhbDo6dmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBjb25zdAogewotICAgIEFTU0VSVCht
X3R5cGUucmVzb2x2ZWRUeXBlKCkpOwotICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2Fz
dDxUeXBlUmVmZXJlbmNlPigqbV90eXBlLnJlc29sdmVkVHlwZSgpKTsKLSAgICBBU1NFUlQodHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0
aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNv
bHZlZFR5cGUoKSk7CisgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PFR5cGVSZWZl
cmVuY2U+KG1fdHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPih0eXBlUmVmZXJlbmNlLnJl
c29sdmVkVHlwZSgpKTsKICAgICByZXR1cm4gbmF0aXZlVHlwZURlY2xhcmF0aW9uLmZvcm1hdFZh
bHVlRnJvbUludGVnZXIoKShtX3ZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgK
aW5kZXggMTI5YWViZGNkYmVhOGNiMjgzYzIxZWUyYTFmN2M0ZGQ5YjhkNjNmZC4uZGJiMGZhNmNj
MzVhNDBhNzFjOGYzNDFiOGFkMDgyMDg5MTlhZmMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bC5oCkBAIC02Miw4ICs2Miw4IEBAIHB1YmxpYzoKICAgICBJbnRlZ2VyTGl0ZXJhbCBjbG9uZSgp
IGNvbnN0CiAgICAgewogICAgICAgICBJbnRlZ2VyTGl0ZXJhbCByZXN1bHQoTGV4ZXI6OlRva2Vu
KG9yaWdpbigpKSwgbV92YWx1ZSk7Ci0gICAgICAgIGlmIChyZXN1bHQubV90eXBlLnJlc29sdmVk
VHlwZSgpKQotICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZS5yZXNvbHZlKHJlc3VsdC5tX3R5cGUu
cmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBl
ID0gbV90eXBlLm1heWJlUmVzb2x2ZWRUeXBlKCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBl
LnJlc29sdmUocmVzb2x2ZWRUeXBlLT5jbG9uZSgpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24uaAppbmRleCA2MzE2ZjU0ZTE2MzI2YjRhNDgzZmE4NzJlMWY0N2JiMDQ4ZWRmODhlLi43NzBj
ZjhiYTlmMjUyNzI2ZjY5YzFhZTZkZTVlYTRhNWIxMmJmNzdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCkBAIC0zOSw5ICszOSw5IEBAIG5h
bWVzcGFjZSBBU1QgewogCiBjbGFzcyBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uIDogcHVi
bGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsVmFsdWUp
CisgICAgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9u
KFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShXVEZNb3ZlKGxWYWx1ZSkpCisg
ICAgICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUpKQogICAgIHsKICAgICB9CiAK
QEAgLTUyLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4
cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuIG1fbFZhbHVlOyB9CisgICAgRXhwcmVzc2lvbiYg
bGVmdFZhbHVlKCkgeyByZXR1cm4gbV9sZWZ0VmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBVbmlx
dWVSZWY8RXhwcmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1f
bGVmdFZhbHVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5oCmluZGV4IDdiMDUyYjZkNWYyODg3ZjU5MmRmNDRmZDk0MDljNGZh
OTUyMDNhYTguLjM0NjA0ZDU2YWVjYzRiNjMwZDdhN2U2Zjc5NmI5Yzg1MzQ3Y2UxZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCkBAIC0zOSw5ICszOSw5IEBAIG5h
bWVzcGFjZSBBU1QgewogCiBjbGFzcyBNYWtlUG9pbnRlckV4cHJlc3Npb24gOiBwdWJsaWMgRXhw
cmVzc2lvbiB7CiBwdWJsaWM6Ci0gICAgTWFrZVBvaW50ZXJFeHByZXNzaW9uKExleGVyOjpUb2tl
biYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VQb2lu
dGVyRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9u
PiYmIGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKLSAg
ICAgICAgLCBtX2xWYWx1ZShXVEZNb3ZlKGxWYWx1ZSkpCisgICAgICAgICwgbV9sZWZ0VmFsdWUo
V1RGTW92ZShsZWZ0VmFsdWUpKQogICAgIHsKICAgICB9CiAKQEAgLTUyLDEwICs1MiwxMCBAQCBw
dWJsaWM6CiAKICAgICBib29sIGlzTWFrZVBvaW50ZXJFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4g
bV9sVmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRW
YWx1ZTsgfQogCiBwcml2YXRlOgotICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xWYWx1ZTsK
KyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sZWZ0VmFsdWU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE51bGxMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCmluZGV4IDVlYjAxNTAzOTRlYTE3MWU2YmVjNjc5
MjEyOWZjOTRlODZkYzE1NTQuLjM0NjdiMmYxZGI0Y2E4N2M2ZjMyNzExZmI4YzBlMTYwYWJlNWE1
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTE51bGxMaXRlcmFsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaApAQCAtNTksOCArNTksOCBAQCBwdWJsaWM6CiAgICAg
TnVsbExpdGVyYWwgY2xvbmUoKSBjb25zdAogICAgIHsKICAgICAgICAgYXV0byByZXN1bHQgPSBO
dWxsTGl0ZXJhbChMZXhlcjo6VG9rZW4ob3JpZ2luKCkpKTsKLSAgICAgICAgaWYgKHJlc3VsdC5t
X3R5cGUucmVzb2x2ZWRUeXBlKCkpCi0gICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUo
cmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIGlmIChhdXRv
KiByZXNvbHZlZFR5cGUgPSBtX3R5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgICAg
IHJlc3VsdC5tX3R5cGUucmVzb2x2ZShyZXNvbHZlZFR5cGUtPmNsb25lKCkpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uaAppbmRleCAyZWMzNGUxNWQ4YTQwZTVhZDJlMmJmODk2ODBjMjFjMzM0NGM5OTg4
Li44ZjRhYTBlYTExOWY2Y2UwZGEyZWY0YTc4M2JhNzFmMTBkZmM4OTZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lm
IEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAj
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCkBAIC01MiwzNCArNTMsNjMgQEAgcHVibGljOgog
CiAgICAgYm9vbCBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgU3RyaW5nIGdldEZ1bmN0aW9uTmFtZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBzZXRGdW5jdGlvbk5hbWUoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgU3RyaW5nIGdldHRlckZ1bmN0aW9uTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFN0cmluZyBzZXR0ZXJGdW5jdGlvbk5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJp
bmcgYW5kZXJGdW5jdGlvbk5hbWUoKSBjb25zdCA9IDA7CiAKLSAgICBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlR2V0T3Zlcmxv
YWRzKCkgeyByZXR1cm4gbV9wb3NzaWJsZUdldE92ZXJsb2FkczsgfQotICAgIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVTZXRP
dmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzOyB9Ci0gICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJs
ZUFuZE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9zc2libGVBbmRPdmVybG9hZHM7IH0KKyAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBv
c3NpYmxlR2V0dGVyT3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9wb3NzaWJsZUdldHRlck92ZXJsb2Fk
czsgfQorICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRp
b24+LCAxPiYgcG9zc2libGVTZXR0ZXJPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxlU2V0
dGVyT3ZlcmxvYWRzOyB9CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUFuZGVyT3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9w
b3NzaWJsZUFuZGVyT3ZlcmxvYWRzOyB9CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0dGVy
RnVuY3Rpb24oKSB7IHJldHVybiBtX2dldHRlckZ1bmN0aW9uOyB9CisgICAgRnVuY3Rpb25EZWNs
YXJhdGlvbiogYW5kZXJGdW5jdGlvbigpIHsgcmV0dXJuIG1fYW5kZXJGdW5jdGlvbjsgfQorICAg
IEZ1bmN0aW9uRGVjbGFyYXRpb24qIHRocmVhZEFuZGVyRnVuY3Rpb24oKSB7IHJldHVybiBtX3Ro
cmVhZEFuZGVyRnVuY3Rpb247IH0KKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXR0ZXJGdW5j
dGlvbigpIHsgcmV0dXJuIG1fc2V0dGVyRnVuY3Rpb247IH0KIAotICAgIHZvaWQgc2V0UG9zc2li
bGVHZXRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCisgICAgdm9pZCBzZXRQb3NzaWJsZUdldHRl
ck92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRl
Y2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKICAgICB7Ci0gICAgICAgIG1fcG9zc2libGVHZXRP
dmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgICAgIG1fcG9zc2libGVHZXR0ZXJPdmVybG9hZHMg
PSBvdmVybG9hZHM7CiAgICAgfQotICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMoY29u
c3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
JiBvdmVybG9hZHMpCisgICAgdm9pZCBzZXRQb3NzaWJsZUFuZGVyT3ZlcmxvYWRzKGNvbnN0IFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3Zl
cmxvYWRzKQogICAgIHsKLSAgICAgICAgbV9wb3NzaWJsZVNldE92ZXJsb2FkcyA9IG92ZXJsb2Fk
czsKKyAgICAgICAgbV9wb3NzaWJsZUFuZGVyT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOwogICAgIH0K
LSAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQorICAgIHZv
aWQgc2V0UG9zc2libGVTZXR0ZXJPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCiAgICAgewotICAg
ICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgICAgICBtX3Bvc3Np
YmxlU2V0dGVyT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKworICAgIHZvaWQgc2V0R2V0
dGVyRnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0dGVyRnVuY3Rpb24pCisgICAgewor
ICAgICAgICBtX2dldHRlckZ1bmN0aW9uID0gZ2V0dGVyRnVuY3Rpb247CisgICAgfQorCisgICAg
dm9pZCBzZXRBbmRlckZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZGVyRnVuY3Rpb24p
CisgICAgeworICAgICAgICBtX2FuZGVyRnVuY3Rpb24gPSBhbmRlckZ1bmN0aW9uOworICAgIH0K
KworICAgIHZvaWQgc2V0VGhyZWFkQW5kZXJGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uKiB0
aHJlYWRBbmRlckZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgbV90aHJlYWRBbmRlckZ1bmN0aW9u
ID0gdGhyZWFkQW5kZXJGdW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldFNldHRlckZ1bmN0
aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24qIHNldHRlckZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAg
bV9zZXR0ZXJGdW5jdGlvbiA9IHNldHRlckZ1bmN0aW9uOwogICAgIH0KIAogICAgIEV4cHJlc3Np
b24mIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4g
dGFrZUJhc2UoKSB7IHJldHVybiBXVEZNb3ZlKG1fYmFzZSk7IH0KIAogcHJpdmF0ZToKICAgICBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9iYXNlOwotICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlR2V0T3ZlcmxvYWRzOwot
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
PiBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzOwotICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzOworICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBt
X3Bvc3NpYmxlR2V0dGVyT3ZlcmxvYWRzOworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlU2V0dGVyT3ZlcmxvYWRzOwor
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
PiBtX3Bvc3NpYmxlQW5kZXJPdmVybG9hZHM7CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9n
ZXR0ZXJGdW5jdGlvbiB7IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX2Fu
ZGVyRnVuY3Rpb24geyBudWxscHRyIH07CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV90aHJl
YWRBbmRlckZ1bmN0aW9uIHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1f
c2V0dGVyRnVuY3Rpb24geyBudWxscHRyIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAppbmRleCA3OWQ4ZDBm
NzA4ZThkMDU3ODMxMmM4MTc5NGU4OGVkYWYzNDg3Y2Y5Li5iNjY2MmEzY2EwN2E1MDdlODA2M2Ni
NDkyZjRjNzQzNjM3MzIzZTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5oCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVz
cGFjZSBBU1QgewogCiAvKgotICogIDEuIEV2YWx1YXRlIG1fbFZhbHVlCisgKiAgMS4gRXZhbHVh
dGUgbV9sZWZ0VmFsdWUKICAqICAyLiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX29sZFZhbHVlCiAg
KiAgMy4gRXZhbHVhdGUgbV9uZXdWYWx1ZUV4cHJlc3Npb24KICAqICA0LiBBc3NpZ24gdGhlIHJl
c3VsdCB0byBtX25ld1ZhbHVlCi0gKiAgNS4gQXNzaWduIHRoZSByZXN1bHQgdG8gbV9sVmFsdWUK
KyAqICA1LiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX2xlZnRWYWx1ZQogICogIDYuIEV2YWx1YXRl
IG1fcmVzdWx0RXhwcmVzc2lvbgogICogIDcuIFJldHVybiB0aGUgcmVzdWx0CiAgKi8KQEAgLTcz
LDM4ICs3Myw0MSBAQCBwdWJsaWM6CiAKICAgICBVbmlxdWVSZWY8VmFyaWFibGVSZWZlcmVuY2U+
IG9sZFZhcmlhYmxlUmVmZXJlbmNlKCkKICAgICB7Ci0gICAgICAgIC8vIFRoZSBvbmx5IHJlYXNv
biB3ZSBkb24ndCBnZXQgdXNlLWFmdGVyLWZyZWVzIGlzIHRoZSBmYWN0IHRoYXQgZXZlcnkgaW5z
dGFuY2Ugb2YgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiBpcyBhbGxvY2F0ZWQgb24gdGhlIGhl
YXAuCiAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJlbmNlPihWYXJp
YWJsZVJlZmVyZW5jZTo6d3JhcChtX29sZFZhbHVlKSk7CiAgICAgfQogCiAgICAgVW5pcXVlUmVm
PFZhcmlhYmxlUmVmZXJlbmNlPiBuZXdWYXJpYWJsZVJlZmVyZW5jZSgpCiAgICAgewotICAgICAg
ICAvLyBUaGUgb25seSByZWFzb24gd2UgZG9uJ3QgZ2V0IHVzZS1hZnRlci1mcmVlcyBpcyB0aGUg
ZmFjdCB0aGF0IGV2ZXJ5IGluc3RhbmNlIG9mIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24gaXMg
YWxsb2NhdGVkIG9uIHRoZSBoZWFwLgogICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxWYXJp
YWJsZVJlZmVyZW5jZT4oVmFyaWFibGVSZWZlcmVuY2U6OndyYXAobV9uZXdWYWx1ZSkpOwogICAg
IH0KIAogICAgIGJvb2wgaXNSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4g
bV9sVmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRW
YWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9v
bGRWYWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4g
bV9uZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24qIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0
dXJuIG1fbmV3VmFsdWVFeHByZXNzaW9uID8gJiptX25ld1ZhbHVlRXhwcmVzc2lvbiA6IG51bGxw
dHI7IH0KICAgICBFeHByZXNzaW9uKiByZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gbV9yZXN1
bHRFeHByZXNzaW9uID8gJiptX3Jlc3VsdEV4cHJlc3Npb24gOiBudWxscHRyOyB9CisgICAgVW5p
cXVlUmVmPEV4cHJlc3Npb24+IHRha2VMZWZ0VmFsdWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fbGVm
dFZhbHVlKTsgfQorICAgIFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPiB0YWtlT2xkVmFs
dWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fb2xkVmFsdWUpOyB9CisgICAgVW5pcXVlUmVmPFZhcmlh
YmxlRGVjbGFyYXRpb24+IHRha2VOZXdWYWx1ZSgpIHsgcmV0dXJuIFdURk1vdmUobV9uZXdWYWx1
ZSk7IH0KKyAgICBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IHRha2VOZXdWYWx1ZUV4
cHJlc3Npb24oKSB7IHJldHVybiBXVEZNb3ZlKG1fbmV3VmFsdWVFeHByZXNzaW9uKTsgfQorICAg
IE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gdGFrZVJlc3VsdEV4cHJlc3Npb24oKSB7
IHJldHVybiBXVEZNb3ZlKG1fcmVzdWx0RXhwcmVzc2lvbik7IH0KIAogcHJpdmF0ZToKICAgICB0
ZW1wbGF0ZTxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPiBmcmllbmQgVW5pcXVlUmVmPFU+IFdURjo6
bWFrZVVuaXF1ZVJlZihBcmdzJiYuLi4pOwogCi0gICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBsVmFsdWUpCisg
ICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihMZXhlcjo6
VG9rZW4ob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShXVEZNb3ZlKGxWYWx1ZSkpCi0gICAg
ICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6
Om51bGxvcHQsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKLSAgICAgICAg
LCBtX25ld1ZhbHVlKFdURk1vdmUob3JpZ2luKSwgUXVhbGlmaWVycygpLCBXVEY6Om51bGxvcHQs
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkKKyAgICAgICAgLCBtX2xlZnRW
YWx1ZShXVEZNb3ZlKGxlZnRWYWx1ZSkpCisgICAgICAgICwgbV9vbGRWYWx1ZShtYWtlVW5pcXVl
UmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBRdWFsaWZpZXJz
KCksIFdURjo6bnVsbG9wdCwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSkK
KyAgICAgICAgLCBtX25ld1ZhbHVlKG1ha2VVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4o
V1RGTW92ZShvcmlnaW4pLCBRdWFsaWZpZXJzKCksIFdURjo6bnVsbG9wdCwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSkKICAgICB7CiAgICAgfQogCi0gICAgVW5pcXVlUmVm
PEV4cHJlc3Npb24+IG1fbFZhbHVlOwotICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9vbGRWYWx1
ZTsKLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fbmV3VmFsdWU7CisgICAgVW5pcXVlUmVmPEV4
cHJlc3Npb24+IG1fbGVmdFZhbHVlOworICAgIFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9u
PiBtX29sZFZhbHVlOworICAgIFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPiBtX25ld1Zh
bHVlOwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9uZXdWYWx1ZUV4cHJl
c3Npb247CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiBtX3Jlc3VsdEV4cHJl
c3Npb247CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFJlc29sdmFibGVUeXBlLmgKaW5kZXggZjAxZjg2NjQ4ODFmODgw
NDQ5OWFhOWU3NzYyN2RkZmIxNzc4MGU4Zi4uYzY2ZDY1YmZiZTE0ZTY5MzRlMzkyMWRjYWViOWQy
NTRkMDA3YzFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvbHZhYmxlVHlwZS5oCkBAIC01OCw4ICs1OCwxOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhblJlc29sdmUoY29uc3QgVHlwZSYpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFtZWRU
eXBlJikgY29uc3QgPSAwOwogCi0gICAgY29uc3QgVW5uYW1lZFR5cGUqIHJlc29sdmVkVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlID8gJiptX3Jlc29sdmVkVHlwZSA6IG51bGxw
dHI7IH0KLSAgICBVbm5hbWVkVHlwZSogcmVzb2x2ZWRUeXBlKCkgeyByZXR1cm4gbV9yZXNvbHZl
ZFR5cGUgPyAmKm1fcmVzb2x2ZWRUeXBlIDogbnVsbHB0cjsgfQorICAgIGNvbnN0IFVubmFtZWRU
eXBlKiBtYXliZVJlc29sdmVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlID8g
JiptX3Jlc29sdmVkVHlwZSA6IG51bGxwdHI7IH0KKyAgICBjb25zdCBVbm5hbWVkVHlwZSYgcmVz
b2x2ZWRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc29sdmVkVHlwZSk7
CisgICAgICAgIHJldHVybiAqbV9yZXNvbHZlZFR5cGU7CisgICAgfQorCisgICAgVW5uYW1lZFR5
cGUqIG1heWJlUmVzb2x2ZWRUeXBlKCkgeyByZXR1cm4gbV9yZXNvbHZlZFR5cGUgPyAmKm1fcmVz
b2x2ZWRUeXBlIDogbnVsbHB0cjsgfQorICAgIFVubmFtZWRUeXBlJiByZXNvbHZlZFR5cGUoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVzb2x2ZWRUeXBlKTsKKyAgICAgICAgcmV0dXJuICpt
X3Jlc29sdmVkVHlwZTsKKyAgICB9CiAKICAgICB2b2lkIHJlc29sdmUoVW5pcXVlUmVmPFVubmFt
ZWRUeXBlPiYmIHR5cGUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcApp
bmRleCBiZTFhODczYjYzNjgwY2U3ZWY0YzBhZGNhMjk2ZWNhOWM5MWVlMjkxLi4zYjU4YzNkMzRj
YTcxNjJjOTRjMDMxMjMxOTVkZjMwNzdhZGJiNDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNl
bWFudGljLmNwcApAQCAtNTMsOSArNTMsOCBAQCBib29sIFJlc291cmNlU2VtYW50aWM6OmlzQWNj
ZXB0YWJsZVR5cGUoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJbgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChpczxUeXBlUmVmZXJlbmNlPih1bm5h
bWVkVHlwZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxU
eXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7Ci0gICAgICAgICAgICBBU1NFUlQodHlwZVJlZmVy
ZW5jZS5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXM8TmF0aXZlVHlwZURlY2xh
cmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVz
b2x2ZWRUeXBlKCkpLmlzVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKGlzPE5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbj4odHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4odHlwZVJlZmVyZW5jZS5y
ZXNvbHZlZFR5cGUoKSkuaXNUZXh0dXJlKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGNhc2UgTW9kZTo6VGV4dHVyZToKQEAgLTY1LDkgKzY0LDggQEAgYm9vbCBSZXNv
dXJjZVNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlKGNvbnN0IFVubmFtZWRUeXBlJiB1bm5hbWVk
VHlwZSwgY29uc3QgSW4KICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoaXM8
VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiB0eXBlUmVm
ZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOwotICAgICAgICAg
ICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICAgICAgaWYg
KGlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkp
KQotICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKS5pc1RleHR1cmUoKTsKKyAgICAgICAgICAg
IGlmIChpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBl
KCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpLmlzVGV4dHVyZSgpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIE1vZGU6OkJ1ZmZlcjoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxp
emF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCmluZGV4
IDdiNDc4MDk1MWIyZjdkZTE3MzZlYzc4NTk5MGE2ZWQ1M2EzMTQ2ZGMuLmI4ZDM0YThkM2FjN2Iy
YjUxMjE4MjM5OWRmYzE5ZGEwZDkxNWUyZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
Yy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcApAQCAtNDIsMTAgKzQyLDkgQEAgYm9v
bCBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3Qg
VW5uYW1lZFR5cGUmIHVubmFtZWQKICAgICBpZiAoIWlzPFR5cGVSZWZlcmVuY2U+KHVubmFtZWRU
eXBlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBk
b3duY2FzdDxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7Ci0gICAgQVNTRVJUKHR5cGVSZWZl
cmVuY2UucmVzb2x2ZWRUeXBlKCkpOwotICAgIGlmICghaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9u
PigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgaWYgKCFpczxOYXRpdmVUeXBl
RGVjbGFyYXRpb24+KHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5
cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpLmlzTnVtYmVyKCk7CisgICAgcmV0dXJuIGRvd25j
YXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4odHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSku
aXNOdW1iZXIoKTsKIH0KIAogYm9vbCBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWM6Omlz
QWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiBkaXJl
Y3Rpb24sIGNvbnN0IE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiYpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0
U2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcAppbmRleCBiY2EzMTVhYjg1OTA3ZmIyZGU3NTNjMzk4
MjMzMzBkNTgxN2YyZGU3Li43ZjI0ZjU1YWViYThiM2Q4ZWI5NmIxNGE1M2NlZmVmYzU1NThjOTVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTdGFnZUluT3V0U2VtYW50aWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAKQEAgLTQ3LDEzICs0Nywx
MiBAQCBib29sIFN0YWdlSW5PdXRTZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlwZShjb25zdCBVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0CiAgICAgaWYgKCFpczxUeXBlUmVmZXJlbmNlPih1
bm5hbWVkVHlwZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvJiB0eXBlUmVmZXJl
bmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOwotICAgIEFTU0VSVCh0
eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKLSAgICBhdXRvJiByZXNvbHZlZFR5cGUgPSAq
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKTsKKyAgICBhdXRvJiByZXNvbHZlZFR5cGUgPSB0
eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpOwogICAgIGlmIChpczxFbnVtZXJhdGlvbkRlZmlu
aXRpb24+KHJlc29sdmVkVHlwZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmICghaXM8
TmF0aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5cGUpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlw
ZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPih0
eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKICAgICByZXR1cm4gbmF0aXZlVHlwZURlY2xh
cmF0aW9uLmlzTnVtYmVyKCkKICAgICAgICAgfHwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzVmVj
dG9yKCkKICAgICAgICAgfHwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTWF0cml4KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1
Y3R1cmVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKaW5kZXggMDI2MGQ0NTA2YTUxY2FiNTM4MTkz
MzE0OTJlNWQ3YmVjYmRjOTk1Yi4uYzk3YmFkMDZiMjg0ZmNiYzc4NmU5ZDk5ODEwYzFkMTRjNjVl
ZjBiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaApAQCAtNTUsNyArNTUs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJl
RWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9Ci0gICAgU3RydWN0dXJl
RWxlbWVudCogZmluZChTdHJpbmcmIG5hbWUpCisgICAgU3RydWN0dXJlRWxlbWVudCogZmluZChj
b25zdCBTdHJpbmcmIG5hbWUpCiAgICAgewogICAgICAgICBhdXRvIGl0ZXJhdG9yID0gc3RkOjpm
aW5kX2lmKG1fc3RydWN0dXJlRWxlbWVudHMuYmVnaW4oKSwgbV9zdHJ1Y3R1cmVFbGVtZW50cy5l
bmQoKSwgWyZdKFN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpIC0+IGJvb2wgewog
ICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpID09IG5hbWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBl
UmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlUmVmZXJlbmNlLmgKaW5kZXggYmY0YzU5OTlmMTBiMTdhZjhkNWVkN2ZiY2NkNDcxODNk
MGZhZTBjZC4uODQ5MmU1M2Q1MzZlNGZiOGJjMTc1MjcxZmU5NjQxZTgxYTE1YmYxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJl
ZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFR5cGVSZWZlcmVuY2UuaApAQCAtNjIsNyArNjIsMTIgQEAgcHVibGljOgogCiAgICAgU3Ry
aW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgVHlwZUFyZ3VtZW50cyYgdHlwZUFy
Z3VtZW50cygpIHsgcmV0dXJuIG1fdHlwZUFyZ3VtZW50czsgfQotICAgIE5hbWVkVHlwZSogcmVz
b2x2ZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZFR5cGU7IH0KKyAgICBOYW1lZFR5
cGUqIG1heWJlUmVzb2x2ZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZFR5cGU7IH0K
KyAgICBOYW1lZFR5cGUmIHJlc29sdmVkVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQobV9yZXNvbHZlZFR5cGUpOworICAgICAgICByZXR1cm4gKm1fcmVzb2x2ZWRUeXBlOworICAg
IH0KIAogICAgIGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcAppbmRleCBjOGY1NDE5
MTczODIwZWEyOWUxMmJmZGZjZjk4Y2NkMjhiYjExZWMwLi4wNjYxMGM2MGQ0ZmYzODVjNTQ3MTg3
NTQ3NTRhZDc3NjdjMTBlODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJM
aXRlcmFsLmNwcApAQCAtMzksMTAgKzM5LDggQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGludDY0X3Qg
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbDo6dmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBjb25zdAogewot
ICAgIEFTU0VSVChtX3R5cGUucmVzb2x2ZWRUeXBlKCkpOwotICAgIGF1dG8mIHR5cGVSZWZlcmVu
Y2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPigqbV90eXBlLnJlc29sdmVkVHlwZSgpKTsKLSAg
ICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgYXV0byYgbmF0aXZl
VHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJl
ZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25j
YXN0PFR5cGVSZWZlcmVuY2U+KG1fdHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPih0eXBl
UmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKICAgICByZXR1cm4gbmF0aXZlVHlwZURlY2xhcmF0
aW9uLmZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcigpKG1fdmFsdWUpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNp
Z25lZEludGVnZXJMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgKaW5kZXggNDdiOWUyNWI2MDkwYTY3
ODRlMWVkMjRhZWVhN2FiY2ZlNWY5MDdmNi4uODVkZTIwYzczMmM4MGYxNDBkOGEyYzU4Y2I1NWJh
ZmU3ZDE2MGNiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaApA
QCAtNjIsOCArNjIsOCBAQCBwdWJsaWM6CiAgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCBjbG9u
ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsIHJlc3VsdChM
ZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBtX3ZhbHVlKTsKLSAgICAgICAgaWYgKHJlc3VsdC5tX3R5
cGUucmVzb2x2ZWRUeXBlKCkpCi0gICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVz
dWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIGlmIChhdXRvKiBy
ZXNvbHZlZFR5cGUgPSBtX3R5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgICAgIHJl
c3VsdC5tX3R5cGUucmVzb2x2ZShyZXNvbHZlZFR5cGUtPmNsb25lKCkpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCmlu
ZGV4IDE5ODI0Zjk0MDU0ZTRiM2I3ZDdjZjI0ZjYzYzAxMTliOGE2M2Y0ZmIuLmU1MGFhYWRkZTc4
OGY0ZWQ4OWU5YzI2YmY0NDYzOWMyMTQwNDljZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uLmgKQEAgLTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBPcHRpb25hbDxVbmlx
dWVSZWY8RXhwcmVzc2lvbj4+IG1faW5pdGlhbGl6ZXI7CiB9OwogCi11c2luZyBWYXJpYWJsZURl
Y2xhcmF0aW9ucyA9IFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPjsKK3VzaW5nIFZhcmlhYmxl
RGVjbGFyYXRpb25zID0gVmVjdG9yPFVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPj47CiAK
IH0gLy8gbmFtZXNwYWNlIEFTVAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQuaAppbmRleCBlOGUxZmM3ZjViMjM4ZGJiMDQwM2U5ZjQwMjc4MDRh
NzBhN2U4ODFjLi4wOWEwMmQwMWY0OTY4NGFiOTYzZWY4NzI1YjA0NTJkNWEzOGVkZjRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgKQEAg
LTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50IDogcHVibGljIFN0YXRlbWVudCB7CiBwdWJsaWM6Ci0gICAgVmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBWZWN0b3I8VmFyaWFi
bGVEZWNsYXJhdGlvbj4mJiB2YXJpYWJsZURlY2xhcmF0aW9ucykKKyAgICBWYXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFZhcmlhYmxlRGVjbGFyYXRp
b25zJiYgdmFyaWFibGVEZWNsYXJhdGlvbnMpCiAgICAgICAgIDogU3RhdGVtZW50KFdURk1vdmUo
b3JpZ2luKSkKICAgICAgICAgLCBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zKFdURk1vdmUodmFyaWFi
bGVEZWNsYXJhdGlvbnMpKQogICAgIHsKQEAgLTUzLDEwICs1MywxMCBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGlzVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiAKLSAgICBWZWN0b3I8VmFyaWFibGVEZWNsYXJhdGlvbj4mIHZhcmlh
YmxlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV92YXJpYWJsZURlY2xhcmF0aW9uczsgfQorICAg
IFZlY3RvcjxVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4+JiB2YXJpYWJsZURlY2xhcmF0
aW9ucygpIHsgcmV0dXJuIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7IH0KIAogcHJpdmF0ZToKLSAg
ICBWZWN0b3I8VmFyaWFibGVEZWNsYXJhdGlvbj4gbV92YXJpYWJsZURlY2xhcmF0aW9uczsKKyAg
ICBWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGlu
Zy5jcHAKaW5kZXggNjI0YzU2MmU1MWNhNjBjNmVmOGRlMjhhZmViYWM1MTRmMmJlMGRiZC4uNTQ5
ZDVkY2YxYjM3YWZjYTNjZTY4MTFjNDVmM2M5YzRhYmE3MjI2NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZv
bGRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcApAQCAtODYsNyArODYsNyBAQCBzdGF0aWMg
U3RyaW5nIGF0dHJpYnV0ZUZvclNlbWFudGljKEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQogICAg
IGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6QnVpbHRJblNlbWFudGljPihzZW1hbnRp
YykpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhXVEY6OmdldDxBU1Q6OkJ1
aWx0SW5TZW1hbnRpYz4oc2VtYW50aWMpKTsKICAgICBhdXRvJiBzdGFnZUluT3V0U2VtYW50aWMg
PSBXVEY6OmdldDxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2VtYW50aWMpOwotICAgIHJldHVy
biBtYWtlU3RyaW5nKCJbW3VzZXIoIiwgc3RhZ2VJbk91dFNlbWFudGljLmluZGV4KCksICIpXV0i
KTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiW1t1c2VyKHVzZXIiLCBzdGFnZUluT3V0U2VtYW50
aWMuaW5kZXgoKSwgIildXSIpOwogfQogCiBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9p
bnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9u
LCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgRW50cnlQb2lu
dEl0ZW1zJiBlbnRyeVBvaW50SXRlbXMsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291
cmNlTWFwLCBMYXlvdXQmIGxheW91dCwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUpCkBAIC0xODgsOSArMTg4LDkgQEAgU3RyaW5nIEVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6bWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkKICAgICBi
b29sIGZvdW5kID0gZmFsc2U7CiAgICAgQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uKiBzdHJ1Y3R1
cmVEZWZpbml0aW9uID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVu
Y3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
bV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLm5hbWUoKSA9PSBwYXRoWzBdKSB7
CisgICAgICAgIGlmIChtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPm5hbWUo
KSA9PSBwYXRoWzBdKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtX3BhcmFt
ZXRlclZhcmlhYmxlc1tpXSk7Ci0gICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBtX2Z1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAg
ICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hbWVk
VHlwZT4odW5pZnlOb2RlKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRv
d25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAgICAgICAgICAgIGlmIChp
czxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCkBAIC0yNDksNyArMjQ5LDcg
QEAgU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRC
dWlsdElucygpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUo
KTsgKytpKQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
W2ldLnR5cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCptX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSks
ICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fbGF5b3V0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gdmFyaWFi
bGVOYW1lID0gbV9uYW1lZEJpbmRHcm91cHNbaV0udmFyaWFibGVOYW1lOwpAQCAtNDAzLDggKzQw
Myw4IEBAIFN0cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMo
KQogICAgIGZvciAoYXV0byYgbmFtZWRTdGFnZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CiAgICAg
ICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCptX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50
SXRlbXNdLnVubmFtZWRUeXBlKTsKICAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG5hbWVkU3Rh
Z2VJbi5lbGVtZW50TmFtZTsKLSAgICAgICAgYXV0byBhdHRyaWJ1dGVJbmRleCA9IG5hbWVkU3Rh
Z2VJbi5lbGVtZW50TmFtZTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygiICAgICIsIG1hbmdsZWRUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgIiBbW3VzZXIoIiwg
YXR0cmlidXRlSW5kZXgsICIpXV07XG4iKSk7CisgICAgICAgIGF1dG8gYXR0cmlidXRlSW5kZXgg
PSBuYW1lZFN0YWdlSW4uYXR0cmlidXRlSW5kZXg7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtYW5nbGVkVHlwZU5hbWUsICcgJywgZWxlbWVudE5hbWUs
ICIgW1t1c2VyKHVzZXIiLCBhdHRyaWJ1dGVJbmRleCwgIildXTtcbiIpKTsKICAgICB9CiAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG5cbiIpOwogCkBAIC00NDYsNyArNDQ2LDcgQEAgU3Ry
aW5nIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2soKQogICAgIGZvciAoYXV0
byYgbmFtZWRTdGFnZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CiAgICAgICAgIGF1dG8mIHBhdGgg
PSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50
SXRlbXNdLnBhdGg7CiAgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbmFtZWRTdGFnZUluLmVs
ZW1lbnROYW1lOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmds
ZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lLCAnLicsIGVsZW1l
bnROYW1lLCAiO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1hbmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCBtX3N0YWdlSW5QYXJhbWV0ZXJOYW1lLCAn
LicsIGVsZW1lbnROYW1lLCAiO1xuIikpOwogICAgIH0KIAogICAgIHJldHVybiBzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCmluZGV4IDJm
YzE0NjU4NjE2Yzk4OWNhMjE3YzY5MjgyYWU4NmRjNDg3MTlmMDguLjU0M2Y4YzBiZTcwMDliYzk5
MGEzNWJlNjc3MTk4YzYxN2JmY2QwYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIu
Y3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyOjp2
aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXQKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgiLCAiKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKmZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLnR5
cGUoKSkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUo
KSkpOwogICAgIH0KICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CiB9CkBAIC0y
MjcsNyArMjI3LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24KICAgICAgICAgICAgIGF1dG8g
cGFyYW1ldGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3ZhcmlhYmxlTWFwcGluZy5hZGQoJnBhcmFtZXRlciwgcGFyYW1l
dGVyTmFtZSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqcGFyYW1ldGVyLnR5cGUoKSksICcg
JywgcGFyYW1ldGVyTmFtZSkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqcGFyYW1ldGVyLT50eXBl
KCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsKICAgICAgICAgfQogICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKCIpIHtcbiIpOwogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rp
b25EZWZpbml0aW9uLmJsb2NrKCkpOwpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQm
IGVmZmVjdGZ1CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZh
bGx0aHJvdWdoJikKIHsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJbW2NsYW5nOjpmYWxs
dGhyb3VnaF1dO1xuIik7IC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBpcyBva2F5LiBBbHRlcm5h
dGl2ZWx5LCB3ZSBjb3VsZCBkbyBub3RoaW5nIGFuZCBqdXN0IHJldHVybiBoZXJlIGluc3RlYWQu
CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiW1tjbGFuZzo6ZmFsbHRocm91Z2hdXTtcbiIp
OyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTgw
OCBNYWtlIHN1cmUgdGhpcyBpcyBva2F5LiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCBkbyBub3Ro
aW5nIGFuZCBqdXN0IHJldHVybiBoZXJlIGluc3RlYWQuCiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApCkBAIC0zNzYsNDEgKzM3
NiwzNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpXaGlsZUxv
b3AmIHdoaWxlTG9vcCkKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKQogewotICAgIEFTU0VSVChpbnRlZ2Vy
TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqaW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwor
ICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KGludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0
YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgaW50ZWdlckxpdGVyYWwudmFsdWUo
KSwgIik7XG4iKSk7CiAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKIH0KIAogdm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkKIHsKLSAgICBBU1NFUlQodW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5l
cmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CiAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2
YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIHVu
c2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7CiAgICAgbV9zdGFjay5hcHBl
bmQodmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpCiB7Ci0gICAgQVNTRVJUKGZsb2F0
TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZmxvYXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAg
ICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShm
bG9hdExpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGlj
X2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBmbG9hdExpdGVyYWwudmFsdWUoKSwgIik7
XG4iKSk7CiAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFs
KQogewotICAgIEFTU0VSVChudWxsTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgYXV0byYg
dW5pZnlOb2RlID0gbnVsbExpdGVyYWwucmVzb2x2ZWRUeXBlKCktPnVuaWZ5Tm9kZSgpOworICAg
IGF1dG8mIHVuaWZ5Tm9kZSA9IG51bGxMaXRlcmFsLnJlc29sdmVkVHlwZSgpLnVuaWZ5Tm9kZSgp
OwogICAgIEFTU0VSVChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKTsKICAgICBhdXRv
JiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAg
ICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSA9IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
Pih1bm5hbWVkVHlwZSk7CiAKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSgpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm51bGxMaXRlcmFsLnJlc29sdmVkVHlwZSgpKSwg
JyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShudWxsTGl0ZXJhbC5yZXNv
bHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIikpOwogICAgIGlmIChpc0FycmF5
UmVmZXJlbmNlVHlwZSkKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgieyBudWxscHRy
LCAwIH0iKTsKICAgICBlbHNlCkBAIC00MjEsMjAgKzQxNywxOCBAQCB2b2lkIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpCiAKIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJiBi
b29sZWFuTGl0ZXJhbCkKIHsKLSAgICBBU1NFUlQoYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBl
KCkpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7
Ci0gICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKmJvb2xlYW5MaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIG1hbmdsZWRUeXBl
TmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShib29sZWFuTGl0ZXJhbC5yZXNv
bHZlZFR5cGUoKSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmds
ZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVk
VHlwZU5hbWUsICI+KCIsIGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkgPyAidHJ1ZSIgOiAiZmFsc2Ui
LCAiKTtcbiIpKTsKICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkKIHsKLSAgICBBU1NFUlQoZW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKICAgICBBU1NFUlQoZW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKICAgICBBU1NFUlQoZW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKICAgICBhdXRvIHZh
cmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgIGF1dG8gbWFuZ2xl
ZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCplbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0g
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5y
ZXNvbHZlZFR5cGUoKSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1h
bmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtYW5nbGVkVHlwZU5hbWUs
ICcuJywgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcigqZW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpLCAiO1xuIikpOwogICAgIG1f
c3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CiB9CkBAIC00NzQsNyArNDY4LDcgQEAgdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYg
dmFyaWFibGVEZWNsYXJhdGkKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSgpOwogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJpYWJsZU1hcHBpbmcuYWRk
KCZ2YXJpYWJsZURlY2xhcmF0aW9uLCB2YXJpYWJsZU5hbWUpOwogICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCBxdWFsaWZpZXJzLgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4MTYwIEltcGxlbWVudCBxdWFsaWZpZXJzLgogICAgIGlmICh2YXJpYWJs
ZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOwogICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCp2
YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbV9z
dGFjay50YWtlTGFzdCgpLCAiO1xuIikpOwpAQCAtNDg2LDEyICs0ODAsMjEgQEAgdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFy
aWFibGVEZWNsYXJhdGkKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQogeworICAgIGlm
IChpczxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVm
dCgpKSkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVy
ZW5jZUV4cHJlc3Npb24+KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSkucG9pbnRlcigpKTsK
KyAgICAgICAgYXV0byBsZWZ0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICBh
dXRvIHJpZ2h0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCcqJywgbGVmdE5hbWUsICIgPSAiLCByaWdodE5hbWUsICI7
XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHJpZ2h0TmFtZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxl
ZnQoKSk7CiAgICAgYXV0byBsZWZ0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7CiAgICAgYXV0byBy
aWdodE5hbWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKGxlZnROYW1lLCAiID0gIiwgcmlnaHROYW1lLCAiO1xuIikpOwotICAgIG1f
c3RhY2suYXBwZW5kKGxlZnROYW1lKTsKKyAgICBtX3N0YWNrLmFwcGVuZChyaWdodE5hbWUpOwog
fQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVz
c2lvbiYgY2FsbEV4cHJlc3Npb24pCkBAIC01MDEsMTIgKzUwNCwxMSBAQCB2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Np
b24pCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcmd1bWVudCk7CiAgICAgICAgIGFyZ3Vt
ZW50TmFtZXMuYXBwZW5kKG1fc3RhY2sudGFrZUxhc3QoKSk7CiAgICAgfQotICAgIEFTU0VSVChj
YWxsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgQVNTRVJUKGNhbGxFeHByZXNzaW9u
LmZ1bmN0aW9uKCkpOwogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5k
KGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOwogICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1
bmN0aW9uTWFwcGluZy5lbmQoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5l
eHRWYXJpYWJsZU5hbWUoKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpjYWxsRXhwcmVzc2lvbi5yZXNvbHZlZFR5
cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgaXRlcmF0b3ItPnZhbHVlLCAnKCcpKTsK
KyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKGNhbGxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJs
ZU5hbWUsICIgPSAiLCBpdGVyYXRvci0+dmFsdWUsICcoJykpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJndW1lbnROYW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoaSkKICAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7CkBAIC01MzAsOSArNTMyLDgg
QEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VF
eHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHIKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIoKSk7CiAgICAgYXV0byByaWdodCA9IG1fc3RhY2su
dGFrZUxhc3QoKTsKLSAgICBBU1NFUlQoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
OwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKmRlcmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcg
JywgdmFyaWFibGVOYW1lLCAiID0gKiIsIHJpZ2h0LCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIg
PSAqIiwgcmlnaHQsICI7XG4iKSk7CiAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsK
IH0KIApAQCAtNTQyLDkgKzU0Myw4IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKICAgICBhdXRv
IGxlZnQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2lj
YWxFeHByZXNzaW9uLnJpZ2h0KCkpOwogICAgIGF1dG8gcmlnaHQgPSBtX3N0YWNrLnRha2VMYXN0
KCk7Ci0gICAgQVNTRVJUKGxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKICAgICBh
dXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKmxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUs
ICIgPSAiLCBsZWZ0KSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1f
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShsb2dpY2FsRXhwcmVzc2lvbi5yZXNvbHZlZFR5
cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbGVmdCkpOwogICAgIHN3aXRjaCAobG9n
aWNhbEV4cHJlc3Npb24udHlwZSgpKSB7CiAgICAgY2FzZSBBU1Q6OkxvZ2ljYWxFeHByZXNzaW9u
OjpUeXBlOjpBbmQ6CiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAmJiAiKTsKQEAg
LTU2MiwyMyArNTYyLDIxIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzCiB7CiAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7CiAgICAgYXV0byBv
cGVyYW5kID0gbV9zdGFjay50YWtlTGFzdCgpOwotICAgIEFTU0VSVChsb2dpY2FsTm90RXhwcmVz
c2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5l
eHRWYXJpYWJsZU5hbWUoKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpsb2dpY2FsTm90RXhwcmVzc2lvbi5yZXNv
bHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gISIsIG9wZXJhbmQsICI7XG4iKSk7
CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZShsb2dpY2FsTm90RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywg
dmFyaWFibGVOYW1lLCAiID0gISIsIG9wZXJhbmQsICI7XG4iKSk7CiAgICAgbV9zdGFjay5hcHBl
bmQodmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogICAgIGF1dG8gbFZhbHVlID0gbV9zdGFj
ay50YWtlTGFzdCgpOwotICAgIEFTU0VSVChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJl
c29sdmVkVHlwZSgpKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOwotICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgp
KTsKLSAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ucmVzb2x2ZWRUeXBlKCkpKQorICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVz
b2x2ZWRUeXBlKCkpOworICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPihtYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSkKICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIg
PSB7ICIsIGxWYWx1ZSwgIiwgMSB9O1xuIikpOwotICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlU
eXBlPigqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSkpIHsKLSAg
ICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KCptYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICBlbHNlIGlmIChpczxB
U1Q6OkFycmF5VHlwZT4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUo
KSkpIHsKKyAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZh
cmlhYmxlTmFtZSwgIiA9IHsgJigiLCBsVmFsdWUsICJbMF0pLCAiLCBhcnJheVR5cGUubnVtRWxl
bWVudHMoKSwgIiB9O1xuIikpOwogICAgIH0gZWxzZQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9
IHsgJiIsIGxWYWx1ZSwgIiwgMSB9O1xuIikpOwpAQCAtNTg3LDExICs1ODUsMTAgQEAgdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbiYgbWFrZUFycmEKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7Ci0g
ICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7
CiAgICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7Ci0gICAgQVNTRVJUKG1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUg
PSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptYWtlUG9pbnRlckV4
cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICYiLCBsVmFs
dWUsICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShtYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRU
eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICYiLCBsVmFsdWUsICI7XG4iKSk7CiAgICAg
bV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKIH0KIApAQCAtNjA2LDkgKzYwMyw4IEBAIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9u
JiB0ZXJuYXJ5RXhwcmVzc2lvbikKICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJl
c3Npb24ucHJlZGljYXRlKCkpOwogICAgIGF1dG8gY2hlY2sgPSBtX3N0YWNrLnRha2VMYXN0KCk7
CiAKLSAgICBBU1NFUlQodGVybmFyeUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGF1
dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqdGVybmFyeUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwg
IjtcbiIpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRlcm5hcnlFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwg
JyAnLCB2YXJpYWJsZU5hbWUsICI7XG4iKSk7CiAKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoImlmICgiLCBjaGVjaywgIikge1xuIikpOwogICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rp
b25Xcml0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAKaW5kZXggNjk3MmU5ODkwNTBhOWExYjdkYTgx
MWE4N2MzM2MzM2QxZTRlZDI5Yy4uMzhlN2E3MTg3NmVlODUwYjBkNzU4OTQ1YWQxOTcxZmVjOTFm
ZDZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAKQEAg
LTExMSw4ICsxMTEsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICB9CiAKICAg
ICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUo
KSA9PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpOwotICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAg
ICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpOYW1l
ZFR5cGU+KHBhcmFtZXRlclR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBwYXJhbWV0ZXJOYW1l
ZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAg
ICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBhcmFtZXRlck5hbWVkVHlw
ZSkpIHsKQEAgLTEzNCw3ICsxMzQsNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogCiAgICAg
aWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvci52YWx1ZSIp
IHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
LnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkp
OwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFt
ZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHgp
IHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJl
dHVybiBzdGF0aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIikpOwpAQCAtMTQy
LDExICsxNDIsMTIgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODA3NyBBdXRob3JzIGNhbiBtYWtlIGEg
c3RydWN0IGZpZWxkIG5hbWVkICJsZW5ndGgiIHRvby4gQXV0b2dlbmVyYXRlZCBnZXR0ZXJzIGZv
ciB0aG9zZSBzaG91bGRuJ3QgdGFrZSB0aGlzIGNvZGVwYXRoLgogICAgIGlmIChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIikgewogICAgICAgICBB
U1NFUlRfVU5VU0VEKGludHJpbnNpY3MsIG1hdGNoZXMobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi50eXBlKCksIGludHJpbnNpY3MudWludFR5cGUoKSkpOwogICAgICAgICBBU1NFUlQobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7Ci0gICAgICAg
IGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS50eXBlKCktPnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvJiBwYXJhbWV0ZXJU
eXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+
dW5pZnlOb2RlKCk7CiAgICAgICAgIEFTU0VSVChpczxBU1Q6OlVubmFtZWRUeXBlPihwYXJhbWV0
ZXJUeXBlKSk7CiAgICAgICAgIGF1dG8mIHVubmFtZWRQYXJhbWV0ZXJUeXBlID0gZG93bmNhc3Q8
QVNUOjpVbm5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgIGlmIChpczxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFBhcmFtZXRlclR5cGUpKSB7CkBAIC0xNjUsNDUgKzE2Niw3MyBAQCBT
dHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvci4iX3N0cikpIHsKKyAgICAgICAg
YXV0byBtYW5nbGVkRmllbGROYW1lID0gWyZdKGNvbnN0IFN0cmluZyYgZmllbGROYW1lKSAtPiBT
dHJpbmcgeworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAg
ICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsK
KyAgICAgICAgICAgIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gZG93bmNhc3Q8
QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgICAgICAgICAgICAgIGF1
dG8qIHN0cnVjdHVyZUVsZW1lbnQgPSBzdHJ1Y3R1cmVEZWZpbml0aW9uLmZpbmQoZmllbGROYW1l
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKnN0
cnVjdHVyZUVsZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGlzPEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgICAgIHJldHVy
biBmaWVsZE5hbWU7CisgICAgICAgIH07CisKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKICAgICAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwot
ICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlw
ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAg
ICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5zdWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0
aCgpIC0gMSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsRmllbGROYW1lID0gbWFuZ2xlZEZpZWxk
TmFtZShmaWVsZE5hbWUpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFs
UGFyYW1ldGVyMU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7
Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgdi4iLCBm
aWVsZE5hbWUsICIgPSBuO1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygiICAgIHYuIiwgbWV0YWxGaWVsZE5hbWUsICIgPSBuO1xuIikpOwogICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiB2O1xuIikp
OwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwogICAgICAgICAgICAg
cmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFT
U0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7
Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgp
KTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgYXV0byBm
aWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9w
ZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbEZpZWxkTmFtZSA9IG1hbmdsZWRGaWVsZE5hbWUo
ZmllbGROYW1lKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRh
bFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVy
TmFtZSwgIiB2KSB7XG4iKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoIiAgICByZXR1cm4gdi4iLCBmaWVsZE5hbWUsICI7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gdi4iLCBtZXRhbEZpZWxkTmFtZSwg
IjtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwogICAgICAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIl9zdHIpKSB7
CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsK
ICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KS5zdWJzdHJpbmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CisKKyAgICAgICAgU3RyaW5n
IG1ldGFsRmllbGROYW1lOworICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9ICpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpOworICAgICAgICBhdXRvJiB1
bmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVu
dFR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgIGlmIChpczxBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHN0cnVjdHVyZURl
ZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSk7
CisgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmVFbGVtZW50ID0gc3RydWN0dXJlRGVmaW5pdGlv
bi5maW5kKGZpZWxkTmFtZSk7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlRWxlbWVudCk7
CisgICAgICAgICAgICBtZXRhbEZpZWxkTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0
cnVjdHVyZUVsZW1lbnQoKnN0cnVjdHVyZUVsZW1lbnQpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1ldGFsRmllbGROYW1lID0gZmllbGROYW1lOworCiAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9u
TmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIikpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICYodi0+IiwgZmllbGROYW1l
LCAiKTtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAg
IHJldHVybiAmKHYtPiIsIG1ldGFsRmllbGROYW1lLCAiKTtcbiIpKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIn1cbiIpOwogICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0
cmluZygpOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSA9PSAib3BlcmF0b3JbXSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBh
dXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICco
JywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGkp
IHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJl
dHVybiBtW2ldO1xuIikpOwpAQCAtMjEzLDggKzI0Miw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhCiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yJltdIikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDIpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5h
bWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
MU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxS
ZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvciZbXS4iX3N0ci5sZW5ndGgo
KSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5O
YW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAi
IHYsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbikge1xuIikpOwpAQCAtMjI1LDkgKzI1NCw5
IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhCiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW109IikgewogICAgICAgICBBU1NFUlQobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOwotICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwotICAgICAg
ICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOwotICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyM05hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBlKCkpOwor
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgp
KTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5
cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJd
LT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBv
dXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRh
bFBhcmFtZXRlcjJOYW1lLCAiIGksICIsIG1ldGFsUGFyYW1ldGVyM05hbWUsICIgdikge1xuIikp
OwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgbVtpXSA9IHY7
XG4iKSk7CkBAIC0yMzksNyArMjY4LDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5pc09wZXJhdG9yKCkpIHsKICAgICAgICAgaWYg
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKSB7CiAg
ICAgICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwog
ICAgICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1
dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIikpOwogICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAiLCBv
cGVyYXRvck5hbWUsICJ4O1xuIikpOwpAQCAtMjQ5LDggKzI3OCw4IEBAIFN0cmluZyB3cml0ZU5h
dGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhCiAKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSA9PSAyKTsKICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVu
Z3RoKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVsxXS50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUo
KSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5O
YW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAi
IHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xuIikpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHggIiwgb3BlcmF0b3JOYW1lLCAi
IHk7XG4iKSk7CkBAIC0yODMsNyArMzEyLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24o
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAg
ICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFzdWludCIKICAg
ICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFzZmxvYXQiKSB7
CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUs
ICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7
XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1
cm4gIiwgbWFwRnVuY3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSwg
Iih4KTtcbiIpKTsKQEAgLTI5Myw4ICszMjIsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlv
bihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQog
CiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJwb3ciIHx8IG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhdGFuMiIpIHsKICAgICAgICAgQVNT
RVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsK
LSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgp
KTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlw
ZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0t
PnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzFdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAn
LCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAiLCBt
ZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAiLCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSwgIih4LCB5KTtcbiIpKTsKQEAgLTMzNiwxNCArMzY1LDE0IEBAIFN0cmluZyB3cml0
ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN0
YXJ0c1dpdGgoIkludGVybG9ja2VkIl9zdHIpKSB7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UiKSB7CiAg
ICAgICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpID09IDQpOwotICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+KCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKTsKLSAgICAg
ICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVy
VHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7
CisgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKTsKKyAgICAgICAgICAgIGF1dG8m
IGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICAg
ICAgYXV0byBmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZmlyc3RBcmd1bWVudFBvaW50ZXIu
YWRkcmVzc1NwYWNlKCk7CiAgICAgICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50
VHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gc2Vjb25kQXJndW1lbnQgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS50eXBlKCkpOwotICAgICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50ID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
Ml0udHlwZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10udHlwZSgpKSk7Ci0gICAgICAg
ICAgICBhdXRvJiBmb3VydGhBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJU
eXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10udHlwZSgpKTsK
KyAgICAgICAgICAgIGF1dG8gc2Vjb25kQXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgp
KTsKKyAgICAgICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBl
KCkpOworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlwZSgpKSk7CisgICAgICAgICAgICBh
dXRvJiBmb3VydGhBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5cGUoKSk7CiAgICAg
ICAgICAgICBhdXRvIGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZm91cnRoQXJndW1lbnRQ
b2ludGVyLmFkZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1bWVudFBv
aW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZvdXJ0aEFyZ3VtZW50UG9pbnRl
ci5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIGNvbnZlcnRBZGRyZXNzU3Bh
Y2UoZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZmlyc3RBcmd1bWVudFBvaW50ZWUs
ICIqIG9iamVjdCwgIiwgc2Vjb25kQXJndW1lbnQsICIgY29tcGFyZSwgIiwgdGhpcmRBcmd1bWVu
dCwgIiBkZXNpcmVkLCAiLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZvdXJ0aEFyZ3VtZW50QWRkcmVz
c1NwYWNlKSwgJyAnLCBmb3VydGhBcmd1bWVudFBvaW50ZWUsICIqIG91dCkge1xuIikpOwpAQCAt
MzU0LDEzICszODMsMTMgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgfQogCiAg
ICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXpl
KCkgPT0gMyk7Ci0gICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSk7Ci0gICAgICAgIGF1dG8m
IGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgIEFT
U0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSkpOworICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRl
ciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50QWRk
cmVzc1NwYWNlID0gZmlyc3RBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAgICAg
IGF1dG8gZmlyc3RBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KGZpcnN0QXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwotICAgICAgICBhdXRvIHNlY29u
ZEFyZ3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKLSAgICAgICAgQVNTRVJUKGlzPEFT
VDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsy
XS50eXBlKCkpKTsKLSAgICAgICAgYXV0byYgdGhpcmRBcmd1bWVudFBvaW50ZXIgPSBkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMl0udHlwZSgpKTsKKyAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzFdLT50eXBlKCkpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkpKTsKKyAgICAgICAg
YXV0byYgdGhpcmRBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0tPnR5cGUoKSk7CiAgICAg
ICAgIGF1dG8gdGhpcmRBcmd1bWVudEFkZHJlc3NTcGFjZSA9IHRoaXJkQXJndW1lbnRQb2ludGVy
LmFkZHJlc3NTcGFjZSgpOwogICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnRQb2ludGVlID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0aGlyZEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlw
ZSgpKTsKICAgICAgICAgYXV0byBuYW1lID0gYXRvbWljTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIkludGVybG9ja2VkIl9zdHIubGVuZ3RoKCkpKTsKQEAg
LTQ1MCw4ICs0NzksNiBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYQogICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBBZGQgYWxsIHRoZSBmdW5jdGlvbnMg
dGhhdCB0aGUgY29tcGlsZXIgZ2VuZXJhdGVkLgotCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVUeXBlV3JpdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlVHlwZVdyaXRl
ci5jcHAKaW5kZXggNDVlNjBmZDEzMGQ5YmEwMGEzNGY4YWM5ZGQwZjFhYjU0NzA1MjQ2Yi4uNDk0
OGQ5ZGQzNzY3ZmI4ZmNkNmE4NDE2ODZlOWFhYWI5Mjg3MzA1MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVUeXBlV3JpdGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TE5hdGl2ZVR5cGVXcml0ZXIuY3BwCkBAIC0yNDMsNyArMjQzLDcgQEAgU3RyaW5nIHdyaXRlTmF0
aXZlVHlwZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9u
KQogICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJmbG9hdDQiKTsKICAg
ICAgICAgcmV0dXJuICJmbG9hdCJfc3RyOwogICAgIH0pKCk7Ci0gICAgLy8gRklYTUU6IFNwZWNp
ZnkgdGhlIHNlY29uZCB0ZW1wbGF0ZSBhcmd1bWVudCB0byBNZXRhbCB0ZXh0dXJlIHR5cGVzLgor
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1
ODEzIFNwZWNpZnkgdGhlIHNlY29uZCB0ZW1wbGF0ZSBhcmd1bWVudCB0byBNZXRhbCB0ZXh0dXJl
IHR5cGVzLgogICAgIHJldHVybiBtYWtlU3RyaW5nKHByZWZpeCwgJzwnLCBpbm5lclR5cGUsICc+
Jyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAppbmRleCBhM2M4MTBiMDE2ZjkyMzE0MGI0
NmE0NGY4YWI1Yzc0MjU0ZjVhZjU0Li40MTEzOGRkYTZmOGJiM2NhMjJmNDZjZDYyMTAwMzgyM2Y4
MDRjOTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCkBAIC0xNzksOSArMTc5LDggQEAgc3Rh
dGljIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+OjppdGVyYXRvciBmaW5kSW5W
ZWN0b3IoQVNUOjpVbm5hbWVkVHkKIHsKICAgICByZXR1cm4gc3RkOjpmaW5kX2lmKHR5cGVzLmJl
Z2luKCksIHR5cGVzLmVuZCgpLCBbJl0oQmFzZVR5cGVOYW1lTm9kZSYgYmFzZVR5cGVOYW1lTm9k
ZSkgLT4gYm9vbCB7CiAgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRU
eXBlKSAmJiBpczxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKSB7Ci0g
ICAgICAgICAgICBhdXRvKiByZXNvbHZlZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVu
Y2U+KHVubmFtZWRUeXBlKS5yZXNvbHZlZFR5cGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChyZXNv
bHZlZFR5cGUpOwotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkVHlwZSA9PSAmZG93bmNhc3Q8
UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKS5uYW1lZFR5cGUoKTsKKyAg
ICAgICAgICAgIGF1dG8mIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5j
ZT4odW5uYW1lZFR5cGUpLnJlc29sdmVkVHlwZSgpOworICAgICAgICAgICAgcmV0dXJuICZyZXNv
bHZlZFR5cGUgPT0gJmRvd25jYXN0PFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1l
Tm9kZSkubmFtZWRUeXBlKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRl
clR5cGU+KHVubmFtZWRUeXBlKSAmJiBpczxQb2ludGVyVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5h
bWVOb2RlKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gZG93bmNhc3Q8UG9pbnRlclR5cGVOYW1lTm9k
ZT4oYmFzZVR5cGVOYW1lTm9kZSkuYWRkcmVzc1NwYWNlKCk7CkBAIC0yNzgsOCArMjc3LDcgQEAg
dm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9u
KQogCiB2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQog
ewotICAgIEFTU0VSVChleHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKLSAgICBpbnNlcnQoKmV4
cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCksIG1fdHJpZSk7CisgICAgaW5zZXJ0KGV4cHJlc3Npb24u
cmVzb2x2ZWRUeXBlKCksIG1fdHJpZSk7CiAgICAgVmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lvbik7
CiB9CiAKQEAgLTI5OCw4ICsyOTYsNyBAQCBVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4gVHlw
ZU5hbWVyOjpjcmVhdGVOYW1lTm9kZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVAogewogICAg
IGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkgewogICAgICAgICBhdXRv
JiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlw
ZSk7Ci0gICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKLSAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihwYXJlbnQsIGdl
bmVyYXRlTmV4dFR5cGVOYW1lKCksICp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihwYXJlbnQs
IGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksIHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwog
ICAgIH0KICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7CiAgICAg
ICAgIGF1dG8mIHBvaW50ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZFR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xBU1REdW1wZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xBU1REdW1wZXIuY3BwCmluZGV4IGFlMzEwNDhiOGE2MDFmMWFmMjk4NjlmOTM4Y2EyZWQ0
ZTBiYmU3M2IuLjVmYWM4NzQwNmJhNzJkMzE3YjFlN2YxNTc1Mzg0OTY5NzdmMTU1MmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1
bXBlci5jcHAKQEAgLTU5MCwxMyArNTkwLDEzIEBAIHZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6
OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKIHZvaWQgQVNURHVt
cGVyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24pCiB7CiAgICAgbV9vdXQucHJpbnQoIkAiKTsKLSAgICB2aXNpdCht
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICB2aXNpdChtYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKIH0KIAogdm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24p
CiB7CiAgICAgbV9vdXQucHJpbnQoIiYiKTsKLSAgICB2aXNpdChtYWtlUG9pbnRlckV4cHJlc3Np
b24ubFZhbHVlKCkpOworICAgIHZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KSk7CiB9CiAKIHZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCkBAIC02MDcsNyArNjA3LDcgQEAgdm9p
ZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbikKICAgICBtX291dC5wcmludCgiKCIpOwogICAgIHZpc2l0KG9s
ZFZhcmlhYmxlLmdldCgpKTsKICAgICBtX291dC5wcmludCgiID0gIik7Ci0gICAgdmlzaXQocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgdmlzaXQocmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAgICAgbV9vdXQucHJpbnQoIiwgIik7CiAKICAg
ICB2aXNpdChuZXdWYXJpYWJsZS5nZXQoKSk7CkBAIC02MTUsNyArNjE1LDcgQEAgdm9pZCBBU1RE
dW1wZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbikKICAgICB2aXNpdCgqcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdW
YWx1ZUV4cHJlc3Npb24oKSk7CiAgICAgbV9vdXQucHJpbnQoIiwgIik7CiAKLSAgICB2aXNpdChy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICB2aXNpdChyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICBtX291dC5wcmludCgiID0gIik7CiAg
ICAgdmlzaXQobmV3VmFyaWFibGUuZ2V0KCkpOwogICAgIG1fb3V0LnByaW50KCIsICIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1
cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAppbmRleCA2MWQzNDhhZjE1OTY2MjNh
ZjRjMzc5OGVhOTk4MWY5NGE0MTY5NTY1Li5mOGM2ODc2ZTdkMjI3ZDdlMjE5MmM0MjYyYjliYjE3
Y2NiYTk2OWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcApAQCAt
NzAsNyArNzAsNyBAQCBib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0m
IHByb2dyYW0pCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBib29sIHNh
bWUgPSB0cnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmdW5jdGlvbnNb
aV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSwgKmZ1
bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpKSkgeworICAgICAgICAgICAg
ICAgIGlmICghbWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVtrXS0+dHlw
ZSgpLCAqZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS0+dHlwZSgpKSkgewogICAg
ICAgICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KQEAgLTgwLDEwICs4MCwxMSBAQCBib29sIGNoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvciZbXSIg
JiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgotICAgICAgICAg
ICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6
VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
KSkgewotICAgICAgICAgICAgYXV0byYgdHlwZSA9IHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5u
YW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOwor
ICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNv
bnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGUgPSBzdGF0aWNfY2FzdDxjb25z
dCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0t
PnR5cGUoKSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKSkg
ewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5cGUgPSBkb3duY2FzdDxBU1Q6
OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlwZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjEg
U2hvdWxkbid0IHdlIGFscmVhZHkga25vdyB3aGV0aGVyIHRoZSB0eXBlcyBoYXZlIGJlZW4gcmVz
b2x2ZWQgYnkgbm93PworICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5cGUgPSBk
b3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLm1heWJlUmVzb2x2ZWRUeXBlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigq
cmVzb2x2ZWRUeXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNv
bHZlZFR5cGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gInVpbnQiKQpAQCAtOTIsMTQgKzkzLDE0IEBAIGJvb2wgY2hlY2tEdXBs
aWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5h
bWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVy
cygpLnNpemUoKSA9PSAxCi0gICAgICAgICAgICAmJiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQotICAgICAgICAgICAgfHwgaXM8QVNUOjpBcnJh
eVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKSkpCisgICAgICAgICAgICAmJiAoaXM8QVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUm
PigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkKKyAgICAgICAg
ICAgIHx8IGlzPEFTVDo6QXJyYXlUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRU
eXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdl
dCgpLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIKICAgICAgICAgICAgICYmIGZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIKLSAgICAgICAgICAgICYmIGlzPEFTVDo6UmVm
ZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlv
bnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpCi0gICAgICAgICAgICAmJiBpczxB
U1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigq
ZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpKQotICAgICAgICAgICAg
JiYgbWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCksICpm
dW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKSkpCisgICAgICAgICAgICAm
JiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5
cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkKKyAgICAg
ICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpV
bm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLT50eXBlKCkp
KQorICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpLCAqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2Vy
LmNwcAppbmRleCAxMzY1ZjI2ZDEyMzQ4MjAwMGVlNzQwNDdjYjMyMWU4MDJiMmM2MDgzLi42YWI1
MDNhMDcxZmI5NzQzMGQzOWI2ZmUxNzM3ZjQ2M2NhMzc5NWUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKQEAgLTExMiw4
ICsxMTIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYg
dHlwZVJlZmVyZW5jZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlUmVm
ZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVS
ZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwogICAgIH0KIH07CiAKQEAgLTEyMiw4ICsxMjEsOCBA
QCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0
b3JBbmRlckluZGV4ZXIoQVNUOjpDYWxsRQogICAgIGNvbnN0IGJvb2wgaXNPcGVyYXRvciA9IHRy
dWU7CiAgICAgYXV0byByZXR1cm5UeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBl
PihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBmaXJzdEFyZ3VtZW50LmFk
ZHJlc3NTcGFjZSgpLCBmaXJzdEFyZ3VtZW50LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBmaXJzdEFyZ3VtZW50LmNsb25lKCkgfSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7Ci0gICAgcGFyYW1ldGVycy5h
cHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lv
bi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRU
eXBlKCkpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBh
cmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihM
ZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwg
Zmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2lj
cy51aW50VHlwZSgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwog
ICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmco
Im9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFy
YW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0xMzIsNyArMTMx
LDcgQEAgc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9w
ZXJhdG9yTGVuZ3RoKEFTVDo6Q2FsbEV4cHJlc3MKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3Ig
PSB0cnVlOwogICAgIGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBl
KCkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICBwYXJh
bWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgZmlyc3RBcmd1bWVudC5j
bG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBh
cmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihM
ZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwg
Zmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpKTsKICAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBB
U1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwg
U3RyaW5nKCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiB9CiAKQEAg
LTE0NywxNCArMTQ2LDE0IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
cmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKEFTVDo6Q2FsbEV4CiAgICAgICAgICAgICBy
ZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAg
ICAgICAgICAgIC8vIFdlIGVuY291bnRlcmVkICJudWxsID09IG51bGwiLgotICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGJlIGdlbmVyYWxpemVkLCB1c2luZyB0aGUgInBy
ZWZlcnJlZCB0eXBlIiBpbmZyYXN0cnVjdHVyZSB1c2VkIGJ5IGdlbmVyaWMgbGl0ZXJhbHMKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk4MTYyIFRoaXMgY2FuIHByb2JhYmx5IGJlIGdlbmVyYWxpemVkLCB1c2luZyB0aGUgInBy
ZWZlcnJlZCB0eXBlIiBpbmZyYXN0cnVjdHVyZSB1c2VkIGJ5IGdlbmVyaWMgbGl0ZXJhbHMKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkp
LCBpbnRyaW5zaWNzLmludFR5cGUoKSk7CiAgICAgICAgIH0pKTsKICAgICB9KSk7CiAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuYXBwZW5k
KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBhcmd1bWVudFR5cGUtPmNsb25lKCkgfSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7Ci0gICAgcGFyYW1ldGVycy5hcHBl
bmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5v
cmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IFdURk1vdmUoYXJndW1lbnRUeXBlKSB9LCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFw
cGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2Vu
KGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGFyZ3VtZW50VHlw
ZS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAg
cGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+
KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oV1RGTW92ZShhcmd1bWVudFR5cGUpKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CiAgICAgcmV0dXJuIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6
Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3I9PSIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxv
cHQsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMjAzLDggKzIwMiw4IEBAIHN0YXRpYyBPcHRpb25h
bDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVCeUluc3RhbnRpYXRpb24o
QVNUOjpDYWxsCiAgICAgICAgIGF1dG8gcmlnaHRBY2NlcHRhYmlsaXR5ID0gYWNjZXB0YWJpbGl0
eSh0eXBlc1sxXS5nZXQoKSk7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgICAg
ICBpZiAobGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6WWVzICYmIHJpZ2h0QWNj
ZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpZZXMpIHsKLSAgICAgICAgICAgIGF1dG8mIHVu
bmFtZWRUeXBlMSA9IHR5cGVzWzBdLmdldCgpLmdldFVubmFtZWRUeXBlKCk7Ci0gICAgICAgICAg
ICBhdXRvJiB1bm5hbWVkVHlwZTIgPSB0eXBlc1sxXS5nZXQoKS5nZXRVbm5hbWVkVHlwZSgpOwor
ICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUxID0gKnR5cGVzWzBdLmdldCgpLmdldFVubmFt
ZWRUeXBlKCk7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZTIgPSAqdHlwZXNbMV0uZ2V0
KCkuZ2V0VW5uYW1lZFR5cGUoKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBtYXRjaGVzKHVubmFt
ZWRUeXBlMSwgdW5uYW1lZFR5cGUyKTsKICAgICAgICAgfSBlbHNlIGlmICgobGVmdEFjY2VwdGFi
aWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6TWF5YmUgJiYgcmlnaHRBY2NlcHRhYmlsaXR5ID09IEFj
Y2VwdGFiaWxpdHk6OlllcykKICAgICAgICAgICAgIHx8IChsZWZ0QWNjZXB0YWJpbGl0eSA9PSBB
Y2NlcHRhYmlsaXR5OjpZZXMgJiYgcmlnaHRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6
Ok1heWJlKSkKQEAgLTMwNCwxNCArMzAzLDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JP
dmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAg
ICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6
SW5kZXggPyAyIDogMTsKICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgYXV0byYgZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9u
RGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAg
IGF1dG8mIGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpWzBdLT50eXBlKCkpLT51bmlmeU5vZGUoKTsKICAgICAgICAgaWYgKGlzPEFTVDo6
VW5uYW1lZFR5cGU+KGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlKSkgewogICAgICAgICAgICAgYXV0
byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdFBhcmFtZXRl
clVuaWZ5Tm9kZSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZFR5cGUpIHx8IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8
QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCkgewot
ICAgICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRl
ZmluaXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAg
ICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24u
cGFyYW1ldGVycygpWzFdLT50eXBlKCkpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmICgh
aXM8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNh
c3Q8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSk7CkBAIC0zMjgsMTQg
KzMyNywxNCBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICBzaXplX3QgbnVtRXhw
ZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMyA6IDI7CiAgICAg
ICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBl
Y3RlZFBhcmFtZXRlcnMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8m
IGZpcnN0QXJndW1lbnRVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRV
bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkt
PnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1
bWVudFVuaWZ5Tm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNh
c3Q8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSk7CiAgICAgICAgICAg
ICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRU
eXBlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCkgewotICAgICAgICAgICAgYXV0byYgc2Vjb25k
UGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzFd
LnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVy
VW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkp
LT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmICghaXM8QVNUOjpOYW1lZFR5cGU+KHNlY29u
ZFBhcmFtZXRlclVuaWZ5Tm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHNlY29u
ZFBhcmFtZXRlclVuaWZ5Tm9kZSk7CkBAIC0zNDUsOSArMzQ0LDkgQEAgc3RhdGljIGJvb2wgY2hl
Y2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXQKICAgICAgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzSW50KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGlmICgh
bWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpLCAqZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpKQorICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25EZWZp
bml0aW9uLnR5cGUoKSwgKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUo
KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8mIHZhbHVlVHlwZSA9
ICpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW251bUV4cGVjdGVkUGFyYW1ldGVycyAt
IDFdLnR5cGUoKTsKKyAgICAgICAgYXV0byYgdmFsdWVUeXBlID0gKmZ1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKClbbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMV0tPnR5cGUoKTsKICAgICAg
ICAgYXV0byBnZXR0ZXJOYW1lID0gZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdWJzdHJpbmco
MCwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5sZW5ndGgoKSAtIDEpOwogICAgICAgICBhdXRv
KiBnZXR0ZXJGdW5jcyA9IG5hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhnZXR0ZXJOYW1lKTsKICAg
ICAgICAgaWYgKCFnZXR0ZXJGdW5jcykKQEAgLTM1NSw3ICszNTQsNyBAQCBzdGF0aWMgYm9vbCBj
aGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0
aW9uRGVmaW5pdAogICAgICAgICBWZWN0b3I8UmVzb2x2aW5nVHlwZT4gYXJndW1lbnRUeXBlczsK
ICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFy
Z3VtZW50VHlwZVJlZmVyZW5jZXM7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
RXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMTsgKytpKQotICAgICAgICAgICAgYXJndW1lbnRUeXBlcy5h
cHBlbmQoKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPmNsb25l
KCkpOworICAgICAgICAgICAgYXJndW1lbnRUeXBlcy5hcHBlbmQoKCpmdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpLT5jbG9uZSgpKTsKICAgICAgICAgZm9yIChhdXRv
JiBhcmd1bWVudFR5cGUgOiBhcmd1bWVudFR5cGVzKQogICAgICAgICAgICAgYXJndW1lbnRUeXBl
UmVmZXJlbmNlcy5hcHBlbmQoYXJndW1lbnRUeXBlKTsKICAgICAgICAgYXV0byogb3ZlcmxvYWQg
PSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoKmdldHRlckZ1bmNzLCBhcmd1bWVudFR5cGVS
ZWZlcmVuY2VzLCBudWxscHRyKTsKQEAgLTM3OCw3ICszNzcsNyBAQCBzdGF0aWMgYm9vbCBjaGVj
a09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9u
RGVmaW5pdAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICB7Ci0gICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5w
YXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiB1
bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkt
PnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlm
eU5vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGF1dG8m
IHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKQEAg
LTM5Miw3ICszOTEsNyBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3Qg
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IrKyIg
fHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ItLSIpIHsKICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEKLSAgICAg
ICAgICAgICYmIG1hdGNoZXMoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpLCBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgICYmIG1hdGNoZXMo
KmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSwgZnVuY3Rpb25EZWZp
bml0aW9uLnR5cGUoKSk7CiAgICAgfQogICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgp
ID09ICJvcGVyYXRvcisiIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
LSIpCiAgICAgICAgIHJldHVybiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUo
KSA9PSAxIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDI7CkBA
IC00NDcsMTkgKzQ0NiwxOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjaGVja1No
YWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKLSAgICB2b2lkIGZpbmlz
aFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mLCBB
U1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5cGUsIEFTVDo6VW5uYW1lZFR5cGUqIGV4dHJh
QXJndW1lbnRUeXBlID0gbnVsbHB0cik7CiAgICAgYm9vbCBpc0Jvb2xUeXBlKFJlc29sdmluZ1R5
cGUmKTsKICAgICBzdHJ1Y3QgUmVjdXJzZUluZm8gewogICAgICAgICBSZXNvbHZpbmdUeXBlJiBy
ZXNvbHZpbmdUeXBlOwotICAgICAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4mIGFkZHJl
c3NTcGFjZTsKKyAgICAgICAgQVNUOjpUeXBlQW5ub3RhdGlvbiYgdHlwZUFubm90YXRpb247CiAg
ICAgfTsKLSAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4gcmVjdXJzZUFuZEdldEluZm8oQVNUOjpF
eHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xWYWx1ZSA9IGZhbHNlKTsKLSAgICBPcHRpb25hbDxS
ZWN1cnNlSW5mbz4gZ2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTFZhbHVl
ID0gZmFsc2UpOworICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiByZWN1cnNlQW5kR2V0SW5mbyhB
U1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlID0gZmFsc2UpOworICAgIE9w
dGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWly
ZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+PiByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uJik7CiAgICAgYm9vbCByZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKEFTVDo6RXhwcmVzc2lv
biYpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4mJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpudWxs
b3B0KTsKLSAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVmUHRyPFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlPiYmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBXVEY6
Om51bGxvcHQpOwotICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVzb2x2
aW5nVHlwZSYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVsbG9wdCk7Cisg
ICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKKyAgICB2b2lkIGFzc2lnblR5cGUoQVNU
OjpFeHByZXNzaW9uJiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmLCBBU1Q6OlR5
cGVBbm5vdGF0aW9uKTsKKyAgICB2b2lkIGZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJl
c29sdmluZ1R5cGUmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKIAogICAgIHZvaWQgdmlzaXQoQVNU
OjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CkBAIC00OTQsNyArNDkyLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mKSBvdmVycmlkZTsKIAogICAg
IEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgUmVzb2x2aW5nVHlwZT4gbV90eXBlTWFwOwotICAg
IEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+PiBt
X2FkZHJlc3NTcGFjZU1hcDsKKyAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIEFTVDo6VHlw
ZUFubm90YXRpb24+IG1fdHlwZUFubm90YXRpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3Zl
cnRleEVudHJ5UG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQb2lu
dHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzOwpAQCAtNTI3LDE5
ICs1MjUsMTkgQEAgYm9vbCBDaGVja2VyOjphc3NpZ25UeXBlcygpCiAgICAgICAgICAgICBrZXlW
YWx1ZVBhaXIua2V5LT5zZXRUeXBlKHVubmFtZWRUeXBlLT5jbG9uZSgpKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgewotICAgICAgICAgICAgaWYg
KCFyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUo
KSkgeworICAgICAgICAgICAgaWYgKCFyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJs
ZVR5cGUoKS5tYXliZVJlc29sdmVkVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0
aWNfY2FzdDxib29sPihjb21taXQocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVU
eXBlKCkpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0VHlwZShyZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAg
ICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5zZXRUeXBlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpLmNsb25lKCkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWly
IDogbV9hZGRyZXNzU3BhY2VNYXApCi0gICAgICAgIGtleVZhbHVlUGFpci5rZXktPnNldEFkZHJl
c3NTcGFjZShrZXlWYWx1ZVBhaXIudmFsdWUpOworICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWly
IDogbV90eXBlQW5ub3RhdGlvbnMpCisgICAgICAgIGtleVZhbHVlUGFpci5rZXktPnNldFR5cGVB
bm5vdGF0aW9uKFdURk1vdmUoa2V5VmFsdWVQYWlyLnZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTYyMSw2ICs2MTksMTcgQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5nVHlwZSYgcmVzb2wKICAgICB9
KSk7CiB9CiAKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNv
bW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQoreworICAgIHJldHVybiByZXNvbHZp
bmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiYgdW5uYW1lZFR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
Pj4geworICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7CisgICAgfSwgWyZdKFJl
ZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAt
PiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgaWYgKCFy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5tYXliZVJlc29sdmVkVHlw
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbW1pdChyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+
cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpOworICAgIH0pKTsKK30K
Kwogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVy
YXRpb25EZWZpbml0aW9uKQogewogICAgIGF1dG8qIGJhc2VUeXBlID0gKFsmXSgpIC0+IEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiB7CkBAIC02NDMsMTggKzY1MiwyMiBAQCB2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRp
b24pCiAKICAgICBhdXRvIGVudW1lcmF0aW9uTWVtYmVycyA9IGVudW1lcmF0aW9uRGVmaW5pdGlv
bi5lbnVtZXJhdGlvbk1lbWJlcnMoKTsKIAotICAgIGZvciAoYXV0byYgbWVtYmVyIDogZW51bWVy
YXRpb25NZW1iZXJzKSB7Ci0gICAgICAgIGlmICghbWVtYmVyLmdldCgpLnZhbHVlKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQorICAgIGF1dG8gbWF0Y2hBbmRDb21taXRNZW1iZXIgPSBbJl0o
QVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgbWVtYmVyKSAtPiBib29sIHsKICAgICAgICAgYm9vbCBz
dWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIG1lbWJlci5nZXQoKS52YWx1ZSgpLT52aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkV4cHJlc3Npb24mIHZhbHVlKSB7CisgICAgICAgIG1lbWJl
ci52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkV4cHJlc3Npb24mIHZh
bHVlKSB7CiAgICAgICAgICAgICBhdXRvIHZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHZh
bHVlKTsKICAgICAgICAgICAgIGlmICghdmFsdWVJbmZvKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1p
dCh2YWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsICpiYXNlVHlwZSkpOwogICAgICAgICB9KSk7Ci0g
ICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9Owor
CisgICAgZm9yIChhdXRvJiBtZW1iZXIgOiBlbnVtZXJhdGlvbk1lbWJlcnMpIHsKKyAgICAgICAg
aWYgKCFtZW1iZXIuZ2V0KCkudmFsdWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGlmICghbWF0Y2hBbmRDb21taXRNZW1iZXIobWVtYmVyKSkgewogICAgICAgICAgICAgc2V0
RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjc5LDYgKzY5Miwx
MiBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVt
ZXJhdGlvbkRlZmluaXRpb24pCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQobmV4
dFZhbHVlID49IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpOwogICAgICAgICAgICAg
bWVtYmVyLmdldCgpLnNldFZhbHVlKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKEFTVDo6SW50ZWdl
ckxpdGVyYWwoTGV4ZXI6OlRva2VuKG1lbWJlci5nZXQoKS5vcmlnaW4oKSksIHN0YXRpY19jYXN0
PGludD4obmV4dFZhbHVlKSkpKTsKKworICAgICAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1pdE1l
bWJlcihtZW1iZXIpKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG5leHRWYWx1ZSA9IGJh
c2VUeXBlLT5zdWNjZXNzb3IoKShuZXh0VmFsdWUpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzIy
LDMyICs3NDEsMzIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6
VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKIHsKLSAgICBBU1NFUlQodHlwZVJlZmVyZW5j
ZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UubWF5YmVSZXNvbHZl
ZFR5cGUoKSk7CiAKICAgICBmb3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6IHR5cGVSZWZlcmVuY2Uu
dHlwZUFyZ3VtZW50cygpKQogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50
KTsKIH0KIAotYXV0byBDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24m
IGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMVmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZv
PgorYXV0byBDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGV4cHJl
c3Npb24sIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgog
ewogICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOwogICAgIGlmIChlcnJvcigpKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBnZXRJbmZvKGV4cHJlc3Npb24s
IHJlcXVpcmVzTFZhbHVlKTsKKyAgICByZXR1cm4gZ2V0SW5mbyhleHByZXNzaW9uLCByZXF1aXJl
c0xlZnRWYWx1ZSk7CiB9CiAKLWF1dG8gQ2hlY2tlcjo6Z2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24m
IGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMVmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJbmZv
PgorYXV0byBDaGVja2VyOjpnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9v
bCByZXF1aXJlc0xlZnRWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CiB7CiAgICAgYXV0
byB0eXBlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmZXhwcmVzc2lvbik7CiAgICAgQVNTRVJU
KHR5cGVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOwogCi0gICAgYXV0byBhZGRyZXNzU3Bh
Y2VJdGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFwLmZpbmQoJmV4cHJlc3Npb24pOwotICAgIEFT
U0VSVChhZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7Ci0g
ICAgaWYgKHJlcXVpcmVzTFZhbHVlICYmICFhZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUpIHsK
KyAgICBhdXRvIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3IgPSBtX3R5cGVBbm5vdGF0aW9ucy5maW5k
KCZleHByZXNzaW9uKTsKKyAgICBBU1NFUlQodHlwZUFubm90YXRpb25JdGVyYXRvciAhPSBtX3R5
cGVBbm5vdGF0aW9ucy5lbmQoKSk7CisgICAgaWYgKHJlcXVpcmVzTGVmdFZhbHVlICYmIHR5cGVB
bm5vdGF0aW9uSXRlcmF0b3ItPnZhbHVlLmlzUmlnaHRWYWx1ZSgpKSB7CiAgICAgICAgIHNldEVy
cm9yKCk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiB7
eyB0eXBlSXRlcmF0b3ItPnZhbHVlLCBhZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUgfX07Cisg
ICAgcmV0dXJuIHt7IHR5cGVJdGVyYXRvci0+dmFsdWUsIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3It
PnZhbHVlIH19OwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKQEAgLTc2NywyMCArNzg2LDMzIEBAIHZvaWQgQ2hl
Y2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9u
KQogICAgIH0KIH0KIAotdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYg
ZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdW5uYW1lZFR5cGUsIE9w
dGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2UpCit2b2lkIENoZWNrZXI6OmFz
c2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mJiB1bm5hbWVkVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlv
biA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFw
LmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh1bm5hbWVkVHlwZSkpOwogICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgYXV0byBhZGRyZXNzU3Bh
Y2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NT
cGFjZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NT
cGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIHR5cGVBbm5vdGF0aW9uQWRkUmVz
dWx0ID0gbV90eXBlQW5ub3RhdGlvbnMuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5v
dGF0aW9uKSk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQW5ub3RhdGlvbkFkZFJlc3VsdCwgdHlw
ZUFubm90YXRpb25BZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNz
aWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgT3B0aW9uYWw8QVNUOjpBZGRy
ZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKK3ZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4
cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiBy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlv
biA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFw
LmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkpOwogICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgYXV0
byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Np
b24sIGFkZHJlc3NTcGFjZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1
bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIHR5cGVBbm5v
dGF0aW9uQWRkUmVzdWx0ID0gbV90eXBlQW5ub3RhdGlvbnMuYWRkKCZleHByZXNzaW9uLCBXVEZN
b3ZlKHR5cGVBbm5vdGF0aW9uKSk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQW5ub3RhdGlvbkFk
ZFJlc3VsdCwgdHlwZUFubm90YXRpb25BZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQg
Q2hlY2tlcjo6Zm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZXNvbHZp
bmdUeXBlJiByZXNvbHZpbmdUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9u
ID0gQVNUOjpSaWdodFZhbHVlKCkpCit7CisgICAgcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc3VsdCkgeworICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHJlc3VsdC0+
Y2xvbmUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJl
c3VsdCkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Np
b24sIHJlc3VsdC5jb3B5UmVmKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0pKTsKKyAgICBhdXRvIHR5cGVBbm5vdGF0aW9u
QWRkUmVzdWx0ID0gbV90eXBlQW5ub3RhdGlvbnMuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHR5
cGVBbm5vdGF0aW9uKSk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQW5ub3RhdGlvbkFkZFJlc3Vs
dCwgdHlwZUFubm90YXRpb25BZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKIHZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24p
CkBAIC03ODksNiArODIxLDExIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50
RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCiAgICAgaWYgKCFsZWZ0SW5mbykKICAg
ICAgICAgcmV0dXJuOwogCisgICAgaWYgKGxlZnRJbmZvLT50eXBlQW5ub3RhdGlvbi5pc1JpZ2h0
VmFsdWUoKSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgYXV0byByaWdodEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhhc3NpZ25tZW50RXhwcmVz
c2lvbi5yaWdodCgpKTsKICAgICBpZiAoIXJpZ2h0SW5mbykKICAgICAgICAgcmV0dXJuOwpAQCAt
ODAyLDMyICs4MzksMTkgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHBy
ZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKICAgICBhc3NpZ25UeXBlKGFzc2lnbm1lbnRF
eHByZXNzaW9uLCBXVEZNb3ZlKCpyZXN1bHRUeXBlKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6Zm9y
d2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlJiByZXNv
bHZpbmdUeXBlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlKQotewot
ICAgIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5
cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0sIFsmXShSZWZQ
dHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJlZigpKTsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAg
ICB9KSk7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1h
cC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRy
ZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLX0K
LQogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJz
ZUFuZEdldEluZm8ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSwgdHJ1ZSk7Ci0g
ICAgaWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRH
ZXRJbmZvKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCksIHRydWUpOworICAg
IGlmICghbGVmdFZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IEZp
Z3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJ3Mg
QW5vbnltb3VzVmFyaWFibGVzLgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY2IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSBS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJ3MgQW5vbnltb3VzVmFyaWFibGVzLgogCiAgICAgYXV0
byBuZXdWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbygqcmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSk7CiAgICAgaWYgKCFuZXdWYWx1ZUluZm8pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICghbWF0Y2hBbmRDb21taXQobFZhbHVlSW5mby0+cmVzb2x2
aW5nVHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKSkgeworICAgIGlmICghbWF0Y2hB
bmRDb21taXQobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNv
bHZpbmdUeXBlKSkgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtODQ1LDcgKzg2OSw3IEBAIHN0YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBnZXRVbm5hbWVk
VHlwZShSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQogICAgICAgICByZXR1cm4gJnR5cGU7
CiAgICAgfSwgW10oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdHlwZSkgLT4gQVNU
OjpVbm5hbWVkVHlwZSogewogICAgICAgICAvLyBGSVhNRTogSWYgdGhlIHR5cGUgaXNuJ3QgY29t
bWl0dGVkLCBzaG91bGQgd2UganVzdCBjb21taXQoKSBpdCBub3c/Ci0gICAgICAgIHJldHVybiB0
eXBlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpOworICAgICAgICByZXR1cm4gdHlw
ZS0+cmVzb2x2YWJsZVR5cGUoKS5tYXliZVJlc29sdmVkVHlwZSgpOwogICAgIH0pKTsKIH0KIApA
QCAtODczLDIzMSArODk3LDE2MiBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVu
Y2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhc3NpZ25UeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUt
PmNsb25lKCksIHBvaW50ZXJUeXBlLT5hZGRyZXNzU3BhY2UoKSk7CisgICAgYXNzaWduVHlwZShk
ZXJlZmVyZW5jZUV4cHJlc3Npb24sIHBvaW50ZXJUeXBlLT5jbG9uZSgpLCBBU1Q6OkxlZnRWYWx1
ZSB7IHBvaW50ZXJUeXBlLT5hZGRyZXNzU3BhY2UoKSB9KTsKIH0KIAogdm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQog
ewotICAgIGF1dG8gbFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VQb2ludGVyRXhw
cmVzc2lvbi5sVmFsdWUoKSwgdHJ1ZSk7Ci0gICAgaWYgKCFsVmFsdWVJbmZvKQorICAgIGF1dG8g
bGVmdFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5s
ZWZ0VmFsdWUoKSwgdHJ1ZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVJbmZvKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvKiBsVmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobFZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSk7Ci0gICAgaWYgKCFsVmFsdWVUeXBlKSB7CisgICAgYXV0byBsZWZ0QWRk
cmVzc1NwYWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFj
ZSgpOworICAgIGlmICghbGVmdEFkZHJlc3NTcGFjZSkgewogICAgICAgICBzZXRFcnJvcigpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlwZShtYWtlUG9pbnRlckV4cHJl
c3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UsIGxW
YWx1ZVR5cGUtPmNsb25lKCkpKTsKKyAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0VW5uYW1l
ZFR5cGUobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFsZWZ0VmFsdWVU
eXBlKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhc3NpZ25UeXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBv
aW50ZXJUeXBlPihMZXhlcjo6VG9rZW4obWFrZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwg
KmxlZnRBZGRyZXNzU3BhY2UsIGxlZnRWYWx1ZVR5cGUtPmNsb25lKCkpKTsKIH0KIAogdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24pCiB7Ci0gICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFu
ZEdldEluZm8obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgaWYg
KCFsVmFsdWVJbmZvKQorICAgIGF1dG8gbGVmdFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZv
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOworICAgIGlmICghbGVm
dFZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogbFZhbHVlVHlwZSA9IGdl
dFVubmFtZWRUeXBlKGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOwotICAgIGlmICghbFZhbHVl
VHlwZSkgeworICAgIGF1dG8qIGxlZnRWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsZWZ0VmFs
dWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBpZiAoIWxlZnRWYWx1ZVR5cGUpIHsKICAgICAg
ICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8mIHVuaWZ5
Tm9kZSA9IGxWYWx1ZVR5cGUtPnVuaWZ5Tm9kZSgpOworICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGxl
ZnRWYWx1ZVR5cGUtPnVuaWZ5Tm9kZSgpOwogICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1
bmlmeU5vZGUpKSB7CiAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpV
bm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRUeXBlKSkgewogICAgICAgICAgICAgYXV0byYgcG9pbnRlclR5cGUgPSBkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
U2F2ZSB0aGUgZmFjdCB0aGF0IHdlJ3JlIG5vdCB0YXJnZXR0aW5nIHRoZSBpdGVtOyB3ZSdyZSB0
YXJnZXR0aW5nIHRoZSBpdGVtJ3MgaW5uZXIgZWxlbWVudC4KKyAgICAgICAgICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYzIFNhdmUgdGhl
IGZhY3QgdGhhdCB3ZSdyZSBub3QgdGFyZ2V0dGluZyB0aGUgaXRlbTsgd2UncmUgdGFyZ2V0dGlu
ZyB0aGUgaXRlbSdzIGlubmVyIGVsZW1lbnQuCiAgICAgICAgICAgICBhc3NpZ25UeXBlKG1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigp
KSwgcG9pbnRlclR5cGUuYWRkcmVzc1NwYWNlKCksIHBvaW50ZXJUeXBlLmVsZW1lbnRUeXBlKCku
Y2xvbmUoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KCFsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UpIHsKKyAgICAgICAgYXV0byBsZWZ0QWRkcmVzc1Nw
YWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOwor
ICAgICAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKICAgICAgICAgICAgIHNldEVycm9yKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8QVNUOjpB
cnJheVR5cGU+KHVubmFtZWRUeXBlKSkgewogICAgICAgICAgICAgYXV0byYgYXJyYXlUeXBlID0g
ZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBTYXZlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMuCi0gICAgICAgICAgICBhc3NpZ25UeXBl
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9y
aWdpbigpKSwgKmxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9u
ZSgpKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5ODE2MyBTYXZlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMuCisgICAgICAg
ICAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVS
ZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50eXBl
KCkuY2xvbmUoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKCFsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UpIHsKKyAgICBhdXRvIGxlZnRBZGRyZXNz
U3BhY2UgPSBsZWZ0VmFsdWVJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7
CisgICAgaWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpU
b2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUluZm8t
PmFkZHJlc3NTcGFjZSwgbFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAgIGFzc2lnblR5cGUobWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2lu
KCkpLCAqbGVmdEFkZHJlc3NTcGFjZSwgbGVmdFZhbHVlVHlwZS0+Y2xvbmUoKSkpOwogfQogCi12
b2lkIENoZWNrZXI6OmZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgQVNUOjpVbm5hbWVkVHlw
ZSYgd3JhcHBlZEJhc2VUeXBlLCBBU1Q6OlVubmFtZWRUeXBlKiBleHRyYUFyZ3VtZW50VHlwZSkK
K3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQog
ewotICAgIHVzaW5nIE92ZXJsb2FkUmVzb2x1dGlvbiA9IHN0ZDo6dHVwbGU8QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKiwgQVNUOjpVbm5hbWVkVHlwZSo+OwotCi0gICAgQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKiBnZXRGdW5jdGlvbjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiBnZXRSZXR1cm5U
eXBlOwotICAgIHN0ZDo6dGllKGdldEZ1bmN0aW9uLCBnZXRSZXR1cm5UeXBlKSA9IChbJl0oKSAt
PiBPdmVybG9hZFJlc29sdXRpb24gewotICAgICAgICBSZXNvbHZpbmdUeXBlIGdldEFyZ3VtZW50
VHlwZTEod3JhcHBlZEJhc2VUeXBlLmNsb25lKCkpOwotICAgICAgICBPcHRpb25hbDxSZXNvbHZp
bmdUeXBlPiBnZXRBcmd1bWVudFR5cGUyOwotICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUp
Ci0gICAgICAgICAgICBnZXRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3Vt
ZW50VHlwZS0+Y2xvbmUoKSk7Ci0KLSAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+IGdldEFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGdldEFyZ3VtZW50
VHlwZXMuYXBwZW5kKGdldEFyZ3VtZW50VHlwZTEpOwotICAgICAgICBpZiAoZ2V0QXJndW1lbnRU
eXBlMikKLSAgICAgICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpnZXRBcmd1bWVudFR5
cGUyKTsKLQotICAgICAgICBhdXRvKiBnZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwg
Z2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAgICAgIGlmICghZ2V0RnVuY3Rpb24pCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVsbHB0cik7Ci0gICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihnZXRGdW5jdGlvbiwgJmdldEZ1bmN0aW9uLT50eXBl
KCkpOwotICAgIH0pKCk7CisgICAgYXV0byBiYXNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGRv
dEV4cHJlc3Npb24uYmFzZSgpKTsKKyAgICBpZiAoIWJhc2VJbmZvKQorICAgICAgICByZXR1cm47
CisgICAgYXV0byBiYXNlVW5uYW1lZFR5cGUgPSBjb21taXQoYmFzZUluZm8tPnJlc29sdmluZ1R5
cGUpOworICAgIGlmICghYmFzZVVubmFtZWRUeXBlKQorICAgICAgICByZXR1cm47CiAKLSAgICBB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGFuZEZ1bmN0aW9uOwotICAgIEFTVDo6VW5uYW1lZFR5
cGUqIGFuZFJldHVyblR5cGU7Ci0gICAgc3RkOjp0aWUoYW5kRnVuY3Rpb24sIGFuZFJldHVyblR5
cGUpID0gKFsmXSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlvbiB7Ci0gICAgICAgIGF1dG8gY29tcHV0
ZUFuZEFyZ3VtZW50VHlwZSA9IFsmXShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4g
T3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gewotICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgdW5u
YW1lZFR5cGUuY2xvbmUoKSB9OwotICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1
bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgUmVzb2x2aW5nVHlwZShtYWtl
VW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4ocHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93
bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCkuY2xvbmUoKSkpIH07Ci0g
ICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4geyBSZXNv
bHZpbmdUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQsIGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpLmNsb25lKCkpKSB9
OwotICAgICAgICB9OwotICAgICAgICBhdXRvIGNvbXB1dGVBbmRSZXR1cm5UeXBlID0gWyZdKEFT
VDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7Ci0gICAg
ICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAg
ICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVs
ZW1lbnRUeXBlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfTsKKyAg
ICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldHRlckZ1bmN0aW9uID0gbnVsbHB0cjsKKyAg
ICBBU1Q6OlVubmFtZWRUeXBlKiBnZXR0ZXJSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICB7Cisg
ICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBnZXR0
ZXJBcmd1bWVudFR5cGVzIHsgYmFzZUluZm8tPnJlc29sdmluZ1R5cGUgfTsKKyAgICAgICAgZ2V0
dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5w
b3NzaWJsZUdldHRlck92ZXJsb2FkcygpLCBnZXR0ZXJBcmd1bWVudFR5cGVzLCBudWxscHRyKTsK
KyAgICAgICAgaWYgKGdldHRlckZ1bmN0aW9uKQorICAgICAgICAgICAgZ2V0dGVyUmV0dXJuVHlw
ZSA9ICZnZXR0ZXJGdW5jdGlvbi0+dHlwZSgpOworICAgIH0KIAotICAgICAgICBhdXRvIGFuZEFy
Z3VtZW50VHlwZTEgPSBjb21wdXRlQW5kQXJndW1lbnRUeXBlKHdyYXBwZWRCYXNlVHlwZSk7Ci0g
ICAgICAgIGlmICghYW5kQXJndW1lbnRUeXBlMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlw
ZT4gYW5kQXJndW1lbnRUeXBlMjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAg
ICAgICAgICAgYW5kQXJndW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5
cGUtPmNsb25lKCkpOwotCi0gICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJl
c29sdmluZ1R5cGU+PiBhbmRBcmd1bWVudFR5cGVzOwotICAgICAgICBhbmRBcmd1bWVudFR5cGVz
LmFwcGVuZCgqYW5kQXJndW1lbnRUeXBlMSk7Ci0gICAgICAgIGlmIChhbmRBcmd1bWVudFR5cGUy
KQotICAgICAgICAgICAgYW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoKmFuZEFyZ3VtZW50VHlwZTIp
OwotCi0gICAgICAgIGF1dG8qIGFuZEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJ
bXBsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZUFuZE92ZXJsb2FkcygpLCBhbmRB
cmd1bWVudFR5cGVzLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFhbmRGdW5jdGlvbikKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGFuZEZ1bmN0aW9uLCBjb21wdXRlQW5kUmV0dXJuVHlwZShh
bmRGdW5jdGlvbi0+dHlwZSgpKSk7Ci0gICAgfSkoKTsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIGFuZGVyRnVuY3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFu
ZGVyUmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9
IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAg
YXV0byBhcmd1bWVudFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVy
OjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGJhc2VV
bm5hbWVkVHlwZS0+Z2V0KCkuY2xvbmUoKSk7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhbmRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5mby0+
cmVzb2x2aW5nVHlwZSB9OworICAgICAgICBhbmRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVBbmRlck92ZXJsb2FkcygpLCBhbmRl
ckFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAgICBpZiAoYW5kZXJGdW5jdGlvbikKKyAg
ICAgICAgICAgIGFuZGVyUmV0dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihh
bmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY0IEVuZm9yY2UgdGhlIHJldHVybiBv
ZiBhbmRlcnMgd2lsbCBhbHdheXMgYmUgYSBwb2ludGVyCisgICAgfQogCi0gICAgaWYgKCFnZXRS
ZXR1cm5UeXBlICYmICFhbmRSZXR1cm5UeXBlKSB7Ci0gICAgICAgIHNldEVycm9yKCk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHRocmVhZEFuZGVyRnVu
Y3Rpb24gPSBudWxscHRyOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIHRocmVhZEFuZGVyUmV0dXJu
VHlwZSA9IG51bGxwdHI7CisgICAgeworICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3Jp
Z2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlVW5uYW1lZFR5cGUtPmdldCgp
LmNsb25lKCkpOworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZp
bmdUeXBlPj4gdGhyZWFkQW5kZXJBcmd1bWVudFR5cGVzIHsgYmFzZUluZm8tPnJlc29sdmluZ1R5
cGUgfTsKKyAgICAgICAgdGhyZWFkQW5kZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3NpYmxlQW5kZXJPdmVybG9hZHMoKSwgdGhyZWFkQW5k
ZXJBcmd1bWVudFR5cGVzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKHRocmVhZEFuZGVyRnVuY3Rp
b24pCisgICAgICAgICAgICB0aHJlYWRBbmRlclJldHVyblR5cGUgPSAmZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4odGhyZWFkQW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpOyAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2NCBF
bmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJzIHdpbGwgYWx3YXlzIGJlIGEgcG9pbnRlcgogICAg
IH0KIAotICAgIGlmIChnZXRSZXR1cm5UeXBlICYmIGFuZFJldHVyblR5cGUgJiYgIW1hdGNoZXMo
KmdldFJldHVyblR5cGUsICphbmRSZXR1cm5UeXBlKSkgeworICAgIGlmICghZ2V0dGVyRnVuY3Rp
b24gJiYgIWFuZGVyRnVuY3Rpb24pIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLQotICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0RnVuY3Rpb247
Ci0gICAgQVNUOjpVbm5hbWVkVHlwZSogc2V0UmV0dXJuVHlwZTsKLSAgICBzdGQ6OnRpZShzZXRG
dW5jdGlvbiwgc2V0UmV0dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsK
LSAgICAgICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDFUeXBlKHdyYXBwZWRCYXNlVHlwZS5j
bG9uZSgpKTsKLSAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gc2V0QXJndW1lbnRUeXBl
MjsKLSAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQotICAgICAgICAgICAgc2V0QXJndW1l
bnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOwotICAg
ICAgICBSZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50M1R5cGUoZ2V0UmV0dXJuVHlwZSA/IGdldFJl
dHVyblR5cGUtPmNsb25lKCkgOiBhbmRSZXR1cm5UeXBlLT5jbG9uZSgpKTsKLQotICAgICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gc2V0QXJndW1lbnRU
eXBlczsKLSAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoc2V0QXJndW1lbnQxVHlwZSk7
Ci0gICAgICAgIGlmIChzZXRBcmd1bWVudFR5cGUyKQotICAgICAgICAgICAgc2V0QXJndW1lbnRU
eXBlcy5hcHBlbmQoKnNldEFyZ3VtZW50VHlwZTIpOwotICAgICAgICBzZXRBcmd1bWVudFR5cGVz
LmFwcGVuZChzZXRBcmd1bWVudDNUeXBlKTsKLQotICAgICAgICBhdXRvKiBzZXRGdW5jdGlvbiA9
IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9z
c2libGVTZXRPdmVybG9hZHMoKSwgc2V0QXJndW1lbnRUeXBlcywgbnVsbHB0cik7Ci0gICAgICAg
IGlmICghc2V0RnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVs
bHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzZXRGdW5jdGlv
biwgJnNldEZ1bmN0aW9uLT50eXBlKCkpOwotICAgIH0pKCk7Ci0KLSAgICBpZiAoc2V0RnVuY3Rp
b24pIHsKLSAgICAgICAgaWYgKCFtYXRjaGVzKHNldEZ1bmN0aW9uLT50eXBlKCksIHdyYXBwZWRC
YXNlVHlwZSkpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KKyAgICBpZiAoZ2V0dGVyRnVuY3Rpb24gJiYgYW5kZXJGdW5jdGlvbikgewor
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgT3B0aW9u
YWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKLSAgICBpZiAoZ2V0UmV0dXJuVHlw
ZSB8fCBhbmRSZXR1cm5UeXBlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGUgcmVmZXJlbmNlIGNv
bXBpbGVyIGhhcyAiZWxzZSBpZiAoIW5vZGUuYmFzZS5pc0xWYWx1ZSAmJiAhYmFzZVR5cGUuaXNB
cnJheVJlZikiLAotICAgICAgICAvLyBidXQgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSBpdCBleGlz
dHMuIEkgaGF2ZW4ndCB3cml0dGVuIGl0IGhlcmUsIGFuZCBJJ2xsIGludmVzdGlnYXRlCi0gICAg
ICAgIC8vIGlmIHdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGUgcmVmZXJlbmNlIGNvbXBpbGVyLgot
ICAgICAgICBpZiAoaXM8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVkQmFzZVR5cGUpKQotICAg
ICAgICAgICAgYWRkcmVzc1NwYWNlID0gZG93bmNhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFw
cGVkQmFzZVR5cGUpLmFkZHJlc3NTcGFjZSgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFjZU1hcC5maW5kKCZwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChhZGRyZXNz
U3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7Ci0gICAgICAgICAgICBp
ZiAoYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAgICAgICAgIGFkZHJlc3NT
cGFjZSA9ICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGlmIChhbmRlckZ1bmN0aW9uICYmIHRocmVhZEFu
ZGVyRnVuY3Rpb24gJiYgIW1hdGNoZXMoKmFuZGVyUmV0dXJuVHlwZSwgKnRocmVhZEFuZGVyUmV0
dXJuVHlwZSkpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIC8vIEZJWE1FOiBHZW5lcmF0ZSB0aGUgY2FsbCBleHByZXNzaW9ucworICAgIEFTVDo6
VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdldHRlclJldHVyblR5cGUgPyBnZXR0ZXJSZXR1cm5U
eXBlIDogYW5kZXJSZXR1cm5UeXBlOwogCi0gICAgYXNzaWduVHlwZShwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24sIGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0
dXJuVHlwZS0+Y2xvbmUoKSwgYWRkcmVzc1NwYWNlKTsKLX0KLQotT3B0aW9uYWw8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+PiBDaGVja2VyOjpyZWN1cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCi17Ci0g
ICAgYXV0byBiYXNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5iYXNlKCkpOwotICAgIGlmICghYmFzZUluZm8pCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICBhdXRvKiBiYXNlVHlwZSA9IGdldFVubmFtZWRUeXBlKGJhc2VJbmZvLT5y
ZXNvbHZpbmdUeXBlKTsKLSAgICBpZiAoIWJhc2VUeXBlKSB7Ci0gICAgICAgIHNldEVycm9yKCk7
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKiBzZXR0ZXJGdW5jdGlvbiA9IG51bGxwdHI7CisgICAgQVNUOjpVbm5hbWVkVHlwZSogc2V0
dGVyUmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAgeworICAgICAgICBSZXNvbHZpbmdUeXBlIGZp
ZWxkUmVzb2x2aW5nVHlwZShmaWVsZFR5cGUtPmNsb25lKCkpOworICAgICAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gc2V0dGVyQXJndW1lbnRUeXBlcyB7
IGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlLCBmaWVsZFJlc29sdmluZ1R5cGUgfTsKKyAgICAgICAg
c2V0dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lv
bi5wb3NzaWJsZVNldHRlck92ZXJsb2FkcygpLCBzZXR0ZXJBcmd1bWVudFR5cGVzLCBudWxscHRy
KTsKKyAgICAgICAgaWYgKHNldHRlckZ1bmN0aW9uKQorICAgICAgICAgICAgc2V0dGVyUmV0dXJu
VHlwZSA9ICZzZXR0ZXJGdW5jdGlvbi0+dHlwZSgpOwogICAgIH0KLSAgICBhdXRvJiBiYXNlVW5p
ZnlOb2RlID0gYmFzZVR5cGUtPnVuaWZ5Tm9kZSgpOwotICAgIGlmIChpczxBU1Q6OlVubmFtZWRU
eXBlPihiYXNlVW5pZnlOb2RlKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6VW5uYW1l
ZFR5cGU+KGJhc2VVbmlmeU5vZGUpLmNsb25lKCk7Ci0gICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRU
eXBlPihiYXNlVW5pZnlOb2RlKSk7Ci0gICAgcmV0dXJuIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBkb3du
Y2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkpIH07Ci19CiAKLXZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQotewotICAgIGF1dG8g
YmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGRvdEV4cHJlc3Npb24pOwotICAgIGlm
ICghYmFzZVR5cGUpCisgICAgaWYgKHNldHRlckZ1bmN0aW9uICYmIGFuZGVyRnVuY3Rpb24pIHsK
KyAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGZpbmlz
aFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoZG90RXhwcmVzc2lvbiwgKmJhc2VUeXBlKTsKKyAgICBk
b3RFeHByZXNzaW9uLnNldEdldHRlckZ1bmN0aW9uKGdldHRlckZ1bmN0aW9uKTsKKyAgICBkb3RF
eHByZXNzaW9uLnNldEFuZGVyRnVuY3Rpb24oYW5kZXJGdW5jdGlvbik7CisgICAgZG90RXhwcmVz
c2lvbi5zZXRUaHJlYWRBbmRlckZ1bmN0aW9uKHRocmVhZEFuZGVyRnVuY3Rpb24pOworICAgIGRv
dEV4cHJlc3Npb24uc2V0U2V0dGVyRnVuY3Rpb24oc2V0dGVyRnVuY3Rpb24pOworCisgICAgQVNU
OjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpOworICAg
IGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5mby0+dHlwZUFubm90YXRpb24ubGVm
dEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgIGlmIChhbmRlckZ1bmN0aW9uKQorICAgICAgICAg
ICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRkcmVzc1NwYWNlIH07
CisgICAgICAgIGVsc2UgaWYgKHNldHRlckZ1bmN0aW9uKQorICAgICAgICAgICAgdHlwZUFubm90
YXRpb24gPSBBU1Q6OkFic3RyYWN0TGVmdFZhbHVlKCk7CisgICAgfSBlbHNlIGlmICghYmFzZUlu
Zm8tPnR5cGVBbm5vdGF0aW9uLmlzUmlnaHRWYWx1ZSgpICYmIChzZXR0ZXJGdW5jdGlvbiB8fCBh
bmRlckZ1bmN0aW9uKSkKKyAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkFic3RyYWN0TGVm
dFZhbHVlKCk7CisgICAgYXNzaWduVHlwZShkb3RFeHByZXNzaW9uLCBmaWVsZFR5cGUtPmNsb25l
KCksIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0KIAotdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQordm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpCiB7Ci0gICAgYXV0byBiYXNlVHlwZSA9IHJlY3Vyc2VB
bmRXcmFwQmFzZVR5cGUoaW5kZXhFeHByZXNzaW9uKTsKLSAgICBpZiAoIWJhc2VUeXBlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGluZGV4SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGlu
ZGV4RXhwcmVzc2lvbi5pbmRleEV4cHJlc3Npb24oKSk7Ci0gICAgaWYgKCFpbmRleEluZm8pCi0g
ICAgICAgIHJldHVybjsKLSAgICBhdXRvIGluZGV4RXhwcmVzc2lvblR5cGUgPSBnZXRVbm5hbWVk
VHlwZShpbmRleEluZm8tPnJlc29sdmluZ1R5cGUpOwotICAgIGlmICghaW5kZXhFeHByZXNzaW9u
VHlwZSkgewotICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhpbmRleEV4cHJlc3Npb24sIFdURk1vdmUo
KmJhc2VUeXBlKSwgaW5kZXhFeHByZXNzaW9uVHlwZSk7CisgICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjMgSW1wbGVtZW50IHRoaXMuCiB9
CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFibGVS
ZWZlcmVuY2UpCkBAIC0xMTA1LDEwICsxMDYwLDEwIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpCiAgICAgQVNTRVJUKHZhcmlh
YmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOwogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52
YXJpYWJsZSgpLT50eXBlKCkpOwogICAgIAotICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNl
PiBhZGRyZXNzU3BhY2U7Ci0gICAgaWYgKCF2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT5p
c0Fub255bW91cygpKQotICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OkFkZHJlc3NTcGFjZTo6
VGhyZWFkOwotICAgIGFzc2lnblR5cGUodmFyaWFibGVSZWZlcmVuY2UsIHZhcmlhYmxlUmVmZXJl
bmNlLnZhcmlhYmxlKCktPnR5cGUoKS0+Y2xvbmUoKSwgYWRkcmVzc1NwYWNlKTsKKyAgICBBU1Q6
OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCk7CisgICAg
aWYgKCF2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT5pc0Fub255bW91cygpKSAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2NiBUaGlzIGRv
ZXNuJ3Qgc2VlbSByaWdodC4KKyAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkxlZnRWYWx1
ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfTsKKyAgICBhc3NpZ25UeXBlKHZhcmlhYmxl
UmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCktPmNsb25lKCks
IFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQpAQCAtMTQwNyw3ICsxMzYyLDcgQEAgdm9pZCBDaGVj
a2VyOjp2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQogICAgIGlm
IChlcnJvcigpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBsYXN0SW5mbyA9IGdldEluZm8o
Y29tbWFFeHByZXNzaW9uLmxpc3QoKS5sYXN0KCkpOwotICAgIGZvcndhcmRUeXBlKGNvbW1hRXhw
cmVzc2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGZvcndhcmRUeXBlKGNvbW1h
RXhwcmVzc2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUsIGxhc3RJbmZvLT50eXBlQW5ub3Rh
dGlvbik7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYg
dGVybmFyeUV4cHJlc3Npb24pCkBAIC0xNDU2LDcgKzE0MTEsNyBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQogICAgIH0KIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KHR5cGVzW2ldLmdldCgpLCAqZnVuY3Rpb24t
PnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKSB7CisgICAgICAgIGlmICghbWF0Y2hBbmRDb21taXQo
dHlwZXNbaV0uZ2V0KCksICpmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLT50eXBlKCkpKSB7CiAg
ICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhl
ckVudHJ5UG9pbnRJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKaW5kZXggYTMyYWY1ZWYzNmYyNWMzM2Ez
MjUxYTY5NWVkZWNhYWU5Nzc3NWM0Ny4uOTk2ZGQ4NDA3MmQ1MjlmYTA4OTgwZDJjMWEwOThiYTE2
NWJmZTU0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcApAQCAtNjAsNyAr
NjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY3VycmVudFNlbWFudGljID0gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiYgdGFrZUVudHJ5UG9pbnRJdGVtcygp
CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiB0YWtlRW50cnlQb2ludEl0ZW1zKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZW50cnlQb2ludEl0ZW1zKTsKICAgICB9CkBAIC0x
MTEsMTAgKzExMSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJl
bmNlJiB0eXBlUmVmZXJlbmNlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2Uu
cmVzb2x2ZWRUeXBlKCkpOwogICAgICAgICBtX3R5cGVSZWZlcmVuY2VzLmFwcGVuZCh0eXBlUmVm
ZXJlbmNlKTsKICAgICAgICAgYXV0byBkZXB0aCA9IG1fdHlwZVJlZmVyZW5jZXMuc2l6ZSgpOwot
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkp
OworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUo
KSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVwdGgsIG1fdHlwZVJlZmVyZW5jZXMuc2l6ZSgp
ID09IGRlcHRoKTsKICAgICAgICAgbV90eXBlUmVmZXJlbmNlcy5yZW1vdmVMYXN0KCk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJ
bmZlclR5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
SW5mZXJUeXBlcy5jcHAKaW5kZXggMmZjYzZmMTM5ZGU4NGEzMmM0YzcwN2NhMDYwYjliZTFiNDJm
ZDNlMC4uNjY5OTM2MjZiNDVhYzYxNDE3ZWQ5YWU5NTUxNGIxZTU0Yzc0NjU5MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlw
ZXMuY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAgYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1l
ZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSYgb3RoZXIpCiAKIHN0YXRp
YyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFT
VDo6VHlwZSYgdW5pZnlOb2RlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkK
IHsKLSAgICBBU1NFUlQoIXJlc29sdmFibGVUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBBU1NF
UlQoIXJlc29sdmFibGVUeXBlLm1heWJlUmVzb2x2ZWRUeXBlKCkpOwogICAgIGlmICghcmVzb2x2
YWJsZVR5cGUuY2FuUmVzb2x2ZSh1bmlmeU5vZGUpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewpAQCAtMTMxLDgg
KzEzMSw4IEBAIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRD
b21taXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSwKIAogT3B0aW9uYWw8VW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNv
bHZhYmxlVHlwZTEsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlMikKIHsKLSAg
ICBBU1NFUlQoIXJlc29sdmFibGVUeXBlMS5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgQVNTRVJUKCFy
ZXNvbHZhYmxlVHlwZTIucmVzb2x2ZWRUeXBlKCkpOworICAgIEFTU0VSVCghcmVzb2x2YWJsZVR5
cGUxLm1heWJlUmVzb2x2ZWRUeXBlKCkpOworICAgIEFTU0VSVCghcmVzb2x2YWJsZVR5cGUyLm1h
eWJlUmVzb2x2ZWRUeXBlKCkpOwogICAgIGlmIChpczxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJl
c29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlw
ZTIpKSB7CiAgICAgICAgIHJlc29sdmFibGVUeXBlMS5yZXNvbHZlKGRvd25jYXN0PEFTVDo6Rmxv
YXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7
CiAgICAgICAgIHJlc29sdmFibGVUeXBlMi5yZXNvbHZlKGRvd25jYXN0PEFTVDo6RmxvYXRMaXRl
cmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CkBAIC0x
NTcsNyArMTU3LDcgQEAgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRj
aEFuZENvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHYKIAogT3B0aW9uYWw8VW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBjb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2
YWJsZVR5cGUpCiB7Ci0gICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZS5yZXNvbHZlZFR5cGUoKSk7
CisgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKTsKICAgICBp
ZiAoaXM8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkpIHsKICAgICAgICAg
YXV0byYgZmxvYXRMaXRlcmFsVHlwZSA9IGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4o
cmVzb2x2YWJsZVR5cGUpOwogICAgICAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKGZsb2F0TGl0
ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOwpAQCAtMjI3LDkgKzIyNyw5IEBAIGJv
b2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJsZUZ1
bmN0aW9uLCBWZWN0b3I8c3RkOjpyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIGF1dG8gc3VjY2VzcyA9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVk
VHlwZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqcG9zc2libGVGdW5j
dGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLCB1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBy
ZXR1cm4gbWF0Y2hlcygqcG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSwg
dW5uYW1lZFR5cGUpOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0
dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUo
cG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLT51bmlmeU5vZGUoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBl
KCkuY2FuUmVzb2x2ZShwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLT51
bmlmeU5vZGUoKSk7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuY3BwCmluZGV4IGI0
ZTVmNDM5ZGFkMmE1ZTU0ZjE0ZTUwM2Y0NTg1YzFmMTc0MmFhZTEuLjlhN2IyMmQwNWY1NTJkOTYy
YjYxNDE1ODRjNDc1MGVjNjFmZjc3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExpdGVyYWxUeXBlQ2hlY2tlci5jcHAK
QEAgLTQyLDE1ICs0MiwxMiBAQCBuYW1lc3BhY2UgV0hMU0wgewogI2lmICFBU1NFUlRfRElTQUJM
RUQKIHN0YXRpYyBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogZ2V0TmF0aXZlVHlwZURlY2xh
cmF0aW9uKEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQogewotICAgIGlmICgh
cmVzb2x2YWJsZVR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgaWYgKCFpczxBU1Q6OlR5cGVSZWZl
cmVuY2U+KHJlc29sdmFibGVUeXBlLnJlc29sdmVkVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgaWYgKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KCpyZXNvbHZhYmxlVHlwZS5y
ZXNvbHZlZFR5cGUoKSkpCisgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PEFTVDo6
VHlwZVJlZmVyZW5jZT4ocmVzb2x2YWJsZVR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGlmICgh
aXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBl
KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0g
ZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPigqcmVzb2x2YWJsZVR5cGUucmVzb2x2ZWRUeXBl
KCkpOwotICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKLSAgICBpZiAo
IWlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5
cGUoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiAmZG93bmNhc3Q8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsK
KyAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPih0eXBlUmVm
ZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKIH0KIAogY2xhc3MgTGl0ZXJhbFR5cGVDaGVja2VyIDog
cHVibGljIFZpc2l0b3IgewpAQCAtNzksNyArNzYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB2
aXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlwZSYgbnVsbExpdGVyYWxUeXBlKSBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG51bGxMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAg
ICAgIEFTU0VSVChudWxsTGl0ZXJhbFR5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSk7CiAgICAgfQog
fTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDA1MzUwZTBkYzk4NWVjYjM5MGY1ODZm
MGEzNGQyYTZlY2ZlZGNhMzIuLmVjOGNmNzdmYzUyZDc5NDQ0MGQ0ZDU1YTczNDA3Y2ViM2ZmNDY1
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
TmFtZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBOYW1lUmVzb2x2
ZXI6OnZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKICAgICB9CiAKICAg
ICBWaXNpdG9yOjp2aXNpdCh0eXBlUmVmZXJlbmNlKTsKLSAgICBpZiAodHlwZVJlZmVyZW5jZS5y
ZXNvbHZlZFR5cGUoKSkKKyAgICBpZiAodHlwZVJlZmVyZW5jZS5tYXliZVJlc29sdmVkVHlwZSgp
KSAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2
MSBTaG91bGRuJ3Qgd2Uga25vdyBieSBub3cgd2hldGhlciB0aGUgdHlwZSBoYXMgYmVlbiByZXNv
bHZlZCBvciBub3Q/CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8qIGNhbmRpZGF0ZXMgPSBt
X25hbWVDb250ZXh0LmdldFR5cGVzKHR5cGVSZWZlcmVuY2UubmFtZSgpKTsKQEAgLTE3NCwxMiAr
MTc0LDEyIEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3Rh
dGVtZW50KQogCiB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKIHsKLSAgICBpZiAoYXV0byogZ2V0
RnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLmdldEZ1bmN0aW9uTmFtZSgpKSkKLSAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLnNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKCpnZXRGdW5jdGlvbnMpOwotICAgIGlmIChhdXRv
KiBzZXRGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uc2V0RnVuY3Rpb25OYW1lKCkpKQotICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uc2V0UG9zc2libGVTZXRPdmVybG9hZHMoKnNldEZ1bmN0aW9ucyk7Ci0gICAgaWYg
KGF1dG8qIGFuZEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5hbmRGdW5jdGlvbk5hbWUoKSkpCi0gICAgICAgIHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUFuZE92ZXJsb2FkcygqYW5kRnVuY3Rpb25zKTsKKyAg
ICBpZiAoYXV0byogZ2V0dGVyRnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMo
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAg
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxlR2V0dGVyT3ZlcmxvYWRzKCpnZXR0
ZXJGdW5jdGlvbnMpOworICAgIGlmIChhdXRvKiBzZXR0ZXJGdW5jdGlvbnMgPSBtX25hbWVDb250
ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0dGVyRnVuY3Rpb25O
YW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVTZXR0
ZXJPdmVybG9hZHMoKnNldHRlckZ1bmN0aW9ucyk7CisgICAgaWYgKGF1dG8qIGFuZGVyRnVuY3Rp
b25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LmFuZGVyRnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
c2V0UG9zc2libGVBbmRlck92ZXJsb2FkcygqYW5kZXJGdW5jdGlvbnMpOwogICAgIFZpc2l0b3I6
OnZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7CiB9CiAKQEAgLTE5NiwxMCArMTk2LDEw
IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJl
c3Npb24pCiAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVm
aW5pdGlvbi5tZW1iZXJCeU5hbWUobWVtYmVyTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIDw9IHNp
emVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJs
ZSB0byBiZWNvbWUgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFscyB3aXRob3V0IHVwZGF0aW5nIGJh
Y2tyZWZlcmVuY2VzIik7CiAgICAgICAgICAgICAgICAgICAgIExleGVyOjpUb2tlbiBvcmlnaW4g
PSBkb3RFeHByZXNzaW9uLm9yaWdpbigpOwotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
UGVyaGFwcyBkbyB0aGlzIHdpdGggdmFyaWFudHMgb3IgYSBSZXdyaXRlciBpbnN0ZWFkLgorICAg
ICAgICAgICAgICAgICAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOwogICAgICAg
ICAgICAgICAgICAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsID0gQVNUOjpFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWw6OndyYXAoV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGJhc2VOYW1lKSwg
V1RGTW92ZShtZW1iZXJOYW1lKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLCAqbWVtYmVyKTsKLSAg
ICAgICAgICAgICAgICAgICAgbmV3ICgmZG90RXhwcmVzc2lvbikgQVNUOjpFbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwoV1RGTW92ZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbmV3IChsb2NhdGlvbikgQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwo
V1RGTW92ZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwpA
QCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsCiAgICAgc2V0RXJyb3Io
KTsKIH0KIAotLy8gRklYTUU6IE1ha2Ugc3VyZSBhbGwgdGhlIG5hbWVzIGhhdmUgYmVlbiByZXNv
bHZlZC4KKy8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk4MTY3IE1ha2Ugc3VyZSBhbGwgdGhlIG5hbWVzIGhhdmUgYmVlbiByZXNvbHZlZC4KIAogYm9v
bCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFt
ZVJlc29sdmVyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuY3BwCmluZGV4IDJlZmNmYjExZTJhNTBkNTY2MzdiOTg0YWNkMWYxNGNl
MTQ3YzExYWYuLjk0NzUyMzgyZmJlZTJmYThiMjJmYjQ3OTZiMTMyMTg4Mjc3NjVmNWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5j
cHAKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hM
U0wgewogCi0vLyBGSVhNRTogUmV0dXJuIGEgYmV0dGVyIGVycm9yIGNvZGUgZnJvbSB0aGlzLCBh
bmQgcmVwb3J0IGl0IHRvIEphdmFTY3JpcHQuCisvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTY4MiBSZXR1cm4gYSBiZXR0ZXIgZXJyb3IgY29kZSBm
cm9tIHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlwdC4KIGF1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4g
T3B0aW9uYWw8RXJyb3I+CiB7CiAgICAgbV9sZXhlciA9IExleGVyKHN0cmluZ1ZpZXcpOwpAQCAt
MTA4MywxMyArMTA4MywxMyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJzKCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucywgRXJyb3I+CiAgICAgYXV0byBmaXJzdFBh
cmFtZXRlciA9IHBhcnNlUGFyYW1ldGVyKCk7CiAgICAgaWYgKCFmaXJzdFBhcmFtZXRlcikKICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0UGFyYW1ldGVyLmVycm9yKCkpOwot
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUoKmZpcnN0UGFyYW1ldGVyKSk7CisgICAgcGFy
YW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdU
Rk1vdmUoKmZpcnN0UGFyYW1ldGVyKSkpOwogCiAgICAgd2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRv
a2VuOjpUeXBlOjpDb21tYSkpIHsKICAgICAgICAgYXV0byBwYXJhbWV0ZXIgPSBwYXJzZVBhcmFt
ZXRlcigpOwogICAgICAgICBpZiAoIXBhcmFtZXRlcikKICAgICAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihwYXJhbWV0ZXIuZXJyb3IoKSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUoKnBhcmFtZXRlcikpOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtl
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqcGFyYW1ldGVyKSkp
OwogICAgIH0KIAogICAgIGF1dG8gcmlnaHRQYXJlbnRoZXNpcyA9IGNvbnN1bWVUeXBlKExleGVy
OjpUb2tlbjo6VHlwZTo6UmlnaHRQYXJlbnRoZXNpcyk7CkBAIC0xNTY4LDE0ICsxNTY4LDE0IEBA
IGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAgICAgaWYgKCFmaXJzdFZhcmlhYmxlRGVjbGFyYXRp
b24pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmaXJzdFZhcmlhYmxlRGVjbGFy
YXRpb24uZXJyb3IoKSk7CiAKLSAgICBWZWN0b3I8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBy
ZXN1bHQ7Ci0gICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpmaXJzdFZhcmlhYmxlRGVjbGFyYXRp
b24pKTsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+IHJl
c3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihXVEZNb3ZlKCpmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pKSk7CiAKICAgICB3aGls
ZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAgICBhdXRvIHZh
cmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKCp0eXBlKS0+Y2xv
bmUoKSk7CiAgICAgICAgIGlmICghdmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPih2YXJpYWJsZURlY2xhcmF0aW9uLmVycm9yKCkpOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKnZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4o
V1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpKTsKICAgICB9CiAKICAgICByZXR1cm4gQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3Zl
KHJlc3VsdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgKaW5kZXggNWM0YzBiNWJiOTIxYjA2
YmI1Y2NkNzA2NWZjNWI2YjQwODI3NmQyZC4uNWJiNjY2NTkxOTM3NDU0YjhlYjBjMzhhMzdkZDJi
OWViYzIwOTNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oCkBAIC0xMTgsNyArMTE4LDcg
QEAgZW51bSBjbGFzcyBCaW5kaW5nVHlwZSA6IHVpbnQ4X3QgewogICAgIFNhbXBsZXIsCiAgICAg
VGV4dHVyZSwKICAgICBTdG9yYWdlQnVmZmVyLAotICAgIC8vIEZJWE1FOiBBZGQgdGhlIGR5bmFt
aWMgdHlwZXMKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5ODE2OCBBZGQgdGhlIGR5bmFtaWMgdHlwZXMKIH07CiAKIHN0cnVjdCBCaW5kaW5n
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBy
ZXBhcmUuY3BwCmluZGV4IDU4YWQ0MmFlNjgzNzA0YTE4MDdkNjJlYjI4ZDc2ZDNjMDlmMzg2MTku
Ljk1ZjdjYTJhNWU3MTVmNTJmZDViYWRjZDdhNDY3ZmViYmE4ZDIzMGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcApAQCAt
MzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAi
V0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExT
TFByb3BlcnR5UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXSExTTFJlY3Vyc2lvbkNoZWNrZXIuaCIK
ICNpbmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xT
ZW1hbnRpY01hdGNoZXIuaCIKQEAgLTExNyw3ICsxMTgsNyBAQCBzdGF0aWMgT3B0aW9uYWw8UHJv
Z3JhbT4gcHJlcGFyZVNoYXJlZChTdHJpbmcmIHdobHNsU291cmNlKQogICAgIFJVTl9QQVNTKGNo
ZWNrLCBwcm9ncmFtKTsKIAogICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0pOwotICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJl
c29sdmUgcHJvcGVydGllcyBoZXJlCisgICAgcmVzb2x2ZVByb3BlcnRpZXMocHJvZ3JhbSk7CiAg
ICAgZmluZEhpZ2hab21iaWVzKHByb2dyYW0pOwogICAgIFJVTl9QQVNTKGNoZWNrU3RhdGVtZW50
QmVoYXZpb3IsIHByb2dyYW0pOwogICAgIFJVTl9QQVNTKGNoZWNrUmVjdXJzaW9uLCBwcm9ncmFt
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVw
YXJlLmgKaW5kZXggOTc0OTBhNmUyZmE0MWFkMzRkMzVjNTZjNDZjNzJkNDI3Zjk5MTdiYS4uNWJk
NmRmMDZkYzY5MWE3MmYxY2UyNGRmYzU1NTc2ZWM3ZjUyODRhYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKQEAgLTM0LDcgKzM0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi0vLyBGSVhN
RTogR2VuZXJhdGUgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMgYW5kIHJldHVybiB0aGVtIGhl
cmUuCisvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NTY4MiBHZW5lcmF0ZSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlcyBhbmQgcmV0dXJuIHRoZW0g
aGVyZS4KIHN0cnVjdCBSZW5kZXJQcmVwYXJlUmVzdWx0IHsKICAgICBTdHJpbmcgbWV0YWxTb3Vy
Y2U7CiAgICAgU3RyaW5nIG1hbmdsZWRWZXJ0ZXhFbnRyeVBvaW50TmFtZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5
UmVzb2x2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3MTIxMDdkMjM5ZDljYTlkYTMzMTEzNDRlMzgxMmE1
OGViNDU3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEsNzQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlSZXNv
bHZlci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQXNzaWdubWVu
dEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xDb21tYUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhw
cmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb3Bl
cnR5UmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6Citwcml2YXRlOgorICAgIHZv
aWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpB
c3NpZ25tZW50RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisKKyAgICBib29sIHNpbXBsaWZ5Umln
aHRWYWx1ZShBU1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAgICBib29sIHNpbXBsaWZ5QWJzdHJhY3RM
ZWZ0VmFsdWUoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYsIEFTVDo6RG90RXhwcmVzc2lvbiYs
IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgcmlnaHQpOworICAgIHZvaWQgc2ltcGxpZnlM
ZWZ0VmFsdWUoQVNUOjpFeHByZXNzaW9uJik7CisKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zIG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7Cit9OworCit2b2lkIFByb3BlcnR5UmVzb2x2ZXI6
OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICAvLyBVbmxl
c3Mgd2UncmUgaW5zaWRlIGFuIEFzc2lnbm1lbnRFeHByZXNzaW9uIG9yIGEgUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbiwgd2UncmUgYSByaWdodCB2YWx1ZS4KKyAgICBpZiAoIXNpbXBsaWZ5Umln
aHRWYWx1ZShkb3RFeHByZXNzaW9uKSkKKyAgICAgICAgc2V0RXJyb3IoKTsKK30KKwordm9pZCBQ
cm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0aW9uKQoreworICAgIFZpc2l0b3I6OnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7Cisg
ICAgaWYgKCFtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgZnVuY3Rp
b25EZWZpbml0aW9uLmJsb2NrKCkuc3RhdGVtZW50cygpLmluc2VydCgwLCBtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KExleGVyOjpUb2tlbihtX3Zhcmlh
YmxlRGVjbGFyYXRpb25zWzBdLT5vcmlnaW4oKSksIFdURk1vdmUobV92YXJpYWJsZURlY2xhcmF0
aW9ucykpKTsKK30KKworc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
PiBzZXR0ZXJDYWxsKEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbiwgVW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4mJiBuZXdWYWx1ZSwgY29uc3Qgc3RkOjpmdW5jdGlvbjxVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPigpPiYgbGVmdFZhbHVlRmFjdG9yeSwgY29uc3Qgc3RkOjpmdW5j
dGlvbjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPigpPiYgcG9pbnRlclRvTGVmdFZhbHVlRmFj
dG9yeSkKK3sKKyAgICBpZiAoZG90RXhwcmVzc2lvbi5hbmRlckZ1bmN0aW9uKCkpIHsKKyAgICAg
ICAgLy8gKm9wZXJhdG9yJi5mb28oJnYpID0gbmV3VmFsdWUKKyAgICAgICAgaWYgKCFkb3RFeHBy
ZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChwb2ludGVyVG9MZWZ0VmFs
dWVGYWN0b3J5KCkpOworICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4o
KSksIFN0cmluZyhkb3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKS0+bmFtZSgpKSwg
V1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZG90
RXhwcmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAg
ICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsK
KyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLnRocmVh
ZEFuZGVyRnVuY3Rpb24oKSk7CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24g
PSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4o
ZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICAg
ICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KGRvdEV4cHJlc3Npb24udGhyZWFkQW5kZXJGdW5jdGlvbigpLT50eXBlKCkpLmVsZW1lbnRU
eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwor
CisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigp
KSwgV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pLCBXVEZNb3ZlKG5ld1ZhbHVlKSk7Cisg
ICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRl
clR5cGU+KGRvdEV4cHJlc3Npb24udGhyZWFkQW5kZXJGdW5jdGlvbigpLT50eXBlKCkpLmVsZW1l
bnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgcmV0dXJuIFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICB9
CisKKyAgICAvLyB2ID0gb3BlcmF0b3IuZm9vPSh2LCBuZXdWYWx1ZSkKKyAgICBBU1NFUlQoZG90
RXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpKTsKKworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQobGVmdFZhbHVl
RmFjdG9yeSgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUobmV3VmFsdWUpKTsKKyAg
ICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9u
PihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhkb3RFeHByZXNz
aW9uLnNldHRlckZ1bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAg
Y2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpLT50
eXBlKCkuY2xvbmUoKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6UmlnaHRWYWx1ZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmRvdEV4
cHJlc3Npb24uc2V0dGVyRnVuY3Rpb24oKSk7CisKKyAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIGxlZnRWYWx1ZUZhY3RvcnkoKSwgV1RGTW92ZShj
YWxsRXhwcmVzc2lvbikpOworICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4
cHJlc3Npb24uc2V0dGVyRnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgIGFzc2lnbm1l
bnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAg
ICByZXR1cm4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oV1RGTW92ZShhc3NpZ25tZW50RXhw
cmVzc2lvbikpOworfQorCitzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4+IGdldHRlckNhbGwoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uLCBjb25zdCBz
dGQ6OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBsZWZ0VmFsdWVGYWN0
b3J5LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBw
b2ludGVyVG9MZWZ0VmFsdWVGYWN0b3J5KQoreworICAgIGlmIChkb3RFeHByZXNzaW9uLmFuZGVy
RnVuY3Rpb24oKSkgeworICAgICAgICAvLyAqb3BlcmF0b3ImLmZvbygmdikKKyAgICAgICAgaWYg
KCFkb3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChwb2ludGVy
VG9MZWZ0VmFsdWVGYWN0b3J5KCkpOworICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lv
bi5vcmlnaW4oKSksIFN0cmluZyhkb3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKS0+
bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNl
dFR5cGUoZG90RXhwcmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgp
KTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRW
YWx1ZSgpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNz
aW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKSk7CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4
cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhl
cjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24p
KTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KGRvdEV4cHJlc3Npb24udGhyZWFkQW5kZXJGdW5jdGlvbigpLT50eXBlKCkp
LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkIH0pOworCisgICAgICAgIHJldHVybiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZN
b3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbikpOworICAgIH0KKworICAgIC8vIG9wZXJhdG9yLmZv
byh2KQorICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uKCkpOworICAgIAor
ICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgIGFy
Z3VtZW50cy5hcHBlbmQobGVmdFZhbHVlRmFjdG9yeSgpKTsKKyAgICBhdXRvIGNhbGxFeHByZXNz
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90
RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhkb3RFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9u
KCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNl
dFR5cGUoZG90RXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7Cisg
ICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsK
KyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmRvdEV4cHJlc3Npb24uZ2V0dGVyRnVu
Y3Rpb24oKSk7CisKKyAgICByZXR1cm4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oV1RGTW92
ZShjYWxsRXhwcmVzc2lvbikpOworfQorCitzdHJ1Y3QgTW9kaWZ5UmVzdWx0IHsKKyAgICBBU1Q6
OkV4cHJlc3Npb24mIGlubmVyTGVmdFZhbHVlOworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+PiB2YXJpYWJsZURlY2xhcmF0aW9uczsKK307CitzdHJ1Y3QgTW9kaWZp
Y2F0aW9uUmVzdWx0IHsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4
cHJlc3Npb25zOworICAgIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHJlc3VsdDsKK307Citz
dGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2RpZnkoQVNUOjpEb3RFeHByZXNzaW9uJiBk
b3RFeHByZXNzaW9uLCBzdGQ6OmZ1bmN0aW9uPE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4o
T3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYpPiBtb2RpZmljYXRpb24pCit7
CisgICAgLy8gQ29uc2lkZXIgYS5iLmMuZCsrOworICAgIC8vIFRoaXMgd291bGQgZ2V0IHRyYW5z
Zm9ybWVkIGludG86CisgICAgLy8KKyAgICAvLyBTdGVwIDE6CisgICAgLy8gcCA9ICZhOworICAg
IC8vCisgICAgLy8gU3RlcCAyOgorICAgIC8vIHEgPSBvcGVyYXRvci5iKCpwKTsKKyAgICAvLyBy
ID0gb3BlcmF0b3IuYyhxKTsKKyAgICAvLworICAgIC8vIFN0ZXAgMzoKKyAgICAvLyBvbGRWYWx1
ZSA9IG9wZXJhdG9yLmQocik7CisgICAgLy8gbmV3VmFsdWUgPSAuLi47CisgICAgLy8KKyAgICAv
LyBTdGVwIDQ6CisgICAgLy8gciA9IG9wZXJhdG9yLmQ9KHIsIG5ld1ZhbHVlKTsKKyAgICAvLyBx
ID0gb3BlcmF0b3IuYz0ocSwgcik7CisgICAgLy8KKyAgICAvLyBTdGVwIDQ6CisgICAgLy8gKnAg
PSBvcGVyYXRvci5iPSgqcCwgcSk7CisKKyAgICAvLyBJZiB0aGUgZXhwcmVzc2lvbiBpcyBhLmIu
Yy5kID0gZSwgU3RlcCAzIGRpc2FwcGVhcnMgYW5kICJuZXdWYWx1ZSIgaW4gc3RlcCA0IGJlY29t
ZXMgImUiLgorICAgIAorCisgICAgLy8gRmluZCB0aGUgIi5iIiAiLmMiIGFuZCAiLmQiIGV4cHJl
c3Npb25zLiBUaGV5IGVuZCB1cCBpbiB0aGUgb3JkZXIgWyIuZCIsICIuYyIsICIuYiJdLgorICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RG90RXhwcmVzc2lvbj4+IGNoYWlu
OworICAgIEFTVDo6RG90RXhwcmVzc2lvbiogaXRlcmF0b3IgPSAmZG90RXhwcmVzc2lvbjsKKyAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBjaGFpbi5hcHBlbmQoKml0ZXJhdG9yKTsKKyAgICAg
ICAgaWYgKGl0ZXJhdG9yLT5iYXNlKCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNl
KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgQVNTRVJUKCFpdGVyYXRvci0+YmFzZSgp
LnR5cGVBbm5vdGF0aW9uKCkuaXNSaWdodFZhbHVlKCkpOworICAgICAgICBBU1NFUlQoaXM8QVNU
OjpEb3RFeHByZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKSk7IC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYzIE1ha2UgdGhpcyB3b3JrIHdpdGgg
aW5kZXggZXhwcmVzc2lvbnMKKyAgICAgICAgaXRlcmF0b3IgPSAmZG93bmNhc3Q8QVNUOjpEb3RF
eHByZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKTsKKyAgICB9CisgICAgYXV0byBsZWZ0RXhwcmVz
c2lvbiA9IGl0ZXJhdG9yLT50YWtlQmFzZSgpOworICAgIEFTVDo6RXhwcmVzc2lvbiYgaW5uZXJM
ZWZ0RXhwcmVzc2lvbiA9IGxlZnRFeHByZXNzaW9uOworCisgICAgLy8gQ3JlYXRlICJwIiB2YXJp
YWJsZS4KKyAgICBhdXRvIHBvaW50ZXJWYXJpYWJsZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4obGVmdEV4cHJlc3Npb24tPm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihtYWtlVW5pcXVl
UmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihsZWZ0RXhwcmVzc2lvbi0+b3JpZ2lu
KCkpLCAqbGVmdEV4cHJlc3Npb24tPnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgp
LCBsZWZ0RXhwcmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSkpLCBTdHJpbmcoKSwgV1RG
OjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworCisgICAgLy8gQ3JlYXRlICJxIiBhbmQgInIiIHZh
cmlhYmxlcy4KKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+
IGludGVybWVkaWF0ZVZhcmlhYmxlczsKKyAgICBpbnRlcm1lZGlhdGVWYXJpYWJsZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShjaGFpbi5zaXplKCkgLSAxKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MTsgaSA8IGNoYWluLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGRvdEV4cHJlc3Npb24g
PSBzdGF0aWNfY2FzdDxBU1Q6OkRvdEV4cHJlc3Npb24mPihjaGFpbltpXSk7CisgICAgICAgIGlu
dGVybWVkaWF0ZVZhcmlhYmxlcy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIGRvdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgfQorCisgICAgVmVj
dG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKworICAgIC8vIFN0
ZXAgMToKKyAgICB7CisgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGlubmVyTGVm
dEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGxlZnRFeHByZXNzaW9uKSk7CisgICAgICAg
IG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRl
clR5cGU+KExleGVyOjpUb2tlbihpbm5lckxlZnRFeHByZXNzaW9uLm9yaWdpbigpKSwgKmlubmVy
TGVmdEV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCksIGlubmVy
TGVmdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSkpOworICAgICAgICBtYWtlUG9p
bnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKwor
ICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJs
ZSkpOworICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOworICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUo
KSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CisK
KyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpB
c3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGlubmVyTGVmdEV4cHJlc3Npb24ub3Jp
Z2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZShtYWtlUG9pbnRlckV4
cHJlc3Npb24pKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocG9pbnRl
clZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lv
bi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgIGV4cHJl
c3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgfQorCisg
ICAgLy8gU3RlcCAyOgorICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogcHJldmlvdXMgPSBu
dWxscHRyOworICAgIGF1dG8gcHJldmlvdXNMZWZ0VmFsdWUgPSBbJl0oKSAtPiBVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgIGlmIChwcmV2aW91cykgeworICAgICAgICAgICAg
YXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCgqcHJldmlvdXMpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChwcmV2aW91cy0+dHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlLT5zZXRUeXBlKHByZXZpb3VzLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFy
aWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KKyAgICAgICAgICAgIHJldHVy
biB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBhdXRvIHZhcmlh
YmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICBBU1NF
UlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+
c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlh
YmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgYXV0byBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFi
bGVSZWZlcmVuY2UpKTsKKyAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsK
KyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9p
bnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgp
KTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUt
PnR5cGUoKSkuYWRkcmVzc1NwYWNlKCkgfSk7CisgICAgICAgIHJldHVybiBkZXJlZmVyZW5jZUV4
cHJlc3Npb247CisgICAgfTsKKyAgICBhdXRvIHBvaW50ZXJUb1ByZXZpb3VzTGVmdFZhbHVlID0g
WyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICBpZiAocHJldmlv
dXMpIHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAoKnBy
ZXZpb3VzKSk7CisgICAgICAgICAgICBBU1NFUlQocHJldmlvdXMtPnR5cGUoKSk7CisgICAgICAg
ICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwcmV2aW91cy0+dHlwZSgpLT5jbG9uZSgp
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/
CisKKyAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSk7CisgICAgICAgICAgICBBU1NF
UlQocHJldmlvdXMtPnR5cGUoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24t
PnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90
RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIHByZXZpb3Vz
LT50eXBlKCktPmNsb25lKCkpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJu
IG1ha2VQb2ludGVyRXhwcmVzc2lvbjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gdmFyaWFi
bGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6
VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgIEFTU0VS
VChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5z
ZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRy
ZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KKyAgICAgICAgcmV0dXJuIHZhcmlh
YmxlUmVmZXJlbmNlOworICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IGNoYWluLnNpemUoKTsg
LS1pOyApIHsKKyAgICAgICAgQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uID0gY2hh
aW5baV07CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJh
dGlvbiA9IGludGVybWVkaWF0ZVZhcmlhYmxlc1tpIC0gMV07CisKKyAgICAgICAgYXV0byBjYWxs
RXhwcmVzc2lvbiA9IGdldHRlckNhbGwoZG90RXhwcmVzc2lvbiwgcHJldmlvdXNMZWZ0VmFsdWUs
IHBvaW50ZXJUb1ByZXZpb3VzTGVmdFZhbHVlKTsKKworICAgICAgICBpZiAoIWNhbGxFeHByZXNz
aW9uKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIHZh
cmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAg
ICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOwor
ICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFs
dWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PworCisgICAg
ICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RG
TW92ZSh2YXJpYWJsZVJlZmVyZW5jZSksIFdURk1vdmUoKmNhbGxFeHByZXNzaW9uKSk7CisgICAg
ICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlw
ZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQo
V1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICAKKyAgICAgICAgcHJldmlv
dXMgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKKyAgICB9CisgICAgYXV0byBsYXN0R2V0dGVyQ2Fs
bEV4cHJlc3Npb24gPSBnZXR0ZXJDYWxsKGNoYWluWzBdLCBwcmV2aW91c0xlZnRWYWx1ZSwgcG9p
bnRlclRvUHJldmlvdXNMZWZ0VmFsdWUpOworCisgICAgLy8gU3RlcCAzOgorICAgIGF1dG8gbW9k
aWZpY2F0aW9uUmVzdWx0ID0gbW9kaWZpY2F0aW9uKFdURk1vdmUobGFzdEdldHRlckNhbGxFeHBy
ZXNzaW9uKSk7CisgICAgaWYgKCFtb2RpZmljYXRpb25SZXN1bHQpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtb2RpZmljYXRpb25SZXN1
bHQtPmV4cHJlc3Npb25zLnNpemUoKTsgKytpKQorICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQo
V1RGTW92ZShtb2RpZmljYXRpb25SZXN1bHQtPmV4cHJlc3Npb25zW2ldKSk7CisKKyAgICAvLyBT
dGVwIDQ6CisgICAgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gcmlnaHRWYWx1ZSA9IFdURk1v
dmUobW9kaWZpY2F0aW9uUmVzdWx0LT5yZXN1bHQpOworICAgIGF1dG8gZXhwcmVzc2lvblR5cGUg
PSByaWdodFZhbHVlLT5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY2hhaW4uc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIEFTVDo6RG90RXhwcmVz
c2lvbiYgZG90RXhwcmVzc2lvbiA9IGNoYWluW2ldOworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBpbnRlcm1lZGlhdGVWYXJpYWJsZXNbaV07
CisKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IHNldHRlckNhbGwoZG90RXhw
cmVzc2lvbiwgV1RGTW92ZShyaWdodFZhbHVlKSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4geworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNs
YXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUo
dmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRy
ZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KKyAgICAgICAgICAgIHJldHVybiB2
YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAgICAgfSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4geworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNs
YXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUo
dmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRy
ZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBt
YWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHBy
ZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFy
aWFibGVSZWZlcmVuY2UpKTsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9u
LnR5cGUoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFr
ZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5v
cmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIHZhcmlhYmxlRGVjbGFyYXRpb24u
dHlwZSgpLT5jbG9uZSgpKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlUG9pbnRlckV4cHJlc3Npb247CisgICAgICAgIH0pOworCisgICAgICAgIGlmICghYXNzaWdu
bWVudEV4cHJlc3Npb24pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
ICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKCphc3NpZ25tZW50RXhwcmVzc2lvbikpOwor
CisgICAgICAgIHJpZ2h0VmFsdWUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOwor
ICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICByaWdo
dFZhbHVlLT5zZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAg
ICAgICAgcmlnaHRWYWx1ZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PworICAgIH0KKworICAgIC8v
IFN0ZXAgNToKKyAgICB7CisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBzZXR0
ZXJDYWxsKGNoYWluW2NoYWluLnNpemUoKSAtIDFdLCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBbJl0o
KSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgICAgICBhdXRvIHZhcmlh
YmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICAgICAg
QVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1
ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CisKKyAgICAg
ICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRl
cmVmZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkp
LCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSk7CisgICAgICAgICAgICBBU1NFUlQocG9pbnRl
clZhcmlhYmxlLT50eXBlKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5z
ZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUo
KSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVz
c2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBv
aW50ZXJUeXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOwor
ICAgICAgICAgICAgcmV0dXJuIGRlcmVmZXJlbmNlRXhwcmVzc2lvbjsKKyAgICAgICAgfSwgWyZd
KCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICAgICAgYXV0byB2YXJp
YWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNU
OjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgICAg
IEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAg
ICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFs
dWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PworICAgICAg
ICAgICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJlbmNlOworICAgICAgICB9KTsKKworICAgICAgICBp
ZiAoIWFzc2lnbm1lbnRFeHByZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZSgqYXNzaWdubWVudEV4cHJl
c3Npb24pKTsKKyAgICB9CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4+IHZhcmlhYmxlRGVjbGFyYXRpb25zOworICAgIHZhcmlhYmxlRGVjbGFyYXRpb25z
LmFwcGVuZChXVEZNb3ZlKHBvaW50ZXJWYXJpYWJsZSkpOworICAgIGZvciAoYXV0byYgaW50ZXJt
ZWRpYXRlVmFyaWFibGUgOiBpbnRlcm1lZGlhdGVWYXJpYWJsZXMpCisgICAgICAgIHZhcmlhYmxl
RGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKGludGVybWVkaWF0ZVZhcmlhYmxlKSk7CisKKyAg
ICByZXR1cm4ge3sgaW5uZXJMZWZ0RXhwcmVzc2lvbiwgV1RGTW92ZShleHByZXNzaW9ucyksIFdU
Rk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbnMpIH19OworfQorCit2b2lkIFByb3BlcnR5UmVzb2x2
ZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9u
KQoreworICAgIGlmIChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkudHlwZUFubm90YXRpb24o
KS5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgc2ltcGxpZnlMZWZ0VmFsdWUoYXNzaWdu
bWVudEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2ln
bm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFT
U0VSVCghYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpLnR5cGVBbm5vdGF0aW9uKCkuaXNSaWdo
dFZhbHVlKCkpOworICAgIGlmICghaXM8QVNUOjpEb3RFeHByZXNzaW9uPihhc3NpZ25tZW50RXhw
cmVzc2lvbi5sZWZ0KCkpKSB7CisgICAgICAgIHNldEVycm9yKCk7IC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYzIE1ha2UgdGhpcyB3b3JrIHdp
dGggaW5kZXggZXhwcmVzc2lvbnMuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRv
IHR5cGUgPSBhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpLnJlc29sdmVkVHlwZSgpLmNsb25l
KCk7CisKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQo
KSk7CisKKyAgICBhdXRvIG1vZGlmeVJlc3VsdCA9IG1vZGlmeShkb3duY2FzdDxBU1Q6OkRvdEV4
cHJlc3Npb24+KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSksIFsmXShPcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPj4mJikgLT4gT3B0aW9uYWw8TW9kaWZpY2F0aW9uUmVzdWx0
PiB7CisgICAgICAgIHJldHVybiB7eyBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+
KCksIGFzc2lnbm1lbnRFeHByZXNzaW9uLnRha2VSaWdodCgpIH19OworICAgIH0pOworCisgICAg
aWYgKCFtb2RpZnlSZXN1bHQpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBzaW1wbGlmeUxlZnRWYWx1ZShtb2RpZnlSZXN1bHQtPmlubmVyTGVmdFZh
bHVlKTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q29tbWFFeHByZXNzaW9uKSA8
PSBzaXplb2YoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiksICJBc3NpZ25tZW50IGV4cHJlc3Np
b25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMgd2l0aG91dCB1
cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBhc3Np
Z25tZW50RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICB2b2lkKiBsb2NhdGlvbiA9ICZhc3NpZ25t
ZW50RXhwcmVzc2lvbjsKKyAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi5+QXNzaWdubWVudEV4cHJl
c3Npb24oKTsKKyAgICBhdXRvKiBjb21tYUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6
OkNvbW1hRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobW9kaWZ5UmVzdWx0LT5l
eHByZXNzaW9ucykpOworICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZShXVEZNb3ZlKHR5cGUp
KTsKKyAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1
ZSgpKTsKKworICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IG1vZGlmeVJlc3Vs
dC0+dmFyaWFibGVEZWNsYXJhdGlvbnMpCisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMu
YXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworfQorCit2b2lkIFByb3BlcnR5
UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbikKK3sKKyAgICBpZiAocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5s
ZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAg
ICAvLyBDb25zaWRlciBhKys7CisgICAgICAgIC8vIFRoaXMgd291bGQgZ2V0IHRyYW5zZm9ybWVk
IGludG86CisgICAgICAgIC8vCisgICAgICAgIC8vIHAgPSAmYTsKKyAgICAgICAgLy8gb2xkVmFs
dWUgPSAqcDsKKyAgICAgICAgLy8gbmV3VmFsdWUgPSAuLi47CisgICAgICAgIC8vICpwID0gbmV3
VmFsdWU7CisKKyAgICAgICAgYXV0byBiYXNlVHlwZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKTsKKyAgICAgICAgYXV0byBwb2lu
dGVyVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkpLCAqcmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNz
U3BhY2UoKSwgYmFzZVR5cGUtPmNsb25lKCkpOworCisgICAgICAgIGF1dG8gcG9pbnRlclZhcmlh
YmxlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tl
bihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihwb2ludGVyVHlwZS0+Y2xv
bmUoKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisKKyAgICAgICAg
VmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKworICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIG9yaWdpbiA9IExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLm9yaWdpbigpKTsKKyAgICAgICAgICAgIGF1dG8gbWFr
ZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFr
ZUxlZnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlw
ZShwb2ludGVyVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAg
YXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9uZSgp
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/
CisKKyAgICAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZSh2YXJp
YWJsZVJlZmVyZW5jZSksIFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAgICAg
ICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShwb2ludGVyVHlwZS0+Y2xvbmUoKSk7
CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92
ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAg
ICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxl
KSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGUocG9pbnRlclR5cGUt
PmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRo
aXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNl
MSkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBl
LT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBhdXRvIHZhcmlhYmxl
UmVmZXJlbmNlMiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFyaWFibGVSZWZlcmVu
Y2UoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlwZShiYXNlVHlwZS0+
Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhp
cyByaWdodD8KKworICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMiks
IFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50
RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhc3Np
Z25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwor
CisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVz
c2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byB2YXJpYWJs
ZVJlZmVyZW5jZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVu
Y2UoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGJhc2VUeXBlLT5j
bG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMg
cmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gbmV3VmFsdWVFeHByZXNzaW9uID0gcmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi50YWtlTmV3VmFsdWVFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBB
U1NFUlQobmV3VmFsdWVFeHByZXNzaW9uKTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNzAgUmVsYXggdGhpcyBjb25zdHJhaW50LgorICAgICAg
ICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
b3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgqbmV3VmFsdWVF
eHByZXNzaW9uKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShi
YXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBleHByZXNz
aW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6Ondy
YXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNl
dFR5cGUocG9pbnRlclR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVu
Y2UxLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgICAgIGF1dG8gZGVyZWZlcmVu
Y2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4o
TGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3Zl
KHZhcmlhYmxlUmVmZXJlbmNlMSkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9u
LT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhw
cmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAg
ICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
bmV3VmFyaWFibGVSZWZlcmVuY2UoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+
c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZTItPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6
OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KKworICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50
RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4
ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGRl
cmVmZXJlbmNlRXhwcmVzc2lvbiksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSk7CisgICAg
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7
CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92
ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXN1
bHRFeHByZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlUmVzdWx0RXhwcmVz
c2lvbigpOworICAgICAgICBBU1NFUlQocmVzdWx0RXhwcmVzc2lvbik7IC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTcwIEJlIHJlc2lsaWVudCB0
byB0aGlzIGJlaW5nIG51bGwuCisgICAgICAgIGF1dG8gdHlwZSA9ICgqcmVzdWx0RXhwcmVzc2lv
biktPnJlc29sdmVkVHlwZSgpLmNsb25lKCk7CisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChX
VEZNb3ZlKCpyZXN1bHRFeHByZXNzaW9uKSk7CisKKyAgICAgICAgVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4gb2xkVmFyaWFibGVEZWNsYXJhdGlvbiA9IHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24udGFrZU9sZFZhbHVlKCk7CisgICAgICAgIFVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+IG5ld1ZhcmlhYmxlRGVjbGFyYXRpb24gPSByZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLnRha2VOZXdWYWx1ZSgpOworCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KEFTVDo6Q29tbWFFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uKSwgIlJlYWRNb2RpZnlXcml0ZSBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8g
YmVjb21lIGNvbW1hIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMi
KTsKKyAgICAgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24ub3JpZ2luKCk7CisgICAgICAgIHZvaWQqIGxvY2F0aW9uID0gJnJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb247CisgICAgICAgIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uflJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24oKTsKKyAgICAgICAgYXV0byogY29tbWFFeHByZXNzaW9uID0gbmV3IChs
b2NhdGlvbikgQVNUOjpDb21tYUV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGV4
cHJlc3Npb25zKSk7CisgICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZShXVEZNb3ZlKHR5
cGUpKTsKKyAgICAgICAgY29tbWFFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RG
TW92ZShwb2ludGVyVmFyaWFibGUpKTsKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5h
cHBlbmQoV1RGTW92ZShvbGRWYXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fdmFyaWFi
bGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobmV3VmFyaWFibGVEZWNsYXJhdGlvbikpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKCFyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmxlZnRWYWx1ZSgpLnR5cGVBbm5vdGF0aW9uKCkuaXNSaWdodFZhbHVlKCkpOworICAg
IGlmICghaXM8QVNUOjpEb3RFeHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxl
ZnRWYWx1ZSgpKSkgeworICAgICAgICBzZXRFcnJvcigpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2MyBNYWtlIHRoaXMgd29yayB3aXRoIGlu
ZGV4IGV4cHJlc3Npb25zLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGF1dG8gbW9kaWZ5
UmVzdWx0ID0gbW9kaWZ5KGRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4ocmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSksIFsmXShPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPj4mJiBsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24pIC0+IE9wdGlvbmFsPE1vZGlm
aWNhdGlvblJlc3VsdD4geworICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4+IGV4cHJlc3Npb25zOworICAgICAgICBpZiAoIWxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xk
VmFyaWFibGVSZWZlcmVuY2UoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRU
eXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCku
Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlz
IHJpZ2h0PworCisgICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVS
ZWZlcmVuY2UpLCBXVEZNb3ZlKCpsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAg
ICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICBhc3Np
Z25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwor
CisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVz
c2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byB2YXJpYWJs
ZVJlZmVyZW5jZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVu
Y2UoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAg
ICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFs
dWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PworCisgICAg
ICAgICAgICBhdXRvIG5ld1ZhbHVlRXhwcmVzc2lvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24udGFrZU5ld1ZhbHVlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgQVNTRVJUKG5ld1ZhbHVl
RXhwcmVzc2lvbik7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MTcwIFJlbGF4IHRoaXMgY29uc3RyYWludAorICAgICAgICAgICAgYXV0byBhc3Np
Z25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lv
bj4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkub3Jp
Z2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgqbmV3VmFsdWVFeHBy
ZXNzaW9uKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLmNsb25lKCkp
OworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1v
dmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7
eyBXVEZNb3ZlKGV4cHJlc3Npb25zKSwgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJp
YWJsZVJlZmVyZW5jZSgpIH19OworICAgIH0pOworCisgICAgaWYgKCFtb2RpZnlSZXN1bHQpIHsK
KyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzaW1wbGlm
eUxlZnRWYWx1ZShtb2RpZnlSZXN1bHQtPmlubmVyTGVmdFZhbHVlKTsKKworICAgIGF1dG8gcmVz
dWx0RXhwcmVzc2lvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFrZVJlc3VsdEV4cHJl
c3Npb24oKTsKKyAgICBBU1NFUlQocmVzdWx0RXhwcmVzc2lvbik7IC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTcwIEJlIHJlc2lsaWVudCB0byB0
aGlzIGJlaW5nIG51bGwuCisgICAgYXV0byB0eXBlID0gKCpyZXN1bHRFeHByZXNzaW9uKS0+cmVz
b2x2ZWRUeXBlKCkuY2xvbmUoKTsKKyAgICBtb2RpZnlSZXN1bHQtPmV4cHJlc3Npb25zLmFwcGVu
ZChXVEZNb3ZlKCpyZXN1bHRFeHByZXNzaW9uKSk7CisKKyAgICBVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uPiBvbGRWYXJpYWJsZURlY2xhcmF0aW9uID0gcmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi50YWtlT2xkVmFsdWUoKTsKKyAgICBVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uPiBuZXdWYXJpYWJsZURlY2xhcmF0aW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi50YWtlTmV3VmFsdWUoKTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q29t
bWFFeHByZXNzaW9uKSA8PSBzaXplb2YoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKSwg
IlJlYWRNb2RpZnlXcml0ZSBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIGNv
bW1hIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICBM
ZXhlcjo6VG9rZW4gb3JpZ2luID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vcmlnaW4oKTsK
KyAgICB2b2lkKiBsb2NhdGlvbiA9ICZyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOworICAgIHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uflJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKTsKKyAg
ICBhdXRvKiBjb21tYUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVz
c2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobW9kaWZ5UmVzdWx0LT5leHByZXNzaW9ucykp
OworICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZShXVEZNb3ZlKHR5cGUpKTsKKyAgICBjb21t
YUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAg
IGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IG1vZGlmeVJlc3VsdC0+dmFyaWFibGVE
ZWNsYXJhdGlvbnMpCisgICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1v
dmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBw
ZW5kKFdURk1vdmUob2xkVmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgIG1fdmFyaWFibGVEZWNs
YXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobmV3VmFyaWFibGVEZWNsYXJhdGlvbikpOworfQorCiti
b29sIFByb3BlcnR5UmVzb2x2ZXI6OnNpbXBsaWZ5UmlnaHRWYWx1ZShBU1Q6OkRvdEV4cHJlc3Np
b24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJl
c3Npb24ub3JpZ2luKCk7CisKKyAgICBpZiAoYXV0byogYW5kZXJGdW5jdGlvbiA9IGRvdEV4cHJl
c3Npb24uYW5kZXJGdW5jdGlvbigpKSB7CisgICAgICAgIGF1dG8mIGJhc2UgPSBkb3RFeHByZXNz
aW9uLmJhc2UoKTsKKyAgICAgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJhc2UudHlw
ZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKKyAgICAgICAgICAgIGF1dG8gbWFr
ZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7Cisg
ICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxB
U1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgKmxlZnRBZGRyZXNzU3BhY2Us
IGJhc2UucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJF
eHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAg
ICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikp
OworICAgICAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpD
YWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFN0cmluZyhhbmRlckZ1bmN0aW9u
LT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgICAgICAgICAgY2FsbEV4cHJlc3Np
b24tPnNldFR5cGUoYW5kZXJGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAg
Y2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAg
ICAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kZXJGdW5jdGlvbik7CisK
KyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVk
IHRvIGJlIGFibGUgdG8gYmVjb21lIGRlcmVmZXJlbmNlIGV4cHJlc3Npb25zIHdpdGhvdXQgdXBk
YXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgICAgIHZvaWQqIGxvY2F0aW9uID0gJmRv
dEV4cHJlc3Npb247CisgICAgICAgICAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7
CisgICAgICAgICAgICBhdXRvKiBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9u
KSBBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2Fs
bEV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlw
ZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1l
bnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlw
ZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgaGF2ZSBhbiBhbmRlciwg
YnV0IG5vIGxlZnQgdmFsdWUgdG8gY2FsbCBpdCBvbi4gTGV0J3Mgc2F2ZSB0aGUgdmFsdWUgaW50
byBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBjcmVhdGUgYSBsZWZ0IHZhbHVlLgorICAgICAgICAv
LyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGlubGluaW5nIHRoZSBmdW5jdGlvbnMgdGhlIHNwZWMgc2F5
cyBhcmUgZ2VuZXJhdGVkLgorICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFkQW5kZXJG
dW5jdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gdmFy
aWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
PihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJzKCksIGJhc2UucmVzb2x2ZWRU
eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKwor
ICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xh
cmF0aW9uKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZShiYXNlLnJlc29s
dmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsK
KworICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgV1RGTW92ZSh2YXJp
YWJsZVJlZmVyZW5jZTEpLCBkb3RFeHByZXNzaW9uLnRha2VCYXNlKCkpOworICAgICAgICBhc3Np
Z25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlLnJlc29sdmVkVHlwZSgpLmNsb25lKCkpOwor
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFw
KHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRU
eXBlKGJhc2UucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlMi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkIH0pOworCisgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdp
biksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSk7CisgICAgICAgIG1ha2VQb2ludGVyRXhw
cmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpU
b2tlbihvcmlnaW4pLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlLnJlc29sdmVkVHlw
ZSgpLmNsb25lKCkpKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RG
TW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdp
biksIFN0cmluZyhhbmRlckZ1bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwor
ICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShhbmRlckZ1bmN0aW9uLT50eXBlKCkuY2xv
bmUoKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kZXJG
dW5jdGlvbik7CisKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKG9yaWdpbiksIFdURk1v
dmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRU
eXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUoKSkuZWxl
bWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQg
fSk7CisKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpDb21tYUV4cHJlc3Npb24p
IDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8g
YmUgYWJsZSB0byBiZWNvbWUgY29tbWEgZXhwcmVzc2lvbnMgd2l0aG91dCB1cGRhdGluZyBiYWNr
cmVmZXJlbmNlcyIpOworICAgICAgICB2b2lkKiBsb2NhdGlvbiA9ICZkb3RFeHByZXNzaW9uOwor
ICAgICAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CisgICAgICAgIFZlY3RvcjxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisgICAgICAgIGV4cHJlc3Np
b25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgIGV4cHJl
c3Npb25zLmFwcGVuZChXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbikpOworICAgICAgICBh
dXRvKiBjb21tYUV4cHJlc3Npb24gPSBuZXcgKGxvY2F0aW9uKSBBU1Q6OkNvbW1hRXhwcmVzc2lv
bihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoZXhwcmVzc2lvbnMpKTsKKyAgICAgICAgY29tbWFF
eHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rp
b24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY29tbWFFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7CisKKyAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RG
TW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6Q2FsbEV4cHJlc3Npb24pIDw9IHNpemVv
ZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0
byBiZWNvbWUgY2FsbCBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2Vz
Iik7CisgICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uZ2V0dGVyRnVuY3Rpb24oKSk7CisgICAgYXV0
byYgZ2V0dGVyRnVuY3Rpb24gPSAqZG90RXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbigpOworICAg
IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgIGFyZ3Vt
ZW50cy5hcHBlbmQoZG90RXhwcmVzc2lvbi50YWtlQmFzZSgpKTsKKyAgICB2b2lkKiBsb2NhdGlv
biA9ICZkb3RFeHByZXNzaW9uOworICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsK
KyAgICBhdXRvKiBjYWxsRXhwcmVzc2lvbiA9IG5ldyAobG9jYXRpb24pIEFTVDo6Q2FsbEV4cHJl
c3Npb24oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoZ2V0dGVyRnVuY3Rpb24ubmFtZSgpKSwgV1RG
TW92ZShhcmd1bWVudHMpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oZ2V0dGVy
RnVuY3Rpb24pOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGdldHRlckZ1bmN0aW9uLnR5
cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpSaWdodFZhbHVlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCitjbGFzcyBMZWZ0VmFsdWVT
aW1wbGlmaWVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIHZvaWQgdmlzaXQoQVNU
OjpEb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJl
bmNlRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworCitwcml2YXRlOgorfTsKKwordm9pZCBMZWZ0VmFs
dWVTaW1wbGlmaWVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7
CisgICAgVmlzaXRvcjo6dmlzaXQoZG90RXhwcmVzc2lvbik7CisgICAgQVNTRVJUKGRvdEV4cHJl
c3Npb24uYmFzZSgpLnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKTsKKyAgICBB
U1NFUlQoZG90RXhwcmVzc2lvbi5hbmRlckZ1bmN0aW9uKCkpOworCisgICAgTGV4ZXI6OlRva2Vu
IG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgYXV0byogYW5kZXJGdW5jdGlv
biA9IGRvdEV4cHJlc3Npb24uYW5kZXJGdW5jdGlvbigpOworICAgIGF1dG8mIGJhc2UgPSBkb3RF
eHByZXNzaW9uLmJhc2UoKTsKKyAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSAqZG90RXhwcmVz
c2lvbi5iYXNlKCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAgYXV0
byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJF
eHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgZG90RXhwcmVzc2lvbi50YWtlQmFzZSgp
KTsKKyAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6
OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgbGVmdEFkZHJlc3NTcGFjZSwgYmFz
ZS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpKSk7CisgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICBWZWN0b3I8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKFdU
Rk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSk7CisgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiks
IFN0cmluZyhhbmRlckZ1bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAg
IGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGFuZGVyRnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsK
KyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkp
OworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kZXJGdW5jdGlvbik7CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbikgPD0gc2l6
ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0byBiZSBhYmxl
IHRvIGJlY29tZSBkZXJlZmVyZW5jZSBleHByZXNzaW9ucyB3aXRob3V0IHVwZGF0aW5nIGJhY2ty
ZWZlcmVuY2VzIik7CisgICAgdm9pZCogbG9jYXRpb24gPSAmZG90RXhwcmVzc2lvbjsKKyAgICBk
b3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7CisgICAgYXV0byogZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uID0gbmV3IChsb2NhdGlvbikgQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24oV1RGTW92
ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24t
PnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICBkZXJlZmVyZW5jZUV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKK30KKwor
dm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lv
biYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIC8vIERlcmVmZXJlbmNlIGV4cHJlc3Np
b25zIGFyZSB0aGUgb25seSBleHByZXNzaW9ucyB3aGVyZSB0aGUgY2hpbGRyZW4gbWlnaHQgYmUg
bW9yZS1yaWdodCB0aGFuIHdlIGFyZS4KKyAgICAvLyBGb3IgZXhhbXBsZSwgYSBkZXJlZmVyZW5j
ZSBleHByZXNzaW9uIG1heSBiZSBhIGxlZnQgdmFsdWUgYnV0IGl0cyBjaGlsZCBtYXkgYmUgYSBj
YWxsIGV4cHJlc3Npb24gd2hpY2ggaXMgYSByaWdodCB2YWx1ZS4KKyAgICAvLyBMZWZ0VmFsdWVT
aW1wbGlmaWVyIGRvZXNuJ3QgaGFuZGxlIHJpZ2h0IHZhbHVlcywgc28gd2UgaW5zdGVhZCBuZWVk
IHRvIHVzZSBQcm9wZXJ0eVJlc29sdmVyLgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTcwIFdoYXQgYWJvdXQgZnVuY3Rpb24gY2FsbCBh
cmd1bWVudHM/CisgICAgUHJvcGVydHlSZXNvbHZlcigpLlZpc2l0b3I6OnZpc2l0KGRlcmVmZXJl
bmNlRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6c2ltcGxpZnlMZWZ0
VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIExlZnRWYWx1ZVNpbXBs
aWZpZXIoKS5WaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKK30KKwordm9pZCByZXNvbHZlUHJv
cGVydGllcyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFByb3BlcnR5UmVzb2x2ZXIoKS5WaXNp
dG9yOjp2aXNpdChwcm9ncmFtKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZl
ci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJl
c29sdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIyMDVmOTAyYmNjOTRlY2E5ZWYzM2I1OGRhMWM3MDFhYjcy
YjM0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCByZXNvbHZl
UHJvcGVydGllcyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNp
dmVUeXBlQ2hlY2tlci5jcHAKaW5kZXggZDVhN2IwZDE2OWU3NGZiZjFlN2JhN2ExNGM3M2U0MjI0
OTkzYWNiZS4uMTJhNzA0ODQwNWQwNjA3YmQ0OGE5N2I1ZmIxYTZiNzI4MmM0NDVmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVU
eXBlQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAKQEAgLTg1LDggKzg1LDggQEAgdm9pZCBSZWN1
cnNpdmVUeXBlQ2hlY2tlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNl
KQogCiAgICAgZm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1
bWVudHMoKSkKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7Ci0gICAg
aWYgKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpCi0gICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCgqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKHR5cGVSZWZlcmVu
Y2UubWF5YmVSZXNvbHZlZFR5cGUoKSkgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTgxNjEgU2hvdWxkbid0IHdlIGtub3cgYnkgbm93IHdoZXRoZXIg
dGhlIHR5cGUgaGFzIGJlZW4gcmVzb2x2ZWQgb3Igbm90PworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CiB9CiAKIHZvaWQgUmVjdXJzaXZl
VHlwZUNoZWNrZXI6OnZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3Zl
cmxvYWRJbXBsLmNwcAppbmRleCBlNzgzOGNlM2Y3MjVhZTA5YWJhMWVkYjUwYTY1OTJjMzQ2MzEz
ZWU1Li5kYzkzNGRiZjcyNmE4MTRhMDgwNGI0Y2NiNTc1MmRiZWNiODFmMzhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9h
ZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RhdGljIHVuc2lnbmVk
IGNvbnZlcnNpb25Db3N0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgY2FuZGlkYXRlLCBjb25z
dCBWZWN0b3IKICAgICAgICAgY29udmVyc2lvbkNvc3QgKz0gYXJndW1lbnRUeXBlc1tpXS5nZXQo
KS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
KSAtPiB1bnNpZ25lZCB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfSwgWyZdKFJl
ZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAt
PiB1bnNpZ25lZCB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Ut
PnJlc29sdmFibGVUeXBlKCkuY29udmVyc2lvbkNvc3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClb
aV0udHlwZSgpKTsKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+
cmVzb2x2YWJsZVR5cGUoKS5jb252ZXJzaW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtp
XS0+dHlwZSgpKTsKICAgICAgICAgfSkpOwogICAgIH0KICAgICAvLyBUaGUgcmV0dXJuIHR5cGUg
Y2FuIG5ldmVyIGJlIGEgbGl0ZXJhbCB0eXBlLCBzbyBpdHMgY29udmVyc2lvbiBjb3N0IGlzIGFs
d2F5cyAwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZXNvbHZpbmdUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlc29sdmluZ1R5cGUuaAppbmRleCBjYTVjYmI1OTI5Y2Y5ZTE4MThjMmNkNzQxZTc5
ZDkzNmNhYWM2OGVlLi4yNDI0YTgwMzdiMzIwNGJmYWJhM2RmZjFjNGIxZDU0YzA3YTcxMWY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29s
dmluZ1R5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFJlc29sdmluZ1R5cGUuaApAQCAtNzIsNiArNzIsNyBAQCBwcml2YXRlOgogCiAvLyBUaGlzIGlz
IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhIFZhcmlhbnQuCiAvLyBJdCBleGlzdHMgc28gd2UgY2Fu
IG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGRvZXMgdGhlIHJpZ2h0IHRo
aW5nLgorLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTgxNTggVGhpcyB3cmFwcGVyIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuCiBjbGFzcyBSZXNvbHZp
bmdUeXBlIHsKIHB1YmxpYzoKICAgICBSZXNvbHZpbmdUeXBlKCkKQEAgLTEwMiwxMCArMTAzLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIEFTVDo6VW5u
YW1lZFR5cGUmIGdldFVubmFtZWRUeXBlKCkKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBnZXRVbm5h
bWVkVHlwZSgpCiAgICAgewotICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIpKTsKLSAgICAgICAgcmV0dXJuIFdU
Rjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcik7CisgICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9p
bm5lcikpCisgICAgICAgICAgICByZXR1cm4gJldURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPj4obV9pbm5lcik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yPiBhdXRvIHZpc2l0KGNvbnN0IFZpc2l0b3ImIHZp
c2l0b3IpIC0+IGRlY2x0eXBlKFdURjo6dmlzaXQodmlzaXRvciwgc3RkOjpkZWNsdmFsPFZhcmlh
bnQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2U+PiY+KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CmluZGV4IDc5YTJjNjBlMDYwNmIx
MzI2NWJiMjMwMzY3YWNmOTcyNTBiZjlhN2YuLjBmYjVkMzkzMmQ0NWZiMGFmZGUwOTU5NjE1ZWJk
ODFmZWFhOTFjNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQKQEAgLTM5MCw0ICszOTAsMTMg
QEAgbmF0aXZlIHZvaWQgQWxsTWVtb3J5QmFycmllcldpdGhHcm91cFN5bmMoKTsKIG5hdGl2ZSB2
b2lkIERldmljZU1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jKCk7CiBuYXRpdmUgdm9pZCBHcm91
cE1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jKCk7CiAKK29wZXJhdG9yIGZsb2F0NChmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSB7CisgICAgZmxvYXQ0IHJlc3VsdDsKKyAgICBy
ZXN1bHQueCA9IHg7CisgICAgcmVzdWx0LnkgPSB5OworICAgIHJlc3VsdC56ID0gejsKKyAgICBy
ZXN1bHQudyA9IHc7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI4OTAgSW5zZXJ0IHRoZSByZXN0IG9m
IHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uY2UgdGhlIHBhcnNlciBpcyBmYXN0IGVub3VnaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAppbmRleCBhZTNj
YTY0MjM5ZTNiNTlkMzZhYWFhZWVjN2JhNDcxYmNiNjdjZWI5Li45Y2I1YzgxZWJmOTEzYThiYjk0
YjRjZGE0MzAzYWRiODQ2NGJhYmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJh
eU9wZXJhdG9yTGVuZ3RoLmNwcApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZp
c2l0b3I6OnZpc2l0KGFycmF5VHlwZSk7CiAgICAgfQogCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpBcnJheVR5cGU+PiYmIHRha2VBcnJheVR5cGVzKCkKKyAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+IHRha2VBcnJheVR5cGVz
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fYXJyYXlUeXBlcyk7CiAgICAgfQpA
QCAtNjUsNyArNjUsNyBAQCBib29sIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dy
YW0mIHByb2dyYW0pCiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKIAogICAgIGZvciAoYXV0
byYgYXJyYXlUeXBlIDogYXJyYXlUeXBlcykgewotICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgYXJyYXlUeXBlLmdldCgpLmNsb25lKCkgfSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgYXV0byB2YXJp
YWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+
KExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMo
KSwgYXJyYXlUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCk7CiAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBl
LmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdp
bigpKSwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudWludFR5cGUoKSksICJvcGVyYXRvci5sZW5ndGgi
X3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAppbmRleCBjZDdjMzcwMmFkYmVhMjlh
YzE4YzVjYmU2ZGI2MDg3YjllMDJlZDhhLi5mMjg1MDYyMmM2N2FmY2ExNjA3MDIyZDgxZjQ3NzNj
NTkzYTAyMDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTg1
LDEyICs4NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbik7CiAgICAgfQogCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpVbm5hbWVkVHlwZT4+JiYgdGFrZVVubmFtZWRUeXBlcygpCisgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpVbm5hbWVkVHlwZT4+IHRha2VVbm5hbWVkVHlwZXMoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV91bm5hbWVkVHlwZXMpOwogICAgIH0KIAot
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4mJiB0YWtl
TmFtZWRUeXBlcygpCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+PiB0YWtlTmFtZWRUeXBlcygpCiAgICAgewogICAgICAgICByZXR1cm4gV1RGTW92ZSht
X25hbWVkVHlwZXMpOwogICAgIH0KQEAgLTExMCw3ICsxMTAsNyBAQCBib29sIHN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVl
OwogCiAgICAgZm9yIChhdXRvJiB1bm5hbWVkVHlwZSA6IHVubmFtZWRUeXBlcykgewotICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyB1bm5h
bWVkVHlwZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCku
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksICJvcGVyYXRvciBj
YXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikp
OwpAQCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFt
JiBwcm9ncmFtKQogICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHN0
YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4obmFtZWRUeXBlKSkgJiYgZG93bmNhc3Q8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KHN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4obmFtZWRU
eXBlKSkuaXNBdG9taWMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1l
ZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZl
cmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVk
VHlwZS5nZXQoKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAg
ICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBB
U1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFt
ZWRUeXBlLmdldCgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAg
ICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFy
YW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6
OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkp
LCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQs
IGlzT3BlcmF0b3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVu
Y3Rpb25zLmNwcAppbmRleCAxNzk3ZmU1Mzk0YzgxZWFjZDM5NTRhYmM2YThhNjVhNmM4ZmM5NmUy
Li5kNzRhZjMzYTFmMDVhNjkyMjE5YzhjY2U0YWZkY2M5Mjk1MTA5NzFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCkBAIC00MSw4ICs0MSw4
IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0p
CiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9u
RGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAg
IHsKLSAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0
aW9uMShMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6
UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKLSAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5v
cmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEg
PSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9r
ZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlv
bikpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAg
YXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBl
UmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdp
bigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFt
ZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24xKSk7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlh
YmxlRGVjbGFyYXRpb24yKSk7CkBAIC01Miw3ICs1Miw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1l
cmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0KIAogICAgICAgICB7
Ci0gICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFy
aWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
PihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51
bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCk7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0
b3IudmFsdWUiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJh
dG9yKSk7CkBAIC02MSw3ICs2MSw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rp
b25zKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7
IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgfSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJh
dGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9r
ZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZp
bml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAg
ICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBl
bnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3Ry
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKQEAgLTcw
LDEwICs3MCwxMCBAQCBib29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFt
JiBwcm9ncmFtKQogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0
aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25E
ZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpu
dWxsb3B0KTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25E
ZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwog
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7Ci0gICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pIH0sICJv
cGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNP
cGVyYXRvcikpOworICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2lu
KCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiAgICAgICAgICAgICBp
ZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKaW5kZXggODI2NzIyMTM3ZTRjM2UzODIy
Nzc4MGRhZTEyYjI5YWFiYTFiNzJlZS4uOTQ1ZDBjZWVmYWEzOWNlNTA3NDYwN2QyYzQ0OTNjZjM5
N2U5ODNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
Y3BwCkBAIC00Niw3ICs0Niw3IEBAIGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQ
cm9ncmFtJiBwcm9ncmFtKQogICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBz
dHJ1Y3R1cmVEZWZpbml0aW9uLT5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQKLSAgICAgICAg
ICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhl
cjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7
IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5v
cmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9u
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihz
dHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0
cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSksIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICAgICAgICAgIEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmln
aW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBzdHJ1Y3R1cmVFbGVt
ZW50LnR5cGUoKS5jbG9uZSgpLCBtYWtlU3RyaW5nKCJvcGVyYXRvci4iLCBzdHJ1Y3R1cmVFbGVt
ZW50Lm5hbWUoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRv
cikpOwpAQCAtNTYsOCArNTYsOCBAQCBib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMo
UHJvZ3JhbSYgcHJvZ3JhbSkKIAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIFRo
ZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQotICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxl
bWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURl
ZmluaXRpb24pIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Ci0gICAg
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24y
KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIHsgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNs
YXJhdGlvbjEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6
OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pKSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAgICBh
dXRvIHZhcmlhYmxlRGVjbGFyYXRpb24yID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CkBAIC02OSw3ICs2
OSw3IEBAIGJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFt
KQogICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQKICAgICAgICAgICAg
IGF1dG8gY3JlYXRlQW5kZXIgPSBbJl0oQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAt
PiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gewogICAgICAgICAgICAgICAgIGF1dG8g
YXJndW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9r
ZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3Ry
dWN0dXJlRGVmaW5pdGlvbikpOwotICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RGTW92ZShhcmd1bWVudFR5cGUpIH0sIFN0
cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgYXV0
byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlw
ZSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAg
ICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5
cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRkcmVzc1NwYWNl
LCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCmluZGV4IDczYjJjZjZm
YWEzNGIzMGZjNzBmZjc4OTJkZmQzMzI1NzBlNTg1ZTAuLjdkMGVlMzVhYTM3OWExNzExMTBkOWM5
NDRmZGNkZmVlMjJhZjYyYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtMTE4LDggKzExOCw4IEBAIHZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQogewogICAgIGZv
ciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCiAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOwotICAgIGlmICh0eXBlUmVm
ZXJlbmNlLnJlc29sdmVkVHlwZSgpICYmIGlzPEFTVDo6VHlwZURlZmluaXRpb24+KCp0eXBlUmVm
ZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkgewotICAgICAgICBhdXRvJiB0eXBlRGVmaW5pdGlvbiA9
IGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlw
ZSgpKTsKKyAgICBpZiAodHlwZVJlZmVyZW5jZS5tYXliZVJlc29sdmVkVHlwZSgpICYmIGlzPEFT
VDo6VHlwZURlZmluaXRpb24+KHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKSB7CisgICAg
ICAgIGF1dG8mIHR5cGVEZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpUeXBlRGVmaW5pdGlvbj4o
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCh0eXBlRGVmaW5pdGlvbi50eXBlKCkpOwogICAgIH0KIH0KQEAgLTI1NCwyOSArMjU0LDI5IEBA
IHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpCiAKIHZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGUmIGludGVnZXJMaXRlcmFsVHlwZSkKIHsK
LSAgICBpZiAoaW50ZWdlckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQotICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoKmludGVnZXJMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAg
aWYgKGludGVnZXJMaXRlcmFsVHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKQorICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoaW50ZWdlckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsKICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoaW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7CiB9
CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYg
dW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUpCiB7Ci0gICAgaWYgKHVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnVu
c2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAodW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsK
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUucHJlZmVy
cmVkVHlwZSgpKTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbFR5
cGUmIGZsb2F0TGl0ZXJhbFR5cGUpCiB7Ci0gICAgaWYgKGZsb2F0TGl0ZXJhbFR5cGUucmVzb2x2
ZWRUeXBlKCkpCi0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZmxvYXRMaXRlcmFsVHlwZS5y
ZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKGZsb2F0TGl0ZXJhbFR5cGUubWF5YmVSZXNvbHZlZFR5
cGUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZsb2F0TGl0ZXJhbFR5cGUucmVzb2x2
ZWRUeXBlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmbG9hdExpdGVyYWxUeXBlLnByZWZl
cnJlZFR5cGUoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbFR5
cGUmIG51bGxMaXRlcmFsVHlwZSkKIHsKLSAgICBpZiAobnVsbExpdGVyYWxUeXBlLnJlc29sdmVk
VHlwZSgpKQotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKm51bGxMaXRlcmFsVHlwZS5yZXNv
bHZlZFR5cGUoKSk7CisgICAgaWYgKG51bGxMaXRlcmFsVHlwZS5tYXliZVJlc29sdmVkVHlwZSgp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobnVsbExpdGVyYWxUeXBlLnJlc29sdmVkVHlw
ZSgpKTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbCYpCkBAIC00NjYsNyArNDY2LDcgQEAgdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlRyYXAm
KQogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkKIHsKICAgICBmb3IgKGF1dG8mIHZhcmlh
YmxlRGVjbGFyYXRpb24gOiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC52YXJpYWJsZURl
Y2xhcmF0aW9ucygpKQotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJh
dGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uLmdl
dCgpKTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29w
KQpAQCAtNTIzLDE3ICs1MjMsMTcgQEAgdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkxvZ2ljYWxO
b3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKIAogdm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24pCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKIH0KIAogdm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewotICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwog
fQogCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYg
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKIHsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhbHVlKCkpOwogICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkpOwogICAg
IGlmIChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaApp
bmRleCBjYzhjODZmZWY3MTM5OWNhYmE4YjFjNGYwYzM5ZDY4YzBhZWFjNzI1Li4wNGRiYzZiZWNk
ZDI3NTdhMTgzYzI3MGEzM2RmMDlmZDVmMTViODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaApAQCAtMTA1LDcgKzEwNSw3IEBA
IGNsYXNzIFZpc2l0b3IgewogcHVibGljOgogICAgIHZpcnR1YWwgflZpc2l0b3IoKSA9IGRlZmF1
bHQ7CiAKLSAgICAvLyBGSVhNRTogQWRkIGEgd2F5IHRvIHZpc2l0IGEgY29uc3QgUHJvZ3JhbQor
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
MTcxIEFkZCBhIHdheSB0byB2aXNpdCBhIGNvbnN0IFByb2dyYW0KIAogICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChQcm9ncmFtJik7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VW5uYW1lZFR5
cGUmKTsKQEAgLTE5Miw3ICsxOTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIGJvb2wgbV9lcnJvciB7IGZhbHNlIH07IC8vIEZJWE1FOiBNaWdyYXRlIHRoaXMgdG8gYmUg
c29tZSBzb3J0IG9mIGRlc2NyaXB0aXZlIHN0cmluZy4KKyAgICBib29sIG1fZXJyb3IgeyBmYWxz
ZSB9OyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NTY4MiBNaWdyYXRlIHRoaXMgdG8gYmUgc29tZSBzb3J0IG9mIGRlc2NyaXB0aXZlIHN0cmluZy4K
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDI2NjE0ZjE3MjA3
ODNjYmQzZWY3OWVhYWZjYzY5NjA5MTIzZjRhZjcuLjE0MTAyMmE2ZTYwYTA5ZjMxYmU1ZGJmYmQw
MjllZDc3ZmFjMGY0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zNDksNiArMzQ5LDcgQEAgTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHAKIE1vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJlcGFyZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNv
bHZlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQ
VUFkYXB0ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXAuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOWQz
OTE4ZjcyOGMzMWUzZDA5YWU0ODk5N2Y5NzAxNDhiZGI0NzU0Ni4uZTZhMWY1ZjFkNzE5YjRhZjYz
ZmQ5ZGRhN2UxYWZkNzQ1YTZkZTkwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjM5NCw2ICs2Mzk0LDggQEAKIAkJMUNBMEMy
RUMyMUVFRDZGNjAwQTExODYwIC8qIFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMDMwREMyNTU5NTAwNjVBOTk0IC8qIEV2ZW50TG9vcE1hYy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV2ZW50TG9vcE1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMTUwREMyNTVDQTAwNjVBOTk0
IC8qIEV2ZW50TG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudExv
b3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNBQTgyRjYyMjQyQUUwNTAwRTg0
QkJCIC8qIFdITFNMUHJvcGVydHlSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExT
TFByb3BlcnR5UmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0FB
ODJGNzIyNDJBRTA1MDBFODRCQkIgLyogV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMUHJvcGVydHlSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQ0FGMzQ3RTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ3RjBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0
T2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU2Ny
aXB0T2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ4MDBBNkM0
MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzIxMSw2ICsxMzIxMyw4IEBACiAJCUMyMEY0RjY0MjFERkJFNUMw
MDcwQzQ1QSAvKiBXSExTTFR5cGVSZWZlcmVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hM
U0xUeXBlUmVmZXJlbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIwRjRG
NjYyMURGRjIzNjAwNzBDNDVBIC8qIFdITFNMSW50ZWdlckxpdGVyYWwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyMEY0RjY3MjFERkYzQTcwMDcwQzQ1QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxp
dGVyYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwRjg4QUEyMjk2NkIwRTAwRDYx
MEZBIC8qIFdITFNMQVNURHVtcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMQVNURHVt
cGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwRjg4QUMyMjk2NkIwRjAw
RDYxMEZBIC8qIFdITFNMQVNURHVtcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQVNURHVtcGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMTBFOTExMjFCNEJEMTAwMEI3Rjgz
RCAvKiBXSExTTExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTGV4ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjEwRTkxMjIxQjRCRDEwMDBCN0Y4M0QgLyog
V0hMU0xMZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTExleGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyMTM4QTEzMjFEREVDRDMwMEY1MTZCQSAvKiBXSExTTEJ1aWx0SW5T
ZW1hbnRpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTM5NSw2ICsyNTM5OSw4IEBACiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQkxQ0EwQzJGNjIxRUVEQUQyMDBBMTE4NjAgLyogQVNUICovLAogCQkJ
CTFDRUNCM0FEMjFGMkI5NjQwMEY0NDU0MiAvKiBNZXRhbCAqLywKKwkJCQlDMjBGODhBQTIyOTY2
QjBFMDBENjEwRkEgLyogV0hMU0xBU1REdW1wZXIuY3BwICovLAorCQkJCUMyMEY4OEFDMjI5NjZC
MEYwMEQ2MTBGQSAvKiBXSExTTEFTVER1bXBlci5oICovLAogCQkJCUMyMzRBOUIyMjFFOTJDMUYw
MDNDOTg0RCAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCAqLywKIAkJCQlDMjM0
QTlBRTIxRTkyQzFBMDAzQzk4NEQgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oICov
LAogCQkJCTFDODQwQjlCMjFFQzQwMDkwMEQwNTAwRCAvKiBXSExTTENoZWNrZXIuY3BwICovLApA
QCAtMjU0MjMsNiArMjU0MjksOCBAQAogCQkJCUMyNEE1N0JBMjFGRUFGRUEwMDRDNkREMSAvKiBX
SExTTFByZXBhcmUuY3BwICovLAogCQkJCUMyNEE1N0JCMjFGRUFGRUEwMDRDNkREMSAvKiBXSExT
TFByZXBhcmUuaCAqLywKIAkJCQlDMjFCRjczQTIxQ0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9n
cmFtLmggKi8sCisJCQkJMUNBQTgyRjYyMjQyQUUwNTAwRTg0QkJCIC8qIFdITFNMUHJvcGVydHlS
ZXNvbHZlci5jcHAgKi8sCisJCQkJMUNBQTgyRjcyMjQyQUUwNTAwRTg0QkJCIC8qIFdITFNMUHJv
cGVydHlSZXNvbHZlci5oICovLAogCQkJCTFDQTBDMkUwMjFFRUI1RjUwMEExMTg2MCAvKiBXSExT
TFJlY3Vyc2lvbkNoZWNrZXIuY3BwICovLAogCQkJCTFDQTBDMkRFMjFFRUI1RjQwMEExMTg2MCAv
KiBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuaCAqLywKIAkJCQlDMjM0QTlBRDIxRTkyQzE5MDAzQzk4
NEQgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVN
ZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVS
ZW5kZXJQaXBlbGluZU1ldGFsLm1tCmluZGV4IDhmYjRhMjZjYTQ4YjU0Y2FhYjE4N2RiMjllMzQ2
OWEzODUwNDQwNWYuLmUwMjkyYjhmNTQ0ZDRlYWNkYmExNzlmYzBiMjM0ZTRlYzNhYTczZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVS
ZW5kZXJQaXBlbGluZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCkBAIC0yNjMsNiArMjYzLDgg
QEAgc3RhdGljIGJvb2wgdHJ5U2V0V0hMU0xGdW5jdGlvbnNGb3JQaXBlbGluZURlc2NyaXB0b3Io
Y29uc3QgY2hhciogY29uc3QgZnVuY3Rpb24KICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgV1RGTG9nQWx3YXlzKCJNZXRhbCBTb3VyY2U6ICVzIiwgcmVzdWx0
LT5tZXRhbFNvdXJjZS51dGY4KCkuZGF0YSgpKTsKKwogICAgIE5TRXJyb3IgKmVycm9yID0gbmls
OwogICAgIGF1dG8gbGlicmFyeSA9IGFkb3B0TlMoW2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5l
d0xpYnJhcnlXaXRoU291cmNlOnJlc3VsdC0+bWV0YWxTb3VyY2Ugb3B0aW9uczpuaWwgZXJyb3I6
JmVycm9yXSk7CiAgICAgQVNTRVJUKGxpYnJhcnkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ3NDUzYWUzMTgyNTZmMjMw
ZGFkZWYzZTBlY2ZlOWU3ODQwMGQ5MzAuLjUwM2UyNTk4YzgxNTI4OGY0YzFjNzE4OTQ0YjgyNmU2
YWYxMjE4Y2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0wNS0yMyAgTXlsZXMgQy4gTWF4
ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW1wbGVtZW50
IHByb3BlcnR5IHJlc29sdmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTU5MjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ4MjE5NjQzPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpIGFuZCBSb2JpbiBNb3Jpc3NldC4KKworICAg
ICAgICAqIHdlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRtbDogQWRkZWQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsLWRvdC1leHByZXNzaW9ucy5odG1sOiBBZGRlZC4KKwog
MjAxOS0wNS0yMiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAg
ICAgICAgIGZvbnQtb3B0aWNhbC1zaXppbmcgYXBwbGllcyB0aGUgd3JvbmcgdmFyaWF0aW9uIHZh
bHVlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90LWV4cHJlc3Npb25z
LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90LWV4cHJlc3Npb25z
LWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQxNzA1MGY5YTc0M2YwNWU5MDA2ZmM5MWFjNjRk
NTAyZGFkZDYzMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1k
b3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJk
Iik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVj
dCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAg
IGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90LWV4cHJlc3Npb25zLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90LWV4cHJlc3Npb25zLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMThhYzllNjRlNDcxODllNzYwNmExNTA2YTJhNjhhYzAxY2IyNzhlYwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMuaHRtbApAQCAt
MCwwICsxLDEyNCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0
IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0
IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewor
ICAgIFZlcnRleE91dCByZXN1bHQ7CisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Cisg
ICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21l
bnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNW
X1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7
Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3
YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBh
d2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDog
dHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHtt
b2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAg
Y29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJh
c3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9Owor
ICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307Cisg
ICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5k
LCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAor
ICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0
ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGlucHV0U2xvdDogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwg
b2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBp
bnB1dFNsb3Q6IDAsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0
cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7
aW5wdXRTbG90OiAwLCBzdHJpZGU6IDIwIH07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07
CisgICAgY29uc3QgaW5wdXRTdGF0ZSA9IHtpbmRleEZvcm1hdDogInVpbnQzMiIsIGF0dHJpYnV0
ZXMsIGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZl
ciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19Owor
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCBy
YXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgaW5wdXRT
dGF0ZSwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0
b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1
ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzld
ID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1h
cCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0g
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAg
Y29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsK
KyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qg
c3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAg
ICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5E
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJl
bnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJl
LmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmlj
ZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBn
OiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2ht
ZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xl
YXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRv
ciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25z
dCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5k
ZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5k
R3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRl
eEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
bG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>